Merge branch 'ds/commit-graph-write-refactor'
[git] / t / t5701-git-serve.sh
1 #!/bin/sh
2
3 test_description='test protocol v2 server commands'
4
5 . ./test-lib.sh
6
7 test_expect_success 'test capability advertisement' '
8         cat >expect <<-EOF &&
9         version 2
10         agent=git/$(git version | cut -d" " -f3)
11         ls-refs
12         fetch=shallow
13         server-option
14         0000
15         EOF
16
17         GIT_TEST_SIDEBAND_ALL=0 test-tool serve-v2 \
18                 --advertise-capabilities >out &&
19         test-tool pkt-line unpack <out >actual &&
20         test_cmp expect actual
21 '
22
23 test_expect_success 'stateless-rpc flag does not list capabilities' '
24         # Empty request
25         test-tool pkt-line pack >in <<-EOF &&
26         0000
27         EOF
28         test-tool serve-v2 --stateless-rpc >out <in &&
29         test_must_be_empty out &&
30
31         # EOF
32         test-tool serve-v2 --stateless-rpc >out &&
33         test_must_be_empty out
34 '
35
36 test_expect_success 'request invalid capability' '
37         test-tool pkt-line pack >in <<-EOF &&
38         foobar
39         0000
40         EOF
41         test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
42         test_i18ngrep "unknown capability" err
43 '
44
45 test_expect_success 'request with no command' '
46         test-tool pkt-line pack >in <<-EOF &&
47         agent=git/test
48         0000
49         EOF
50         test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
51         test_i18ngrep "no command requested" err
52 '
53
54 test_expect_success 'request invalid command' '
55         test-tool pkt-line pack >in <<-EOF &&
56         command=foo
57         agent=git/test
58         0000
59         EOF
60         test_must_fail test-tool serve-v2 --stateless-rpc 2>err <in &&
61         test_i18ngrep "invalid command" err
62 '
63
64 # Test the basics of ls-refs
65 #
66 test_expect_success 'setup some refs and tags' '
67         test_commit one &&
68         git branch dev master &&
69         test_commit two &&
70         git symbolic-ref refs/heads/release refs/heads/master &&
71         git tag -a -m "annotated tag" annotated-tag
72 '
73
74 test_expect_success 'basics of ls-refs' '
75         test-tool pkt-line pack >in <<-EOF &&
76         command=ls-refs
77         0000
78         EOF
79
80         cat >expect <<-EOF &&
81         $(git rev-parse HEAD) HEAD
82         $(git rev-parse refs/heads/dev) refs/heads/dev
83         $(git rev-parse refs/heads/master) refs/heads/master
84         $(git rev-parse refs/heads/release) refs/heads/release
85         $(git rev-parse refs/tags/annotated-tag) refs/tags/annotated-tag
86         $(git rev-parse refs/tags/one) refs/tags/one
87         $(git rev-parse refs/tags/two) refs/tags/two
88         0000
89         EOF
90
91         test-tool serve-v2 --stateless-rpc <in >out &&
92         test-tool pkt-line unpack <out >actual &&
93         test_cmp expect actual
94 '
95
96 test_expect_success 'basic ref-prefixes' '
97         test-tool pkt-line pack >in <<-EOF &&
98         command=ls-refs
99         0001
100         ref-prefix refs/heads/master
101         ref-prefix refs/tags/one
102         0000
103         EOF
104
105         cat >expect <<-EOF &&
106         $(git rev-parse refs/heads/master) refs/heads/master
107         $(git rev-parse refs/tags/one) refs/tags/one
108         0000
109         EOF
110
111         test-tool serve-v2 --stateless-rpc <in >out &&
112         test-tool pkt-line unpack <out >actual &&
113         test_cmp expect actual
114 '
115
116 test_expect_success 'refs/heads prefix' '
117         test-tool pkt-line pack >in <<-EOF &&
118         command=ls-refs
119         0001
120         ref-prefix refs/heads/
121         0000
122         EOF
123
124         cat >expect <<-EOF &&
125         $(git rev-parse refs/heads/dev) refs/heads/dev
126         $(git rev-parse refs/heads/master) refs/heads/master
127         $(git rev-parse refs/heads/release) refs/heads/release
128         0000
129         EOF
130
131         test-tool serve-v2 --stateless-rpc <in >out &&
132         test-tool pkt-line unpack <out >actual &&
133         test_cmp expect actual
134 '
135
136 test_expect_success 'peel parameter' '
137         test-tool pkt-line pack >in <<-EOF &&
138         command=ls-refs
139         0001
140         peel
141         ref-prefix refs/tags/
142         0000
143         EOF
144
145         cat >expect <<-EOF &&
146         $(git rev-parse refs/tags/annotated-tag) refs/tags/annotated-tag peeled:$(git rev-parse refs/tags/annotated-tag^{})
147         $(git rev-parse refs/tags/one) refs/tags/one
148         $(git rev-parse refs/tags/two) refs/tags/two
149         0000
150         EOF
151
152         test-tool serve-v2 --stateless-rpc <in >out &&
153         test-tool pkt-line unpack <out >actual &&
154         test_cmp expect actual
155 '
156
157 test_expect_success 'symrefs parameter' '
158         test-tool pkt-line pack >in <<-EOF &&
159         command=ls-refs
160         0001
161         symrefs
162         ref-prefix refs/heads/
163         0000
164         EOF
165
166         cat >expect <<-EOF &&
167         $(git rev-parse refs/heads/dev) refs/heads/dev
168         $(git rev-parse refs/heads/master) refs/heads/master
169         $(git rev-parse refs/heads/release) refs/heads/release symref-target:refs/heads/master
170         0000
171         EOF
172
173         test-tool serve-v2 --stateless-rpc <in >out &&
174         test-tool pkt-line unpack <out >actual &&
175         test_cmp expect actual
176 '
177
178 test_expect_success 'sending server-options' '
179         test-tool pkt-line pack >in <<-EOF &&
180         command=ls-refs
181         server-option=hello
182         server-option=world
183         0001
184         ref-prefix HEAD
185         0000
186         EOF
187
188         cat >expect <<-EOF &&
189         $(git rev-parse HEAD) HEAD
190         0000
191         EOF
192
193         test-tool serve-v2 --stateless-rpc <in >out &&
194         test-tool pkt-line unpack <out >actual &&
195         test_cmp expect actual
196 '
197
198 test_expect_success 'unexpected lines are not allowed in fetch request' '
199         git init server &&
200
201         test-tool pkt-line pack >in <<-EOF &&
202         command=fetch
203         0001
204         this-is-not-a-command
205         0000
206         EOF
207
208         (
209                 cd server &&
210                 test_must_fail test-tool serve-v2 --stateless-rpc
211         ) <in >/dev/null 2>err &&
212         grep "unexpected line: .this-is-not-a-command." err
213 '
214
215 test_done