* 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
					
				
					 9 changed files with 86 additions and 13 deletions
				
			
		|  | @ -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,26 +46,33 @@ 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. */ | ||||||
|  |     if (getEnv("NIX_IGNORE_SYMLINK_STORE") != "1") | ||||||
|         checkStoreNotSymlink(nixStore); |         checkStoreNotSymlink(nixStore); | ||||||
| 
 | 
 | ||||||
|     /* Catch SIGINT. */ |     /* Catch SIGINT. */ | ||||||
|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue