* 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 | ||||
| 
 | ||||
| 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,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
 | ||||
|    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. */ | ||||
|     if (getEnv("NIX_IGNORE_SYMLINK_STORE") != "1") | ||||
|         checkStoreNotSymlink(nixStore); | ||||
| 
 | ||||
|     /* Catch SIGINT. */ | ||||
|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue