Browse Source

Turn `git serve` into a test helper

The `git serve` built-in was introduced in ed10cb952d (serve:
introduce git-serve, 2018-03-15) as a backend to serve Git protocol v2,
probably originally intended to be spawned by `git upload-pack`.

However, in the version that the protocol v2 patches made it into core
Git, `git upload-pack` calls the `serve()` function directly instead of
spawning `git serve`; The only reason in life for `git serve` to survive
as a built-in command is to provide a way to test the protocol v2
functionality.

Meaning that it does not even have to be a built-in that is installed
with end-user facing Git installations, but it can be a test helper
instead.

Let's make it so.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Johannes Schindelin 6 years ago committed by Junio C Hamano
parent
commit
b7ce24d095
  1. 2
      Makefile
  2. 1
      builtin.h
  3. 1
      git.c
  4. 7
      t/helper/test-serve-v2.c
  5. 1
      t/helper/test-tool.c
  6. 1
      t/helper/test-tool.h
  7. 32
      t/t5701-git-serve.sh
  8. 5
      t/t5702-protocol-v2.sh
  9. 16
      t/t5703-upload-pack-ref-in-want.sh

2
Makefile

@ -758,6 +758,7 @@ TEST_BUILTINS_OBJS += test-repository.o
TEST_BUILTINS_OBJS += test-revision-walking.o TEST_BUILTINS_OBJS += test-revision-walking.o
TEST_BUILTINS_OBJS += test-run-command.o TEST_BUILTINS_OBJS += test-run-command.o
TEST_BUILTINS_OBJS += test-scrap-cache-tree.o TEST_BUILTINS_OBJS += test-scrap-cache-tree.o
TEST_BUILTINS_OBJS += test-serve-v2.o
TEST_BUILTINS_OBJS += test-sha1.o TEST_BUILTINS_OBJS += test-sha1.o
TEST_BUILTINS_OBJS += test-sha1-array.o TEST_BUILTINS_OBJS += test-sha1-array.o
TEST_BUILTINS_OBJS += test-sha256.o TEST_BUILTINS_OBJS += test-sha256.o
@ -1127,7 +1128,6 @@ BUILTIN_OBJS += builtin/rev-parse.o
BUILTIN_OBJS += builtin/revert.o BUILTIN_OBJS += builtin/revert.o
BUILTIN_OBJS += builtin/rm.o BUILTIN_OBJS += builtin/rm.o
BUILTIN_OBJS += builtin/send-pack.o BUILTIN_OBJS += builtin/send-pack.o
BUILTIN_OBJS += builtin/serve.o
BUILTIN_OBJS += builtin/shortlog.o BUILTIN_OBJS += builtin/shortlog.o
BUILTIN_OBJS += builtin/show-branch.o BUILTIN_OBJS += builtin/show-branch.o
BUILTIN_OBJS += builtin/show-index.o BUILTIN_OBJS += builtin/show-index.o

1
builtin.h

@ -219,7 +219,6 @@ extern int cmd_rev_parse(int argc, const char **argv, const char *prefix);
extern int cmd_revert(int argc, const char **argv, const char *prefix); extern int cmd_revert(int argc, const char **argv, const char *prefix);
extern int cmd_rm(int argc, const char **argv, const char *prefix); extern int cmd_rm(int argc, const char **argv, const char *prefix);
extern int cmd_send_pack(int argc, const char **argv, const char *prefix); extern int cmd_send_pack(int argc, const char **argv, const char *prefix);
extern int cmd_serve(int argc, const char **argv, const char *prefix);
extern int cmd_shortlog(int argc, const char **argv, const char *prefix); extern int cmd_shortlog(int argc, const char **argv, const char *prefix);
extern int cmd_show(int argc, const char **argv, const char *prefix); extern int cmd_show(int argc, const char **argv, const char *prefix);
extern int cmd_show_branch(int argc, const char **argv, const char *prefix); extern int cmd_show_branch(int argc, const char **argv, const char *prefix);

1
git.c

@ -548,7 +548,6 @@ static struct cmd_struct commands[] = {
{ "revert", cmd_revert, RUN_SETUP | NEED_WORK_TREE }, { "revert", cmd_revert, RUN_SETUP | NEED_WORK_TREE },
{ "rm", cmd_rm, RUN_SETUP }, { "rm", cmd_rm, RUN_SETUP },
{ "send-pack", cmd_send_pack, RUN_SETUP }, { "send-pack", cmd_send_pack, RUN_SETUP },
{ "serve", cmd_serve, RUN_SETUP },
{ "shortlog", cmd_shortlog, RUN_SETUP_GENTLY | USE_PAGER }, { "shortlog", cmd_shortlog, RUN_SETUP_GENTLY | USE_PAGER },
{ "show", cmd_show, RUN_SETUP }, { "show", cmd_show, RUN_SETUP },
{ "show-branch", cmd_show_branch, RUN_SETUP }, { "show-branch", cmd_show_branch, RUN_SETUP },

7
builtin/serve.c → t/helper/test-serve-v2.c

@ -1,14 +1,14 @@
#include "test-tool.h"
#include "cache.h" #include "cache.h"
#include "builtin.h"
#include "parse-options.h" #include "parse-options.h"
#include "serve.h" #include "serve.h"


static char const * const serve_usage[] = { static char const * const serve_usage[] = {
N_("git serve [<options>]"), N_("test-tool serve-v2 [<options>]"),
NULL NULL
}; };


int cmd_serve(int argc, const char **argv, const char *prefix) int cmd__serve_v2(int argc, const char **argv)
{ {
struct serve_options opts = SERVE_OPTIONS_INIT; struct serve_options opts = SERVE_OPTIONS_INIT;


@ -19,6 +19,7 @@ int cmd_serve(int argc, const char **argv, const char *prefix)
N_("exit immediately after advertising capabilities")), N_("exit immediately after advertising capabilities")),
OPT_END() OPT_END()
}; };
const char *prefix = setup_git_directory();


/* ignore all unknown cmdline switches for now */ /* ignore all unknown cmdline switches for now */
argc = parse_options(argc, argv, prefix, options, serve_usage, argc = parse_options(argc, argv, prefix, options, serve_usage,

1
t/helper/test-tool.c

@ -48,6 +48,7 @@ static struct test_cmd cmds[] = {
{ "revision-walking", cmd__revision_walking }, { "revision-walking", cmd__revision_walking },
{ "run-command", cmd__run_command }, { "run-command", cmd__run_command },
{ "scrap-cache-tree", cmd__scrap_cache_tree }, { "scrap-cache-tree", cmd__scrap_cache_tree },
{ "serve-v2", cmd__serve_v2 },
{ "sha1", cmd__sha1 }, { "sha1", cmd__sha1 },
{ "sha1-array", cmd__sha1_array }, { "sha1-array", cmd__sha1_array },
{ "sha256", cmd__sha256 }, { "sha256", cmd__sha256 },

1
t/helper/test-tool.h

@ -39,6 +39,7 @@ int cmd__repository(int argc, const char **argv);
int cmd__revision_walking(int argc, const char **argv); int cmd__revision_walking(int argc, const char **argv);
int cmd__run_command(int argc, const char **argv); int cmd__run_command(int argc, const char **argv);
int cmd__scrap_cache_tree(int argc, const char **argv); int cmd__scrap_cache_tree(int argc, const char **argv);
int cmd__serve_v2(int argc, const char **argv);
int cmd__sha1(int argc, const char **argv); int cmd__sha1(int argc, const char **argv);
int cmd__sha1_array(int argc, const char **argv); int cmd__sha1_array(int argc, const char **argv);
int cmd__sha256(int argc, const char **argv); int cmd__sha256(int argc, const char **argv);

32
t/t5701-git-serve.sh

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh


test_description='test git-serve and server commands' test_description='test protocol v2 server commands'


. ./test-lib.sh . ./test-lib.sh


@ -14,7 +14,8 @@ test_expect_success 'test capability advertisement' '
0000 0000
EOF EOF


GIT_TEST_SIDEBAND_ALL=0 git serve --advertise-capabilities >out && GIT_TEST_SIDEBAND_ALL=0 test-tool serve-v2 \
--advertise-capabilities >out &&
test-tool pkt-line unpack <out >actual && test-tool pkt-line unpack <out >actual &&
test_cmp expect actual test_cmp expect actual
' '
@ -24,11 +25,11 @@ test_expect_success 'stateless-rpc flag does not list capabilities' '
test-tool pkt-line pack >in <<-EOF && test-tool pkt-line pack >in <<-EOF &&
0000 0000
EOF EOF
git serve --stateless-rpc >out <in && test-tool serve-v2 --stateless-rpc >out <in &&
test_must_be_empty out && test_must_be_empty out &&


# EOF # EOF
git serve --stateless-rpc >out && test-tool serve-v2 --stateless-rpc >out &&
test_must_be_empty out test_must_be_empty out
' '


@ -37,7 +38,7 @@ test_expect_success 'request invalid capability' '
foobar foobar
0000 0000
EOF EOF
test_must_fail git serve --stateless-rpc 2>err <in && test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
test_i18ngrep "unknown capability" err test_i18ngrep "unknown capability" err
' '


@ -46,7 +47,7 @@ test_expect_success 'request with no command' '
agent=git/test agent=git/test
0000 0000
EOF EOF
test_must_fail git serve --stateless-rpc 2>err <in && test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
test_i18ngrep "no command requested" err test_i18ngrep "no command requested" err
' '


@ -56,7 +57,7 @@ test_expect_success 'request invalid command' '
agent=git/test agent=git/test
0000 0000
EOF EOF
test_must_fail git serve --stateless-rpc 2>err <in && test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
test_i18ngrep "invalid command" err test_i18ngrep "invalid command" err
' '


@ -87,7 +88,7 @@ test_expect_success 'basics of ls-refs' '
0000 0000
EOF EOF


git serve --stateless-rpc <in >out && test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual && test-tool pkt-line unpack <out >actual &&
test_cmp expect actual test_cmp expect actual
' '
@ -107,7 +108,7 @@ test_expect_success 'basic ref-prefixes' '
0000 0000
EOF EOF


git serve --stateless-rpc <in >out && test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual && test-tool pkt-line unpack <out >actual &&
test_cmp expect actual test_cmp expect actual
' '
@ -127,7 +128,7 @@ test_expect_success 'refs/heads prefix' '
0000 0000
EOF EOF


git serve --stateless-rpc <in >out && test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual && test-tool pkt-line unpack <out >actual &&
test_cmp expect actual test_cmp expect actual
' '
@ -148,7 +149,7 @@ test_expect_success 'peel parameter' '
0000 0000
EOF EOF


git serve --stateless-rpc <in >out && test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual && test-tool pkt-line unpack <out >actual &&
test_cmp expect actual test_cmp expect actual
' '
@ -169,7 +170,7 @@ test_expect_success 'symrefs parameter' '
0000 0000
EOF EOF


git serve --stateless-rpc <in >out && test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual && test-tool pkt-line unpack <out >actual &&
test_cmp expect actual test_cmp expect actual
' '
@ -189,7 +190,7 @@ test_expect_success 'sending server-options' '
0000 0000
EOF EOF


git serve --stateless-rpc <in >out && test-tool serve-v2 --stateless-rpc <in >out &&
test-tool pkt-line unpack <out >actual && test-tool pkt-line unpack <out >actual &&
test_cmp expect actual test_cmp expect actual
' '
@ -204,7 +205,10 @@ test_expect_success 'unexpected lines are not allowed in fetch request' '
0000 0000
EOF EOF


test_must_fail git -C server serve --stateless-rpc <in >/dev/null 2>err && (
cd server &&
test_must_fail test-tool serve-v2 --stateless-rpc
) <in >/dev/null 2>err &&
grep "unexpected line: .this-is-not-a-command." err grep "unexpected line: .this-is-not-a-command." err
' '



5
t/t5702-protocol-v2.sh

@ -359,12 +359,13 @@ test_expect_success 'even with handcrafted request, filter does not work if not
0000 0000
EOF EOF


test_must_fail git -C server serve --stateless-rpc <in >/dev/null 2>err && test_must_fail test-tool -C server serve-v2 --stateless-rpc \
<in >/dev/null 2>err &&
grep "unexpected line: .filter blob:none." err && grep "unexpected line: .filter blob:none." err &&


# Exercise to ensure that if advertised, filter works # Exercise to ensure that if advertised, filter works
git -C server config uploadpack.allowfilter 1 && git -C server config uploadpack.allowfilter 1 &&
git -C server serve --stateless-rpc <in >/dev/null test-tool -C server serve-v2 --stateless-rpc <in >/dev/null
' '


test_expect_success 'default refspec is used to filter ref when fetchcing' ' test_expect_success 'default refspec is used to filter ref when fetchcing' '

16
t/t5703-upload-pack-ref-in-want.sh

@ -48,15 +48,15 @@ test_expect_success 'setup repository' '
' '


test_expect_success 'config controls ref-in-want advertisement' ' test_expect_success 'config controls ref-in-want advertisement' '
git serve --advertise-capabilities >out && test-tool serve-v2 --advertise-capabilities >out &&
! grep -a ref-in-want out && ! grep -a ref-in-want out &&


git config uploadpack.allowRefInWant false && git config uploadpack.allowRefInWant false &&
git serve --advertise-capabilities >out && test-tool serve-v2 --advertise-capabilities >out &&
! grep -a ref-in-want out && ! grep -a ref-in-want out &&


git config uploadpack.allowRefInWant true && git config uploadpack.allowRefInWant true &&
git serve --advertise-capabilities >out && test-tool serve-v2 --advertise-capabilities >out &&
grep -a ref-in-want out grep -a ref-in-want out
' '


@ -70,7 +70,7 @@ test_expect_success 'invalid want-ref line' '
0000 0000
EOF EOF


test_must_fail git serve --stateless-rpc 2>out <in && test_must_fail test-tool serve-v2 --stateless-rpc 2>out <in &&
grep "unknown ref" out grep "unknown ref" out
' '


@ -90,7 +90,7 @@ test_expect_success 'basic want-ref' '
0000 0000
EOF EOF


git serve --stateless-rpc >out <in && test-tool serve-v2 --stateless-rpc >out <in &&
check_output check_output
' '


@ -112,7 +112,7 @@ test_expect_success 'multiple want-ref lines' '
0000 0000
EOF EOF


git serve --stateless-rpc >out <in && test-tool serve-v2 --stateless-rpc >out <in &&
check_output check_output
' '


@ -133,7 +133,7 @@ test_expect_success 'mix want and want-ref' '
0000 0000
EOF EOF


git serve --stateless-rpc >out <in && test-tool serve-v2 --stateless-rpc >out <in &&
check_output check_output
' '


@ -153,7 +153,7 @@ test_expect_success 'want-ref with ref we already have commit for' '
0000 0000
EOF EOF


git serve --stateless-rpc >out <in && test-tool serve-v2 --stateless-rpc >out <in &&
check_output check_output
' '



Loading…
Cancel
Save