| 1 | # Set up and run tests of the 'bundle-uri' command in protocol v2 |
| 2 | # |
| 3 | # The test that includes this script should set BUNDLE_URI_PROTOCOL |
| 4 | # to one of "file", "git", or "http". |
| 5 | |
| 6 | BUNDLE_URI_TEST_PARENT= |
| 7 | BUNDLE_URI_TEST_URI= |
| 8 | BUNDLE_URI_TEST_BUNDLE_URI= |
| 9 | case "$BUNDLE_URI_PROTOCOL" in |
| 10 | file) |
| 11 | BUNDLE_URI_PARENT=file_parent |
| 12 | BUNDLE_URI_REPO_URI="file://$PWD/file_parent" |
| 13 | BUNDLE_URI_BUNDLE_URI="$BUNDLE_URI_REPO_URI/fake.bdl" |
| 14 | test_set_prereq BUNDLE_URI_FILE |
| 15 | ;; |
| 16 | git) |
| 17 | . "$TEST_DIRECTORY"/lib-git-daemon.sh |
| 18 | start_git_daemon --export-all --enable=receive-pack |
| 19 | BUNDLE_URI_PARENT="$GIT_DAEMON_DOCUMENT_ROOT_PATH/parent" |
| 20 | BUNDLE_URI_REPO_URI="$GIT_DAEMON_URL/parent" |
| 21 | BUNDLE_URI_BUNDLE_URI="$BUNDLE_URI_REPO_URI/fake.bdl" |
| 22 | test_set_prereq BUNDLE_URI_GIT |
| 23 | ;; |
| 24 | http) |
| 25 | . "$TEST_DIRECTORY"/lib-httpd.sh |
| 26 | start_httpd |
| 27 | BUNDLE_URI_PARENT="$HTTPD_DOCUMENT_ROOT_PATH/http_parent" |
| 28 | BUNDLE_URI_REPO_URI="$HTTPD_URL/smart/http_parent" |
| 29 | BUNDLE_URI_BUNDLE_URI="$BUNDLE_URI_REPO_URL/fake.bdl" |
| 30 | test_set_prereq BUNDLE_URI_HTTP |
| 31 | ;; |
| 32 | *) |
| 33 | BUG "Need to pass valid BUNDLE_URI_PROTOCOL (was \"$BUNDLE_URI_PROTOCOL\")" |
| 34 | ;; |
| 35 | esac |
| 36 | |
| 37 | test_expect_success "setup protocol v2 $BUNDLE_URI_PROTOCOL:// tests" ' |
| 38 | git init "$BUNDLE_URI_PARENT" && |
| 39 | test_commit -C "$BUNDLE_URI_PARENT" one && |
| 40 | git -C "$BUNDLE_URI_PARENT" config uploadpack.advertiseBundleURIs true |
| 41 | ' |
| 42 | |
| 43 | case "$BUNDLE_URI_PROTOCOL" in |
| 44 | http) |
| 45 | test_expect_success "setup config for $BUNDLE_URI_PROTOCOL:// tests" ' |
| 46 | git -C "$BUNDLE_URI_PARENT" config http.receivepack true |
| 47 | ' |
| 48 | ;; |
| 49 | *) |
| 50 | ;; |
| 51 | esac |
| 52 | BUNDLE_URI_BUNDLE_URI_ESCAPED=$(echo "$BUNDLE_URI_BUNDLE_URI" | test_uri_escape) |
| 53 | |
| 54 | test_expect_success "connect with $BUNDLE_URI_PROTOCOL:// using protocol v2: no bundle-uri" ' |
| 55 | test_when_finished "rm -f log" && |
| 56 | test_when_finished "git -C \"$BUNDLE_URI_PARENT\" config uploadpack.advertiseBundleURIs true" && |
| 57 | git -C "$BUNDLE_URI_PARENT" config uploadpack.advertiseBundleURIs false && |
| 58 | |
| 59 | GIT_TRACE_PACKET="$PWD/log" \ |
| 60 | git \ |
| 61 | -c protocol.version=2 \ |
| 62 | ls-remote --symref "$BUNDLE_URI_REPO_URI" \ |
| 63 | >actual 2>err && |
| 64 | |
| 65 | # Server responded using protocol v2 |
| 66 | test_grep "< version 2" log && |
| 67 | |
| 68 | test_grep ! bundle-uri log |
| 69 | ' |
| 70 | |
| 71 | test_expect_success "connect with $BUNDLE_URI_PROTOCOL:// using protocol v2: have bundle-uri" ' |
| 72 | test_when_finished "rm -f log" && |
| 73 | |
| 74 | GIT_TRACE_PACKET="$PWD/log" \ |
| 75 | git \ |
| 76 | -c protocol.version=2 \ |
| 77 | ls-remote --symref "$BUNDLE_URI_REPO_URI" \ |
| 78 | >actual 2>err && |
| 79 | |
| 80 | # Server responded using protocol v2 |
| 81 | test_grep "< version 2" log && |
| 82 | |
| 83 | # Server advertised bundle-uri capability |
| 84 | test_grep "< bundle-uri" log |
| 85 | ' |
| 86 | |
| 87 | test_expect_success "clone with $BUNDLE_URI_PROTOCOL:// using protocol v2: request bundle-uris" ' |
| 88 | test_when_finished "rm -rf log* cloned*" && |
| 89 | |
| 90 | GIT_TRACE_PACKET="$PWD/log" \ |
| 91 | git \ |
| 92 | -c transfer.bundleURI=false \ |
| 93 | -c protocol.version=2 \ |
| 94 | clone "$BUNDLE_URI_REPO_URI" cloned \ |
| 95 | >actual 2>err && |
| 96 | |
| 97 | # Server responded using protocol v2 |
| 98 | test_grep "< version 2" log && |
| 99 | |
| 100 | # Server advertised bundle-uri capability |
| 101 | test_grep "< bundle-uri" log && |
| 102 | |
| 103 | # Client did not issue bundle-uri command |
| 104 | test_grep ! "> command=bundle-uri" log && |
| 105 | |
| 106 | GIT_TRACE_PACKET="$PWD/log" \ |
| 107 | git \ |
| 108 | -c transfer.bundleURI=true \ |
| 109 | -c protocol.version=2 \ |
| 110 | clone "$BUNDLE_URI_REPO_URI" cloned2 \ |
| 111 | >actual 2>err && |
| 112 | |
| 113 | # Server responded using protocol v2 |
| 114 | test_grep "< version 2" log && |
| 115 | |
| 116 | # Server advertised bundle-uri capability |
| 117 | test_grep "< bundle-uri" log && |
| 118 | |
| 119 | # Client issued bundle-uri command |
| 120 | test_grep "> command=bundle-uri" log && |
| 121 | |
| 122 | GIT_TRACE_PACKET="$PWD/log3" \ |
| 123 | git \ |
| 124 | -c transfer.bundleURI=true \ |
| 125 | -c protocol.version=2 \ |
| 126 | clone --bundle-uri="$BUNDLE_URI_BUNDLE_URI" \ |
| 127 | "$BUNDLE_URI_REPO_URI" cloned3 \ |
| 128 | >actual 2>err && |
| 129 | |
| 130 | # Server responded using protocol v2 |
| 131 | test_grep "< version 2" log3 && |
| 132 | |
| 133 | # Server advertised bundle-uri capability |
| 134 | test_grep "< bundle-uri" log3 && |
| 135 | |
| 136 | # Client did not issue bundle-uri command (--bundle-uri override) |
| 137 | test_grep ! "> command=bundle-uri" log3 |
| 138 | ' |
| 139 | |
| 140 | # The remaining tests will all assume transfer.bundleURI=true |
| 141 | # |
| 142 | # This test can be removed when transfer.bundleURI is enabled by default. |
| 143 | test_expect_success 'enable transfer.bundleURI for remaining tests' ' |
| 144 | git config --global transfer.bundleURI true |
| 145 | ' |
| 146 | |
| 147 | test_expect_success "test bundle-uri with $BUNDLE_URI_PROTOCOL:// using protocol v2" ' |
| 148 | test_config -C "$BUNDLE_URI_PARENT" \ |
| 149 | bundle.only.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED" && |
| 150 | |
| 151 | # All data about bundle URIs |
| 152 | cat >expect <<-EOF && |
| 153 | [bundle] |
| 154 | version = 1 |
| 155 | mode = all |
| 156 | [bundle "only"] |
| 157 | uri = $BUNDLE_URI_BUNDLE_URI_ESCAPED |
| 158 | EOF |
| 159 | |
| 160 | test-tool bundle-uri \ |
| 161 | ls-remote \ |
| 162 | "$BUNDLE_URI_REPO_URI" \ |
| 163 | >actual && |
| 164 | test_cmp_config_output expect actual |
| 165 | ' |
| 166 | |
| 167 | test_expect_success "test bundle-uri with $BUNDLE_URI_PROTOCOL:// using protocol v2 and extra data" ' |
| 168 | test_config -C "$BUNDLE_URI_PARENT" \ |
| 169 | bundle.only.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED" && |
| 170 | |
| 171 | # Extra data should be ignored |
| 172 | test_config -C "$BUNDLE_URI_PARENT" bundle.only.extra bogus && |
| 173 | |
| 174 | # All data about bundle URIs |
| 175 | cat >expect <<-EOF && |
| 176 | [bundle] |
| 177 | version = 1 |
| 178 | mode = all |
| 179 | [bundle "only"] |
| 180 | uri = $BUNDLE_URI_BUNDLE_URI_ESCAPED |
| 181 | EOF |
| 182 | |
| 183 | test-tool bundle-uri \ |
| 184 | ls-remote \ |
| 185 | "$BUNDLE_URI_REPO_URI" \ |
| 186 | >actual && |
| 187 | test_cmp_config_output expect actual |
| 188 | ' |
| 189 | |
| 190 | test_expect_success "test bundle-uri with $BUNDLE_URI_PROTOCOL:// using protocol v2 with list" ' |
| 191 | test_config -C "$BUNDLE_URI_PARENT" \ |
| 192 | bundle.bundle1.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED-1.bdl" && |
| 193 | test_config -C "$BUNDLE_URI_PARENT" \ |
| 194 | bundle.bundle2.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED-2.bdl" && |
| 195 | test_config -C "$BUNDLE_URI_PARENT" \ |
| 196 | bundle.bundle3.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED-3.bdl" && |
| 197 | |
| 198 | # All data about bundle URIs |
| 199 | cat >expect <<-EOF && |
| 200 | [bundle] |
| 201 | version = 1 |
| 202 | mode = all |
| 203 | [bundle "bundle1"] |
| 204 | uri = $BUNDLE_URI_BUNDLE_URI_ESCAPED-1.bdl |
| 205 | [bundle "bundle2"] |
| 206 | uri = $BUNDLE_URI_BUNDLE_URI_ESCAPED-2.bdl |
| 207 | [bundle "bundle3"] |
| 208 | uri = $BUNDLE_URI_BUNDLE_URI_ESCAPED-3.bdl |
| 209 | EOF |
| 210 | |
| 211 | test-tool bundle-uri \ |
| 212 | ls-remote \ |
| 213 | "$BUNDLE_URI_REPO_URI" \ |
| 214 | >actual && |
| 215 | test_cmp_config_output expect actual |
| 216 | ' |
| 217 | |
| 218 | test_expect_success "test bundle-uri with $BUNDLE_URI_PROTOCOL:// using protocol v2 with empty value" ' |
| 219 | test_config -C "$BUNDLE_URI_PARENT" \ |
| 220 | bundle.bundle1.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED-1.bdl" && |
| 221 | test_config -C "$BUNDLE_URI_PARENT" \ |
| 222 | bundle.bundle2.uri "" && |
| 223 | |
| 224 | # The empty bundle.bundle2.uri value is invalid configuration and the |
| 225 | # server must not advertise it to the client. |
| 226 | cat >expect <<-EOF && |
| 227 | [bundle] |
| 228 | version = 1 |
| 229 | mode = all |
| 230 | [bundle "bundle1"] |
| 231 | uri = $BUNDLE_URI_BUNDLE_URI_ESCAPED-1.bdl |
| 232 | EOF |
| 233 | |
| 234 | test-tool bundle-uri \ |
| 235 | ls-remote \ |
| 236 | "$BUNDLE_URI_REPO_URI" \ |
| 237 | >actual && |
| 238 | test_cmp_config_output expect actual |
| 239 | ' |