mirror of
				https://codeberg.org/h3xx/simplify_static_dir
				synced 2024-08-14 23:57:24 +00:00 
			
		
		
		
	Add test
This commit is contained in:
		
							parent
							
								
									79e3eca2cb
								
							
						
					
					
						commit
						7d19ccd876
					
				
					 3 changed files with 213 additions and 0 deletions
				
			
		
							
								
								
									
										95
									
								
								t/funcs.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								t/funcs.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,95 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | # vi: et sts=4 sw=4 ts=4 | ||||||
|  | 
 | ||||||
|  | echo_success() { | ||||||
|  |     printf '[\033[1;32m%s\033[0;39m] %s' \ | ||||||
|  |         '  OK  ' \ | ||||||
|  |         "$*" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | echo_failure() { | ||||||
|  |     printf '[\033[1;31m%s\033[0;39m] %s' \ | ||||||
|  |         'FAILED' \ | ||||||
|  |         "$*" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | echo_warning() { | ||||||
|  |     printf '[\033[1;33m%s\033[0;39m] %s' \ | ||||||
|  |         'WARNING' \ | ||||||
|  |         "$*" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | echo_passed() { | ||||||
|  |     printf '[\033[1;33m%s\033[0;39m] %s' \ | ||||||
|  |         'PASSED' \ | ||||||
|  |         "$*" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | assert_equals() { | ||||||
|  |     local \ | ||||||
|  |         STARTER=$1 \ | ||||||
|  |         NEXT | ||||||
|  |     shift 1 | ||||||
|  |     for NEXT; do | ||||||
|  |         if [[ $STARTER != "$NEXT" ]]; then | ||||||
|  |             echo_failure "$STARTER does not equal $NEXT" | ||||||
|  |             echo | ||||||
|  |             return 1 | ||||||
|  |         fi | ||||||
|  |         echo_success "$STARTER equals $NEXT" | ||||||
|  |         echo | ||||||
|  |     done | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | assert_file_exists() { | ||||||
|  |     local FN | ||||||
|  |     for FN; do | ||||||
|  |         if [[ ! -e $FN ]]; then | ||||||
|  |             echo_failure "$FN does not exist" | ||||||
|  |             echo | ||||||
|  |             return 1 | ||||||
|  |         fi | ||||||
|  |     done | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | assert_hardlinked() { | ||||||
|  |     local \ | ||||||
|  |         STARTER=$1 \ | ||||||
|  |         NEXT | ||||||
|  |     shift 1 | ||||||
|  |     for NEXT; do | ||||||
|  |         if [[ ! $STARTER -ef $NEXT ]]; then | ||||||
|  |             echo_failure "$STARTER is not hard-linked to $NEXT" | ||||||
|  |             echo | ||||||
|  |             return 1 | ||||||
|  |         fi | ||||||
|  |         echo_success "$STARTER is hard-linked to $NEXT" | ||||||
|  |         echo | ||||||
|  |     done | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | assert_nothardlinked() { | ||||||
|  |     local \ | ||||||
|  |         STARTER=$1 \ | ||||||
|  |         NEXT | ||||||
|  |     shift 1 | ||||||
|  |     for NEXT; do | ||||||
|  |         if [[ $STARTER -ef $NEXT ]]; then | ||||||
|  |             echo_failure "$STARTER is hard-linked to $NEXT" | ||||||
|  |             echo | ||||||
|  |             return 1 | ||||||
|  |         fi | ||||||
|  |         echo_success "$STARTER is not hard-linked to $NEXT" | ||||||
|  |         echo | ||||||
|  |     done | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | assert_older_than() { | ||||||
|  |     if [[ $1 -ot $2 ]]; then | ||||||
|  |         echo_failure "$1 is older than $2" | ||||||
|  |         echo | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  |     echo_success "$1 is not older than $2" | ||||||
|  |     echo | ||||||
|  | } | ||||||
							
								
								
									
										118
									
								
								t/run.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										118
									
								
								t/run.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,118 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | # vi: et sts=4 sw=4 ts=4 | ||||||
|  | 
 | ||||||
|  | WORKDIR=${0%/*} | ||||||
|  | . "$WORKDIR/funcs.sh" | ||||||
|  | SCRIPT=$(realpath -- "$WORKDIR/../simplify_static_dir-main.pl") | ||||||
|  | TAR=$(realpath -- "$WORKDIR/t.tar") | ||||||
|  | TEMPDIR=$(mktemp -d -t "${0##*/}.XXXXXX") | ||||||
|  | 
 | ||||||
|  | _prep_tar() { | ||||||
|  |     rm -rf t && | ||||||
|  |     tar xf "$TAR" | ||||||
|  | } | ||||||
|  | cleanup() { | ||||||
|  |     rm -rf -- "$TEMPDIR" | ||||||
|  | } | ||||||
|  | trap 'cleanup' EXIT | ||||||
|  | 
 | ||||||
|  | test_normal_linkage() { | ||||||
|  |     _prep_tar && | ||||||
|  |     $SCRIPT t || return 2 | ||||||
|  |     local -r \ | ||||||
|  |         FILE1=t/normal/foo/same \ | ||||||
|  |         FILE2=t/normal/same | ||||||
|  |     assert_file_exists "$FILE1" "$FILE2" && | ||||||
|  |     assert_hardlinked "$FILE1" "$FILE2" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | test_normal_nonlinkage() { | ||||||
|  |     _prep_tar && | ||||||
|  |     $SCRIPT t || return 2 | ||||||
|  |     local -r \ | ||||||
|  |         FILE1=t/normal/foo/same \ | ||||||
|  |         FILE2=t/normal/not-same | ||||||
|  |     assert_file_exists "$FILE1" "$FILE2" && | ||||||
|  |     assert_nothardlinked "$FILE1" "$FILE2" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | test_sha1collision_nonlinkage() { | ||||||
|  |     _prep_tar && | ||||||
|  |     $SCRIPT t || return 2 | ||||||
|  |     local -r \ | ||||||
|  |         FILE1=t/sha1-collision/shattered-1.pdf \ | ||||||
|  |         FILE2=t/sha1-collision/shattered-2.pdf | ||||||
|  |     assert_file_exists "$FILE1" "$FILE2" && | ||||||
|  |     assert_nothardlinked "$FILE1" "$FILE2" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | test_zero_size_nonlinkage() { | ||||||
|  |     _prep_tar && | ||||||
|  |     $SCRIPT t || return 2 | ||||||
|  |     local -r \ | ||||||
|  |         FILE1=t/zero-size/empty1 \ | ||||||
|  |         FILE2=t/zero-size/empty2 | ||||||
|  |     assert_file_exists "$FILE1" "$FILE2" && | ||||||
|  |     assert_nothardlinked "$FILE1" "$FILE2" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | test_link_counting() { | ||||||
|  |     _prep_tar && | ||||||
|  |     $SCRIPT t || return 2 | ||||||
|  |     local -r FILES=( | ||||||
|  |         t/link-counting/{most-links,second-most-links} | ||||||
|  |     ) | ||||||
|  |     assert_file_exists "${FILES[@]}" && | ||||||
|  |     assert_hardlinked "${FILES[0]}" "${FILES[1]}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | test_timestamp_preservation() { | ||||||
|  |     _prep_tar && | ||||||
|  |     $SCRIPT t || return 2 | ||||||
|  |     local -r \ | ||||||
|  |         FILE1=t/timestamp-preservation/newer-more-linked \ | ||||||
|  |         FILE2=t/timestamp-preservation/older-less-linked | ||||||
|  |     assert_file_exists "$FILE1" "$FILE2" && | ||||||
|  |     assert_hardlinked "$FILE1" "$FILE2" && | ||||||
|  |     assert_older_than "$FILE2" "$FILE1" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | test_freed_bytes() { | ||||||
|  |     _prep_tar && | ||||||
|  |     local -r OUT=$($SCRIPT -f t/freed-bytes{,,} 2>&1 |tail -1) | ||||||
|  |     local -r FILES=( | ||||||
|  |         t/freed-bytes/{1,2,3,4} | ||||||
|  |     ) | ||||||
|  |     assert_file_exists "${FILES[@]}" && | ||||||
|  |     assert_equals "$OUT" "freed 24 bytes (24 B)" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | cd "$TEMPDIR" || exit | ||||||
|  | TEST_COUNT=0 | ||||||
|  | TESTS_PASSED=0 | ||||||
|  | for TESTNAME in \ | ||||||
|  |     test_normal_linkage \ | ||||||
|  |     test_normal_nonlinkage \ | ||||||
|  |     test_sha1collision_nonlinkage \ | ||||||
|  |     test_zero_size_nonlinkage \ | ||||||
|  |     test_link_counting \ | ||||||
|  |     test_timestamp_preservation \ | ||||||
|  |     test_freed_bytes \ | ||||||
|  |     ; do | ||||||
|  | 
 | ||||||
|  |     (( TEST_COUNT++ )) | ||||||
|  |     if $TESTNAME; then | ||||||
|  |         (( TESTS_PASSED++ )) | ||||||
|  |     else | ||||||
|  |         echo_failure "$TESTNAME failed" | ||||||
|  |         echo | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | cleanup | ||||||
|  | 
 | ||||||
|  | printf '%d/%d tests passed\n' "$TESTS_PASSED" "$TEST_COUNT" | ||||||
|  | if [[ $TESTS_PASSED -ne $TEST_COUNT ]]; then | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
							
								
								
									
										
											BIN
										
									
								
								t/t.tar
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								t/t.tar
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue