forked from lix-project/lix
* 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:
parent
fd927c5d25
commit
256eeab711
|
@ -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
|
EXTRA_DIST = substitute.mk nix.spec nix.spec.in
|
||||||
|
|
||||||
include ./substitute.mk
|
include ./substitute.mk
|
||||||
|
|
|
@ -151,5 +151,6 @@ AC_CONFIG_FILES([Makefile
|
||||||
corepkgs/channels/Makefile
|
corepkgs/channels/Makefile
|
||||||
doc/Makefile
|
doc/Makefile
|
||||||
doc/manual/Makefile
|
doc/manual/Makefile
|
||||||
|
tests/Makefile
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
|
@ -21,6 +21,7 @@ Nix is a software deployment system.
|
||||||
%build
|
%build
|
||||||
./configure --prefix=%{_prefix}
|
./configure --prefix=%{_prefix}
|
||||||
make
|
make
|
||||||
|
make check
|
||||||
|
|
||||||
%install
|
%install
|
||||||
rm -rf $RPM_BUILD_ROOT
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
|
@ -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
|
/* Initialize and reorder arguments, then call the actual argument
|
||||||
processor. */
|
processor. */
|
||||||
static void initAndRun(int argc, char * * argv)
|
static void initAndRun(int argc, char * * argv)
|
||||||
{
|
{
|
||||||
char * root = getenv("NIX_ROOT");
|
string root = getEnv("NIX_ROOT");
|
||||||
|
if (root != "") {
|
||||||
if (root) {
|
if (chroot(root.c_str()) != 0)
|
||||||
if (chroot(root) != 0)
|
|
||||||
throw SysError(format("changing root to `%1%'") % root);
|
throw SysError(format("changing root to `%1%'") % root);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setup Nix paths. */
|
/* Setup Nix paths. */
|
||||||
nixStore = canonPath(NIX_STORE_DIR);
|
nixStore = getEnv("NIX_STORE_DIR", canonPath(NIX_STORE_DIR));
|
||||||
nixDataDir = canonPath(NIX_DATA_DIR);
|
nixDataDir = getEnv("NIX_DATA_DIR", canonPath(NIX_DATA_DIR));
|
||||||
nixLogDir = canonPath(NIX_LOG_DIR);
|
nixLogDir = getEnv("NIX_LOG_DIR", canonPath(NIX_LOG_DIR));
|
||||||
nixStateDir = canonPath(NIX_STATE_DIR);
|
nixStateDir = getEnv("NIX_STATE_DIR", canonPath(NIX_STATE_DIR));
|
||||||
nixDBPath = canonPath(NIX_STATE_DIR) + "/db";
|
nixDBPath = getEnv("NIX_DB_DIR", nixStateDir + "/db");
|
||||||
|
|
||||||
/* Check that the store directory and its parent are not
|
/* Check that the store directory and its parent are not
|
||||||
symlinks. */
|
symlinks. */
|
||||||
checkStoreNotSymlink(nixStore);
|
if (getEnv("NIX_IGNORE_SYMLINK_STORE") != "1")
|
||||||
|
checkStoreNotSymlink(nixStore);
|
||||||
|
|
||||||
/* Catch SIGINT. */
|
/* Catch SIGINT. */
|
||||||
struct sigaction act, oact;
|
struct sigaction act, oact;
|
||||||
|
@ -77,8 +84,8 @@ static void initAndRun(int argc, char * * argv)
|
||||||
throw SysError("installing handler for SIGINT");
|
throw SysError("installing handler for SIGINT");
|
||||||
|
|
||||||
/* Process the NIX_LOG_TYPE environment variable. */
|
/* Process the NIX_LOG_TYPE environment variable. */
|
||||||
char * lt = getenv("NIX_LOG_TYPE");
|
string lt = getEnv("NIX_LOG_TYPE");
|
||||||
if (lt) setLogType(lt);
|
if (lt != "") setLogType(lt);
|
||||||
|
|
||||||
/* Put the arguments in a vector. */
|
/* Put the arguments in a vector. */
|
||||||
Strings args, remaining;
|
Strings args, remaining;
|
||||||
|
|
19
tests/Makefile.am
Normal file
19
tests/Makefile.am
Normal 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
18
tests/init.sh
Normal 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
11
tests/simple.builder.sh
Normal 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
6
tests/simple.nix.in
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
derivation {
|
||||||
|
name = "simple";
|
||||||
|
system = "@system@";
|
||||||
|
builder = "@shell@";
|
||||||
|
args = ["-e" "-x" ./simple.builder.sh];
|
||||||
|
}
|
10
tests/simple.sh
Normal file
10
tests/simple.sh
Normal 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
|
Loading…
Reference in a new issue