diff --git a/doc/manual/development.xml b/doc/manual/development.xml
index 5ddf5d935d1..44edc54f814 100644
--- a/doc/manual/development.xml
+++ b/doc/manual/development.xml
@@ -341,5 +341,109 @@ $ qemu-system-x86_64 -kernel ./kernel/bzImage -initrd ./initrd/initrd -hda /dev/
 
 </section>
 
+<section>
+
+  <title>Whole-system testing using virtual machines</title>
+
+  <para>
+    Complete NixOS GNU/Linux systems can be tested in virtual machines
+    (VMs).  This makes it possible to test a system upgrade or
+    configuration change before rebooting into it, using the
+    <command>nixos-rebuild build-vm</command> or
+    <command>nixos-rebuild build-vm-with-bootloader</command> command.
+  </para>
+
+  <para>
+    <!-- The following is adapted from
+         http://wiki.nixos.org/wiki/NixOS_VM_tests, by Eelco Dolstra. -->
+
+    The <filename>tests/</filename> directory in the NixOS source tree
+    contains several <emphasis>whole-system unit tests</emphasis>.
+    These tests can be run<note><para>NixOS tests can be run both from
+    NixOS and from a non-NixOS GNU/Linux distribution, provided the
+    Nix package manager is installed.</para></note> from the NixOS
+    source tree as follows:
+
+    <screen>
+      $ nix-build tests/ -A nfs.test
+    </screen>
+
+    This performs an automated test of the NFS client and server
+    functionality in the Linux kernel, including file locking
+    semantics (e.g., whether locks are maintained across server
+    crashes).  It will first build or download all the dependencies of
+    the test (e.g., all packages needed to run a NixOS VM). The test
+    is defined in <link
+    xlink:href="https://svn.nixos.org/repos/nix/nixos/trunk/tests/nfs.nix">
+    <filename>tests/nfs.nix</filename></link>.  If the test succeeds,
+    <command>nix-build</command> will place a symlink
+    <filename>./result</filename> in the current directory pointing at
+    the location in the Nix store of the test results (e.g.,
+    screenshots, test reports, and so on).  In particular, a
+    pretty-printed log of the test is written to
+    <filename>log.html</filename>, which can be viewed using something
+    like:
+
+    <screen>
+      $ icecat result/log.html
+    </screen>
+  </para>
+
+  <para>
+    It is also possible to run the test environment interactively,
+    allowing you to experiment with the VMs.  For example:
+
+    <screen>
+      $ nix-build tests/ -A nfs.driver
+      $ ./result/bin/nixos-run-vms
+    </screen>
+
+    The script <command>nixos-run-vms</command> starts the three
+    virtual machines defined in the NFS test using QEMU/KVM.  The root
+    file system of the VMs is created on the fly and kept across VM
+    restarts in
+    <filename>./<varname>hostname</varname>.qcow2</filename>.
+  </para>
+
+  <para>
+    Finally, the test itself can be run interactively.  This is
+    particularly useful when developing or debugging a test:
+
+    <screen>
+      $ nix-build tests/ -A nfs.driver
+      $ ./result/bin/nixos-test-driver
+      starting VDE switch for network 1
+      >
+    </screen>
+
+    Perl statements can now be typed in to start or manipulate the
+    VMs:
+
+    <screen>
+      > startAll;
+      (the VMs start booting)
+      > $server->waitForJob("nfs-kernel-nfsd");
+      > $client1->succeed("flock -x /data/lock -c 'sleep 100000' &");
+      > $client2->fail("flock -n -s /data/lock true");
+      > $client1->shutdown;
+      (this releases client1's lock)
+      > $client2->succeed("flock -n -s /data/lock true");
+    </screen>
+
+    The function <command>testScript</command> executes the entire
+    test script and drops you back into the test driver command line
+    upon its completion.  This allows you to inspect the state of the
+    VMs after the test (e.g. to debug the test script).
+  </para>
+
+  <para>
+    This and other tests are continuously run on <link
+    xlink:href="http://hydra.nixos.org/jobset/nixos/trunk/with-status">the
+    Hydra instance at <literal>nixos.org</literal></link>, which
+    allows developers to be notified of any regressions introduced by
+    a NixOS or Nixpkgs change.
+  </para>
+
+</section>
 
 </chapter>