1321b82a77
We're going to use the urlify function in other places, so let's move it to some shared code in the generic test helper file.
474 lines
14 KiB
Bash
Executable File
474 lines
14 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
. "$(dirname "$0")/testlib.sh"
|
|
|
|
do_upload_download_test () {
|
|
git lfs track "*.dat" 2>&1 | tee track.log
|
|
grep "Tracking \"\*.dat\"" track.log
|
|
git add .gitattributes
|
|
git commit -m "Tracking"
|
|
|
|
git checkout -b test
|
|
|
|
# set up a decent amount of data so that there's work for multiple concurrent adapters
|
|
echo "[
|
|
{
|
|
\"CommitDate\":\"$(get_date -10d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"},
|
|
{\"Filename\":\"file1.dat\",\"Size\":1024},
|
|
{\"Filename\":\"file2.dat\",\"Size\":750}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -7d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file1.dat\",\"Size\":1050},
|
|
{\"Filename\":\"file3.dat\",\"Size\":660},
|
|
{\"Filename\":\"file4.dat\",\"Size\":230}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -5d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file5.dat\",\"Size\":1200},
|
|
{\"Filename\":\"file6.dat\",\"Size\":300}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -2d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file3.dat\",\"Size\":120},
|
|
{\"Filename\":\"file5.dat\",\"Size\":450},
|
|
{\"Filename\":\"file7.dat\",\"Size\":520},
|
|
{\"Filename\":\"file8.dat\",\"Size\":2048}]
|
|
}
|
|
]" | lfstest-testutils addcommits
|
|
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin test 2>&1 | tee pushcustom.log
|
|
# use PIPESTATUS otherwise we get exit code from tee
|
|
[ ${PIPESTATUS[0]} = "0" ]
|
|
|
|
ourobjects=$(cd .git && find lfs/objects -type f | sort)
|
|
theirobjects=$(cd $gitdir && find lfs/objects -type f | sort)
|
|
|
|
# Make sure the lock verification is not attempted.
|
|
grep "locks/verify$" pushcustom.log && false
|
|
|
|
grep "xfer: started custom adapter process" pushcustom.log
|
|
grep "Uploading LFS objects: 100% (12/12)" pushcustom.log
|
|
[ "$ourobjects" = "$theirobjects" ]
|
|
|
|
rm -rf .git/lfs/objects
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetchcustom.log
|
|
[ ${PIPESTATUS[0]} = "0" ]
|
|
|
|
objectlist=$(find .git/lfs/objects -type f)
|
|
[ "$(echo "$objectlist" | wc -l)" -eq 12 ]
|
|
}
|
|
|
|
begin_test "standalone-file-upload-download-bare"
|
|
(
|
|
set -e
|
|
|
|
# setup a git repo to be used as a local repo, not remote
|
|
reponame="standalone-file-upload-download-bare"
|
|
setup_remote_repo "$reponame"
|
|
|
|
git init --bare "$reponame-2.git"
|
|
gitdir="$(pwd)/$reponame-2.git"
|
|
|
|
# clone directly, not through lfstest-gitserver
|
|
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
|
|
|
|
git remote set-url origin "file://$(urlify "$gitdir")"
|
|
|
|
do_upload_download_test
|
|
)
|
|
end_test
|
|
|
|
begin_test "standalone-file-upload-download-non-bare"
|
|
(
|
|
set -e
|
|
|
|
# setup a git repo to be used as a local repo, not remote
|
|
reponame="standalone-file-upload-download-non-bare"
|
|
setup_remote_repo "$reponame"
|
|
|
|
git init "$reponame-2.git"
|
|
repo2="$(pwd)/$reponame-2.git"
|
|
gitdir="$(pwd)/$reponame-2.git/.git"
|
|
|
|
# clone directly, not through lfstest-gitserver
|
|
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
|
|
|
|
git remote set-url origin "file://$(urlify "$repo2")"
|
|
|
|
do_upload_download_test
|
|
)
|
|
end_test
|
|
|
|
begin_test "standalone-file-download-missing-file"
|
|
(
|
|
set -e
|
|
|
|
# setup a git repo to be used as a local repo, not remote
|
|
reponame="standalone-file-download-missing-file"
|
|
setup_remote_repo "$reponame"
|
|
|
|
otherrepo="$(pwd)/$reponame-2.git"
|
|
git init --bare "$otherrepo"
|
|
|
|
# clone directly, not through lfstest-gitserver
|
|
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
|
|
|
|
git remote set-url origin "file://$(urlify "$otherrepo")"
|
|
|
|
git lfs track "*.dat" 2>&1 | tee track.log
|
|
grep "Tracking \"\*.dat\"" track.log
|
|
git add .gitattributes
|
|
git commit -m "Tracking"
|
|
|
|
git checkout -b test
|
|
|
|
# set up a decent amount of data so that there's work for multiple concurrent adapters
|
|
echo "[
|
|
{
|
|
\"CommitDate\":\"$(get_date -10d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"},
|
|
{\"Filename\":\"file1.dat\",\"Size\":1024},
|
|
{\"Filename\":\"file2.dat\",\"Size\":750}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -7d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file1.dat\",\"Size\":1050},
|
|
{\"Filename\":\"file3.dat\",\"Size\":660},
|
|
{\"Filename\":\"file4.dat\",\"Size\":230}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -5d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file5.dat\",\"Size\":1200},
|
|
{\"Filename\":\"file6.dat\",\"Size\":300}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -2d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file3.dat\",\"Size\":120},
|
|
{\"Filename\":\"file5.dat\",\"Size\":450},
|
|
{\"Filename\":\"file7.dat\",\"Size\":520},
|
|
{\"Filename\":\"file8.dat\",\"Size\":2048}]
|
|
}
|
|
]" | lfstest-testutils addcommits
|
|
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin test 2>&1 | tee pushcustom.log
|
|
# use PIPESTATUS otherwise we get exit code from tee
|
|
[ ${PIPESTATUS[0]} = "0" ]
|
|
|
|
# Make sure the lock verification is not attempted.
|
|
grep "locks/verify$" pushcustom.log && false
|
|
|
|
grep "xfer: started custom adapter process" pushcustom.log
|
|
grep "Uploading LFS objects: 100% (12/12)" pushcustom.log
|
|
|
|
# Delete an object from the remote side. Any object will do.
|
|
rm -f $(find "$otherrepo/lfs/objects" -type f | head -n1)
|
|
|
|
rm -rf .git/lfs/objects
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetchcustom.log
|
|
# Make sure we failed.
|
|
[ ${PIPESTATUS[0]} != "0" ]
|
|
|
|
# Make sure we downloaded the rest of the objects.
|
|
objectlist=$(find .git/lfs/objects -type f)
|
|
[ "$(echo "$objectlist" | wc -l)" -eq 11 ]
|
|
)
|
|
end_test
|
|
|
|
begin_test "standalone-file-clone"
|
|
(
|
|
set -e
|
|
|
|
# setup a git repo to be used as a local repo, not remote
|
|
reponame="standalone-file-clone"
|
|
setup_remote_repo "$reponame"
|
|
|
|
# clone directly, not through lfstest-gitserver
|
|
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
|
|
|
|
git lfs track "*.dat" 2>&1 | tee track.log
|
|
grep "Tracking \"\*.dat\"" track.log
|
|
git add .gitattributes
|
|
git commit -m "Tracking"
|
|
|
|
git checkout -b test
|
|
|
|
# set up a decent amount of data so that there's work for multiple concurrent adapters
|
|
echo "[
|
|
{
|
|
\"CommitDate\":\"$(get_date -10d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"},
|
|
{\"Filename\":\"file1.dat\",\"Size\":1024},
|
|
{\"Filename\":\"file2.dat\",\"Size\":750}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -7d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file1.dat\",\"Size\":1050},
|
|
{\"Filename\":\"file3.dat\",\"Size\":660},
|
|
{\"Filename\":\"file4.dat\",\"Size\":230}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -5d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file5.dat\",\"Size\":1200},
|
|
{\"Filename\":\"file6.dat\",\"Size\":300}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -2d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file3.dat\",\"Size\":120},
|
|
{\"Filename\":\"file5.dat\",\"Size\":450},
|
|
{\"Filename\":\"file7.dat\",\"Size\":520},
|
|
{\"Filename\":\"file8.dat\",\"Size\":2048}]
|
|
}
|
|
]" | lfstest-testutils addcommits
|
|
|
|
testdir="$(pwd)"
|
|
|
|
cd "$TRASHDIR"
|
|
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git clone "file://$(urlify "$testdir")" repo3 2>&1 | tee clonecustom.log
|
|
|
|
grep "xfer: started custom adapter process" clonecustom.log
|
|
)
|
|
end_test
|
|
|
|
begin_test "standalone-file-local-path"
|
|
(
|
|
set -e
|
|
|
|
# setup a git repo to be used as a local repo, not remote
|
|
reponame="standalone-file-local-path"
|
|
setup_remote_repo "$reponame"
|
|
|
|
# clone directly, not through lfstest-gitserver
|
|
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
|
|
|
|
git lfs track "*.dat" 2>&1 | tee track.log
|
|
grep "Tracking \"\*.dat\"" track.log
|
|
git add .gitattributes
|
|
git commit -m "Tracking"
|
|
|
|
git checkout -b test
|
|
|
|
# set up a decent amount of data so that there's work for multiple concurrent adapters
|
|
echo "[
|
|
{
|
|
\"CommitDate\":\"$(get_date -10d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"},
|
|
{\"Filename\":\"file1.dat\",\"Size\":1024},
|
|
{\"Filename\":\"file2.dat\",\"Size\":750}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -7d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file1.dat\",\"Size\":1050},
|
|
{\"Filename\":\"file3.dat\",\"Size\":660},
|
|
{\"Filename\":\"file4.dat\",\"Size\":230}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -5d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file5.dat\",\"Size\":1200},
|
|
{\"Filename\":\"file6.dat\",\"Size\":300}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -2d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file3.dat\",\"Size\":120},
|
|
{\"Filename\":\"file5.dat\",\"Size\":450},
|
|
{\"Filename\":\"file7.dat\",\"Size\":520},
|
|
{\"Filename\":\"file8.dat\",\"Size\":2048}]
|
|
}
|
|
]" | lfstest-testutils addcommits
|
|
|
|
testdir="$(pwd)"
|
|
|
|
cd "$TRASHDIR"
|
|
|
|
# Check a clone using an absolute Unix-style path.
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git clone "$testdir" "$reponame-repo1" 2>&1 | tee clonecustom.log
|
|
(cd "$reponame-repo1" && git lfs fsck)
|
|
grep "xfer: started custom adapter process" clonecustom.log
|
|
|
|
# Check a clone using a relative path.
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git clone "$reponame-repo1" "$reponame-repo2" 2>&1 | tee clonecustom.log
|
|
(cd "$reponame-repo2" && git lfs fsck)
|
|
grep "xfer: started custom adapter process" clonecustom.log
|
|
|
|
# Check a clone using an absolute native-style path.
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git clone "$(native_path "$testdir")" "$reponame-repo3" 2>&1 | tee clonecustom.log
|
|
(cd "$reponame-repo3" && git lfs fsck)
|
|
grep "xfer: started custom adapter process" clonecustom.log
|
|
|
|
)
|
|
end_test
|
|
|
|
begin_test "standalone-file-lfs.url file URL"
|
|
(
|
|
set -e
|
|
|
|
# setup a git repo to be used as a local repo, not remote
|
|
reponame="standalone-file-lfsurl"
|
|
setup_remote_repo "$reponame"
|
|
|
|
# clone directly, not through lfstest-gitserver
|
|
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
|
|
|
|
otherrepo="$(pwd)/$reponame-2.git"
|
|
git init --bare "$otherrepo"
|
|
|
|
wrongrepo="$(pwd)/$reponame-3.git"
|
|
git init --bare "$wrongrepo"
|
|
|
|
git remote set-url origin "file://$(urlify "$wrongrepo")"
|
|
git config lfs.url "file://$(urlify "$otherrepo")"
|
|
|
|
git lfs track "*.dat" 2>&1 | tee track.log
|
|
grep "Tracking \"\*.dat\"" track.log
|
|
git add .gitattributes
|
|
git commit -m "Tracking"
|
|
|
|
git checkout -b test
|
|
|
|
# set up a decent amount of data so that there's work for multiple concurrent adapters
|
|
echo "[
|
|
{
|
|
\"CommitDate\":\"$(get_date -10d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"},
|
|
{\"Filename\":\"file1.dat\",\"Size\":1024},
|
|
{\"Filename\":\"file2.dat\",\"Size\":750}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -7d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file1.dat\",\"Size\":1050},
|
|
{\"Filename\":\"file3.dat\",\"Size\":660},
|
|
{\"Filename\":\"file4.dat\",\"Size\":230}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -5d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file5.dat\",\"Size\":1200},
|
|
{\"Filename\":\"file6.dat\",\"Size\":300}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -2d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file3.dat\",\"Size\":120},
|
|
{\"Filename\":\"file5.dat\",\"Size\":450},
|
|
{\"Filename\":\"file7.dat\",\"Size\":520},
|
|
{\"Filename\":\"file8.dat\",\"Size\":2048}]
|
|
}
|
|
]" | lfstest-testutils addcommits
|
|
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin test 2>&1 | tee pushcustom.log
|
|
# use PIPESTATUS otherwise we get exit code from tee
|
|
[ ${PIPESTATUS[0]} = "0" ]
|
|
|
|
# Make sure the lock verification is not attempted.
|
|
grep "locks/verify$" pushcustom.log && false
|
|
|
|
grep "xfer: started custom adapter process" pushcustom.log
|
|
grep "Uploading LFS objects: 100% (12/12)" pushcustom.log
|
|
|
|
# Make sure we didn't write to the wrong repo.
|
|
objectlist=$(find "$wrongrepo/lfs/objects" -type f || true)
|
|
[ -z "$objectlist" ]
|
|
|
|
# Make sure we uploaded the expected number of objects.
|
|
objectlist=$(find "$otherrepo/lfs/objects" -type f || true)
|
|
[ "$(echo "$objectlist" | wc -l)" -eq 12 ]
|
|
)
|
|
end_test
|
|
|
|
begin_test "standalone-file-lfs.url http URL"
|
|
(
|
|
set -e
|
|
|
|
reponame="standalone-file-lfsurl-http"
|
|
setup_remote_repo "$reponame"
|
|
|
|
# clone directly, not through lfstest-gitserver
|
|
clone_repo "$reponame" "$reponame"
|
|
|
|
wrongrepo="$(pwd)/$reponame-2.git"
|
|
git init --bare "$wrongrepo"
|
|
|
|
git remote set-url origin "file://$(urlify "$wrongrepo")"
|
|
git config lfs.url "$(repo_endpoint "$GITSERVER" "$reponame")"
|
|
|
|
git lfs track "*.dat" 2>&1 | tee track.log
|
|
grep "Tracking \"\*.dat\"" track.log
|
|
git add .gitattributes
|
|
git commit -m "Tracking"
|
|
|
|
git checkout -b test
|
|
|
|
# set up a decent amount of data so that there's work for multiple concurrent adapters
|
|
echo "[
|
|
{
|
|
\"CommitDate\":\"$(get_date -10d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"},
|
|
{\"Filename\":\"file1.dat\",\"Size\":1024},
|
|
{\"Filename\":\"file2.dat\",\"Size\":750}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -7d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file1.dat\",\"Size\":1050},
|
|
{\"Filename\":\"file3.dat\",\"Size\":660},
|
|
{\"Filename\":\"file4.dat\",\"Size\":230}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -5d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file5.dat\",\"Size\":1200},
|
|
{\"Filename\":\"file6.dat\",\"Size\":300}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -2d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file3.dat\",\"Size\":120},
|
|
{\"Filename\":\"file5.dat\",\"Size\":450},
|
|
{\"Filename\":\"file7.dat\",\"Size\":520},
|
|
{\"Filename\":\"file8.dat\",\"Size\":2048}]
|
|
}
|
|
]" | lfstest-testutils addcommits
|
|
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin test 2>&1 | tee push.log
|
|
# use PIPESTATUS otherwise we get exit code from tee
|
|
[ ${PIPESTATUS[0]} = "0" ]
|
|
|
|
# We should not use the custom adapter process here.
|
|
! grep "xfer: started custom adapter process" push.log
|
|
grep -F "$GITSERVER/$reponame" push.log
|
|
|
|
# Make sure we didn't write to the wrong repo.
|
|
objectlist=$(find "$wrongrepo/lfs/objects" -type f || true)
|
|
[ -z "$objectlist" ]
|
|
|
|
rm -fr .git/lfs/objects
|
|
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetch.log
|
|
! grep "xfer: started custom adapter process" fetch.log
|
|
grep -F "$GITSERVER/$reponame" fetch.log
|
|
|
|
git lfs fsck
|
|
)
|
|
end_test
|