738dc7d4a5
Implement the "bundle-uri" protocol v2 capability by populating the key=value packet lines from the local Git config. The list of bundles is provided from the keys beginning with "bundle.". In the future, we may want to filter this list to be more specific to the exact known keys that the server intends to share, but for flexibility at the moment we will assume that the config values are well-formed. Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
200 lines
5.4 KiB
Bash
200 lines
5.4 KiB
Bash
# Set up and run tests of the 'bundle-uri' command in protocol v2
|
|
#
|
|
# The test that includes this script should set BUNDLE_URI_PROTOCOL
|
|
# to one of "file", "git", or "http".
|
|
|
|
BUNDLE_URI_TEST_PARENT=
|
|
BUNDLE_URI_TEST_URI=
|
|
BUNDLE_URI_TEST_BUNDLE_URI=
|
|
case "$BUNDLE_URI_PROTOCOL" in
|
|
file)
|
|
BUNDLE_URI_PARENT=file_parent
|
|
BUNDLE_URI_REPO_URI="file://$PWD/file_parent"
|
|
BUNDLE_URI_BUNDLE_URI="$BUNDLE_URI_REPO_URI/fake.bdl"
|
|
test_set_prereq BUNDLE_URI_FILE
|
|
;;
|
|
git)
|
|
. "$TEST_DIRECTORY"/lib-git-daemon.sh
|
|
start_git_daemon --export-all --enable=receive-pack
|
|
BUNDLE_URI_PARENT="$GIT_DAEMON_DOCUMENT_ROOT_PATH/parent"
|
|
BUNDLE_URI_REPO_URI="$GIT_DAEMON_URL/parent"
|
|
BUNDLE_URI_BUNDLE_URI="https://example.com/fake.bdl"
|
|
test_set_prereq BUNDLE_URI_GIT
|
|
;;
|
|
http)
|
|
. "$TEST_DIRECTORY"/lib-httpd.sh
|
|
start_httpd
|
|
BUNDLE_URI_PARENT="$HTTPD_DOCUMENT_ROOT_PATH/http_parent"
|
|
BUNDLE_URI_REPO_URI="$HTTPD_URL/smart/http_parent"
|
|
BUNDLE_URI_BUNDLE_URI="https://example.com/fake.bdl"
|
|
test_set_prereq BUNDLE_URI_HTTP
|
|
;;
|
|
*)
|
|
BUG "Need to pass valid BUNDLE_URI_PROTOCOL (was \"$BUNDLE_URI_PROTOCOL\")"
|
|
;;
|
|
esac
|
|
|
|
test_expect_success "setup protocol v2 $BUNDLE_URI_PROTOCOL:// tests" '
|
|
git init "$BUNDLE_URI_PARENT" &&
|
|
test_commit -C "$BUNDLE_URI_PARENT" one &&
|
|
git -C "$BUNDLE_URI_PARENT" config uploadpack.advertiseBundleURIs true
|
|
'
|
|
|
|
case "$BUNDLE_URI_PROTOCOL" in
|
|
http)
|
|
test_expect_success "setup config for $BUNDLE_URI_PROTOCOL:// tests" '
|
|
git -C "$BUNDLE_URI_PARENT" config http.receivepack true
|
|
'
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
BUNDLE_URI_BUNDLE_URI_ESCAPED=$(echo "$BUNDLE_URI_BUNDLE_URI" | test_uri_escape)
|
|
|
|
test_expect_success "connect with $BUNDLE_URI_PROTOCOL:// using protocol v2: no bundle-uri" '
|
|
test_when_finished "rm -f log" &&
|
|
test_when_finished "git -C \"$BUNDLE_URI_PARENT\" config uploadpack.advertiseBundleURIs true" &&
|
|
git -C "$BUNDLE_URI_PARENT" config uploadpack.advertiseBundleURIs false &&
|
|
|
|
GIT_TRACE_PACKET="$PWD/log" \
|
|
git \
|
|
-c protocol.version=2 \
|
|
ls-remote --symref "$BUNDLE_URI_REPO_URI" \
|
|
>actual 2>err &&
|
|
|
|
# Server responded using protocol v2
|
|
grep "< version 2" log &&
|
|
|
|
! grep bundle-uri log
|
|
'
|
|
|
|
test_expect_success "connect with $BUNDLE_URI_PROTOCOL:// using protocol v2: have bundle-uri" '
|
|
test_when_finished "rm -f log" &&
|
|
|
|
GIT_TRACE_PACKET="$PWD/log" \
|
|
git \
|
|
-c protocol.version=2 \
|
|
ls-remote --symref "$BUNDLE_URI_REPO_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 "clone with $BUNDLE_URI_PROTOCOL:// using protocol v2: request bundle-uris" '
|
|
test_when_finished "rm -rf log cloned cloned2" &&
|
|
|
|
GIT_TRACE_PACKET="$PWD/log" \
|
|
git \
|
|
-c transfer.bundleURI=false \
|
|
-c protocol.version=2 \
|
|
clone "$BUNDLE_URI_REPO_URI" cloned \
|
|
>actual 2>err &&
|
|
|
|
# Server responded using protocol v2
|
|
grep "< version 2" log &&
|
|
|
|
# Server advertised bundle-uri capability
|
|
grep "< bundle-uri" log &&
|
|
|
|
# Client did not issue bundle-uri command
|
|
! grep "> command=bundle-uri" log &&
|
|
|
|
GIT_TRACE_PACKET="$PWD/log" \
|
|
git \
|
|
-c transfer.bundleURI=true \
|
|
-c protocol.version=2 \
|
|
clone "$BUNDLE_URI_REPO_URI" cloned2 \
|
|
>actual 2>err &&
|
|
|
|
# Server responded using protocol v2
|
|
grep "< version 2" log &&
|
|
|
|
# Server advertised bundle-uri capability
|
|
grep "< bundle-uri" log &&
|
|
|
|
# Client issued bundle-uri command
|
|
grep "> command=bundle-uri" log
|
|
'
|
|
|
|
# The remaining tests will all assume transfer.bundleURI=true
|
|
#
|
|
# This test can be removed when transfer.bundleURI is enabled by default.
|
|
test_expect_success 'enable transfer.bundleURI for remaining tests' '
|
|
git config --global transfer.bundleURI true
|
|
'
|
|
|
|
test_expect_success "test bundle-uri with $BUNDLE_URI_PROTOCOL:// using protocol v2" '
|
|
test_config -C "$BUNDLE_URI_PARENT" \
|
|
bundle.only.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED" &&
|
|
|
|
# All data about bundle URIs
|
|
cat >expect <<-EOF &&
|
|
[bundle]
|
|
version = 1
|
|
mode = all
|
|
[bundle "only"]
|
|
uri = $BUNDLE_URI_BUNDLE_URI_ESCAPED
|
|
EOF
|
|
|
|
test-tool bundle-uri \
|
|
ls-remote \
|
|
"$BUNDLE_URI_REPO_URI" \
|
|
>actual &&
|
|
test_cmp_config_output expect actual
|
|
'
|
|
|
|
test_expect_success "test bundle-uri with $BUNDLE_URI_PROTOCOL:// using protocol v2 and extra data" '
|
|
test_config -C "$BUNDLE_URI_PARENT" \
|
|
bundle.only.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED" &&
|
|
|
|
# Extra data should be ignored
|
|
test_config -C "$BUNDLE_URI_PARENT" bundle.only.extra bogus &&
|
|
|
|
# All data about bundle URIs
|
|
cat >expect <<-EOF &&
|
|
[bundle]
|
|
version = 1
|
|
mode = all
|
|
[bundle "only"]
|
|
uri = $BUNDLE_URI_BUNDLE_URI_ESCAPED
|
|
EOF
|
|
|
|
test-tool bundle-uri \
|
|
ls-remote \
|
|
"$BUNDLE_URI_REPO_URI" \
|
|
>actual &&
|
|
test_cmp_config_output expect actual
|
|
'
|
|
|
|
test_expect_success "test bundle-uri with $BUNDLE_URI_PROTOCOL:// using protocol v2 with list" '
|
|
test_config -C "$BUNDLE_URI_PARENT" \
|
|
bundle.bundle1.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED-1.bdl" &&
|
|
test_config -C "$BUNDLE_URI_PARENT" \
|
|
bundle.bundle2.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED-2.bdl" &&
|
|
test_config -C "$BUNDLE_URI_PARENT" \
|
|
bundle.bundle3.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED-3.bdl" &&
|
|
|
|
# All data about bundle URIs
|
|
cat >expect <<-EOF &&
|
|
[bundle]
|
|
version = 1
|
|
mode = all
|
|
[bundle "bundle1"]
|
|
uri = $BUNDLE_URI_BUNDLE_URI_ESCAPED-1.bdl
|
|
[bundle "bundle2"]
|
|
uri = $BUNDLE_URI_BUNDLE_URI_ESCAPED-2.bdl
|
|
[bundle "bundle3"]
|
|
uri = $BUNDLE_URI_BUNDLE_URI_ESCAPED-3.bdl
|
|
EOF
|
|
|
|
test-tool bundle-uri \
|
|
ls-remote \
|
|
"$BUNDLE_URI_REPO_URI" \
|
|
>actual &&
|
|
test_cmp_config_output expect actual
|
|
'
|