git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
blob c327544641b54ac38132f0254078499f9ae584d9 5050 bytes (raw)
name: t/lib-t5730-protocol-v2-bundle-uri.sh 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
 
# Included from t573*-protocol-v2-bundle-uri-*.sh

T5730_PARENT=
T5730_URI=
T5730_BUNDLE_URI=
case "$T5730_PROTOCOL" in
file)
	T5730_PARENT=file_parent
	T5730_URI="file://$PWD/file_parent"
	T5730_BUNDLE_URI="$T5730_URI/fake.bdl"
	test_set_prereq T5730_FILE
	;;
git)
	. "$TEST_DIRECTORY"/lib-git-daemon.sh
	start_git_daemon --export-all --enable=receive-pack
	T5730_PARENT="$GIT_DAEMON_DOCUMENT_ROOT_PATH/parent"
	T5730_URI="$GIT_DAEMON_URL/parent"
	T5730_BUNDLE_URI="https://example.com/fake.bdl"
	test_set_prereq T5730_GIT
	;;
http)
	. "$TEST_DIRECTORY"/lib-httpd.sh
	start_httpd
	T5730_PARENT="$HTTPD_DOCUMENT_ROOT_PATH/http_parent"
	T5730_URI="$HTTPD_URL/smart/http_parent"
	T5730_BUNDLE_URI="https://example.com/fake.bdl"
	test_set_prereq T5730_HTTP
	;;
*)
	BUG "Need to pass valid T5730_PROTOCOL (was $T5730_PROTOCOL)"
	;;
esac

test_expect_success "setup protocol v2 $T5730_PROTOCOL:// tests" '
	git init "$T5730_PARENT" &&
	test_commit -C "$T5730_PARENT" one &&
	git -C "$T5730_PARENT" config uploadpack.advertiseBundleURIs true &&
	git -C "$T5730_PARENT" config bundle.version 1 &&
	git -C "$T5730_PARENT" config bundle.mode all
'

# Poor man's URI escaping. Good enough for the test suite whose trash
# directory has a space in it. See 93c3fcbe4d4 (git-svn: attempt to
# mimic SVN 1.7 URL canonicalization, 2012-07-28) for prior art.
test_uri_escape() {
	sed 's/ /%20/g'
}

case "$T5730_PROTOCOL" in
http)
	test_expect_success "setup config for $T5730_PROTOCOL:// tests" '
		git -C "$T5730_PARENT" config http.receivepack true
	'
	;;
*)
	;;
esac
T5730_BUNDLE_URI_ESCAPED=$(echo "$T5730_BUNDLE_URI" | test_uri_escape)

test_expect_success "connect with $T5730_PROTOCOL:// using protocol v2: no bundle-uri" '
	test_when_finished "rm -f log" &&
	test_when_finished "git -C \"$T5730_PARENT\" config uploadpack.advertiseBundleURIs true" &&
	git -C "$T5730_PARENT" config uploadpack.advertiseBundleURIs false &&

	GIT_TRACE_PACKET="$PWD/log" \
	test-tool bundle-uri \
		ls-remote "$T5730_URI" \
		>actual 2>err &&

	# Server responded using protocol v2
	grep "< version 2" log &&

	! grep bundle-uri log
'

test_expect_success "connect with $T5730_PROTOCOL:// using protocol v2: have bundle-uri" '
	test_when_finished "rm -f log" &&

	test_config -C "$T5730_PARENT" \
		bundle.only.uri "$T5730_BUNDLE_URI_ESCAPED" &&

	GIT_TRACE_PACKET="$PWD/log" \
	test-tool bundle-uri \
		ls-remote "$T5730_URI" \
		>actual 2>err &&

	# Server responded using protocol v2
	grep "< version 2" log &&

	# Server advertised bundle-uri capability
	grep bundle-uri log
'

test_expect_success !T5730_HTTP "bad client with $T5730_PROTOCOL:// using protocol v2" '
	test_when_finished "rm -f log" &&

	test_config -C "$T5730_PARENT" \
		bundle.only.uri "$T5730_BUNDLE_URI_ESCAPED" &&

	cat >err.expect <<-\EOF &&
	Cloning into '"'"'child'"'"'...
	EOF
	case "$T5730_PROTOCOL" in
	file)
		cat >fatal-bundle-uri.expect <<-\EOF
		fatal: bundle-uri: unexpected argument: '"'"'test-bad-client'"'"'
		EOF
		;;
	*)
		cat >fatal.expect <<-\EOF
		fatal: read error: Connection reset by peer
		EOF
		;;
	esac &&

	test_when_finished "rm -rf child" &&
	test_must_fail ok=sigpipe env \
		GIT_TRACE_PACKET="$PWD/log" \
		GIT_TEST_PROTOCOL_BAD_BUNDLE_URI=true \
		git -c protocol.version=2 \
		clone "$T5730_URI" child \
		>out 2>err &&
	test_must_be_empty out &&

	grep -v -e ^fatal: -e ^error: err >err.actual &&
	test_cmp err.expect err.actual &&

	case "$T5730_PROTOCOL" in
	file)
		# Due to general race conditions with client/server replies we
		# may or may not get "fatal: the remote end hung up
		# expectedly" here
		grep "^fatal: bundle-uri:" err >fatal-bundle-uri.actual &&
		test_cmp fatal-bundle-uri.expect fatal-bundle-uri.actual
		;;
	*)
		grep "^fatal:" err >fatal.actual &&
		# Due to the same race conditions this might be
		# "fatal: read error: Connection reset by peer", "fatal: the remote end
		# hung up unexpectedly" etc.
		cat fatal.actual &&
		test_file_not_empty fatal.actual
		;;
	esac &&

	grep "clone> test-bad-client$" log >sent-bad-request &&
	test_file_not_empty sent-bad-request
