|
1 | 1 | #!/bin/bash |
2 | 2 |
|
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. |
5 | 5 | # |
6 | | -# Usage: ./run-node-tests-locally.sh <test-grep> <test-path> [image] |
| 6 | +# Usage: ./run-node-tests-locally.sh <test-path> [grep-pattern] |
7 | 7 | # |
8 | 8 | # 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 |
16 | 13 |
|
17 | 14 | set -e |
18 | 15 |
|
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}" |
22 | 19 |
|
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" |
26 | 28 | exit 1 |
27 | 29 | fi |
28 | 30 |
|
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" |
31 | 40 |
|
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}" |
34 | 45 |
|
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 |
39 | 58 |
|
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 | +) |
42 | 65 |
|
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") |
53 | 68 | fi |
54 | 69 |
|
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") |
66 | 71 |
|
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[@]}" |
81 | 74 |
|
0 commit comments