untracked-cache: be defensive about missing NULs in index
[gitweb.git] / t / lib-git-daemon.sh
index 987d40680b4d23f9053c623529eaafa88da04616..79db3b7ae513c01b07422ed1a8d95f9f5b285cb5 100644 (file)
@@ -28,11 +28,12 @@ then
        test_skip_or_die $GIT_TEST_GIT_DAEMON "file system does not support FIFOs"
 fi
 
-LIB_GIT_DAEMON_PORT=${LIB_GIT_DAEMON_PORT-${this_test#t}}
+test_set_port LIB_GIT_DAEMON_PORT
 
 GIT_DAEMON_PID=
 GIT_DAEMON_DOCUMENT_ROOT_PATH="$PWD"/repo
-GIT_DAEMON_URL=git://127.0.0.1:$LIB_GIT_DAEMON_PORT
+GIT_DAEMON_HOST_PORT=127.0.0.1:$LIB_GIT_DAEMON_PORT
+GIT_DAEMON_URL=git://$GIT_DAEMON_HOST_PORT
 
 start_git_daemon() {
        if test -n "$GIT_DAEMON_PID"
@@ -54,8 +55,8 @@ start_git_daemon() {
                >&3 2>git_daemon_output &
        GIT_DAEMON_PID=$!
        {
-               read line <&7
-               echo >&4 "$line"
+               read -r line <&7
+               printf "%s\n" "$line" >&4
                cat <&7 >&4 &
        } 7<git_daemon_output &&
 
@@ -83,10 +84,32 @@ stop_git_daemon() {
        kill "$GIT_DAEMON_PID"
        wait "$GIT_DAEMON_PID" >&3 2>&4
        ret=$?
-       if test_match_signal 15 $?
+       if ! test_match_signal 15 $ret
        then
                error "git daemon exited with status: $ret"
        fi
        GIT_DAEMON_PID=
        rm -f git_daemon_output
 }
+
+# A stripped-down version of a netcat client, that connects to a "host:port"
+# given in $1, sends its stdin followed by EOF, then dumps the response (until
+# EOF) to stdout.
+fake_nc() {
+       if ! test_declared_prereq FAKENC
+       then
+               echo >&4 "fake_nc: need to declare FAKENC prerequisite"
+               return 127
+       fi
+       perl -Mstrict -MIO::Socket::INET -e '
+               my $s = IO::Socket::INET->new(shift)
+                       or die "unable to open socket: $!";
+               print $s <STDIN>;
+               $s->shutdown(1);
+               print <$s>;
+       ' "$@"
+}
+
+test_lazy_prereq FAKENC '
+       perl -MIO::Socket::INET -e "exit 0"
+'