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
|
||||
|
||||
include ./substitute.mk
|
||||
|
|
|
@ -151,5 +151,6 @@ AC_CONFIG_FILES([Makefile
|
|||
corepkgs/channels/Makefile
|
||||
doc/Makefile
|
||||
doc/manual/Makefile
|
||||
tests/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
|
|
@ -21,6 +21,7 @@ Nix is a software deployment system.
|
|||
%build
|
||||
./configure --prefix=%{_prefix}
|
||||
make
|
||||
make check
|
||||
|
||||
%install
|
||||
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
|
||||
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
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