diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-12-05 17:07:05 +0100 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-12-07 10:00:12 +0100 |
commit | 17ec110944f812830bb3eaee97d8b6bd2f1fcd45 (patch) | |
tree | c07329bd0118efdc15e2eaddf93bd2aa8ac073da /test | |
parent | 8d1c18466e597c110b1a48198b38df6df697508d (diff) | |
download | justbuild-17ec110944f812830bb3eaee97d8b6bd2f1fcd45.tar.gz |
test: Check 'git tree' fetch from remote execution and --backup-to-remote
Diffstat (limited to 'test')
-rw-r--r-- | test/end-to-end/just-mr/TARGETS | 8 | ||||
-rw-r--r-- | test/end-to-end/just-mr/fetch-remote-git-tree.sh | 109 |
2 files changed, 117 insertions, 0 deletions
diff --git a/test/end-to-end/just-mr/TARGETS b/test/end-to-end/just-mr/TARGETS index e9a4d20b..f067acdb 100644 --- a/test/end-to-end/just-mr/TARGETS +++ b/test/end-to-end/just-mr/TARGETS @@ -83,6 +83,13 @@ , "test": ["fetch-remote.sh"] , "deps": [["end-to-end", "mr-tool-under-test"]] } +, "fetch-remote-git-tree": + { "type": ["end-to-end", "with remote"] + , "name": ["fetch-remote-git-tree"] + , "test": ["fetch-remote-git-tree.sh"] + , "deps": + [["end-to-end", "mr-tool-under-test"], ["end-to-end", "tool-under-test"]] + } , "absent-roots": { "type": ["@", "rules", "shell/test", "script"] , "name": ["absent-roots"] @@ -191,6 +198,7 @@ , "then": [] , "else": [ "fetch-remote" + , "fetch-remote-git-tree" , "fetch-absent" , "absent-config" , "fetch-absent-archives" diff --git a/test/end-to-end/just-mr/fetch-remote-git-tree.sh b/test/end-to-end/just-mr/fetch-remote-git-tree.sh new file mode 100644 index 00000000..ffacbcc8 --- /dev/null +++ b/test/end-to-end/just-mr/fetch-remote-git-tree.sh @@ -0,0 +1,109 @@ +#!/bin/sh +# Copyright 2023 Huawei Cloud Computing Technology Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +set -eu + +readonly JUST="${PWD}/bin/tool-under-test" +readonly JUST_MR="${PWD}/bin/mr-tool-under-test" +readonly LBR="${TEST_TMPDIR}/local-build-root" +readonly LOCAL_TMPDIR="${TEST_TMPDIR}/local-tmpdir" +readonly INSTALL_DIR="${TEST_TMPDIR}/install-dir" + +# A standard remote-execution server is given by the test infrastructure +REMOTE_EXECUTION_ARGS="-r ${REMOTE_EXECUTION_ADDRESS}" + +# Set up folder +mkdir -p bin +cat > bin/mock-tree <<EOF +#!/bin/sh +mkdir -p foo/bar +echo "test data" > foo/bar/data.txt +EOF +chmod 755 bin/mock-tree +export PATH="${PWD}/bin:${PATH}" + +# get the tree identifier +mkdir -p work +( cd work + mock-tree + git init + git config user.email "nobody@example.org" + git config user.name "Nobody" + git add -f . + git commit -m "Sample output" 2>&1 +) +readonly TREE_ID=$(cd work && git log -n 1 --format='%T') +rm -rf work +echo "dir as tree ${TREE_ID}" + +# Setup sample repository config +touch ROOT +cat > repos.json <<EOF +{ "repositories": + { "": + { "repository": + { "type": "git tree" + , "id": "${TREE_ID}" + , "cmd": ["mock-tree"] + , "inherit env": ["PATH"] + } + } + } +} +EOF +cat repos.json + +# Fetch while backing up to remote +"${JUST_MR}" --norc --local-build-root "${LBR}" \ + ${REMOTE_EXECUTION_ARGS} fetch -o "${LOCAL_TMPDIR}" \ + --backup-to-remote 2>&1 + +# Check that tree was fetched +"${JUST}" install-cas --local-build-root "${LBR}" -o "${INSTALL_DIR}" \ + "${TREE_ID}::t" 2>&1 +test "$(cat "${INSTALL_DIR}/foo/bar/data.txt")" = "test data" + +# Clean build root and dirs +rm -rf "${LBR}" +rm -rf "${LOCAL_TMPDIR}" +rm -rf "${INSTALL_DIR}" + +# Now remove the generating script from the repository description +cat > repos.json <<EOF +{ "repositories": + { "": + { "repository": + { "type": "git tree" + , "id": "${TREE_ID}" + , "cmd": ["non_existent_script.sh"] + } + } + } +} +EOF +cat repos.json + +# Fetch using only the remote backup +"${JUST_MR}" --norc --local-build-root "${LBR}" \ + ${REMOTE_EXECUTION_ARGS} fetch -o "${LOCAL_TMPDIR}" 2>&1 + +# Check that tree was fetched +"${JUST}" install-cas --local-build-root "${LBR}" -o "${INSTALL_DIR}" \ + "${TREE_ID}::t" 2>&1 +test "$(cat "${INSTALL_DIR}/foo/bar/data.txt")" = "test data" + + +echo OK |