Skip to content

Commit e10c615

Browse files
jeffhostetlerdscho
authored andcommitted
t5799: add unit tests for new gvfs.fallback config setting
Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
1 parent 5985486 commit e10c615

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

t/t5799-gvfs-helper.sh

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,12 @@ test_set_port GIT_TEST_GVFS_PROTOCOL_PORT
2424
# actually use it). We are only testing explicit object
2525
# fetching using gvfs-helper.exe in isolation.
2626
#
27+
# repo_t2:
28+
# Another empty repo to use after we contaminate t1.
29+
#
2730
REPO_SRC="$(pwd)"/repo_src
2831
REPO_T1="$(pwd)"/repo_t1
32+
REPO_T2="$(pwd)"/repo_t2
2933

3034
# Setup some loopback URLs where test-gvfs-protocol.exe will be
3135
# listening. We will spawn it directly inside the repo_src directory,
@@ -45,6 +49,7 @@ ORIGIN_URL=http://$HOST_PORT/servertype/origin
4549
CACHE_URL=http://$HOST_PORT/servertype/cache
4650

4751
SHARED_CACHE_T1="$(pwd)"/shared_cache_t1
52+
SHARED_CACHE_T2="$(pwd)"/shared_cache_t2
4853

4954
# The pid-file is created by test-gvfs-protocol.exe when it starts.
5055
# The server will shut down if/when we delete it. (This is a little
@@ -182,6 +187,10 @@ test_expect_success 'setup repos' '
182187
mkdir "$SHARED_CACHE_T1/pack" &&
183188
mkdir "$SHARED_CACHE_T1/info" &&
184189
#
190+
mkdir "$SHARED_CACHE_T2" &&
191+
mkdir "$SHARED_CACHE_T2/pack" &&
192+
mkdir "$SHARED_CACHE_T2/info" &&
193+
#
185194
# setup repo_t1 and point all of the gvfs.* values to repo_src.
186195
#
187196
test_create_repo "$REPO_T1" &&
@@ -191,6 +200,13 @@ test_expect_success 'setup repos' '
191200
git -C "$REPO_T1" config --local gvfs.sharedCache "$SHARED_CACHE_T1" &&
192201
echo "$SHARED_CACHE_T1" >> "$REPO_T1"/.git/objects/info/alternates &&
193202
#
203+
test_create_repo "$REPO_T2" &&
204+
git -C "$REPO_T2" branch -M main &&
205+
git -C "$REPO_T2" remote add origin $ORIGIN_URL &&
206+
git -C "$REPO_T2" config --local gvfs.cache-server $CACHE_URL &&
207+
git -C "$REPO_T2" config --local gvfs.sharedCache "$SHARED_CACHE_T2" &&
208+
echo "$SHARED_CACHE_T2" >> "$REPO_T2"/.git/objects/info/alternates &&
209+
#
194210
#
195211
#
196212
cat <<-EOF >creds.txt &&
@@ -203,6 +219,7 @@ test_expect_success 'setup repos' '
203219
EOF
204220
chmod 755 creds.sh &&
205221
git -C "$REPO_T1" config --local credential.helper "!f() { cat \"$(pwd)\"/creds.txt; }; f" &&
222+
git -C "$REPO_T2" config --local credential.helper "!f() { cat \"$(pwd)\"/creds.txt; }; f" &&
206223
#
207224
# Create some test data sets.
208225
#
@@ -1257,6 +1274,87 @@ test_expect_success 'integration: fully implicit: diff 2 commits' '
12571274
>OUT.output 2>OUT.stderr
12581275
'
12591276

1277+
# T1 should be considered contaminated at this point.
1278+
1279+
#################################################################
1280+
# gvfs-helper.exe defaults to no fallback.
1281+
# gvfs-helper-client.c defaults to adding `--fallback` to child process.
1282+
#
1283+
# `gvfs.fallback` was added to change the default behavior in the
1284+
# gvfs-helper-client.c code to add either `--fallback` or `--no-fallback`
1285+
# (for origin server load reasons).
1286+
#
1287+
# When `gvfs.fallback` is unset, we default to TRUE and pass `--fallback`.
1288+
# Otherwise, we use the boolean value to decide.
1289+
#
1290+
# NOTE: We DO NOT attempt to count connection requests in the
1291+
# following tests. Since we are using a normal `git` command to drive
1292+
# the `gvfs-helper-client.c` code (and spawn `git-gvfs-helper.exe`) we
1293+
# cannot make assumptions on the number of child processes or
1294+
# reqeusts. The "promisor" logic may drive one or more single-item
1295+
# GETs or a series of bulk POST attempts. Therefore, we must rely
1296+
# only on the result of the command and (implicitly) whether all
1297+
# missing objects were resolved. We use mayhem features to selectively
1298+
# break the cache and origin servers.
1299+
#################################################################
1300+
1301+
test_expect_success 'integration: implicit-get: http_503: diff 2 commits' '
1302+
test_when_finished "per_test_cleanup" &&
1303+
1304+
# Tell both servers to always send 503.
1305+
start_gvfs_protocol_server_with_mayhem http_503 &&
1306+
1307+
# Implicitly demand-load everything without any pre-seeding.
1308+
# (We cannot tell from whether fallback was used or not in this
1309+
# limited test.)
1310+
#
1311+
test_must_fail \
1312+
git -C "$REPO_T2" -c core.useGVFSHelper=true \
1313+
diff $(cat m1.branch)..$(cat m3.branch) \
1314+
>OUT.output 2>OUT.stderr &&
1315+
1316+
stop_gvfs_protocol_server
1317+
'
1318+
1319+
test_expect_success 'integration: implicit-get: cache_http_503,no-fallback: diff 2 commits' '
1320+
test_when_finished "per_test_cleanup" &&
1321+
1322+
# Tell cache server to send 503 and origin server to send 200.
1323+
start_gvfs_protocol_server_with_mayhem cache_http_503 &&
1324+
1325+
# Implicitly demand-load everything without any pre-seeding.
1326+
# This should fail because we do not allow fallback.
1327+
#
1328+
test_must_fail \
1329+
git -C "$REPO_T2" \
1330+
-c core.useGVFSHelper=true \
1331+
-c gvfs.fallback=false \
1332+
diff $(cat m1.branch)..$(cat m3.branch) \
1333+
>OUT.output 2>OUT.stderr &&
1334+
1335+
stop_gvfs_protocol_server
1336+
'
1337+
1338+
test_expect_success 'integration: implicit-get: cache_http_503,with-fallback: diff 2 commits' '
1339+
test_when_finished "per_test_cleanup" &&
1340+
1341+
# Tell cache server to send 503 and origin server to send 200.
1342+
start_gvfs_protocol_server_with_mayhem cache_http_503 &&
1343+
1344+
# Implicitly demand-load everything without any pre-seeding.
1345+
#
1346+
git -C "$REPO_T2" \
1347+
-c core.useGVFSHelper=true \
1348+
-c gvfs.fallback=true \
1349+
diff $(cat m1.branch)..$(cat m3.branch) \
1350+
>OUT.output 2>OUT.stderr &&
1351+
1352+
stop_gvfs_protocol_server
1353+
'
1354+
1355+
# T2 should be considered contaminated at this point.
1356+
1357+
12601358
#################################################################
12611359
# Duplicate packfile tests.
12621360
#

0 commit comments

Comments
 (0)