summaryrefslogtreecommitdiff
path: root/test/end-to-end/serve-service
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-12-08 09:47:35 +0100
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-12-12 14:37:18 +0100
commit71953b9d200bc6c729e4d0ee5e76df59854bc5e1 (patch)
tree0f3642d6f160e47570f4d0020bd46cff0b46247b /test/end-to-end/serve-service
parentf77232b3f0bf9a53127d138a54a8a263b1a29f39 (diff)
downloadjustbuild-71953b9d200bc6c729e4d0ee5e76df59854bc5e1.tar.gz
test: Check tc sharding if 'just serve' acts also as 'just execute'
Diffstat (limited to 'test/end-to-end/serve-service')
-rw-r--r--test/end-to-end/serve-service/TARGETS8
-rw-r--r--test/end-to-end/serve-service/serve_start_execute_sharding.sh184
2 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 88774cbc..f90edd55 100644
--- a/test/end-to-end/serve-service/TARGETS
+++ b/test/end-to-end/serve-service/TARGETS
@@ -37,6 +37,13 @@
, "test": ["serve_start_execute.sh"]
, "deps": [["end-to-end", "tool-under-test"]]
}
+, "serve-start-execute-sharding":
+ { "type": ["@", "rules", "shell/test", "script"]
+ , "name": ["serve-start-execute-sharding"]
+ , "test": ["serve_start_execute_sharding.sh"]
+ , "deps":
+ [["end-to-end", "mr-tool-under-test"], ["end-to-end", "tool-under-test"]]
+ }
, "serve-export-deps":
{ "type": ["end-to-end", "with serve"]
, "name": ["serve-export-deps"]
@@ -51,6 +58,7 @@
[ "serve-target-remote-build"
, "serve-target-cache-hit"
, "serve-start-execute"
+ , "serve-start-execute-sharding"
, "serve-export-deps"
]
}
diff --git a/test/end-to-end/serve-service/serve_start_execute_sharding.sh b/test/end-to-end/serve-service/serve_start_execute_sharding.sh
new file mode 100644
index 00000000..70b7bfbc
--- /dev/null
+++ b/test/end-to-end/serve-service/serve_start_execute_sharding.sh
@@ -0,0 +1,184 @@
+#!/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.
+
+###########################################################################
+#
+# In this script, we first fill the target cache of a just-serve instance
+# by building an export target. Then, we check that just-serve can get a
+# cache hit if set up to act also as just-execute.
+#
+# The remote properties and dispatch file are used to test that both
+# client and server shard the target cache entry in the same way.
+#
+###########################################################################
+
+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 SERVE_LBR="${TEST_TMPDIR}/serve-local-build-root"
+
+readonly LOCAL_DIR="${TEST_TMPDIR}/local"
+readonly ABSENT_DIR="${TEST_TMPDIR}/absent"
+
+readonly INFOFILE="${PWD}/info.json"
+readonly PIDFILE="${PWD}/pid.txt"
+
+##
+# Set up sample repository
+#
+readonly GENERATOR="${TEST_TMPDIR}/generate.sh"
+readonly GEN_DIR="{TEST_TMPDIR}/gen-dir"
+cat > "${GENERATOR}" <<EOF
+#!/bin/sh
+
+cat > TARGETS <<ENDTARGETS
+{ "main-internal":
+ { "type": "generic"
+ , "cmds": ["echo hello from just-serve > out.txt"]
+ , "outs": ["out.txt"]
+ }
+, "main":
+ {"type": "export", "target": "main-internal", "flexible_config": ["ENV"]}
+}
+ENDTARGETS
+EOF
+
+cat "${GENERATOR}"
+
+chmod 755 "${GENERATOR}"
+mkdir -p "${GEN_DIR}"
+( cd "${GEN_DIR}"
+ git init
+ git config user.email "nobody@example.org"
+ git config user.name "Nobody"
+ "${GENERATOR}"
+ git add .
+ git commit -m "first commit"
+)
+readonly TREE_ID=$(cd "${GEN_DIR}" && git log -n 1 --format="%T")
+
+##
+# Fill the target cache that will be used by just serve by building locally
+#
+mkdir -p ${LOCAL_DIR}
+( cd ${LOCAL_DIR}
+touch ROOT
+cat > repos.json <<EOF
+{ "repositories":
+ { "":
+ { "repository":
+ { "type": "git tree"
+ , "id": "${TREE_ID}"
+ , "cmd": ["${GENERATOR}"]
+ }
+ }
+ }
+}
+EOF
+echo "local repos configuration:"
+cat repos.json
+echo
+CONF=$("${JUST_MR}" --norc --local-build-root "${SERVE_LBR}" setup)
+
+echo "generated conf":
+cat "${CONF}"
+echo
+
+"${JUST}" build \
+ --local-build-root "${SERVE_LBR}" \
+ -C "${CONF}" \
+ main
+)
+
+ls -R "${SERVE_LBR}"
+
+##
+# Set up a just serve instance that acts also as just execute, using the
+# build root with pre-filled target cache
+#
+cat > .just-servec <<EOF
+{ "repositories": []
+, "remote service": {"info file": "${INFOFILE}", "pid file": "${PIDFILE}"}
+, "local build root": "${SERVE_LBR}"
+}
+EOF
+echo "Serve service configuration:"
+cat .just-servec
+
+"${JUST}" serve .just-servec 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}")
+
+cleanup() {
+ kill $(cat "${PIDFILE}")
+}
+
+##
+# Change repository to absent and unbuildable (remove generator script) and
+# test that we can build from the populated build root, as we should get a
+# target cache hit, assuming sharding is done as for a local build
+#
+mkdir -p "${ABSENT_DIR}"
+( cd "${ABSENT_DIR}"
+touch ROOT
+cat > repos.json <<EOF
+{ "repositories":
+ { "":
+ { "repository":
+ { "type": "git tree"
+ , "id": "${TREE_ID}"
+ , "cmd": ["non_existent_script.sh"]
+ , "pragma": {"absent": true}
+ }
+ }
+ }
+}
+EOF
+echo "absent repos configuration:"
+cat repos.json
+echo
+
+CONF=$("${JUST_MR}" --norc --local-build-root "${LBR}" setup)
+cat "${CONF}"
+echo
+
+"${JUST}" build \
+ --local-build-root "${LBR}" \
+ --remote-serve-address 127.0.0.1:${PORT} \
+ -C "${CONF}" \
+ main
+)
+
+cleanup
+echo ok