tests: A SANITY test prereq for testing if we're root
Some tests depend on not being able to write to files after chmod
-w. This doesn't work when running the tests as root.
Change test-lib.sh to test if this works, and if so it sets a new
SANITY test prerequisite. The tests that use this previously failed
when run under root.
There was already a test for this in t3600-rm.sh, added by Junio C
Hamano in 2283645 in 2006. That check now uses the new SANITY
prerequisite.
Some of this was resurrected from the "Tests in Cygwin" thread in May
2009:
    http://thread.gmane.org/gmane.comp.version-control.git/116729/focus=118385
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									be53deef0d
								
							
						
					
					
						commit
						c91cfd1916
					
				
							
								
								
									
										5
									
								
								t/README
								
								
								
								
							
							
						
						
									
										5
									
								
								t/README
								
								
								
								
							|  | @ -523,6 +523,11 @@ use these, and "test_set_prereq" for how to define your own. | ||||||
|    The filesystem we're on supports symbolic links. E.g. a FAT |    The filesystem we're on supports symbolic links. E.g. a FAT | ||||||
|    filesystem doesn't support these. See 704a3143 for details. |    filesystem doesn't support these. See 704a3143 for details. | ||||||
|  |  | ||||||
|  |  - SANITY | ||||||
|  |  | ||||||
|  |    Test is not run by root user, and an attempt to write to an | ||||||
|  |    unwritable file is expected to fail correctly. | ||||||
|  |  | ||||||
| Tips for Writing Tests | Tips for Writing Tests | ||||||
| ---------------------- | ---------------------- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -301,7 +301,7 @@ test_expect_success 'init notices EEXIST (2)' ' | ||||||
| 	) | 	) | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success POSIXPERM 'init notices EPERM' ' | test_expect_success POSIXPERM,SANITY 'init notices EPERM' ' | ||||||
| 	rm -fr newdir && | 	rm -fr newdir && | ||||||
| 	( | 	( | ||||||
| 		mkdir newdir && | 		mkdir newdir && | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ test_expect_success setup ' | ||||||
|  |  | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success POSIXPERM 'write-tree should notice unwritable repository' ' | test_expect_success POSIXPERM,SANITY 'write-tree should notice unwritable repository' ' | ||||||
|  |  | ||||||
| 	( | 	( | ||||||
| 		chmod a-w .git/objects .git/objects/?? && | 		chmod a-w .git/objects .git/objects/?? && | ||||||
|  | @ -27,7 +27,7 @@ test_expect_success POSIXPERM 'write-tree should notice unwritable repository' ' | ||||||
|  |  | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success POSIXPERM 'commit should notice unwritable repository' ' | test_expect_success POSIXPERM,SANITY 'commit should notice unwritable repository' ' | ||||||
|  |  | ||||||
| 	( | 	( | ||||||
| 		chmod a-w .git/objects .git/objects/?? && | 		chmod a-w .git/objects .git/objects/?? && | ||||||
|  | @ -39,7 +39,7 @@ test_expect_success POSIXPERM 'commit should notice unwritable repository' ' | ||||||
|  |  | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success POSIXPERM 'update-index should notice unwritable repository' ' | test_expect_success POSIXPERM,SANITY 'update-index should notice unwritable repository' ' | ||||||
|  |  | ||||||
| 	( | 	( | ||||||
| 		echo 6O >file && | 		echo 6O >file && | ||||||
|  | @ -52,7 +52,7 @@ test_expect_success POSIXPERM 'update-index should notice unwritable repository' | ||||||
|  |  | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success POSIXPERM 'add should notice unwritable repository' ' | test_expect_success POSIXPERM,SANITY 'add should notice unwritable repository' ' | ||||||
|  |  | ||||||
| 	( | 	( | ||||||
| 		echo b >file && | 		echo b >file && | ||||||
|  |  | ||||||
|  | @ -177,7 +177,7 @@ test_expect_success SYMLINKS 'funny symlink in work tree' ' | ||||||
|  |  | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success SYMLINKS 'funny symlink in work tree, un-unlink-able' ' | test_expect_success SYMLINKS,SANITY 'funny symlink in work tree, un-unlink-able' ' | ||||||
|  |  | ||||||
| 	rm -fr a b && | 	rm -fr a b && | ||||||
| 	git reset --hard && | 	git reset --hard && | ||||||
|  |  | ||||||
|  | @ -28,22 +28,6 @@ embedded' && | ||||||
|      git commit -m 'add files with tabs and newlines' |      git commit -m 'add files with tabs and newlines' | ||||||
| " | " | ||||||
|  |  | ||||||
| # Determine rm behavior |  | ||||||
| # Later we will try removing an unremovable path to make sure |  | ||||||
| # git rm barfs, but if the test is run as root that cannot be |  | ||||||
| # arranged. |  | ||||||
| : >test-file |  | ||||||
| chmod a-w . |  | ||||||
| rm -f test-file 2>/dev/null |  | ||||||
| if test -f test-file |  | ||||||
| then |  | ||||||
| 	test_set_prereq RO_DIR |  | ||||||
| else |  | ||||||
| 	skip_all='skipping removal failure test (perhaps running as root?)' |  | ||||||
| fi |  | ||||||
| chmod 775 . |  | ||||||
| rm -f test-file |  | ||||||
|  |  | ||||||
| test_expect_success \ | test_expect_success \ | ||||||
|     'Pre-check that foo exists and is in index before git rm foo' \ |     'Pre-check that foo exists and is in index before git rm foo' \ | ||||||
|     '[ -f foo ] && git ls-files --error-unmatch foo' |     '[ -f foo ] && git ls-files --error-unmatch foo' | ||||||
|  |  | ||||||
|  | @ -179,7 +179,7 @@ test_expect_success 'git add --refresh' ' | ||||||
| 	test -z "`git diff-index HEAD -- foo`" | 	test -z "`git diff-index HEAD -- foo`" | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success POSIXPERM 'git add should fail atomically upon an unreadable file' ' | test_expect_success POSIXPERM,SANITY 'git add should fail atomically upon an unreadable file' ' | ||||||
| 	git reset --hard && | 	git reset --hard && | ||||||
| 	date >foo1 && | 	date >foo1 && | ||||||
| 	date >foo2 && | 	date >foo2 && | ||||||
|  | @ -190,7 +190,7 @@ test_expect_success POSIXPERM 'git add should fail atomically upon an unreadable | ||||||
|  |  | ||||||
| rm -f foo2 | rm -f foo2 | ||||||
|  |  | ||||||
| test_expect_success POSIXPERM 'git add --ignore-errors' ' | test_expect_success POSIXPERM,SANITY 'git add --ignore-errors' ' | ||||||
| 	git reset --hard && | 	git reset --hard && | ||||||
| 	date >foo1 && | 	date >foo1 && | ||||||
| 	date >foo2 && | 	date >foo2 && | ||||||
|  | @ -201,7 +201,7 @@ test_expect_success POSIXPERM 'git add --ignore-errors' ' | ||||||
|  |  | ||||||
| rm -f foo2 | rm -f foo2 | ||||||
|  |  | ||||||
| test_expect_success POSIXPERM 'git add (add.ignore-errors)' ' | test_expect_success POSIXPERM,SANITY 'git add (add.ignore-errors)' ' | ||||||
| 	git config add.ignore-errors 1 && | 	git config add.ignore-errors 1 && | ||||||
| 	git reset --hard && | 	git reset --hard && | ||||||
| 	date >foo1 && | 	date >foo1 && | ||||||
|  | @ -212,7 +212,7 @@ test_expect_success POSIXPERM 'git add (add.ignore-errors)' ' | ||||||
| ' | ' | ||||||
| rm -f foo2 | rm -f foo2 | ||||||
|  |  | ||||||
| test_expect_success POSIXPERM 'git add (add.ignore-errors = false)' ' | test_expect_success POSIXPERM,SANITY 'git add (add.ignore-errors = false)' ' | ||||||
| 	git config add.ignore-errors 0 && | 	git config add.ignore-errors 0 && | ||||||
| 	git reset --hard && | 	git reset --hard && | ||||||
| 	date >foo1 && | 	date >foo1 && | ||||||
|  | @ -223,7 +223,7 @@ test_expect_success POSIXPERM 'git add (add.ignore-errors = false)' ' | ||||||
| ' | ' | ||||||
| rm -f foo2 | rm -f foo2 | ||||||
|  |  | ||||||
| test_expect_success POSIXPERM '--no-ignore-errors overrides config' ' | test_expect_success POSIXPERM,SANITY '--no-ignore-errors overrides config' ' | ||||||
|        git config add.ignore-errors 1 && |        git config add.ignore-errors 1 && | ||||||
|        git reset --hard && |        git reset --hard && | ||||||
|        date >foo1 && |        date >foo1 && | ||||||
|  |  | ||||||
|  | @ -388,16 +388,15 @@ test_expect_success 'core.excludesfile' ' | ||||||
|  |  | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'removal failure' ' | test_expect_success SANITY 'removal failure' ' | ||||||
|  |  | ||||||
| 	mkdir foo && | 	mkdir foo && | ||||||
| 	touch foo/bar && | 	touch foo/bar && | ||||||
| 	(exec <foo/bar && | 	(exec <foo/bar && | ||||||
| 	 chmod 0 foo && | 	 chmod 0 foo && | ||||||
| 	 test_must_fail git clean -f -d) | 	 test_must_fail git clean -f -d && | ||||||
|  | 	 chmod 755 foo) | ||||||
| ' | ' | ||||||
| chmod 755 foo |  | ||||||
|  |  | ||||||
| test_expect_success 'nested git work tree' ' | test_expect_success 'nested git work tree' ' | ||||||
| 	rm -fr foo bar && | 	rm -fr foo bar && | ||||||
|  |  | ||||||
|  | @ -793,7 +793,7 @@ test_expect_success 'commit --dry-run submodule summary (--amend)' ' | ||||||
| 	test_cmp expect output | 	test_cmp expect output | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success POSIXPERM 'status succeeds in a read-only repository' ' | test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository' ' | ||||||
| 	( | 	( | ||||||
| 		chmod a-w .git && | 		chmod a-w .git && | ||||||
| 		# make dir1/tracked stat-dirty | 		# make dir1/tracked stat-dirty | ||||||
|  |  | ||||||
|  | @ -897,3 +897,7 @@ test -z "$NO_PYTHON" && test_set_prereq PYTHON | ||||||
| # test whether the filesystem supports symbolic links | # test whether the filesystem supports symbolic links | ||||||
| ln -s x y 2>/dev/null && test -h y 2>/dev/null && test_set_prereq SYMLINKS | ln -s x y 2>/dev/null && test -h y 2>/dev/null && test_set_prereq SYMLINKS | ||||||
| rm -f y | rm -f y | ||||||
|  |  | ||||||
|  | # When the tests are run as root, permission tests will report that | ||||||
|  | # things are writable when they shouldn't be. | ||||||
|  | test -w / || test_set_prereq SANITY | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Ævar Arnfjörð Bjarmason
						Ævar Arnfjörð Bjarmason