Skip to content

Commit 245e27d

Browse files
wait for kafka secret to be available
1 parent 0aa18f9 commit 245e27d

File tree

5 files changed

+90
-94
lines changed

5 files changed

+90
-94
lines changed

.devcontainer/README.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,20 @@ See [tests/ctst/README.md](../tests/ctst/README.md) for more details on building
1414

1515
## Running e2e tests in the codespace
1616

17-
To run the CTST tests in the codespace, head to `.github/script/end2end/` and run `run-e2e-ctst.sh`
18-
script. Some variables need to be exported before running the tests.
17+
### Node tests (mocha)
1918

2019
```bash
21-
env_variables=$(yq eval '.env | to_entries | .[] | .key + "=" + .value' .github/workflows/end2end.yaml | sed 's/\${{[^}]*}}//g') && export $env_variables
22-
export E2E_IMAGE_TAG=latest
23-
export GCP_BACKEND_DESTINATION_LOCATION=
20+
cd tests/zenko_tests/node_tests
21+
./run-node-tests-locally.sh smoke_tests
22+
./run-node-tests-locally.sh cloudserver/bucketGetV2 "should list objects"
23+
./run-node-tests-locally.sh backbeat/tests/crr
24+
```
25+
26+
### CTST tests (cucumber)
2427

25-
cd .github/scripts/end2end/
26-
bash run-e2e-test.sh "end2end" ${E2E_IMAGE_NAME}:${E2E_IMAGE_TAG} "backbeat" "default"
28+
```bash
29+
cd tests/ctst
30+
./run-ctst-locally.sh @yourTag
2731
```
2832

2933
## Accessing s3 service

.devcontainer/setup.sh

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ for i in $(seq 0 $array_length); do
2222
working_dir=$(yq ".runs.steps[$i].working-directory" .github/actions/deploy/action.yaml)
2323
run_command=$(yq ".runs.steps[$i].run" .github/actions/deploy/action.yaml)
2424

25-
# We don't want to run `run-e2e-test.sh` because it is used for linting here, user will run it manually if needed after deployment
26-
# We can't run `configure-e2e.sh` here because it needs an image that is not yet built and sent to kind, will be run after
25+
# We don't want to run `run-e2e-test.sh` here, user will run tests manually after deployment
26+
# We can't run `configure-e2e.sh` here because it needs services to be ready first, will be run after
2727
(
2828
if [[ "$run_command" != "null" && "$run_command" != *"configure-e2e.sh"* && "$run_command" != *"run-e2e-test.sh"* ]]; then
2929
# Inject env 'generated' from previous steps
@@ -47,23 +47,6 @@ for i in $(seq 0 $array_length); do
4747
)
4848
done
4949