'

test_expect_success "ls-remote with $T5730_PROTOCOL:// using protocol v2" '
	test_when_finished "rm -f log" &&

	test_config -C "$T5730_PARENT" \
		bundle.only.uri "$T5730_BUNDLE_URI_ESCAPED" &&

	# All data about bundle URIs
	cat >expect <<-EOF &&
	[bundle]
		version = 1
		mode = all
	EOF
	GIT_TRACE_PACKET="$PWD/log" \
	test-tool bundle-uri \
		ls-remote \
		"$T5730_URI" \
		>actual &&
	test_cmp_config_output expect actual
'

test_expect_success "ls-remote with $T5730_PROTOCOL:// using protocol v2 and extra data" '
	test_when_finished "rm -f log" &&

	test_config -C "$T5730_PARENT" \
		bundle.only.uri "$T5730_BUNDLE_URI_ESCAPED" &&

	# Extra data should be ignored
	test_config -C "$T5730_PARENT" bundle.only.extra bogus &&

	# All data about bundle URIs
	cat >expect <<-EOF &&
	[bundle]
		version = 1
		mode = all
	EOF
	GIT_TRACE_PACKET="$PWD/log" \
	test-tool bundle-uri \
		ls-remote \
		"$T5730_URI" \
		>actual &&
	test_cmp_config_output expect actual
'

debug log:

solving c327544641b ...
found c327544641b in https://public-inbox.org/git/ae0003bb39b486732928bde16a01d925afc12f96.1667264854.git.gitgitgadget@gmail.com/ ||
	https://public-inbox.org/git/c3269a24b5780023cbb4d173cb9cfb10c5a4b0d8.1668628303.git.gitgitgadget@gmail.com/
found 27294e9c976 in https://public-inbox.org/git/64dd9bf41de0310bbed5e3623870819f1c876f83.1667264854.git.gitgitgadget@gmail.com/ ||
	https://public-inbox.org/git/0d85aef965d62a684b25f388a946abd3c17809fc.1668628303.git.gitgitgadget@gmail.com/ ||
	https://public-inbox.org/git/1830d193b116b00dd1b484852385062ac92a451c.1653072042.git.gitgitgadget@gmail.com/

applying [1/2] https://public-inbox.org/git/64dd9bf41de0310bbed5e3623870819f1c876f83.1667264854.git.gitgitgadget@gmail.com/
diff --git a/t/lib-t5730-protocol-v2-bundle-uri.sh b/t/lib-t5730-protocol-v2-bundle-uri.sh
new file mode 100644
index 00000000000..27294e9c976

Checking patch t/lib-t5730-protocol-v2-bundle-uri.sh...
Applied patch t/lib-t5730-protocol-v2-bundle-uri.sh cleanly.

skipping https://public-inbox.org/git/0d85aef965d62a684b25f388a946abd3c17809fc.1668628303.git.gitgitgadget@gmail.com/ for 27294e9c976
skipping https://public-inbox.org/git/1830d193b116b00dd1b484852385062ac92a451c.1653072042.git.gitgitgadget@gmail.com/ for 27294e9c976
index at:
100644 27294e9c9768ae8f78433237a6843524b6763fbb	t/lib-t5730-protocol-v2-bundle-uri.sh

applying [2/2] https://public-inbox.org/git/ae0003bb39b486732928bde16a01d925afc12f96.1667264854.git.gitgitgadget@gmail.com/
diff --git a/t/lib-t5730-protocol-v2-bundle-uri.sh b/t/lib-t5730-protocol-v2-bundle-uri.sh
index 27294e9c976..c327544641b 100644

Checking patch t/lib-t5730-protocol-v2-bundle-uri.sh...
Applied patch t/lib-t5730-protocol-v2-bundle-uri.sh cleanly.

skipping https://public-inbox.org/git/c3269a24b5780023cbb4d173cb9cfb10c5a4b0d8.1668628303.git.gitgitgadget@gmail.com/ for c327544641b
index at:
100644 c327544641b54ac38132f0254078499f9ae584d9	t/lib-t5730-protocol-v2-bundle-uri.sh

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).