* Allow the location of the store etc. to be specified using

environment variables.
* Started adding some automatic tests.
* Do a `make check' when building RPMs.
This commit is contained in:
Eelco Dolstra 2004-05-04 12:15:30 +00:00
parent fd927c5d25
commit 256eeab711
9 changed files with 86 additions and 13 deletions

View File

@ -1,4 +1,4 @@
SUBDIRS = externals src scripts corepkgs doc
SUBDIRS = externals src scripts corepkgs doc tests
EXTRA_DIST = substitute.mk nix.spec nix.spec.in
include ./substitute.mk

View File

@ -151,5 +151,6 @@ AC_CONFIG_FILES([Makefile
corepkgs/channels/Makefile
doc/Makefile
doc/manual/Makefile
tests/Makefile
])
AC_OUTPUT

View File

@ -21,6 +21,7 @@ Nix is a software deployment system.
%build
./configure --prefix=%{_prefix}
make
make check
%install
rm -rf $RPM_BUILD_ROOT

View File

@ -46,27 +46,34 @@ void checkStoreNotSymlink(Path path)
}
static string getEnv(const string & key, const string & def = "")
{
char * value = getenv(key.c_str());
return value ? string(value) : def;
}
/* Initialize and reorder arguments, then call the actual argument
processor. */
static void initAndRun(int argc, char * * argv)
{
char * root = getenv("NIX_ROOT");
if (root) {
if (chroot(root) != 0)
string root = getEnv("NIX_ROOT");
if (root != "") {
if (chroot(root.c_str()) != 0)
throw SysError(format("changing root to `%1%'") % root);
}
/* Setup Nix paths. */
nixStore = canonPath(NIX_STORE_DIR);
nixDataDir = canonPath(NIX_DATA_DIR);
nixLogDir = canonPath(NIX_LOG_DIR);
nixStateDir = canonPath(NIX_STATE_DIR);
nixDBPath = canonPath(NIX_STATE_DIR) + "/db";
nixStore = getEnv("NIX_STORE_DIR", canonPath(NIX_STORE_DIR));
nixDataDir = getEnv("NIX_DATA_DIR", canonPath(NIX_DATA_DIR));
nixLogDir = getEnv("NIX_LOG_DIR", canonPath(NIX_LOG_DIR));
nixStateDir = getEnv("NIX_STATE_DIR", canonPath(NIX_STATE_DIR));
nixDBPath = getEnv("NIX_DB_DIR", nixStateDir + "/db");
/* Check that the store directory and its parent are not
symlinks. */
checkStoreNotSymlink(nixStore);
if (getEnv("NIX_IGNORE_SYMLINK_STORE") != "1")
checkStoreNotSymlink(nixStore);
/* Catch SIGINT. */
struct sigaction act, oact;
@ -77,8 +84,8 @@ static void initAndRun(int argc, char * * argv)
throw SysError("installing handler for SIGINT");
/* Process the NIX_LOG_TYPE environment variable. */
char * lt = getenv("NIX_LOG_TYPE");
if (lt) setLogType(lt);
string lt = getEnv("NIX_LOG_TYPE");
if (lt != "") setLogType(lt);
/* Put the arguments in a vector. */
Strings args, remaining;

19
tests/Makefile.am Normal file
View File

@ -0,0 +1,19 @@
TEST_ROOT = $(shell pwd)/test-tmp
TESTS_ENVIRONMENT = TEST_ROOT=$(TEST_ROOT) \
NIX_STORE_DIR=$(TEST_ROOT)/store \
NIX_DATA_DIR=$(TEST_ROOT)/data \
NIX_LOG_DIR=$(TEST_ROOT)/log \
NIX_STATE_DIR=$(TEST_ROOT)/state \
NIX_DB_DIR=$(TEST_ROOT)/db \
TOP=$(shell pwd)/.. \
$(SHELL) -e -x
simple.sh: simple.nix
TESTS = init.sh simple.sh
include ../substitute.mk
EXTRA_DIST = \
simple.nix.in simple.builder.sh

18
tests/init.sh Normal file
View File

@ -0,0 +1,18 @@
test -n "$TEST_ROOT"
if test -d "$TEST_ROOT"; then
chmod -R u+w "$TEST_ROOT"
rm -rf "$TEST_ROOT"
fi
mkdir "$TEST_ROOT"
mkdir "$NIX_STORE_DIR"
mkdir "$NIX_DATA_DIR"
mkdir "$NIX_LOG_DIR"
mkdir "$NIX_STATE_DIR"
mkdir "$NIX_DB_DIR"
# Initialise the database.
$TOP/src/nix-store/nix-store --init
# Did anything happen?
test -e "$NIX_DB_DIR"/validpaths

11
tests/simple.builder.sh Normal file
View File

@ -0,0 +1,11 @@
echo "PATH=$PATH"
# Verify that the PATH is empty.
if mkdir foo; then exit 1; fi
# Set a PATH (!!! impure).
export PATH=/bin:/usr/bin:$PATH
mkdir $out
echo "Hello World!" > $out/hello

6
tests/simple.nix.in Normal file
View File

@ -0,0 +1,6 @@
derivation {
name = "simple";
system = "@system@";
builder = "@shell@";
args = ["-e" "-x" ./simple.builder.sh];
}

10
tests/simple.sh Normal file
View File

@ -0,0 +1,10 @@
storeExpr=$($TOP/src/nix-instantiate/nix-instantiate simple.nix)
echo "store expr is $storeExpr"
outPath=$($TOP/src/nix-store/nix-store -qnfvvvvv "$storeExpr")
echo "output path is $outPath"
text=$(cat "$outPath"/hello)
if test "$text" != "Hello World!"; then exit 1; fi