diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2022-12-23 15:34:10 +0100 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2022-12-23 17:08:12 +0100 |
commit | bac42ee6f84248309e082845e7ea835527cda39b (patch) | |
tree | 1e921f27c72d51ccf25bc07ca25acdef1e7d9856 | |
parent | e30f490bef55f0897bdf5ebf757324b181b4de42 (diff) | |
download | justbuild-bac42ee6f84248309e082845e7ea835527cda39b.tar.gz |
Test that just-mr does not rely on CAS
... and, instead, stores all needed information in git and
CAS-independent index files.
-rw-r--r-- | test/end-to-end/TARGETS | 1 | ||||
-rw-r--r-- | test/end-to-end/just-mr/TARGETS | 9 | ||||
-rw-r--r-- | test/end-to-end/just-mr/cas-independent.sh | 87 |
3 files changed, 97 insertions, 0 deletions
diff --git a/test/end-to-end/TARGETS b/test/end-to-end/TARGETS index 5eb95271..27a8c755 100644 --- a/test/end-to-end/TARGETS +++ b/test/end-to-end/TARGETS @@ -17,6 +17,7 @@ , [["./", "build-fails", "TESTS"], "build-fails"] , [["./", "remote-execution", "TESTS"], "remote-execution"] , [["./", "target-cache", "TESTS"], "target-cache"] + , [["./", "just-mr", "TESTS"], "just-mr"] ] } } diff --git a/test/end-to-end/just-mr/TARGETS b/test/end-to-end/just-mr/TARGETS new file mode 100644 index 00000000..db7b2621 --- /dev/null +++ b/test/end-to-end/just-mr/TARGETS @@ -0,0 +1,9 @@ +{ "cas-independent": + { "type": ["@", "rules", "shell/test", "script"] + , "name": ["cas-independent"] + , "test": ["cas-independent.sh"] + , "deps": [["test/end-to-end", "mr-tool-under-test"]] + } +, "TESTS": + {"type": "install", "tainted": ["test"], "deps": ["cas-independent"]} +} diff --git a/test/end-to-end/just-mr/cas-independent.sh b/test/end-to-end/just-mr/cas-independent.sh new file mode 100644 index 00000000..04e03687 --- /dev/null +++ b/test/end-to-end/just-mr/cas-independent.sh @@ -0,0 +1,87 @@ +#!/bin/sh +# Copyright 2022 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_MR="${PWD}/bin/mr-tool-under-test" +readonly DISTDIR="${TEST_TMPDIR}/distfiles" +readonly LBR="${TEST_TMPDIR}/local-build-root" + +mkdir -p "${DISTDIR}" +mkdir -p foo/bar/baz +echo "test data" > foo/bar/baz/data.txt +tar cf "${DISTDIR}/foo-1.2.3.tar" foo 2>&1 +foocontent=$(git hash-object "${DISTDIR}/foo-1.2.3.tar") +echo "Foo archive has content ${foocontent}" + +# get the tree identifier for later sanity check +cd foo +git init +git config user.name 'N.O.Body' +git config user.email 'nobody@example.org' +git add . +git commit -m 'Just care about the tree' 2>&1 +tree_id=$(git log -n 1 --format='%T') +cd .. +rm -rf foo +echo "foo as tree ${tree_id}" + +# Setup sample repository config +touch ROOT +cat > repos.json <<EOF +{ "repositories": + { "foo": + { "repository": + { "type": "archive" + , "content": "${foocontent}" + , "fetch": "http://non-existent.example.org/foo-1.2.3.tar" + , "subdir": "foo" + } + } + , "distdir": {"repository": {"type": "distdir", "repositories": ["foo"]}} + , "": + { "repository": {"type": "file", "path": "."} + , "bindings": {"foo": "foo", "distdir": "distdir"} + } + } +} +EOF +echo "Repository configuration:" +cat repos.json + + +# Call just-mr with distdir present +FIRST_CONFIG=$("${JUST_MR}" --local-build-root "${LBR}" --distdir "${DISTDIR}" setup) +echo "Config on first set (with everything available) ${FIRST_CONFIG}" +cat "${FIRST_CONFIG}" + +# sanity-check the config: foo has to have the correct git root +[ $(jq '."repositories"."foo"."workspace_root" | .[1]' "${FIRST_CONFIG}") = "\"${tree_id}\"" ] + +echo "First setup done successfully" + +# Remove CAS and distfiles +rm -rf "${LBR}/protocol-dependent" +ls -al "${LBR}" +rm -rf "${DISTDIR}" + +# Call just-mr again, with map-files and git prefilled from first run, +# but CAS and distdir missing. +SECOND_CONFIG=$("${JUST_MR}" --local-build-root "${LBR}" setup) +[ -f "${SECOND_CONFIG}" ] +[ "${FIRST_CONFIG}" = "${SECOND_CONFIG}" ] + +echo OK |