Commit Graph

144 Commits

Author SHA1 Message Date
Eelco Dolstra
51097933ab * Moved test-related stuff from lib/build-vms.nix to lib/testing.nix.
* Factored out some commonality between tests to make them a bit
  simpler to write.  A test is a function { pkgs, ... }: -> { nodes,
  testScript } or { machine, testScript }.  So it's no longer
  necessary to have a "vms" attribute in every test.

svn path=/nixos/trunk/; revision=19220
2010-01-05 11:18:43 +00:00
Eelco Dolstra
ff86799d42 * Hm, Perl threads and lexical closures don't interact in the way
you'd expect...

svn path=/nixos/trunk/; revision=19214
2010-01-05 10:35:30 +00:00
Eelco Dolstra
170331be30 * Don't use /hostfs to signal the test driver that a VM is up, but
write some magic string to ttyS0.  This removes the dependency on
  having a CIFS mount.
* Use a thread to process the stdout/stderr of each QEMU instance.
* Add a kernel command line parameter "stage1panic" to tell stage 1 to
  panic if an error occurs.  This is faster than waiting until
  connect() times out.

svn path=/nixos/trunk/; revision=19212
2010-01-04 18:04:57 +00:00
Eelco Dolstra
5730c27aed * For debugging, if $tests is not set, read commands from stdin.
svn path=/nixos/trunk/; revision=19210
2010-01-04 16:30:54 +00:00
Eelco Dolstra
0ecac5a6f9 * Attach stdin to /dev/null, otherwise qemu grabs the terminal
(unpleasant for interactive testing of the test driver).

svn path=/nixos/trunk/; revision=19209
2010-01-04 16:30:26 +00:00
Eelco Dolstra
9aa0a336bc * Updated the coverage analysis handling for Linux 2.6.32. Gcov is
now merged in the kernel, and the gcda files are exported through
  debugfs in /sys/kernel/debug/gcov.

svn path=/nixos/trunk/; revision=19207
2010-01-04 13:22:43 +00:00
Rob Vermaas
243bc84f08 ensure nix-support dir before running tests
svn path=/nixos/trunk/; revision=18938
2009-12-14 15:30:57 +00:00
Rob Vermaas
ed6d8c6881 due to new upstart version, vm tests didn't work anymore
svn path=/nixos/trunk/; revision=18840
2009-12-08 11:41:21 +00:00
Nicolas Pierron
12401536fc Replace the check function with a function specialized for modules.
svn path=/nixos/trunk/; revision=18821
2009-12-05 19:22:02 +00:00
Marc Weber
5cb52cc7cb nixos vms tests: use relative path to services, nixpkgs because this is more like to work if you don't put the repos in /etc/nixos/
svn path=/nixos/trunk/; revision=18330
2009-11-11 23:54:54 +00:00
Nicolas Pierron
10e9705a86 Replace optionDeclarations by options which is directly computed by
moduleMerge.

svn path=/nixos/trunk/; revision=17166
2009-09-15 14:09:18 +00:00
Nicolas Pierron
dd40d6196b Use only one merge to compute option definitions and option declarations.
svn path=/nixos/trunk/; revision=17165
2009-09-15 14:09:11 +00:00
Nicolas Pierron
81ec373e1e Imports of imported attribute set are not working anymore because this
feature is hard to maintain and because this a potential source of error.

Imports are only accepted inside named modules where the system has some
control over mutual inclusion.

svn path=/nixos/trunk/; revision=17143
2009-09-15 00:18:00 +00:00
Eelco Dolstra
2b5c9a78ff * Increase the timeout to deal with heavily loaded hosts.
svn path=/nixos/trunk/; revision=16952
2009-09-03 00:05:38 +00:00
Eelco Dolstra
c6d4282f25 svn path=/nixos/trunk/; revision=16950 2009-09-02 23:37:58 +00:00
Eelco Dolstra
497760b444 * Use scrot to make screenshots.
* Another X11 test (running Quake 3).

svn path=/nixos/trunk/; revision=16949
2009-09-02 23:16:33 +00:00
Eelco Dolstra
05cb34c6d0 svn path=/nixos/trunk/; revision=16942 2009-09-02 19:59:26 +00:00
Eelco Dolstra
cddc93cc5e * Start of a simple GUI test. Right now it just starts the X server,
wait a few seconds and makes a screenshot.

svn path=/nixos/trunk/; revision=16934
2009-09-02 14:48:28 +00:00
Eelco Dolstra
486714bfcc * Make the coverage report more concise.
svn path=/nixos/trunk/; revision=16926
2009-09-02 09:38:16 +00:00
Eelco Dolstra
137c5c65bd * Added a timeout for starting the VM. TODO: handle SIGCHLD from
qemu.
* Do the subversion test on i686-linux.  

svn path=/nixos/trunk/; revision=16923
2009-09-02 08:36:30 +00:00
Eelco Dolstra
b1aa227cbd * Use -no-reboot, otherwise kernel panics cause QEMU to get into an
infinite loop trying to start the machine.

