#!/bin/sh # GNU Guix --- Functional package management for GNU # Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès # # This file is part of GNU Guix. # # GNU Guix is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or (at # your option) any later version. # # GNU Guix is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Guix. If not, see . # Usage: ./test-env COMMAND ARG... # # Run the daemon in the build directory, and run COMMAND within # `pre-inst-env'. This is used to run unit tests with the just-built # daemon, unless `--disable-daemon' was passed at configure time. # Make sure 'cd' behaves deterministically and doesn't write anything to # stdout. unset CDPATH case "$1" in --quiet-stderr) # Silence the daemon's output, which is often useless, as well as that # of Bash (such as "Terminated" messages when 'guix-daemon' is # killed.) exec 2> /dev/null shift ;; esac if [ -x "@abs_top_builddir@/guix-daemon" ] then NIX_STORE_DIR="@GUIX_TEST_ROOT@/store" # Do that because store.scm calls `canonicalize-path' on it. mkdir -p "$NIX_STORE_DIR" # Canonicalize the store directory name in an attempt to avoid symlinks in # it or its parent directories. See . NIX_STORE_DIR="`cd "@GUIX_TEST_ROOT@/store"; pwd -P`" NIX_LOCALSTATE_DIR="@GUIX_TEST_ROOT@/var" NIX_LOG_DIR="@GUIX_TEST_ROOT@/var/log/guix" NIX_DB_DIR="@GUIX_TEST_ROOT@/db" NIX_ROOT_FINDER="@abs_top_builddir@/nix/scripts/list-runtime-roots" # Choose a PID-dependent name to allow for parallel builds. Note # that the directory name must be chosen so that the socket's file # name is less than 108-char long (the size of `sun_path' in glibc). # Currently, in Nix builds, we're at ~106 chars... NIX_STATE_DIR="@GUIX_TEST_ROOT@/var/$$" # We can't exit when we reach the limit, because perhaps the test doesn't # actually rely on the daemon, but at least warn. if test "`echo -n "$NIX_STATE_DIR/daemon-socket/socket" | wc -c`" -ge 108 then echo "warning: exceeding socket file name limit; test may fail!" >&2 fi # The configuration directory, for import/export signing keys. GUIX_CONFIGURATION_DIRECTORY="@GUIX_TEST_ROOT@/etc" if [ ! -d "$GUIX_CONFIGURATION_DIRECTORY" ] then # Copy the keys so that the secret key has the right permissions (the # daemon errors out when this is not the case.) mkdir -p "$GUIX_CONFIGURATION_DIRECTORY" cp "@abs_top_srcdir@/tests/signing-key.sec" \ "@abs_top_srcdir@/tests/signing-key.pub" \ "$GUIX_CONFIGURATION_DIRECTORY" chmod 400 "$GUIX_CONFIGURATION_DIRECTORY/signing-key.sec" fi # A place to store data of the substituter. GUIX_BINARY_SUBSTITUTE_URL="file://$NIX_STATE_DIR/substituter-data" rm -rf "$NIX_STATE_DIR/substituter-data" mkdir -p "$NIX_STATE_DIR/substituter-data" # For a number of tests, we want to allow unsigned narinfos, for # simplicity. GUIX_ALLOW_UNAUTHENTICATED_SUBSTITUTES=yes # Place for the substituter's cache. XDG_CACHE_HOME="$NIX_STATE_DIR/cache-$$" # For the (guix import snix) tests. NIXPKGS="@NIXPKGS@" export NIX_IGNORE_SYMLINK_STORE NIX_STORE_DIR \ NIX_LOCALSTATE_DIR NIX_LOG_DIR NIX_STATE_DIR NIX_DB_DIR \ NIX_ROOT_FINDER GUIX_BINARY_SUBSTITUTE_URL \ GUIX_ALLOW_UNAUTHENTICATED_SUBSTITUTES \ GUIX_CONFIGURATION_DIRECTORY XDG_CACHE_HOME NIXPKGS # Launch the daemon without chroot support because is may be # unavailable, for instance if we're not running as root. "@abs_top_builddir@/pre-inst-env" \ "@abs_top_builddir@/guix-daemon" --disable-chroot \ --substitute-urls="$GUIX_BINARY_SUBSTITUTE_URL" & daemon_pid=$! trap "kill $daemon_pid ; rm -rf $NIX_STATE_DIR" EXIT fi # Avoid issues that could stem from l10n, such as language/encoding # mismatches. unset LANGUAGE LC_MESSAGES=C export LC_MESSAGES # Disable grafts by default because they can cause things to be built # regardless of '--dry-run'. GUIX_BUILD_OPTIONS="--no-grafts" export GUIX_BUILD_OPTIONS # Ignore user settings. unset GUIX_PACKAGE_PATH storedir="@storedir@" prefix="@prefix@" datarootdir="@datarootdir@" datadir="@datadir@" localstatedir="@localstatedir@" export storedir prefix datarootdir datadir localstatedir "@abs_top_builddir@/pre-inst-env" "$@" exit $? ): Likewise. * gnu/tests/dict.scm (run-dicod-test): Likewise. * gnu/tests/docker.scm (run-docker-test): Likewise. (run-docker-system-test): Likewise. * gnu/tests/file-sharing.scm (run-transmission-daemon-test): Likewise. * gnu/tests/ganeti.scm (run-ganeti-test): Likewise. * gnu/tests/guix.scm (run-guix-build-coordinator-test): Likewise. (run-guix-data-service-test): Likewise. * gnu/tests/ldap.scm (run-ldap-test): Likewise. * gnu/tests/linux-modules.scm (run-loadable-kernel-modules-test-base): Likewise. * gnu/tests/mail.scm (run-opensmtpd-test) (run-exim-test, run-dovecot-test, run-getmail-test): Likewise. * gnu/tests/messaging.scm (run-xmpp-test) (run-bitlbee-test, run-quassel-test): Likewise. * gnu/tests/monitoring.scm (run-prometheus-node-exporter-server-test) (run-zabbix-server-test): Likewise. * gnu/tests/networking.scm (run-inetd-test, run-openvswitch-test) (run-dhcpd-test, run-tor-test, run-iptables-test, run-ipfs-test): Likewise. * gnu/tests/nfs.scm (run-nfs-test) (run-nfs-server-test, run-nfs-root-fs-test): Likewise. * gnu/tests/package-management.scm (run-nix-test): Likewise. * gnu/tests/reconfigure.scm (run-switch-to-system-test) (run-upgrade-services-test, run-install-bootloader-test): Likewise. * gnu/tests/rsync.scm (run-rsync-test): Likewise. * gnu/tests/security-token.scm (run-pcscd-test): Likewise. * gnu/tests/singularity.scm (run-singularity-test): Likewise. * gnu/tests/ssh.scm (run-ssh-test): Likewise. * gnu/tests/telephony.scm (run-jami-test): Likewise. * gnu/tests/version-control.scm (run-cgit-test): Likewise. (run-git-http-test, run-gitolite-test, run-gitile-test): Likewise. * gnu/tests/virtualization.scm (run-libvirt-test, run-childhurd-test): Likewise. * gnu/tests/web.scm (run-webserver-test, run-php-fpm-test) (run-hpcguix-web-server-test, run-tailon-test, run-patchwork-test): Likewise. Ludovic Courtès 2020-11-06tests: mpd: Remove race condition; use default MPD configuration....* gnu/tests/audio.scm (%mpd-os): Use the default 'mpd-configuration'. (run-mpd-test)[test]("mpd listening"): New test. ("mpc connect"): Use 'system*' and 'test-equal'. Ludovic Courtès