From c4cee5a195f3ee41f1d93ac9c52198ca0bb17055 Mon Sep 17 00:00:00 2001 From: Nikola Jokic Date: Mon, 4 Dec 2023 14:51:38 +0100 Subject: [PATCH] extract printing tests and add main invocation to tests where I failed to add it --- .../anonymous-proxy-setup.test.sh | 11 +- .../auth-proxy-setup.test.sh | 11 +- test/actions.github.com/default_setup.test.sh | 11 +- test/actions.github.com/dind-setup.test.sh | 9 +- test/actions.github.com/helper.sh | 16 ++ .../kubernetes-mode-setup.test.sh | 11 +- .../self-signed-ca-setup.test.sh | 11 +- .../single-namespace-setup.test.sh | 9 +- .../update-strategy.test.sh | 142 ++++++++++++++++++ 9 files changed, 174 insertions(+), 57 deletions(-) create mode 100755 test/actions.github.com/update-strategy.test.sh diff --git a/test/actions.github.com/anonymous-proxy-setup.test.sh b/test/actions.github.com/anonymous-proxy-setup.test.sh index 8981280e..d65101b9 100755 --- a/test/actions.github.com/anonymous-proxy-setup.test.sh +++ b/test/actions.github.com/anonymous-proxy-setup.test.sh @@ -73,12 +73,7 @@ function main() { delete_cluster - if [[ "${#failed[@]}" -ne 0 ]]; then - echo "----------------------------------" - echo "The following tests failed:" - for test in "${failed[@]}"; do - echo " - ${test}" - done - return 1 - fi + print_failed_tests "${failed[@]}" } + +main diff --git a/test/actions.github.com/auth-proxy-setup.test.sh b/test/actions.github.com/auth-proxy-setup.test.sh index 36e24abf..60dbf2b1 100755 --- a/test/actions.github.com/auth-proxy-setup.test.sh +++ b/test/actions.github.com/auth-proxy-setup.test.sh @@ -82,12 +82,7 @@ function main() { delete_cluster - if [[ "${#failed[@]}" -ne 0 ]]; then - echo "----------------------------------" - echo "The following tests failed:" - for test in "${failed[@]}"; do - echo " - ${test}" - done - return 1 - fi + print_results "${failed[@]}" } + +main diff --git a/test/actions.github.com/default_setup.test.sh b/test/actions.github.com/default_setup.test.sh index a6daec8a..c00f235b 100755 --- a/test/actions.github.com/default_setup.test.sh +++ b/test/actions.github.com/default_setup.test.sh @@ -56,7 +56,7 @@ function main() { build_image create_cluster - NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" install_arc + install_arc install_scale_set || failed+=("install_scale_set") run_workflow || failed+=("run_workflow") @@ -64,14 +64,7 @@ function main() { delete_cluster - if [[ "${#failed[@]}" -ne 0 ]]; then - echo "----------------------------------" - echo "The following tests failed:" - for test in "${failed[@]}"; do - echo " - ${test}" - done - return 1 - fi + print_results "${failed[@]}" } main diff --git a/test/actions.github.com/dind-setup.test.sh b/test/actions.github.com/dind-setup.test.sh index 4abf2581..fd91bb35 100755 --- a/test/actions.github.com/dind-setup.test.sh +++ b/test/actions.github.com/dind-setup.test.sh @@ -61,14 +61,7 @@ function main() { delete_cluster - if [[ "${#failed[@]}" -ne 0 ]]; then - echo "----------------------------------" - echo "The following tests failed:" - for test in "${failed[@]}"; do - echo " - ${test}" - done - return 1 - fi + print_results "${failed[@]}" } main diff --git a/test/actions.github.com/helper.sh b/test/actions.github.com/helper.sh index 5c460fa0..68963128 100644 --- a/test/actions.github.com/helper.sh +++ b/test/actions.github.com/helper.sh @@ -108,3 +108,19 @@ function install_openebs() { helm repo update helm install openebs openebs/openebs --namespace openebs --create-namespace } + +function print_results() { + local failed=("$@") + + if [[ "${#failed[@]}" -ne 0 ]]; then + echo "----------------------------------" + echo "The following tests failed:" + for test in "${failed[@]}"; do + echo " - ${test}" + done + return 1 + else + echo "----------------------------------" + echo "All tests passed!" + fi +} diff --git a/test/actions.github.com/kubernetes-mode-setup.test.sh b/test/actions.github.com/kubernetes-mode-setup.test.sh index 8e1a7e59..1c4d4536 100755 --- a/test/actions.github.com/kubernetes-mode-setup.test.sh +++ b/test/actions.github.com/kubernetes-mode-setup.test.sh @@ -62,12 +62,7 @@ function main() { delete_cluster - if [[ "${#failed[@]}" -ne 0 ]]; then - echo "----------------------------------" - echo "The following tests failed:" - for test in "${failed[@]}"; do - echo " - ${test}" - done - return 1 - fi + print_results "${failed[@]}" } + +main diff --git a/test/actions.github.com/self-signed-ca-setup.test.sh b/test/actions.github.com/self-signed-ca-setup.test.sh index ebd04ed5..b9f1c8a5 100755 --- a/test/actions.github.com/self-signed-ca-setup.test.sh +++ b/test/actions.github.com/self-signed-ca-setup.test.sh @@ -121,12 +121,7 @@ function main() { delete_cluster - if [[ "${#failed[@]}" -ne 0 ]]; then - echo "----------------------------------" - echo "The following tests failed:" - for test in "${failed[@]}"; do - echo " - ${test}" - done - return 1 - fi + print_results "${failed[@]}" } + +main diff --git a/test/actions.github.com/single-namespace-setup.test.sh b/test/actions.github.com/single-namespace-setup.test.sh index b8f1a06d..0a32ede4 100755 --- a/test/actions.github.com/single-namespace-setup.test.sh +++ b/test/actions.github.com/single-namespace-setup.test.sh @@ -62,14 +62,7 @@ function main() { delete_cluster - if [[ "${#failed[@]}" -ne 0 ]]; then - echo "----------------------------------" - echo "The following tests failed:" - for test in "${failed[@]}"; do - echo " - ${test}" - done - return 1 - fi + print_results "${failed[@]}" } main diff --git a/test/actions.github.com/update-strategy.test.sh b/test/actions.github.com/update-strategy.test.sh new file mode 100755 index 00000000..68af2632 --- /dev/null +++ b/test/actions.github.com/update-strategy.test.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +DIR="$(dirname "${BASH_SOURCE[0]}")" + +DIR="$(realpath "${DIR}")" + +ROOT_DIR="$(ralpath "${DIR}/../../")" + +source "${DIR}/helper.sh" + +SCALE_SET_NAME="update-strategy-$(date '+%M%S')$((($RANDOM + 100) % 100 + 1))" +SCALE_SET_NAMESPACE="arc-runners" +WORKFLOW_FILE="arc-test-workflow.yaml" +ARC_NAME="arc" +ARC_NAMESPACE="arc-systems" + +function install_arc() { + echo "Installing ARC" + + helm install "${ARC_NAME}" \ + --namespace "${ARC_NAMESPACE}" \ + --create-namespace \ + --set image.repository="${IMAGE_NAME}" \ + --set image.tag="${IMAGE_TAG}" \ + --set flags.updateStrategy="eventual" \ + ${ROOT_DIR}/charts/gha-rynner-scale-set-controller \ + --debug + + if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function install_scale_set() { + echo "Installing scale set ${SCALE_SET_NAME}/${SCALE_SET_NAMESPACE}" + helm install "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --create-namespace \ + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set" \ + --debug + + if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function upgrade_scale_set() { + echo "Upgrading scale set ${SCALE_SET_NAME}/${SCALE_SET_NAMESPACE}" + helm upgrade "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ + --set template.spec.containers[0].name="runner" \ + --set template.spec.containers[0].image="ghcr.io/actions/actions-runner:latest" \ + --set template.spec.containers[0].command={"/home/runner/run.sh"} \ + --set template.spec.containers[0].env[0].name="TEST" \ + --set template.spec.containers[0].env[0].value="E2E TESTS" \ + ${ROOT_DIR}/charts/gha-runner-scale-set \ + --version="${VERSION}" \ + --debug + +} + +function assert_listener_deleted() { + local count=0 + while true; do + LISTENER_COUNT="$(kubectl get pods -l actions.github.com/scale-set-name="${SCALE_SET_NAME}" -n "${ARC_NAMESPACE}" --field-selector=status.phase=Running -o=jsonpath='{.items}' | jq 'length')" + RUNNERS_COUNT="$(kubectl get pods -l app.kubernetes.io/component=runner -n "${SCALE_SET_NAMESPACE}" --field-selector=status.phase=Running -o=jsonpath='{.items}' | jq 'length')" + RESOURCES="$(kubectl get pods -A)" + + if [ "${LISTENER_COUNT}" -eq 0 ]; then + echo "Listener has been deleted" + echo "${RESOURCES}" + return 0 + fi + if [ "${count}" -ge 60 ]; then + echo "Timeout waiting for listener to be deleted" + echo "${RESOURCES}" + return 1 + fi + + echo "Waiting for listener to be deleted" + echo "Listener count: ${LISTENER_COUNT} target: 0 | Runners count: ${RUNNERS_COUNT} target: 3" + + sleep 1 + count=$((count+1)) + done +} + +function assert_listener_recreated() { + count=0 + while true; do + LISTENER_COUNT="$(kubectl get pods -l actions.github.com/scale-set-name="${SCALE_SET_NAME}" -n "${ARC_NAMESPACE}" --field-selector=status.phase=Running -o=jsonpath='{.items}' | jq 'length')" + RUNNERS_COUNT="$(kubectl get pods -l app.kubernetes.io/component=runner -n "${SCALE_SET_NAMESPACE}" --field-selector=status.phase=Running -o=jsonpath='{.items}' | jq 'length')" + RESOURCES="$(kubectl get pods -A)" + + if [ "${LISTENER_COUNT}" -eq 1 ]; then + echo "Listener is up!" + echo "${RESOURCES}" + exit 0 + fi + if [ "${count}" -ge 120 ]; then + echo "Timeout waiting for listener to be recreated" + echo "${RESOURCES}" + exit 1 + fi + + echo "Waiting for listener to be recreated" + echo "Listener count: ${LISTENER_COUNT} target: 1 | Runners count: ${RUNNERS_COUNT} target: 0" + + sleep 1 + count=$((count+1)) + done +} + +function main() { + local failed=() + + build_image + create_cluster + install_arc + + install_scale_set || failed+=("install_scale_set") + run_workflow || failed+=("run_workflow_1") + + upgrade_scale_set || failed+=("upgrade_scale_set") + assert_listener_deleted || failed+=("assert_listener_deleted") + assert_listener_recreated || failed+=("assert_listener_recreated") + + INSTALLATION_NAME="${SCALE_SET_NAME}" NAMESPACE="${SCALE_SET_NAMESPACE}" cleanup_scale_set || failed+=("cleanup_scale_set") + NAMESPACE="${ARC_NAMESPACE}" arc_logs + + delete_cluster + + print_results "${failed[@]}" +} + +main