svn path=/nixos/trunk/; revision=16922
2009-09-02 07:52:36 +00:00
Eelco Dolstra
e7acca2ba3 * Cleanup the kernel coverage analysis.
svn path=/nixos/trunk/; revision=16919
2009-09-01 22:50:46 +00:00
Eelco Dolstra
4d8d704fba * Run the subversion.nix test with coverage analysis on the kernel.
svn path=/nixos/trunk/; revision=16917
2009-09-01 22:22:45 +00:00
Eelco Dolstra
9359bf11d5 * Build the Subversion test in Hydra (as a regression test for NixOS).
* Pass the location to the services tree around instead of requiring
  it to be in ../services.

svn path=/nixos/trunk/; revision=16901
2009-08-31 14:56:19 +00:00
Eelco Dolstra
27a8e656bc * Stuff for automatic and manual testing of NixOS VMs.
lib/build-vms.nix contains a function `buildVirtualNetwork' that
  takes a specification of a network of machines (as an attribute set
  of NixOS machine configurations) and builds a script that starts
  each configuration in a separate QEMU/KVM VM and connects them
  together in a virtual network.  This script can be run manually to
  test the VMs interactively.  There is also a function `runTests'
  that starts and runs the virtual network in a derivation, and
  then executes a test specification that tells the VMs to do certain
  things (i.e., letting one VM send an HTTP request to a webserver on
  another VM).  The tests are written in Perl (for now).

  tests/subversion.nix shows a simple example, namely a network of two
  machines: a webserver that runs the Subversion subservice, and a
  client.  Apache, Subversion and a few other packages are built with
  coverage analysis instrumentation.  For instance,

    $ nix-build tests/subversion.nix -A vms
    $ ./result/bin/run-vms

  starts two QEMU/KVM instances.  When they have finished booting, the
  webserver can be accessed from the host through
  http://localhost:8081/.

  It also has a small test suite:

    $ nix-build tests/subversion.nix -A report

  This runs the VMs in a derivation, runs the tests, and then produces
  a distributed code coverage analysis report (i.e. it shows the
  combined coverage on both machines).

  The Perl test driver program is in lib/test-driver.  It executes
  commands on the guest machines by connecting to a root shell running
  on port 514 (provided by modules/testing/test-instrumentation.nix).

  The VMs are connected together in a virtual network using QEMU's
  multicast feature.  This isn't very secure.  At the very least,
  other processes on the same machine can listen to or send packets on
  the virtual network.  On the plus side, we don't need to be root to
  set up a multicast virtual network, so we can do it from a
  derivation.  Maybe we can use VDE instead.

  (Moved from the vario repository.)

svn path=/nixos/trunk/; revision=16899
2009-08-31 14:25:12 +00:00
Eelco Dolstra
2892aed712 * lib/eval-config.nix: combined "configuration" and "extraModules"
into one argument "modules".
* release.nix: fixed the manual job.
* ISO generation: break an infinite recursion.  Don't know why this
  suddenly happens.  Probably because of the nixpkgs.config change,
  but I don't see why.  Maybe the option evaluation is too strict.

