1# 2# Library code for git p4 tests 3# 4 5. ./test-lib.sh 6 7if ! test_have_prereq PYTHON; then 8 skip_all='skipping git p4 tests; python not available' 9 test_done 10fi 11( p4 -h && p4d -h ) >/dev/null 2>&1 || { 12 skip_all='skipping git p4 tests; no p4 or p4d' 13 test_done 14} 15 16# Try to pick a unique port: guess a large number, then hope 17# no more than one of each test is running. 18# 19# This does not handle the case where somebody else is running the 20# same tests and has chosen the same ports. 21testid=${this_test#t} 22git_p4_test_start=9800 23P4DPORT=$((10669 + ($testid - $git_p4_test_start))) 24 25export P4PORT=localhost:$P4DPORT 26export P4CLIENT=client 27export P4EDITOR=: 28 29db="$TRASH_DIRECTORY/db" 30cli="$TRASH_DIRECTORY/cli" 31git="$TRASH_DIRECTORY/git" 32pidfile="$TRASH_DIRECTORY/p4d.pid" 33 34start_p4d() { 35 mkdir -p "$db" "$cli" "$git" && 36 rm -f "$pidfile" && 37 ( 38 p4d -q -r "$db" -p $P4DPORT & 39 echo $! >"$pidfile" 40 ) && 41 42 # This gives p4d a long time to start up, as it can be 43 # quite slow depending on the machine. Set this environment 44 # variable to something smaller to fail faster in, say, 45 # an automated test setup. If the p4d process dies, that 46 # will be caught with the "kill -0" check below. 47 i=${P4D_START_PATIENCE:-300} 48 pid=$(cat "$pidfile") 49 ready= 50 while test $i -gt 0 51 do 52 # succeed when p4 client commands start to work 53 if p4 info >/dev/null 2>&1 54 then 55 ready=true 56 break 57 fi 58 # fail if p4d died 59 kill -0 $pid 2>/dev/null || break 60 echo waiting for p4d to start 61 sleep 1 62 i=$(( $i - 1 )) 63 done 64 65 if test -z "$ready" 66 then 67 # p4d failed to start 68 return 1 69 fi 70 71 # build a client 72 ( 73 cd "$cli" && 74 p4 client -i <<-EOF 75 Client: client 76 Description: client 77 Root: $cli 78 View: //depot/... //client/... 79 EOF 80 ) 81 return 0 82} 83 84kill_p4d() { 85 pid=$(cat "$pidfile") 86 # it had better exist for the first kill 87 kill $pid && 88 for i in 1 2 3 4 5 ; do 89 kill $pid >/dev/null 2>&1 || break 90 sleep 1 91 done && 92 # complain if it would not die 93 test_must_fail kill $pid >/dev/null 2>&1 && 94 rm -rf "$db" "$cli" "$pidfile" 95} 96 97cleanup_git() { 98 rm -rf "$git" 99}