git-lfs/t/t-resume-http-range.sh
brian m. carlson 9e006ac4e2
Rename default branch in tests to "main"
Currently, our default branch in tests is "master".  This is the Git
default, but the Git default will likely change in the future, so it
makes sense to update our testsuite to be explicit about the branch
name.  We'll ensure this continues by building against older versions of
Git as well as newer versions.

We use "main" for the new branch name, since that's the proposed value
upstream.

This commit was made entirely by automated means using the following
command:

  git grep -l master t | xargs sed -i -e 's/master/main/g'
2020-07-08 15:38:17 +00:00

129 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
. "$(dirname "$0")/testlib.sh"
begin_test "resume-http-range"
(
set -e
reponame="$(basename "$0" ".sh")"
setup_remote_repo "$reponame"
clone_repo "$reponame" $reponame
git lfs track "*.dat" 2>&1 | tee track.log
grep "Tracking \"\*.dat\"" track.log
# this string announces to server that we want a test that
# interrupts the transfer when started from 0 to cause resume
contents="status-batch-resume-206"
contents_oid=$(calc_oid "$contents")
printf "%s" "$contents" > a.dat
git add a.dat
git add .gitattributes
git commit -m "add a.dat" 2>&1 | tee commit.log
git push origin main
assert_server_object "$reponame" "$contents_oid"
# delete local copy then fetch it back
# server will abort the transfer mid way (so will error) when not resuming
# then we can restart it
rm -rf .git/lfs/objects
git lfs fetch 2>&1 | tee fetchinterrupted.log
refute_local_object "$contents_oid"
# now fetch again, this should try to resume and server should send remainder
# this time (it does not cut short when Range is requested)
GIT_TRACE=1 git lfs fetch 2>&1 | tee fetchresume.log
grep "xfer: server accepted resume" fetchresume.log
assert_local_object "$contents_oid" "${#contents}"
)
end_test
begin_test "resume-http-range-fallback"
(
set -e
reponame="resume-http-range-fallback"
setup_remote_repo "$reponame"
clone_repo "$reponame" $reponame
git lfs track "*.dat" 2>&1 | tee track.log
grep "Tracking \"\*.dat\"" track.log
# this string announces to server that we want it to abort the download part
# way, but reject the Range: header and fall back on re-downloading instead
contents="batch-resume-fail-fallback"
contents_oid=$(calc_oid "$contents")
printf "%s" "$contents" > a.dat
git add a.dat
git add .gitattributes
git commit -m "add a.dat" 2>&1 | tee commit.log
git push origin main
assert_server_object "$reponame" "$contents_oid"
# delete local copy then fetch it back
# server will abort the transfer mid way (so will error) when not resuming
# then we can restart it
rm -rf .git/lfs/objects
git lfs fetch 2>&1 | tee fetchinterrupted.log
refute_local_object "$contents_oid"
# now fetch again, this should try to resume but server should reject the Range
# header, which should cause client to re-download
GIT_TRACE=1 git lfs fetch 2>&1 | tee fetchresumefallback.log
grep "xfer: server rejected resume" fetchresumefallback.log
# re-download should still have worked
assert_local_object "$contents_oid" "${#contents}"
)
end_test
begin_test "resume-http-range-retry"
(
set -e
reponame="resume-http-range-retry"
setup_remote_repo "$reponame"
clone_repo "$reponame" $reponame
git lfs track "*.dat" 2>&1 | tee track.log
grep "Tracking \"\*.dat\"" track.log
# This string announces to server that we want a test that strictly handles
# Range headers, rejecting any where the latter part of the range is smaller
# than the former part.
contents="status-batch-retry"
contents_oid=$(calc_oid "$contents")
printf "%s" "$contents" > a.dat
git add a.dat
git add .gitattributes
git commit -m "add a.dat" 2>&1 | tee commit.log
git push origin main
assert_server_object "$reponame" "$contents_oid"
# Delete local copy then fetch it back.
rm -rf .git/lfs/objects
refute_local_object "$contents_oid"
# Create a partial corrupt object.
mkdir .git/lfs/incomplete
printf "%s" "${contents/st/aa}" >".git/lfs/incomplete/$contents_oid.tmp"
# The first download may fail with an error; run a second time to make sure
# that we detect the corrupt file and retry.
GIT_TRACE=1 git lfs fetch 2>&1 | tee fetchresume.log
GIT_TRACE=1 git lfs fetch 2>&1 | tee fetchresume.log
assert_local_object "$contents_oid" "${#contents}"
)
end_test