svn path=/nixos/trunk/; revision=16878
2009-08-27 11:57:43 +00:00
Eelco Dolstra
6f1b1aefde * Added an option `nixpkgs.config' that allows the Nixpkgs options to
be set from the NixOS configuration.  For instance, you can say

    nixpkgs.config.firefox.enableGeckoMediaPlayer = true;

    environment.systemPackages = [ pkgs.firefox ];

  but the more interesting application is to apply global overrides to
  Nixpkgs throughout NixOS, e.g.

    nixpkgs.config.packageOverrides = pkgs:
      { glibc = pkgs.glibc27;
        gcc = pkgs.gcc42;
      };

  would build the whole system with Glibc 2.7 and GCC 4.2.  (There are
  some issues with "useFromStdenv" in all-packages.nix that need to be
  fixed for packages in the stdenv bootstrap though.)

  The implementation of this option is kind of evil though due to the
  need to prevent a circularity between the evaluation of
  nixpkgs.config and the "pkgs" module argument.

svn path=/nixos/trunk/; revision=16866
2009-08-26 16:52:38 +00:00
Eelco Dolstra
4d72704d77 svn path=/nixos/trunk/; revision=16799 2009-08-21 09:11:33 +00:00
Eelco Dolstra
f1035de47c * For the generation of manual / manpages, don't evaluate the option
declarations again (because we already have them).  This cuts
  evaluation time from 7.2s to 4.9s.

svn path=/nixos/trunk/; revision=16798
2009-08-21 09:08:55 +00:00
Eelco Dolstra
89ef5c979b * New nixos-rebuild action: "nixos-rebuild build-vm" builds a virtual
machine containing a replica (minus the state) of the system
  configuration.  This is mostly useful for testing configuration
  changes prior to doing an actual "nixos-rebuild switch" (or even
  "nixos-rebuild test").  The VM can be started as follows:

  $ nixos-rebuild build-vm
  $ ./result/bin/run-*-vm

  which starts a KVM/QEMU instance.  Additional QEMU options can be
  passed through the QEMU_OPTS environment variable
  (e.g. QEMU_OPTS="-redir tcp:8080::80" to forward a host port to the
  guest).  The fileSystem attribute of the regular system
  configuration is ignored (using mkOverride), because obviously we
  can't allow the VM to access the host's block devices.  Instead, at
  startup the VM creates an empty disk image in ./<hostname>.qcow2 to
  store the VM's root filesystem.

  Building a VM in this way is efficient because the VM shares its Nix
  store with the host (through a CIFS mount).  However, because the
  Nix store of the host is mounted read-only in the guest, you cannot
  run Nix build actions inside the VM.  Therefore the VM can only be
  reconfigured by re-running "nixos-rebuild build-vm" on the host and
  restarting the VM.

svn path=/nixos/trunk/; revision=16662
2009-08-11 01:35:56 +00:00
Eelco Dolstra
a9071b3283 svn path=/nixos/branches/modular-nixos/; revision=16592 2009-08-05 14:43:13 +00:00
Eelco Dolstra
b56d08fc83 * Move the hardware modules back to the main modules tree. No need
for a separate tree.
  
* Pass the path of the modules tree to modules so that you don't have
  to write absolute paths, e.g. you can say

    require = [ "${modulesPath}/hardware/network/intel-3945abg.nix" ];

  instead of

    require = [ /etc/nixos/nixos/hardware/network/intel-3945abg.nix ];

  The latter is bad because it makes it hard to build from a different
  NixOS source tree.

svn path=/nixos/branches/modular-nixos/; revision=16350
2009-07-14 12:36:02 +00:00
Nicolas Pierron
284f0e7d26 Use "definitionsOf" & "fixableDeclarationsOf": Hide implementation details.
svn path=/nixos/branches/modular-nixos/; revision=16199
2009-07-06 23:25:12 +00:00
Nicolas Pierron
36bc4971ba Inline the require attribute and move the set into lib/check-config.nix.
svn path=/nixos/branches/modular-nixos/; revision=16194
2009-07-06 16:21:03 +00:00
Nicolas Pierron
26fcc601a6 Update function arguments to follow nixpkgs modification.
svn path=/nixos/branches/modular-nixos/; revision=16193
2009-07-06 16:20:58 +00:00
Eelco Dolstra
cd1e4aefc1 * Break the cyclic dependency between the system derivation and
Grub's menu.lst.

svn path=/nixos/branches/modular-nixos/; revision=15931
2009-06-10 21:46:42 +00:00
Eelco Dolstra
27230eed8e * A function for generating squashfs filesystem images.
svn path=/nixos/branches/modular-nixos/; revision=15926
2009-06-10 13:40:35 +00:00
Eelco Dolstra
37edcf4fae * Provide an option to add more files to the ISO image.
svn path=/nixos/branches/modular-nixos/; revision=15903
2009-06-09 12:01:31 +00:00
Eelco Dolstra
e4e408293e * Modularise the building of the installation CD/DVD. The module
iso-image.nix contains the minimal stuff necessary to build a
  bootable ISO image containing the given configuration.  The idea is
  that this can be customised by providing additional modules, e.g. to
  add extra packages to the image.

  The ISO image is exported in the configuration attribute
  system.build.isoImage.  So it can be built as follows:

  $ nix-build lib/eval-config.nix \
      --arg configuration 'import ./modules/installer/cd-dvd/iso-image.nix' \
      -A config.system.build.isoImage


svn path=/nixos/branches/modular-nixos/; revision=15871
2009-06-05 13:35:27 +00:00
Eelco Dolstra
02d26fc77d * Make eval-config.nix a bit more general to make it easier to build
other kinds of configurations (like the installation CD).

svn path=/nixos/branches/modular-nixos/; revision=15864
2009-06-05 13:19:39 +00:00
Eelco Dolstra
234c4340c2 * helpers -> lib.
svn path=/nixos/branches/modular-nixos/; revision=15797
2009-05-29 14:46:27 +00:00
Eelco Dolstra
107fc990a6 * More cleanup.
svn path=/nixos/branches/modular-nixos/; revision=15773
2009-05-28 16:20:08 +00:00
Eelco Dolstra
c6c9304b95 * system/options.nix: gone :-)
svn path=/nixos/branches/modular-nixos/; revision=15772
2009-05-28 16:03:48 +00:00
Eelco Dolstra
5b7f7d2de1 * Move the config evaluation into a separate expression so that it can
be reused, e.g. for building the CD/DVD.

svn path=/nixos/branches/modular-nixos/; revision=15744
2009-05-27 09:16:56 +00:00