diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-01-08 14:37:43 +0100 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-01-09 11:35:45 +0100 |
commit | 24964def4534c551b59bd30bc66f555356d41cb2 (patch) | |
tree | d9f7c93d07908579cd2e8429ae4a869852e2bd4c /test/end-to-end/serve-service | |
parent | 3987f571650c591ec895cb82745fac2c895c66d2 (diff) | |
download | justbuild-24964def4534c551b59bd30bc66f555356d41cb2.tar.gz |
test end-to-end: Check that serve endpoint correctly dispatches builds
Diffstat (limited to 'test/end-to-end/serve-service')
3 files changed, 192 insertions, 0 deletions
diff --git a/test/end-to-end/serve-service/TARGETS b/test/end-to-end/serve-service/TARGETS index c2454624..4783c32a 100644 --- a/test/end-to-end/serve-service/TARGETS +++ b/test/end-to-end/serve-service/TARGETS @@ -77,6 +77,19 @@ ] , "repos": ["serve-tree (archive)"] } +, "serve-target-remote-build-dispatch (data)": + { "type": "install" + , "tainted": ["test"] + , "files": {"TARGETS": "data/targets/TARGETS.dispatch"} + } +, "serve-target-remote-build-dispatch": + { "type": ["end-to-end", "with serve"] + , "name": ["serve-target-remote-build-dispatch"] + , "test": ["serve_target_remote_build_dispatch.sh"] + , "deps": + [["end-to-end", "tool-under-test"], ["end-to-end", "mr-tool-under-test"]] + , "repos": ["serve-target-remote-build-dispatch (data)"] + } , "serve-query-target-cache-value": { "type": ["end-to-end", "with serve"] , "name": ["serve-query-target-cache-value"] @@ -92,6 +105,7 @@ { "type": "++" , "$1": [ [ "serve-target-remote-build" + , "serve-target-remote-build-dispatch" , "serve-target-cache-hit" , "serve-start-execute" , "serve-start-execute-sharding" diff --git a/test/end-to-end/serve-service/data/targets/TARGETS.dispatch b/test/end-to-end/serve-service/data/targets/TARGETS.dispatch new file mode 100644 index 00000000..24180bd7 --- /dev/null +++ b/test/end-to-end/serve-service/data/targets/TARGETS.dispatch @@ -0,0 +1,35 @@ +{ "payload": + { "type": "generic" + , "cmds": ["echo this-is-the-payload > payload.txt"] + , "outs": ["payload.txt"] + } +, "drop": + { "type": "generic" + , "cmds": ["echo please-drop-this > drop.txt"] + , "outs": ["drop.txt"] + } +, "post": + { "type": "generic" + , "cmds": ["echo this-is-added-at-the-end > post.txt"] + , "outs": ["post.txt"] + } +, "special-dispatch": + { "type": "generic" + , "cmds": ["cat payload.txt drop.txt > out.txt"] + , "outs": ["out.txt"] + , "execution properties": + {"type": "singleton_map", "key": "server", "value": "special"} + , "deps": ["payload", "drop"] + } +, "internal": + { "type": "generic" + , "cmds": ["cat out.txt post.txt > final.txt"] + , "deps": ["special-dispatch", "post"] + , "outs": ["final.txt"] + } +, "": + { "type": "export" + , "target": "internal" + , "flexible_config": ["AR", "ARCH", "ENV", "OS"] + } +} diff --git a/test/end-to-end/serve-service/serve_target_remote_build_dispatch.sh b/test/end-to-end/serve-service/serve_target_remote_build_dispatch.sh new file mode 100644 index 00000000..6ab1a59d --- /dev/null +++ b/test/end-to-end/serve-service/serve_target_remote_build_dispatch.sh @@ -0,0 +1,143 @@ +#!/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. + +########################################################################### +# +# This script aims to test the correct dispatch of a build executed by the +# just serve endpoint. +# +########################################################################### + +set -eu + +env +readonly JUST="${PWD}/bin/tool-under-test" +readonly JUST_MR="${PWD}/bin/mr-tool-under-test" + +readonly LBRDIR="${TEST_TMPDIR}/local-build-root" +readonly ESDIR="${TEST_TMPDIR}/dispatch-build-root" +readonly OUTPUT="${TEST_TMPDIR}/output-dir" + +readonly INFOFILE="${PWD}/info.json" +readonly PIDFILE="${PWD}/pid.txt" + +COMPAT="" +if [ "${COMPATIBLE:-}" = "YES" ]; then + COMPAT="--compatible" +fi + +# To test the dispatch, we have a remote-execution server +# with a special variant of cat that +# - prefixes with some extra string, but +# - only takes the first argument into account. +# In this way, we can distinguish it from the regular cat on the +# on the normal remote execution server. +readonly REFERENCE_OUTPUT="FooOOOooo" +readonly SERVER_BIN_DIR="${TMPDIR}/server/bin" +mkdir -p "${SERVER_BIN_DIR}" +cat > "${SERVER_BIN_DIR}/cat" <<EOF +#!/bin/sh +echo "${REFERENCE_OUTPUT}" +$(which cat) "\$1" +EOF +chmod 755 "${SERVER_BIN_DIR}/cat" +cat "${SERVER_BIN_DIR}/cat" +echo + +LOCAL_LAUNCHER='["env", "PATH='"${SERVER_BIN_DIR}:${PATH}"'"]' +echo "will use ${LOCAL_LAUNCHER} as local launcher" +echo + +# set up the second just execute instance +${JUST} execute --info-file "${INFOFILE}" --pid-file "${PIDFILE}" \ + --log-limit 6 --local-build-root ${ESDIR} ${COMPAT} \ + -L "${LOCAL_LAUNCHER}" 2>&1 & + +for _ in `seq 1 10` +do + if test -f "${INFOFILE}" + then + break + fi + sleep 1; +done + +if ! test -f "${INFOFILE}" +then + echo "Did not find ${INFOFILE}" + exit 1 +fi + +readonly PORT=$(jq '."port"' "${INFOFILE}") + +FAILED="" + +# set up the absent targets to build +mkdir work +cd work +touch ROOT + +cat > dispatch.json <<EOF +[ [ {"server": "special"}, "127.0.0.1:${PORT}"] ] +EOF +cat dispatch.json +echo + +cat > repos.json <<EOF +{ "main": "main" +, "repositories": + { "main": + { "repository": + { "type": "git" + , "commit": "$COMMIT_0" + , "pragma": {"absent": true} + , "repository": "http://non-existent.example.org/data.git" + , "branch": "master" + , "subdir": "." + } + } + } +} +EOF + +CONF=$("${JUST_MR}" --norc --local-build-root "${LBRDIR}" \ + --remote-serve-address ${SERVE} \ + -r ${REMOTE_EXECUTION_ADDRESS} ${COMPAT} \ + setup) +cat $CONF +echo + +# Check that we can build correctly +FAILED="" +${JUST} install --local-build-root "${LBRDIR}" -C "${CONF}" \ + --remote-serve-address ${SERVE} \ + -r "${REMOTE_EXECUTION_ADDRESS}" ${COMPAT} \ + --endpoint-configuration dispatch.json \ + --log-limit 4 \ + -o "${OUTPUT}" 2>&1 || FAILED=YES + +kill $(cat "${PIDFILE}") +[ -z "${FAILED}" ] +[ -f "${OUTPUT}/final.txt" ] +echo +echo content of final.txt +cat "${OUTPUT}/final.txt" +echo + +grep ${REFERENCE_OUTPUT} "${OUTPUT}/final.txt" +grep this-is-the-payload "${OUTPUT}/final.txt" +grep drop "${OUTPUT}/final.txt" && exit 1 || : + +echo OK |