git p4 test: wait longer for p4d to start and test its pid
[gitweb.git] / t / lib-git-p4.sh
index a870f9a5d280e3809267b5970f8b9372b5d260b1..eea46a454f44a7fc4282dfe7f788337b5b61217a 100644 (file)
@@ -1,20 +1,18 @@
 #
-# Library code for git-p4 tests
+# Library code for git p4 tests
 #
 
 . ./test-lib.sh
 
 if ! test_have_prereq PYTHON; then
-       skip_all='skipping git-p4 tests; python not available'
+       skip_all='skipping git p4 tests; python not available'
        test_done
 fi
 ( p4 -h && p4d -h ) >/dev/null 2>&1 || {
-       skip_all='skipping git-p4 tests; no p4 or p4d'
+       skip_all='skipping git p4 tests; no p4 or p4d'
        test_done
 }
 
-GITP4="$GIT_BUILD_DIR/contrib/fast-import/git-p4"
-
 # Try to pick a unique port: guess a large number, then hope
 # no more than one of each test is running.
 #
@@ -26,6 +24,7 @@ P4DPORT=$((10669 + ($testid - $git_p4_test_start)))
 
 export P4PORT=localhost:$P4DPORT
 export P4CLIENT=client
+export P4EDITOR=:
 
 db="$TRASH_DIRECTORY/db"
 cli="$TRASH_DIRECTORY/cli"
@@ -34,17 +33,42 @@ pidfile="$TRASH_DIRECTORY/p4d.pid"
 
 start_p4d() {
        mkdir -p "$db" "$cli" "$git" &&
+       rm -f "$pidfile" &&
        (
                p4d -q -r "$db" -p $P4DPORT &
                echo $! >"$pidfile"
        ) &&
-       for i in 1 2 3 4 5 ; do
-               p4 info >/dev/null 2>&1 && break || true &&
-               echo waiting for p4d to start &&
+
+       # This gives p4d a long time to start up, as it can be
+       # quite slow depending on the machine.  Set this environment
+       # variable to something smaller to fail faster in, say,
+       # an automated test setup.  If the p4d process dies, that
+       # will be caught with the "kill -0" check below.
+       i=${P4D_START_PATIENCE:-300}
+       pid=$(cat "$pidfile")
+       ready=
+       while test $i -gt 0
+       do
+               # succeed when p4 client commands start to work
+               if p4 info >/dev/null 2>&1
+               then
+                       ready=true
+                       break
+               fi
+               # fail if p4d died
+               kill -0 $pid 2>/dev/null || break
+               echo waiting for p4d to start
                sleep 1
-       done &&
-       # complain if it never started
-       p4 info >/dev/null &&
+               i=$(( $i - 1 ))
+       done
+
+       if test -z "$ready"
+       then
+               # p4d failed to start
+               return 1
+       fi
+
+       # build a client
        (
                cd "$cli" &&
                p4 client -i <<-EOF
@@ -54,6 +78,7 @@ start_p4d() {
                View: //depot/... //client/...
                EOF
        )
+       return 0
 }
 
 kill_p4d() {