diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-03-14 15:10:17 +0100 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-03-14 17:51:38 +0100 |
commit | 208e2af5b78167777f64864c209f0af6ad4d1ef7 (patch) | |
tree | 52a942a5b4fb8b574c02e9ca377f422191f2dc28 /test/end-to-end/serve-service | |
parent | 7c4af7b665b46e056bc5cbc0ce516322f2ccbc38 (diff) | |
download | justbuild-208e2af5b78167777f64864c209f0af6ad4d1ef7.tar.gz |
Add end-to-end test with serve building several targets
... simultaneously, in order to find race conditions during
the build.
Diffstat (limited to 'test/end-to-end/serve-service')
-rw-r--r-- | test/end-to-end/serve-service/TARGETS | 13 | ||||
-rw-r--r-- | test/end-to-end/serve-service/data/targets/TARGETS.transform | 21 | ||||
-rw-r--r-- | test/end-to-end/serve-service/serve_many_targets.sh | 101 |
3 files changed, 135 insertions, 0 deletions
diff --git a/test/end-to-end/serve-service/TARGETS b/test/end-to-end/serve-service/TARGETS index 17e83785..47f273ff 100644 --- a/test/end-to-end/serve-service/TARGETS +++ b/test/end-to-end/serve-service/TARGETS @@ -113,6 +113,18 @@ , "repos": ["describe (data)"] , "keep": ["out/describe.orig", "out/describe"] } +, "serve-many-targets (data)": + { "type": "install" + , "files": {"ROOT": "data/ROOT", "TARGETS": "data/targets/TARGETS.transform"} + } +, "serve-many-targets": + { "type": ["end-to-end", "with serve"] + , "name": ["serve-many-targets"] + , "test": ["serve_many_targets.sh"] + , "deps": + [["end-to-end", "tool-under-test"], ["end-to-end", "mr-tool-under-test"]] + , "repos": ["serve-many-targets (data)"] + } , "TESTS": { "type": "install" , "tainted": ["test"] @@ -122,6 +134,7 @@ , "$1": [ [ "serve-target-remote-build" , "serve-target-remote-build-dispatch" + , "serve-many-targets" , "serve-target-cache-hit" , "serve-start-execute" , "serve-start-execute-sharding" diff --git a/test/end-to-end/serve-service/data/targets/TARGETS.transform b/test/end-to-end/serve-service/data/targets/TARGETS.transform new file mode 100644 index 00000000..2a2d4ade --- /dev/null +++ b/test/end-to-end/serve-service/data/targets/TARGETS.transform @@ -0,0 +1,21 @@ +{ "": + {"type": "export", "target": "multiple, upper", "flexible_config": ["DATA"]} +, "blob": + { "type": "file_gen" + , "arguments_config": ["DATA"] + , "name": "data.orig" + , "data": {"type": "var", "name": "DATA"} + } +, "multiple": + { "type": "generic" + , "outs": ["data.tripple"] + , "cmds": ["cat data.orig data.orig data.orig > data.tripple"] + , "deps": ["blob"] + } +, "multiple, upper": + { "type": "generic" + , "outs": ["data.txt"] + , "cmds": ["cat data.tripple | tr a-z A-Z > data.txt"] + , "deps": ["multiple"] + } +} diff --git a/test/end-to-end/serve-service/serve_many_targets.sh b/test/end-to-end/serve-service/serve_many_targets.sh new file mode 100644 index 00000000..c5da4606 --- /dev/null +++ b/test/end-to-end/serve-service/serve_many_targets.sh @@ -0,0 +1,101 @@ +#!/bin/sh +# Copyright 2024 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 LBR="${TEST_TMPDIR}/local-build-root" +readonly OUT="${TEST_TMPDIR}/output-dir" + +COMPAT="" +if [ "${COMPATIBLE:-}" = "YES" ]; then + COMPAT="--compatible" +fi + +mkdir work +cd work +touch ROOT +cat > repos.json <<EOF +{ "repositories": + { "": + { "repository": {"type": "file", "path": "."} + , "bindings": {"transform": "transform"} + } + , "transform": + { "repository": + { "type": "git" + , "commit": "$COMMIT_0" + , "pragma": {"absent": true} + , "repository": "http://non-existent.example.org/data.git" + , "branch": "master" + } + } + } +} +EOF +cat repos.json + +cat > TARGETS <<'EOF' +{ "": + { "type": "install" + , "files": {"a": "a", "b": "b", "c": "c", "d": "d", "e": "e", "f": "f"} + } +, "a": + { "type": "configure" + , "target": ["@", "transform", "", ""] + , "config": {"type": "singleton_map", "key": "DATA", "value": "a"} + } +, "b": + { "type": "configure" + , "target": ["@", "transform", "", ""] + , "config": {"type": "singleton_map", "key": "DATA", "value": "b"} + } +, "c": + { "type": "configure" + , "target": ["@", "transform", "", ""] + , "config": {"type": "singleton_map", "key": "DATA", "value": "c"} + } +, "d": + { "type": "configure" + , "target": ["@", "transform", "", ""] + , "config": {"type": "singleton_map", "key": "DATA", "value": "d"} + } +, "e": + { "type": "configure" + , "target": ["@", "transform", "", ""] + , "config": {"type": "singleton_map", "key": "DATA", "value": "e"} + } +, "f": + { "type": "configure" + , "target": ["@", "transform", "", ""] + , "config": {"type": "singleton_map", "key": "DATA", "value": "f"} + } +} +EOF + +"${JUST_MR}" --norc --local-build-root "${LBR}" --just "${JUST}" \ + -R "${SERVE}" -r "${REMOTE_EXECUTION_ADDRESS}" ${COMPAT} \ + install -o "${OUT}" 2>&1 + +[ "$(cat "${OUT}/a")" = "AAA" ] +[ "$(cat "${OUT}/b")" = "BBB" ] +[ "$(cat "${OUT}/c")" = "CCC" ] +[ "$(cat "${OUT}/d")" = "DDD" ] +[ "$(cat "${OUT}/e")" = "EEE" ] +[ "$(cat "${OUT}/f")" = "FFF" ] + +echo OK |