diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2025-05-30 14:33:01 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2025-05-30 17:27:07 +0200 |
commit | 39f0445a99cbb1256c531f8ec827aea424e328c3 (patch) | |
tree | b50fbf77522481fdcdaa3e94817257bba7b48c78 /test | |
parent | 7208a562340074935a9cd119569d8007b6897777 (diff) | |
download | justbuild-39f0445a99cbb1256c531f8ec827aea424e328c3.tar.gz |
Add test verifying that serve can handle deep trees
Add a test testing the serve instance implicit to the "with serve"
rule by asking it to build a target that creates an export target
where the output is a deep tree.
Diffstat (limited to 'test')
-rw-r--r-- | test/end-to-end/serve-service/TARGETS | 17 | ||||
-rw-r--r-- | test/end-to-end/serve-service/data/deep-output.py | 28 | ||||
-rw-r--r-- | test/end-to-end/serve-service/data/targets/TARGETS.deep | 14 | ||||
-rw-r--r-- | test/end-to-end/serve-service/deep-tree.sh | 92 |
4 files changed, 151 insertions, 0 deletions
diff --git a/test/end-to-end/serve-service/TARGETS b/test/end-to-end/serve-service/TARGETS index f31720a6..5cdc24ce 100644 --- a/test/end-to-end/serve-service/TARGETS +++ b/test/end-to-end/serve-service/TARGETS @@ -147,6 +147,22 @@ , "repos": ["failure-report (data)"] , "keep": ["out/log", "out/serve.log", "out/failure.log"] } +, "deep tree (data)": + { "type": "install" + , "files": + { "ROOT": "data/ROOT" + , "TARGETS": "data/targets/TARGETS.deep" + , "deep-output.py": "data/deep-output.py" + } + } +, "deep tree": + { "type": ["end-to-end", "with serve"] + , "name": ["deep-tree"] + , "test": ["deep-tree.sh"] + , "deps": [["", "mr-tool-under-test"], ["", "tool-under-test"]] + , "repos": ["deep tree (data)"] + , "keep-dirs": ["out"] + } , "interruption-test (data)": { "type": "install" , "files": {"ROOT": "data/ROOT", "TARGETS": "data/targets/TARGETS.slow"} @@ -202,6 +218,7 @@ , "stage": ["serve-service"] , "deps": [ "deduplication-of-serve-requests" + , "deep tree" , "describe" , "failure-report" , "interruption-test" diff --git a/test/end-to-end/serve-service/data/deep-output.py b/test/end-to-end/serve-service/data/deep-output.py new file mode 100644 index 00000000..8acd9967 --- /dev/null +++ b/test/end-to-end/serve-service/data/deep-output.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +# Copyright 2025 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. + +import os +import sys + +outname = sys.argv[1] +depth = int(sys.argv[2]) + +outpath = os.path.join(outname, *(["x"] * depth)) + +os.makedirs(outpath) + +for i in range(10): + with open(os.path.join(outpath, "data%d.txt" % (i,)), "w") as f: + f.write("%d" % (i,)) diff --git a/test/end-to-end/serve-service/data/targets/TARGETS.deep b/test/end-to-end/serve-service/data/targets/TARGETS.deep new file mode 100644 index 00000000..0d8a8369 --- /dev/null +++ b/test/end-to-end/serve-service/data/targets/TARGETS.deep @@ -0,0 +1,14 @@ +{ "": {"type": "export", "target": "deep", "flexible_config": ["DEPTH"]} +, "deep": + { "type": "generic" + , "arguments_config": ["DEPTH"] + , "deps": ["deep-output.py"] + , "out_dirs": ["out"] + , "cmds": + [ { "type": "join_cmd" + , "$1": + ["python3", "deep-output.py", "out", {"type": "var", "name": "DEPTH"}] + } + ] + } +} diff --git a/test/end-to-end/serve-service/deep-tree.sh b/test/end-to-end/serve-service/deep-tree.sh new file mode 100644 index 00000000..1b150d6c --- /dev/null +++ b/test/end-to-end/serve-service/deep-tree.sh @@ -0,0 +1,92 @@ +#!/bin/sh +# Copyright 2025 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 + +env + +readonly JUST="${PWD}/bin/tool-under-test" +readonly JUST_MR="${PWD}/bin/mr-tool-under-test" +readonly LBRA="${TEST_TMPDIR}/local-build-root-a" +readonly LBRB="${TEST_TMPDIR}/local-build-root-b" +readonly LBRC="${TEST_TMPDIR}/local-build-root-c" +readonly OUT="${PWD}/out" +mkdir -p "${OUT}" + + +COMPAT="" +if [ "${COMPATIBLE:-}" = "YES" ]; then + COMPAT="--compatible" +fi + +mkdir work +cd work +touch ROOT + +cat > repos.json <<EOF +{ "repositories": + { "": + { "repository": + { "type": "git" + , "commit": "$COMMIT_0" + , "pragma": {"absent": true} + , "repository": "http://non-existent.example.org/data.git" + , "branch": "master" + , "subdir": "." + } + } + } +} +EOF + +"${JUST_MR}" --norc --local-build-root "${LBRA}" \ + --remote-serve-address ${SERVE} \ + -f "${OUT}/build.log" \ + -r ${REMOTE_EXECUTION_ADDRESS} ${COMPAT} \ + --just "${JUST}" \ + install --remember -o "${OUT}/result" \ + -D '{"DEPTH": "900"}' \ + --dump-artifacts artifacts.json \ + 2>&1 + +# Santity check: we find data2.txt and verify the content +find "${OUT}/result" -name data2.txt 2>&1 +grep 2 $(find "${OUT}/result" -name data2.txt) + + +# Verify that the deep tree can also be handled by install-cas +# with and without the --remember option +cat artifacts.json +echo + +"${JUST_MR}" --norc --local-build-root "${LBRB}" \ + -r ${REMOTE_EXECUTION_ADDRESS} ${COMPAT} \ + --just "${JUST}" \ + install-cas --remember -o "${OUT}/first-copy" \ + $(jq -r '."'"${OUT}/result/out"'".id' artifacts.json)::t \ + 2>&1 + +"${JUST_MR}" --norc --local-build-root "${LBRC}" \ + -r ${REMOTE_EXECUTION_ADDRESS} ${COMPAT} \ + --just "${JUST}" \ + install-cas -o "${OUT}/second-copy" \ + $(jq -r '."'"${OUT}/result/out"'".id' artifacts.json)::t \ + 2>&1 + +# sanity check of the copies +grep 2 $(find "${OUT}/first-copy" -name data2.txt) +grep 2 $(find "${OUT}/second-copy" -name data2.txt) + +echo OK |