50-
(
51-
cd tests/zenko_tests
52-
53-
envsubst < 'e2e-config.yaml.template' > 'e2e-config.yaml'
54-
if [[ "${ENABLE_RING_TESTS}" == "false" ]]; then
55-
yq -i 'del(.locations[] | select(.locationType == "location-scality-ring-s3-v1"))' e2e-config.yaml
56-
fi
57-
58-
if [ -z "$GCP_BACKEND_DESTINATION_LOCATION" ]; then
59-
yq -i 'del(.locations[] | select(.locationType == "location-gcp-v1"))' e2e-config.yaml
60-
fi
61-
62-
docker build -t $E2E_IMAGE_NAME:$E2E_IMAGE_TAG .
63-
kind load docker-image ${E2E_IMAGE_NAME}:${E2E_IMAGE_TAG}
64-
docker rmi ${E2E_IMAGE_NAME}:${E2E_IMAGE_TAG}
65-
)
66-
6750
(
6851
cd .github/scripts/end2end
6952

.github/scripts/end2end/configure-e2e-endpoints.sh

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@ metadata:
3939
namespace: ${NAMESPACE}
4040
annotations:
4141
nginx.ingress.kubernetes.io/proxy-body-size: "0"
42-
labels:
43-
app.kubernetes.io/instance: ${ZENKO_NAME}
44-
app.kubernetes.io/name: ${name##*-}
4542
spec:
4643
ingressClassName: nginx
4744
rules:

.github/scripts/end2end/configure-e2e.sh

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,28 @@ kafka_image() {
4646
}
4747

4848
KAFKA_IMAGE=$(kafka_image)
49-
KAFKA_HOST_PORT=$(kubectl get secret -l app.kubernetes.io/name=backbeat-config,app.kubernetes.io/instance=end2end \
50-
-o jsonpath='{.items[0].data.config\.json}' | base64 -di | jq .kafka.hosts)
51-
KAFKA_HOST_PORT=${KAFKA_HOST_PORT:1:-1}
49+
50+
# Wait for the backbeat-config secret to be created by the operator
51+
echo "Waiting for backbeat-config secret..."
52+
KAFKA_HOST_PORT=""
53+
for i in $(seq 1 60); do
54+
KAFKA_HOST_PORT=$(kubectl get secret \
55+
-l app.kubernetes.io/name=backbeat-config,app.kubernetes.io/instance=${ZENKO_NAME} \
56+
-o jsonpath='{.items[0].data.config\.json}' 2>/dev/null \
57+
| base64 -di 2>/dev/null | jq -r '.kafka.hosts' 2>/dev/null) || true
58+
if [ -n "$KAFKA_HOST_PORT" ] && [ "$KAFKA_HOST_PORT" != "null" ]; then
59+
echo "Found Kafka bootstrap server: $KAFKA_HOST_PORT"
60+
break
61+
fi
62+
KAFKA_HOST_PORT=""
63+
echo " attempt $i/60 — secret not ready yet, retrying in 5s..."
64+
sleep 5
65+
done
66+
67+
if [ -z "$KAFKA_HOST_PORT" ]; then
68+
echo "ERROR: backbeat-config secret not found after 5 minutes"
69+
exit 1
70+
fi
5271

5372
# Creating replication/transition and notification topics in kafka
5473
kubectl run kafka-topics \
@@ -65,7 +84,7 @@ kubectl run kafka-topics \
6584

6685
# Run configuration.py directly
6786
ZENKO_TESTS_DIR="$DIR/../../../tests/zenko_tests"
68-
pip3 install -r "$ZENKO_TESTS_DIR/requirements.txt"
87+
pip3 install --break-system-packages -r "$ZENKO_TESTS_DIR/requirements.txt"
6988

7089
cd "$ZENKO_TESTS_DIR"
7190

Lines changed: 54 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,74 @@
11
#!/bin/bash
22

3-
# Script to run mocha node tests from a GitHub Codespace
4-
# Uses a persistent pod with kubectl cp to sync local changes
3+
# Run mocha node tests locally from a GitHub Codespace.
4+
# Tests run directly on the host using ingress endpoints.
55
#
6-
# Usage: ./run-node-tests-locally.sh <test-grep> <test-path> [image]
6+
# Usage: ./run-node-tests-locally.sh <test-path> [grep-pattern]
77
#
88
# Examples:
9-
# ./run-node-tests-locally.sh "should list objects" "cloudserver/bucketGetV2"
10-
# ./run-node-tests-locally.sh "should list objects" "cloudserver" my-e2e:local
11-
# ./run-node-tests-locally.sh "" "smoke_tests" # Run all smoke tests
12-
# ./run-node-tests-locally.sh "" "cloudserver" # Run all cloudserver tests
13-
#
14-
# If you need to use a different image, delete pod first:
15-
# kubectl delete pod node-tests-local
9+
# ./run-node-tests-locally.sh smoke_tests
10+
# ./run-node-tests-locally.sh cloudserver/bucketGetV2 "should list objects"
11+
# ./run-node-tests-locally.sh backbeat/tests/crr
12+
# ./run-node-tests-locally.sh ./init_test.js
1613

1714
set -e
1815

19-
ZENKO_NAME=${ZENKO_NAME:-end2end}
20-
IMAGE_NAME="${3:-ghcr.io/scality/zenko/zenko-e2e:latest}"
21-
POD_NAME="node-tests-local"
16+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
17+
18+
ZENKO_NAME="${ZENKO_NAME:-end2end}"
2219

23-
if [ "$#" -lt 2 ]; then
24-
echo "Usage: $0 <test-grep> <test-path> [image]"
25-
echo "See script header for examples."
20+
if [ "$#" -lt 1 ]; then
21+
echo "Usage: $0 <test-path> [grep-pattern]"
22+
echo ""
23+
echo "Examples:"
24+
echo " $0 smoke_tests"
25+
echo " $0 cloudserver/bucketGetV2 \"should list objects\""
26+
echo " $0 backbeat/tests/crr"
27+
echo " $0 ./init_test.js"
2628
exit 1
2729
fi
2830

29-
TEST_GREP="$1"
30-
TEST_PATH="$2"
31+
TEST_PATH="$1"
32+
TEST_GREP="${2:-}"
33+
34+
# Set up ingress endpoints (assumes /etc/hosts and ingresses already configured by codespace setup)
35+
export CLOUDSERVER_HOST="s3.zenko.local"
36+
export CLOUDSERVER_ENDPOINT="http://s3.zenko.local"
37+
export BACKBEAT_API_ENDPOINT="http://backbeat-api.zenko.local"
38+
export VAULT_ENDPOINT="http://iam.zenko.local"
39+
export VAULT_STS_ENDPOINT="http://sts.zenko.local"
3140

32-
ZENKO_ACCESS_KEY=$(kubectl get secret end2end-management-account-creds.v1 -o jsonpath='{.data.accessKey}' | base64 -d)
33-
ZENKO_SECRET_KEY=$(kubectl get secret end2end-management-account-creds.v1 -o jsonpath='{.data.secretKey}' | base64 -d)
41+
# Extract CA cert for TLS
42+
ZENKO_CA_CERT_FILE="$(mktemp /tmp/zenko-ca-cert-XXXXXX.pem)"
43+
kubectl get secret zenko-root-ca -o jsonpath='{.data.ca\.crt}' | base64 -d > "${ZENKO_CA_CERT_FILE}"
44+
export NODE_EXTRA_CA_CERTS="${ZENKO_CA_CERT_FILE}"
3445

35-
CLOUDSERVER_ENDPOINT="http://${ZENKO_NAME}-connector-s3api.default.svc.cluster.local:80"
36-
VAULT_ENDPOINT="http://${ZENKO_NAME}-management-vault-iam-admin-api:80"
37-
VAULT_STS_ENDPOINT="http://${ZENKO_NAME}-connector-vault-sts-api:80"
38-
BACKBEAT_API_ENDPOINT="http://${ZENKO_NAME}-management-backbeat-api.default.svc.cluster.local:80"
46+
# Credentials — use management account (always available, unlike test accounts created by CI)
47+
export ADMIN_ACCESS_KEY_ID=$(kubectl get secret ${ZENKO_NAME}-management-vault-admin-creds.v1 -o jsonpath='{.data.accessKey}' | base64 -d)
48+
export ADMIN_SECRET_ACCESS_KEY=$(kubectl get secret ${ZENKO_NAME}-management-vault-admin-creds.v1 -o jsonpath='{.data.secretKey}' | base64 -d)
49+
export ZENKO_ACCESS_KEY=$(kubectl get secret ${ZENKO_NAME}-management-account-creds.v1 -o jsonpath='{.data.accessKey}' | base64 -d)
50+
export ZENKO_SECRET_KEY=$(kubectl get secret ${ZENKO_NAME}-management-account-creds.v1 -o jsonpath='{.data.secretKey}' | base64 -d)
51+
export ZENKO_SESSION_TOKEN=""
52+
53+
# Install dependencies if needed
54+
cd "$SCRIPT_DIR"
55+
if [ ! -d node_modules ]; then
56+
yarn install --frozen-lockfile
57+
fi
3958

40-
# Path inside the zenko-e2e container
41-
CONTAINER_PATH="/usr/local/bin/tests/node_tests"
59+
# Build mocha command
60+
MOCHA_ARGS=(
61+
--exit
62+
--timeout 10000
63+
--recursive
64+
)
4265

43-
if ! kubectl get pod "$POD_NAME" &>/dev/null; then
44-
echo "Loading image into kind cluster, can take 1~3 minutes"
45-
kind load docker-image "$IMAGE_NAME" --name kind || true
46-
47-
kubectl run "$POD_NAME" \
48-
--image="$IMAGE_NAME" \
49-
--restart=Never \
50-
--image-pull-policy=IfNotPresent \
51-
--command -- sleep infinity
52-
kubectl wait --for=condition=Ready pod/"$POD_NAME" --timeout=5m
66+
if [ -n "$TEST_GREP" ]; then
67+
MOCHA_ARGS+=(--grep "$TEST_GREP")
5368
fi
5469

55-
# Copy local test files so that ongoing changes are included
56-
kubectl exec "$POD_NAME" -- rm -rf "$CONTAINER_PATH"/cloudserver "$CONTAINER_PATH"/backbeat "$CONTAINER_PATH"/smoke_tests "$CONTAINER_PATH"/iam_policies "$CONTAINER_PATH"/utils
57-
kubectl cp ./cloudserver "$POD_NAME":"$CONTAINER_PATH"/cloudserver
58-
kubectl cp ./backbeat "$POD_NAME":"$CONTAINER_PATH"/backbeat
59-
kubectl cp ./smoke_tests "$POD_NAME":"$CONTAINER_PATH"/smoke_tests
60-
kubectl cp ./iam_policies "$POD_NAME":"$CONTAINER_PATH"/iam_policies
61-
kubectl cp ./utils "$POD_NAME":"$CONTAINER_PATH"/utils
62-
kubectl cp ./s3SDK.js "$POD_NAME":"$CONTAINER_PATH"/s3SDK.js
63-
kubectl cp ./stsSDK.js "$POD_NAME":"$CONTAINER_PATH"/stsSDK.js
64-
kubectl cp ./VaultClient.js "$POD_NAME":"$CONTAINER_PATH"/VaultClient.js
65-
kubectl cp ./init_test.js "$POD_NAME":"$CONTAINER_PATH"/init_test.js
70+
MOCHA_ARGS+=("$TEST_PATH")
6671

67-
kubectl exec "$POD_NAME" -- env \
68-
ZENKO_ACCESS_KEY="$ZENKO_ACCESS_KEY" \
69-
ZENKO_SECRET_KEY="$ZENKO_SECRET_KEY" \
70-
CLOUDSERVER_ENDPOINT="$CLOUDSERVER_ENDPOINT" \
71-
VAULT_ENDPOINT="$VAULT_ENDPOINT" \
72-
VAULT_STS_ENDPOINT="$VAULT_STS_ENDPOINT" \
73-
BACKBEAT_API_ENDPOINT="$BACKBEAT_API_ENDPOINT" \
74-
sh -c "cd $CONTAINER_PATH && \
75-
npx mocha \
76-
--exit \
77-
--timeout 10000 \
78-
--recursive \
79-
--grep '$TEST_GREP' \
80-
'$TEST_PATH'"
72+
echo "=== Running: npx mocha ${MOCHA_ARGS[*]} ==="
73+
npx mocha "${MOCHA_ARGS[@]}"
8174

0 commit comments

Comments
 (0)