]>
Commit | Line | Data |
---|---|---|
c74c7203 JN |
1 | # Shell library to run git-daemon in tests. Ends the test early if |
2 | # GIT_TEST_GIT_DAEMON is not set. | |
3 | # | |
4 | # Usage: | |
5 | # | |
6 | # . ./test-lib.sh | |
7 | # . "$TEST_DIRECTORY"/lib-git-daemon.sh | |
8 | # start_git_daemon | |
9 | # | |
10 | # test_expect_success '...' ' | |
11 | # ... | |
12 | # ' | |
13 | # | |
14 | # test_expect_success ... | |
15 | # | |
16 | # stop_git_daemon | |
17 | # test_done | |
71039fb9 | 18 | |
83d842dc JK |
19 | test_tristate GIT_TEST_GIT_DAEMON |
20 | if test "$GIT_TEST_GIT_DAEMON" = false | |
71039fb9 | 21 | then |
83d842dc | 22 | skip_all="git-daemon testing disabled (unset GIT_TEST_GIT_DAEMON to enable)" |
71039fb9 CB |
23 | test_done |
24 | fi | |
25 | ||
c44132fc | 26 | LIB_GIT_DAEMON_PORT=${LIB_GIT_DAEMON_PORT-${this_test#t}} |
71039fb9 CB |
27 | |
28 | GIT_DAEMON_PID= | |
29 | GIT_DAEMON_DOCUMENT_ROOT_PATH="$PWD"/repo | |
30 | GIT_DAEMON_URL=git://127.0.0.1:$LIB_GIT_DAEMON_PORT | |
31 | ||
32 | start_git_daemon() { | |
33 | if test -n "$GIT_DAEMON_PID" | |
34 | then | |
35 | error "start_git_daemon already called" | |
36 | fi | |
37 | ||
38 | mkdir -p "$GIT_DAEMON_DOCUMENT_ROOT_PATH" | |
39 | ||
40 | trap 'code=$?; stop_git_daemon; (exit $code); die' EXIT | |
41 | ||
42 | say >&3 "Starting git daemon ..." | |
561b133c | 43 | mkfifo git_daemon_output |
71039fb9 CB |
44 | git daemon --listen=127.0.0.1 --port="$LIB_GIT_DAEMON_PORT" \ |
45 | --reuseaddr --verbose \ | |
46 | --base-path="$GIT_DAEMON_DOCUMENT_ROOT_PATH" \ | |
47 | "$@" "$GIT_DAEMON_DOCUMENT_ROOT_PATH" \ | |
561b133c | 48 | >&3 2>git_daemon_output & |
71039fb9 | 49 | GIT_DAEMON_PID=$! |
561b133c | 50 | { |
46e35815 | 51 | read line <&7 |
561b133c | 52 | echo >&4 "$line" |
46e35815 JS |
53 | cat <&7 >&4 & |
54 | } 7<git_daemon_output && | |
561b133c | 55 | |
46e35815 JS |
56 | # Check expected output |
57 | if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble" | |
58 | then | |
59 | kill "$GIT_DAEMON_PID" | |
60 | wait "$GIT_DAEMON_PID" | |
61 | trap 'die' EXIT | |
83d842dc JK |
62 | test_skip_or_die $GIT_TEST_GIT_DAEMON \ |
63 | "git daemon failed to start" | |
46e35815 | 64 | fi |
71039fb9 CB |
65 | } |
66 | ||
67 | stop_git_daemon() { | |
68 | if test -z "$GIT_DAEMON_PID" | |
69 | then | |
70 | return | |
71 | fi | |
72 | ||
73 | trap 'die' EXIT | |
74 | ||
75 | # kill git-daemon child of git | |
76 | say >&3 "Stopping git daemon ..." | |
77 | kill "$GIT_DAEMON_PID" | |
78 | wait "$GIT_DAEMON_PID" >&3 2>&4 | |
79 | ret=$? | |
80 | # expect exit with status 143 = 128+15 for signal TERM=15 | |
81 | if test $ret -ne 143 | |
82 | then | |
83 | error "git daemon exited with status: $ret" | |
84 | fi | |
85 | GIT_DAEMON_PID= | |
561b133c | 86 | rm -f git_daemon_output |
71039fb9 | 87 | } |