capitests: Move test documentation into HACKING file.
[libguestfs.git] / HACKING
diff --git a/HACKING b/HACKING
index 7dbc360..f661d1d 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -7,8 +7,8 @@ Adding a new action
 All action functions are generated automatically, so there are only
 two files you need to edit:
 
-(1) src/generator.ml: Add your new action, parameters, description,
-etc. to the big list called 'functions' at the top of this file.
+(1) generator/generator_actions.ml: Add your new action, parameters,
+description, etc. to the big list at the top of this file.
 
 (2) Edit/create a C file in daemon/ subdirectory which implements your
 'do_action' function.  Take a look at one of the numerous examples
@@ -69,7 +69,11 @@ appliance/
         The qemu appliance, build scripts and so on.
 
 capitests/
-        Automated tests of the C API.
+        Automated tests of the C API.  See "Tests" below.
+
+cat/
+        The 'virt-cat', 'virt-filesystems' and 'virt-ls' commands and
+        documentation.
 
 contrib/
         Outside contributions, experimental parts.
@@ -80,6 +84,9 @@ csharp/
 daemon/
         The daemon that runs inside the guest and carries out actions.
 
+df/
+        'virt-df' command and documentation.
+
 examples/
         The examples.
 
@@ -89,12 +96,18 @@ fish/
 fuse/
         FUSE (userspace filesystem) built on top of libguestfs.
 
+generator/
+        The crucially important generator, used to automatically
+        generate large amounts of boilerplate C code for things like
+        RPC and bindings.
+
 haskell/
         Haskell bindings.
 
-hivex/
-        Hive extraction library, for reading Windows Registry files.
-        See hivex/README for more details.
+hivex/ [removed in 1.0.85]
+       This used to contain the hivex library for reading and
+       writing Windows Registry binary hive files.  This is now
+       available as a separate upstream project.
 
 images/
         Some guest images to test against.  These are gzipped to save
@@ -114,8 +127,17 @@ m4/
 ocaml/
         OCaml bindings.
 
+php/
+        PHP bindings.
+
 po/
-        Translations.
+        Translations of simple gettext strings.  For translations of
+        longer documents, see po-docs/.
+
+po-docs/
+        The build infrastructure and PO files for translations of
+        manpages and POD files.  Eventually this will be combined
+        with the po/ directory, but that is rather complicated.
 
 perl/
         Perl bindings.
@@ -126,22 +148,56 @@ python/
 regressions/
         Regression tests.
 
+rescue/
+        'virt-rescue' command and documentation.
+
 ruby/
         Ruby bindings.
 
 tools/
-        Command line tools like virt-cat, virt-df, virt-edit and more.
-        In versions <= 1.0.73 these were all in separate directories
-        like cat/, df/, edit/, but since then we moved them all into
-        one directory to simplify builds.
+        Command line tools written in Perl (virt-resize and more).
 
 src/
         Source code to the C library.
-        Also contains the crucial generator program.
 
 test-tool/
         Interactive qemu/kernel test tool.
 
+Tests
+----------------------------------------------------------------------
+
+You can supply zero or as many tests as you want per API call.
+
+Note that the test environment has 3 block devices, of size 500MB,
+50MB and 10MB (respectively /dev/sda, /dev/sdb, /dev/sdc), and
+a fourth ISO block device with some known files on it (/dev/sdd).
+
+Note for partitioning purposes, the 500MB device has 1015 cylinders.
+Number of cylinders was 63 for IDE emulated disks with precisely
+the same size.  How exactly this is calculated is a mystery.
+
+The ISO block device (/dev/sdd) comes from images/test.iso.
+
+To be able to run the tests in a reasonable amount of time,
+the virtual machine and block devices are reused between tests.
+So don't try testing kill_subprocess :-x
+
+Between each test we blockdev-setrw, umount-all, lvm-remove-all.
+
+Don't assume anything about the previous contents of the block
+devices.  Use 'Init*' to create some initial scenarios.
+
+You can add a prerequisite clause to any individual test.  This
+is a run-time check, which, if it fails, causes the test to be
+skipped.  Useful if testing a command which might not work on
+all variations of libguestfs builds.  A test that has prerequisite
+of 'Always' is run unconditionally.
+
+In addition, packagers can skip individual tests by setting the
+environment variables:     eg:
+  SKIP_TEST_<CMD>_<NUM>=1  SKIP_TEST_COMMAND_3=1  (skips test #3 of command)
+  SKIP_TEST_<CMD>=1        SKIP_TEST_ZEROFREE=1   (skips all zerofree tests)
+
 Debugging
 ----------------------------------------------------------------------