summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--etc/repos.json3
-rw-r--r--test/end-to-end/remote-execution/TARGETS14
-rw-r--r--test/end-to-end/remote-execution/large-blobs.sh13
-rw-r--r--test/end-to-end/remote-execution/native-protocol.sh13
-rw-r--r--test/end-to-end/remote-execution/upload-test.sh13
-rw-r--r--test/end-to-end/target-cache/TARGETS2
-rw-r--r--test/end-to-end/target-cache/artifacts-sync.sh22
-rw-r--r--test/end-to-end/target-cache/target-cache-hit.sh19
-rw-r--r--test/etc/credentials/TARGETS6
-rw-r--r--test/etc/credentials/readme.org2
-rw-r--r--test/utils/TARGETS6
-rw-r--r--test/utils/remote_execution/main-remote-execution.cpp3
-rw-r--r--test/utils/test_env.hpp28
13 files changed, 128 insertions, 16 deletions
diff --git a/etc/repos.json b/etc/repos.json
index 1da2715a..5937cebd 100644
--- a/etc/repos.json
+++ b/etc/repos.json
@@ -19,6 +19,7 @@
, "libcurl": "com_github_curl_curl"
, "bzip2": "bzip2"
, "libarchive": "com_github_libarchive_libarchive"
+ , "credentials": "test-credentials"
}
, "bootstrap": {"link": ["-lpthread"]}
, "bootstrap_local": {"link": ["-lpthread"]}
@@ -446,5 +447,7 @@
, "bzip2": "bzip2"
}
}
+ , "test-credentials":
+ {"repository": {"type": "file", "path": "test/etc/credentials"}}
}
}
diff --git a/test/end-to-end/remote-execution/TARGETS b/test/end-to-end/remote-execution/TARGETS
index 0f7b5118..f2ba00f5 100644
--- a/test/end-to-end/remote-execution/TARGETS
+++ b/test/end-to-end/remote-execution/TARGETS
@@ -5,23 +5,31 @@
, "deps":
[ ["test/end-to-end", "tool-under-test"]
, ["test/end-to-end", "mr-tool-under-test"]
+ , ["@", "credentials", "", ""]
]
}
, "large-blobs":
{ "type": ["@", "rules", "shell/test", "script"]
, "name": ["large-blobs"]
, "test": ["large-blobs.sh"]
- , "deps": [["test/end-to-end", "tool-under-test"]]
+ , "deps":
+ [["test/end-to-end", "tool-under-test"], ["@", "credentials", "", ""]]
}
, "upload-test":
{ "type": ["@", "rules", "shell/test", "script"]
, "name": ["upload-test"]
, "test": ["upload-test.sh"]
- , "deps": [["test/end-to-end", "tool-under-test"]]
+ , "deps":
+ [["test/end-to-end", "tool-under-test"], ["@", "credentials", "", ""]]
}
, "TESTS":
{ "type": "install"
, "tainted": ["test"]
- , "deps": ["native-protocol", "large-blobs", "upload-test"]
+ , "deps":
+ [ "native-protocol"
+ , "large-blobs"
+ , "upload-test"
+ , ["@", "credentials", "", ""]
+ ]
}
}
diff --git a/test/end-to-end/remote-execution/large-blobs.sh b/test/end-to-end/remote-execution/large-blobs.sh
index 17839e86..a4d25ffa 100644
--- a/test/end-to-end/remote-execution/large-blobs.sh
+++ b/test/end-to-end/remote-execution/large-blobs.sh
@@ -17,6 +17,7 @@
set -eu
readonly JUST="${PWD}/bin/tool-under-test"
+readonly CREDENTIALS_DIR="${PWD}/credentials"
# create a sufficiently large (>4MB) file for testing upload/download (16MB)
dd if=/dev/zero of=large.file bs=1024 count=$((16*1024))
@@ -43,12 +44,22 @@ run_tests() {
local TYPE="local"
local REMOTE_ARGS=""
local REMOTE_BUILD_ARGS=""
+ local AUTH_ARGS=""
if [ -n "${1:-}" ] && [ -n "${2:-}" ]; then
TYPE="remote"
REMOTE_ARGS="-r $1"
REMOTE_BUILD_ARGS="--remote-execution-property $2"
+ if [ -f "${CREDENTIALS_DIR}/ca.crt" ]; then
+ AUTH_ARGS=" --tls-ca-cert ${CREDENTIALS_DIR}/ca.crt "
+ if [ -f "${CREDENTIALS_DIR}/client.crt" ]; then
+ AUTH_ARGS=" --tls-client-cert ${CREDENTIALS_DIR}/client.crt "${AUTH_ARGS}
+ fi
+ if [ -f "${CREDENTIALS_DIR}/client.key" ]; then
+ AUTH_ARGS=" --tls-client-key ${CREDENTIALS_DIR}/client.key "${AUTH_ARGS}
+ fi
+ fi
fi
- ARGS="$COMMON_ARGS $REMOTE_ARGS"
+ ARGS="$COMMON_ARGS $REMOTE_ARGS ${AUTH_ARGS}"
BUILD_ARGS="$ARGS $REMOTE_BUILD_ARGS"
echo
diff --git a/test/end-to-end/remote-execution/native-protocol.sh b/test/end-to-end/remote-execution/native-protocol.sh
index aea047ad..bef83e46 100644
--- a/test/end-to-end/remote-execution/native-protocol.sh
+++ b/test/end-to-end/remote-execution/native-protocol.sh
@@ -23,6 +23,7 @@ readonly LBRDIR="${TEST_TMPDIR}/local-build-root"
readonly JUST_MR="${PWD}/bin/mr-tool-under-test"
readonly JUST="${PWD}/bin/tool-under-test"
readonly RESULT="out.txt"
+readonly CREDENTIALS_DIR="${PWD}/credentials"
echo
echo Create Git repository
@@ -84,15 +85,25 @@ echo
TREE_ID="$(jq -r ".${OUT_DIRNAME}.id" "${RESULT}" 2>&1)"
test ${TREE_ID} ${EQUAL} ${GIT_TREE_ID}
+AUTH_ARGS=""
if [ "${REMOTE_EXECUTION_ADDRESS:-}" != "" ]; then
REMOTE_EXECUTION_ARGS="-r ${REMOTE_EXECUTION_ADDRESS}"
if [ "${REMOTE_EXECUTION_PROPERTIES:-}" != "" ]; then
REMOTE_EXECUTION_ARGS="${REMOTE_EXECUTION_ARGS} --remote-execution-property ${REMOTE_EXECUTION_PROPERTIES}"
fi
+ if [ -f "${CREDENTIALS_DIR}/ca.crt" ]; then
+ AUTH_ARGS=" --tls-ca-cert ${CREDENTIALS_DIR}/ca.crt "
+ if [ -f "${CREDENTIALS_DIR}/client.crt" ]; then
+ AUTH_ARGS=" --tls-client-cert ${CREDENTIALS_DIR}/client.crt "${AUTH_ARGS}
+ fi
+ if [ -f "${CREDENTIALS_DIR}/client.key" ]; then
+ AUTH_ARGS=" --tls-client-key ${CREDENTIALS_DIR}/client.key "${AUTH_ARGS}
+ fi
+ fi
echo
echo Upload and download Git tree to remote CAS in ${NAME} mode
echo
- "${JUST}" build -C "${CONF}" --main test test ${REMOTE_EXECUTION_ARGS} --local-build-root="${LBRDIR}" --dump-artifacts "${RESULT}" ${ARGS} 2>&1
+ "${JUST}" build -C "${CONF}" --main test test ${REMOTE_EXECUTION_ARGS} ${AUTH_ARGS} --local-build-root="${LBRDIR}" --dump-artifacts "${RESULT}" ${ARGS} 2>&1
TREE_ID="$(jq -r ".${OUT_DIRNAME}.id" "${RESULT}" 2>&1)"
test ${TREE_ID} ${EQUAL} ${GIT_TREE_ID}
fi
diff --git a/test/end-to-end/remote-execution/upload-test.sh b/test/end-to-end/remote-execution/upload-test.sh
index b04b6125..40d2628b 100644
--- a/test/end-to-end/remote-execution/upload-test.sh
+++ b/test/end-to-end/remote-execution/upload-test.sh
@@ -19,6 +19,7 @@ set -eu
readonly JUST="${PWD}/bin/tool-under-test"
readonly GITDIR="${TEST_TMPDIR}/src"
readonly LBRDIR="${TEST_TMPDIR}/local-build-root"
+readonly CREDENTIALS_DIR="${PWD}/credentials"
mkdir -p ${GITDIR}
cd ${GITDIR}
@@ -57,10 +58,20 @@ export CONF="$(realpath repos.json)"
"${JUST}" build -C "${CONF}" --local-build-root="${LBRDIR}" ${ARGS} 2>&1
# Build remotely
+AUTH_ARGS=""
if [ "${REMOTE_EXECUTION_ADDRESS:-}" != "" ]; then
REMOTE_EXECUTION_ARGS="-r ${REMOTE_EXECUTION_ADDRESS}"
if [ "${REMOTE_EXECUTION_PROPERTIES:-}" != "" ]; then
REMOTE_EXECUTION_ARGS="${REMOTE_EXECUTION_ARGS} --remote-execution-property ${REMOTE_EXECUTION_PROPERTIES}"
fi
- "${JUST}" build -C "${CONF}" --local-build-root="${LBRDIR}" ${ARGS} ${REMOTE_EXECUTION_ARGS} 2>&1
+ if [ -f "${CREDENTIALS_DIR}/ca.crt" ]; then
+ AUTH_ARGS=" --tls-ca-cert ${CREDENTIALS_DIR}/ca.crt "
+ if [ -f "${CREDENTIALS_DIR}/client.crt" ]; then
+ AUTH_ARGS=" --tls-client-cert ${CREDENTIALS_DIR}/client.crt "${AUTH_ARGS}
+ fi
+ if [ -f "${CREDENTIALS_DIR}/client.key" ]; then
+ AUTH_ARGS=" --tls-client-key ${CREDENTIALS_DIR}/client.key "${AUTH_ARGS}
+ fi
+ fi
+ "${JUST}" build -C "${CONF}" --local-build-root="${LBRDIR}" ${ARGS} ${REMOTE_EXECUTION_ARGS} ${AUTH_ARGS} 2>&1
fi
diff --git a/test/end-to-end/target-cache/TARGETS b/test/end-to-end/target-cache/TARGETS
index 09057dd2..83af5993 100644
--- a/test/end-to-end/target-cache/TARGETS
+++ b/test/end-to-end/target-cache/TARGETS
@@ -5,6 +5,7 @@
, "deps":
[ ["test/end-to-end", "tool-under-test"]
, ["test/end-to-end", "mr-tool-under-test"]
+ , ["@", "credentials", "", ""]
]
}
, "artifacts-sync":
@@ -16,6 +17,7 @@
, ["./", "test-data-artifacts-sync", "greetlib"]
, ["./", "test-data-artifacts-sync", "pydicts"]
, "bootstrap-src-staged"
+ , ["@", "credentials", "", ""]
]
}
, "bootstrap-src-staged":
diff --git a/test/end-to-end/target-cache/artifacts-sync.sh b/test/end-to-end/target-cache/artifacts-sync.sh
index c4f75f51..552e04aa 100644
--- a/test/end-to-end/target-cache/artifacts-sync.sh
+++ b/test/end-to-end/target-cache/artifacts-sync.sh
@@ -57,6 +57,7 @@ readonly JUST_MR="$ROOT/foo/bin/just-mr.py"
readonly JUST_RULES="$ROOT/foo/rules"
readonly LBRDIR="$TEST_TMPDIR/local-build-root"
readonly TESTDIR="$TEST_TMPDIR/test-root"
+readonly CREDENTIALS_DIR="${PWD}/credentials"
if [ "${REMOTE_EXECUTION_ADDRESS:-}" = "" ]; then
echo
@@ -70,6 +71,17 @@ if [ "${REMOTE_EXECUTION_PROPERTIES:-}" != "" ]; then
REMOTE_EXECUTION_ARGS="$REMOTE_EXECUTION_ARGS --remote-execution-property $REMOTE_EXECUTION_PROPERTIES"
fi
+AUTH_ARGS=""
+if [ -f "${CREDENTIALS_DIR}/ca.crt" ]; then
+ AUTH_ARGS=" --tls-ca-cert ${CREDENTIALS_DIR}/ca.crt "
+ if [ -f "${CREDENTIALS_DIR}/client.crt" ]; then
+ AUTH_ARGS=" --tls-client-cert ${CREDENTIALS_DIR}/client.crt "${AUTH_ARGS}
+ fi
+ if [ -f "${CREDENTIALS_DIR}/client.key" ]; then
+ AUTH_ARGS=" --tls-client-key ${CREDENTIALS_DIR}/client.key "${AUTH_ARGS}
+ fi
+fi
+
if [ "${COMPATIBLE:-}" = "YES" ]; then
ARGS="--compatible"
HASH_TYPE="compatible-sha256"
@@ -121,7 +133,7 @@ echo "Local execution ID: $LOCAL_EXECUTION_ID"
rm -rf "$TCDIR"
# Determine remote execution ID
-"$JUST_MR" --norc --just "$JUST" --local-build-root "$LBRDIR" build main $ARGS $REMOTE_EXECUTION_ARGS
+"$JUST_MR" --norc --just "$JUST" --local-build-root "$LBRDIR" build main $ARGS $REMOTE_EXECUTION_ARGS ${AUTH_ARGS}
readonly REMOTE_EXECUTION_ID=$(ls -1 "$TCDIR" | head -n1)
echo "Remote execution ID: $REMOTE_EXECUTION_ID"
rm -rf "$TCDIR"
@@ -155,7 +167,7 @@ sed -i "s|RANDOM_STRING_1 \".*\"|RANDOM_STRING_1 \"$RANDOM_STRING\"|" greet/incl
sed -i "s|RANDOM_STRING_2 \".*\"|RANDOM_STRING_2 \"$RANDOM_STRING\"|" greet/src/greet.cpp
# Build greetlib remotely
-"$JUST_MR" --norc --just "$JUST" --local-build-root "$LBRDIR" --main main build main $ARGS $REMOTE_EXECUTION_ARGS
+"$JUST_MR" --norc --just "$JUST" --local-build-root "$LBRDIR" --main main build main $ARGS $REMOTE_EXECUTION_ARGS ${AUTH_ARGS}
# Check if file and tree artifacts have been downloaded correctly
readonly TC_HASH=$(get_tc_hash $REMOTE_EXECUTION_ID)
@@ -181,7 +193,7 @@ sed -i "s|RANDOM_STRING_2 \".*\"|RANDOM_STRING_2 \"$RANDOM_STRING\"|" greet/src/
mv "$TCDIR/$LOCAL_EXECUTION_ID" "$TCDIR/$REMOTE_EXECUTION_ID"
# Check if greetlib successfully builds remotely
-"$JUST_MR" --norc --just "$JUST" --local-build-root "$LBRDIR" --main main build main $ARGS $REMOTE_EXECUTION_ARGS
+"$JUST_MR" --norc --just "$JUST" --local-build-root "$LBRDIR" --main main build main $ARGS $REMOTE_EXECUTION_ARGS ${AUTH_ARGS}
# Clean up test files
rm -rf "$TESTDIR" "$LBRDIR"
@@ -209,7 +221,7 @@ sed -i "s|\"foo\": \"[^\"]*\"|\"foo\": \"$RANDOM_STRING\"|" foo.py
sed -i "s|\"foo\": \"[^\"]*\"|\"foo\": \"$RANDOM_STRING\"|" bar.py
# Build pydicts remotely
-"$JUST_MR" --norc --just "$JUST" --local-build-root "$LBRDIR" build json_from_py $ARGS $REMOTE_EXECUTION_ARGS
+"$JUST_MR" --norc --just "$JUST" --local-build-root "$LBRDIR" build json_from_py $ARGS $REMOTE_EXECUTION_ARGS ${AUTH_ARGS}
# 'exported_py' target contains a provides map,
# which contains an abstract node (type 'convert'),
@@ -244,7 +256,7 @@ sed -i "s|\"foo\": \"[^\"]*\"|\"foo\": \"$RANDOM_STRING\"|" bar.py
mv "$TCDIR/$LOCAL_EXECUTION_ID" "$TCDIR/$REMOTE_EXECUTION_ID"
# Check if pydicts successfully builds remotely
-"$JUST_MR" --norc --just "$JUST" --local-build-root "$LBRDIR" build json_from_py $ARGS $REMOTE_EXECUTION_ARGS
+"$JUST_MR" --norc --just "$JUST" --local-build-root "$LBRDIR" build json_from_py $ARGS $REMOTE_EXECUTION_ARGS ${AUTH_ARGS}
# Clean up test files
rm -rf "$TESTDIR" "$LBRDIR"
diff --git a/test/end-to-end/target-cache/target-cache-hit.sh b/test/end-to-end/target-cache/target-cache-hit.sh
index e4776f2f..0b7252ae 100644
--- a/test/end-to-end/target-cache/target-cache-hit.sh
+++ b/test/end-to-end/target-cache/target-cache-hit.sh
@@ -20,6 +20,7 @@ readonly JUST="$PWD/bin/tool-under-test"
readonly JUST_MR="$PWD/bin/mr-tool-under-test"
readonly LBRDIR="$TEST_TMPDIR/local-build-root"
readonly TESTDIR="$TEST_TMPDIR/test-root"
+readonly CREDENTIALS_DIR="${PWD}/credentials"
# create project files including an exported target
mkdir -p "$TESTDIR"
@@ -60,13 +61,23 @@ export CONF="$("$JUST_MR" -C repos.json --local-build-root="$LBRDIR" setup main)
"$JUST" build -C "$CONF" main --local-build-root="$LBRDIR" $ARGS 2>&1
REMOTE_EXECUTION_ARGS=""
+AUTH_ARGS=""
if [ "${REMOTE_EXECUTION_ADDRESS:-}" != "" ]; then
- REMOTE_EXECUTION_ARGS="-r $REMOTE_EXECUTION_ADDRESS"
+ REMOTE_EXECUTION_ARGS="-r ${REMOTE_EXECUTION_ADDRESS}"
if [ "${REMOTE_EXECUTION_PROPERTIES:-}" != "" ]; then
- REMOTE_EXECUTION_ARGS="$REMOTE_EXECUTION_ARGS --remote-execution-property $REMOTE_EXECUTION_PROPERTIES"
+ REMOTE_EXECUTION_ARGS="${REMOTE_EXECUTION_ARGS} --remote-execution-property ${REMOTE_EXECUTION_PROPERTIES}"
+ fi
+ if [ -f "${CREDENTIALS_DIR}/ca.crt" ]; then
+ AUTH_ARGS=" --tls-ca-cert ${CREDENTIALS_DIR}/ca.crt "
+ if [ -f "${CREDENTIALS_DIR}/client.crt" ]; then
+ AUTH_ARGS=" --tls-client-cert ${CREDENTIALS_DIR}/client.crt "${AUTH_ARGS}
+ fi
+ if [ -f "${CREDENTIALS_DIR}/client.key" ]; then
+ AUTH_ARGS=" --tls-client-key ${CREDENTIALS_DIR}/client.key "${AUTH_ARGS}
+ fi
fi
fi
# build project twice remotely to trigger a target cache hit
-"$JUST" build -C "$CONF" main --local-build-root="$LBRDIR" $ARGS $REMOTE_EXECUTION_ARGS 2>&1
-"$JUST" build -C "$CONF" main --local-build-root="$LBRDIR" $ARGS $REMOTE_EXECUTION_ARGS 2>&1
+"$JUST" build -C "$CONF" main --local-build-root="$LBRDIR" $ARGS $REMOTE_EXECUTION_ARGS ${AUTH_ARGS} 2>&1
+"$JUST" build -C "$CONF" main --local-build-root="$LBRDIR" $ARGS $REMOTE_EXECUTION_ARGS ${AUTH_ARGS} 2>&1
diff --git a/test/etc/credentials/TARGETS b/test/etc/credentials/TARGETS
new file mode 100644
index 00000000..884e3c20
--- /dev/null
+++ b/test/etc/credentials/TARGETS
@@ -0,0 +1,6 @@
+{ "":
+ { "type": "install"
+ , "dirs": [[["TREE", null, "."], "credentials"]]
+ , "tainted": ["test"]
+ }
+}
diff --git a/test/etc/credentials/readme.org b/test/etc/credentials/readme.org
new file mode 100644
index 00000000..ab2cc674
--- /dev/null
+++ b/test/etc/credentials/readme.org
@@ -0,0 +1,2 @@
+This directory backs a repository to be populated during execution of
+tests to pass files needed for, e.g., authentication.
diff --git a/test/utils/TARGETS b/test/utils/TARGETS
index c9f40532..81137cb5 100644
--- a/test/utils/TARGETS
+++ b/test/utils/TARGETS
@@ -26,7 +26,11 @@
{ "type": ["@", "rules", "CC", "library"]
, "name": ["test_env"]
, "hdrs": ["test_env.hpp"]
- , "deps": ["log_config", ["src/buildtool/compatibility", "compatibility"]]
+ , "deps":
+ [ "log_config"
+ , ["src/buildtool/compatibility", "compatibility"]
+ , ["src/buildtool/auth", "auth"]
+ ]
, "stage": ["test", "utils"]
}
, "local_hermeticity":
diff --git a/test/utils/remote_execution/main-remote-execution.cpp b/test/utils/remote_execution/main-remote-execution.cpp
index 32774a65..952b025e 100644
--- a/test/utils/remote_execution/main-remote-execution.cpp
+++ b/test/utils/remote_execution/main-remote-execution.cpp
@@ -37,6 +37,9 @@ void wait_for_grpc_to_shutdown() {
/// \returns true If remote execution was successfully configured.
[[nodiscard]] auto ConfigureRemoteExecution() -> bool {
ReadCompatibilityFromEnv();
+ if (not ReadTLSAuthArgsFromEnv()) {
+ return false;
+ }
HashFunction::SetHashType(Compatibility::IsCompatible()
? HashFunction::JustHash::Compatible
: HashFunction::JustHash::Native);
diff --git a/test/utils/test_env.hpp b/test/utils/test_env.hpp
index 0302f555..7013d2ff 100644
--- a/test/utils/test_env.hpp
+++ b/test/utils/test_env.hpp
@@ -21,6 +21,7 @@
#include <sstream>
#include <string>
+#include "src/buildtool/auth/authentication.hpp"
#include "src/buildtool/compatibility/compatibility.hpp"
#include "test/utils/logging/log_config.hpp"
@@ -53,4 +54,31 @@ static inline void ReadCompatibilityFromEnv() {
: std::make_optional(std::string{execution_address});
}
+[[nodiscard]] static inline auto ReadTLSAuthArgsFromEnv() -> bool {
+ auto* ca_cert = std::getenv("TLS_CA_CERT");
+ auto* client_cert = std::getenv("TLS_CLIENT_CERT");
+ auto* client_key = std::getenv("TLS_CLIENT_KEY");
+ if (ca_cert != nullptr) {
+ if (not Auth::TLS::SetCACertificate(ca_cert)) {
+ return false;
+ }
+ }
+ if (client_cert != nullptr) {
+ if (not Auth::TLS::SetClientCertificate(client_cert)) {
+ return false;
+ }
+ }
+ if (client_key != nullptr) {
+ if (not Auth::TLS::SetClientKey(client_key)) {
+ return false;
+ }
+ }
+ if (Auth::GetAuthMethod() == AuthMethod::kTLS) {
+ if (not Auth::TLS::Validate()) {
+ return false;
+ }
+ }
+ return true;
+}
+
#endif // INCLUDED_SRC_TEST_UTILS_TEST_ENV_HPP