diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2025-04-03 12:10:38 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2025-04-07 17:42:26 +0200 |
commit | e96978c1bfed78ed1cb7c668c075d5e6f2cd2614 (patch) | |
tree | 2602bfb3a5e9e9d224494f3b9b4eb3318b45b55a /test/end-to-end/actions | |
parent | 0ce050714843dec41f2dc097a2236ab00f85ccce (diff) | |
download | justbuild-e96978c1bfed78ed1cb7c668c075d5e6f2cd2614.tar.gz |
Add basic end-to-end test for tree operations
Diffstat (limited to 'test/end-to-end/actions')
-rw-r--r-- | test/end-to-end/actions/TARGETS | 8 | ||||
-rw-r--r-- | test/end-to-end/actions/tree-ops.sh | 74 |
2 files changed, 82 insertions, 0 deletions
diff --git a/test/end-to-end/actions/TARGETS b/test/end-to-end/actions/TARGETS index b0afae2c..23b1be4f 100644 --- a/test/end-to-end/actions/TARGETS +++ b/test/end-to-end/actions/TARGETS @@ -90,6 +90,13 @@ , "test": ["request-action-input.sh"] , "deps": [["", "tool-under-test"]] } +, "tree-ops": + { "type": ["@", "rules", "shell/test", "script"] + , "name": ["tree-ops"] + , "test": ["tree-ops.sh"] + , "deps": [["", "tool-under-test"]] + , "keep": ["out/graph.json", "out/artifacts.json"] + } , "TESTS": { "type": ["@", "rules", "test", "suite"] , "arguments_config": ["DROP_IO_HEAVY_TESTS"] @@ -101,6 +108,7 @@ , "equality-timeout" , "equality-properties" , "trees" + , "tree-ops" , "conflicts" , "incomplete-retry" , "error-reporting" diff --git a/test/end-to-end/actions/tree-ops.sh b/test/end-to-end/actions/tree-ops.sh new file mode 100644 index 00000000..722d195d --- /dev/null +++ b/test/end-to-end/actions/tree-ops.sh @@ -0,0 +1,74 @@ +#!/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 -e + +readonly ROOT="$(pwd)" +readonly LBR="${TMPDIR}/local-build-root" +readonly OUT="${ROOT}/out" +mkdir -p "${OUT}" +readonly JUST="${ROOT}/bin/tool-under-test" + +mkdir work +cd work +touch ROOT + +cat > TARGETS <<'EOF' +{ "early": + { "type": "generic" + , "out_dirs": ["out"] + , "cmds": ["mkdir -p out", "echo FOO > out/foo", "echo early > out/conflict"] + } +, "late": + { "type": "generic" + , "out_dirs": ["out"] + , "cmds": ["mkdir -p out", "echo BAR > out/bar", "echo late > out/conflict"] + } +, "overlay": + {"type": "tree_overlay", "name": "overlay", "deps": ["early", "late"]} +} +EOF + +# Sanity check: the trees to be overlayed are build correctly +"${JUST}" install --local-build-root "${LBR}" -o "${OUT}/early" \ + -L '["env", "PATH='"${PATH}"'"]' early 2>&1 +grep FOO "${OUT}/early/out/foo" +grep early "${OUT}/early/out/conflict" +"${JUST}" install --local-build-root "${LBR}" -o "${OUT}/late" \ + -L '["env", "PATH='"${PATH}"'"]' late 2>&1 +grep BAR "${OUT}/late/out/bar" +grep late "${OUT}/late/out/conflict" + +# Analysis of the overlay target should show an overlay action of two trees +"${JUST}" analyse --local-build-root "${LBR}" \ + --dump-graph "${OUT}/graph.json" \ + --dump-artifacts-to-build "${OUT}/artifacts.json" \ + overlay 2>&1 +echo +cat "${OUT}/graph.json" +echo +[ "$(jq -r '.overlay.type' "${OUT}/artifacts.json")" = TREE_OVERLAY ] +OVERLAY_ID=$(jq -r '.overlay.data.id' "${OUT}/artifacts.json") +[ "$(jq '."tree_overlays"."'"${OVERLAY_ID}"'".trees | length' "${OUT}/graph.json")" -eq 2 ] + +# Actual test: the overlay is built correctly +"${JUST}" install --local-build-root "${LBR}" -o "${OUT}/overlay" \ + --log-limit 5 \ + -L '["env", "PATH='"${PATH}"'"]' overlay 2>&1 +grep FOO "${OUT}/overlay/overlay/out/foo" +grep BAR "${OUT}/overlay/overlay/out/bar" +grep late "${OUT}/overlay/overlay/out/conflict" + +echo OK |