Skip to content

Commit 2cd08c0

Browse files
add utility to setup configuration at the beginning of the tests
Issue: ZENKO-5259
1 parent e0ee95d commit 2cd08c0

25 files changed

Lines changed: 468 additions & 314 deletions

File tree

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

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -131,21 +131,4 @@ if ! grep -q "backbeat-api.zenko.local" /etc/hosts 2>/dev/null; then
131131
echo "127.0.0.1 ${ZENKO_HOSTS}" | sudo tee -a /etc/hosts
132132
fi
133133

134-
# --- Export endpoint variables ---
135-
# These use the ingress hostnames, reachable from outside the cluster.
136-
137-
export CLOUDSERVER_HOST="s3.zenko.local"
138-
export CLOUDSERVER_ENDPOINT="http://s3.zenko.local"
139-
export BACKBEAT_API_ENDPOINT="http://backbeat-api.zenko.local"
140-
export VAULT_ENDPOINT="http://iam.zenko.local"
141-
export VAULT_STS_ENDPOINT="http://sts.zenko.local"
142-
export VAULT_AUTH_HOST="vault-auth.zenko.local"
143-
export KAFKA_CONNECT_URL="http://kafka-connect.zenko.local/connectors"
144-
145134
echo "=== Endpoints configured for out-of-cluster access ==="
146-
echo " S3: ${CLOUDSERVER_ENDPOINT}"
147-
echo " Backbeat API: ${BACKBEAT_API_ENDPOINT}"
148-
echo " Vault IAM: ${VAULT_ENDPOINT}"
149-
echo " Vault STS: ${VAULT_STS_ENDPOINT}"
150-
echo " Vault Auth: http://${VAULT_AUTH_HOST}"
151-
echo " Kafka Connect: ${KAFKA_CONNECT_URL}"

.github/scripts/end2end/setup-e2e-env.sh

Lines changed: 3 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,6 @@ export MONGO_REPLICA_SET_HOSTS="localhost:${MONGO_PORT}"
4848
# --- 5. Credentials from K8s secrets ---
4949
export ADMIN_ACCESS_KEY_ID=$(kubectl get secret ${ZENKO_NAME}-management-vault-admin-creds.v1 -o jsonpath='{.data.accessKey}' | base64 -d)
5050
export ADMIN_SECRET_ACCESS_KEY=$(kubectl get secret ${ZENKO_NAME}-management-vault-admin-creds.v1 -o jsonpath='{.data.secretKey}' | base64 -d)
51-
export ZENKO_ACCESS_KEY=$(kubectl get secret ${ZENKO_NAME}-account-zenko -o jsonpath='{.data.AccessKeyId}' | base64 -d)
52-
export ZENKO_SECRET_KEY=$(kubectl get secret ${ZENKO_NAME}-account-zenko -o jsonpath='{.data.SecretAccessKey}' | base64 -d)
53-
export ZENKO_SESSION_TOKEN=$(kubectl get secret ${ZENKO_NAME}-account-zenko -o jsonpath='{.data.SessionToken}' | base64 -d)
5451

5552
# CRR account credentials
5653
_src_secret="${ZENKO_NAME}-account-${CRR_SOURCE_ACCOUNT_NAME:-crr-source-account}"
@@ -72,11 +69,8 @@ export CRR_DESTINATION_INFO="{\"AccessKeyId\":\"${DESTINATION_ACCESS_KEY}\",\"Se
7269
export KEYCLOAK_TEST_USER="${OIDC_USERNAME}-norights"
7370
export KEYCLOAK_TEST_PASSWORD=${OIDC_PASSWORD}
7471
export KEYCLOAK_TEST_HOST=${OIDC_ENDPOINT}
75-
export KEYCLOAK_TEST_PORT="80"
7672
export KEYCLOAK_TEST_REALM_NAME=${OIDC_REALM}
7773
export KEYCLOAK_REALM=${OIDC_REALM} # cli-testing KeycloakSetup hook reads KEYCLOAK_REALM from env
78-
export KEYCLOAK_TEST_CLIENT_ID=${OIDC_CLIENT_ID}
79-
export KEYCLOAK_TEST_GRANT_TYPE="password"
8074

8175
# --- 7. Test backend env vars ---
8276
export AWS_BACKEND_SOURCE_LOCATION AWS_BACKEND_DESTINATION_LOCATION
@@ -131,40 +125,8 @@ export TARGET_VERSION=$(sed -n 's/^VERSION="\([^"]*\)"/\1/p' "${ZENKO_ROOT}/VERS
131125
if [ "${SKIP_CTST:-}" = "1" ]; then
132126
echo "SKIP_CTST=1 set, skipping CTST-specific setup"
133127
else
134-
# CTST account & user names
135-
export ZENKO_ACCOUNT_NAME="zenko-ctst"
136-
export STORAGE_MANAGER_USER_NAME="storage_manager"
137-
export STORAGE_ACCOUNT_OWNER_USER_NAME="storage_account_owner"
138-
export DATA_CONSUMER_USER_NAME="data_consumer"
139-
export DATA_ACCESSOR_USER_NAME="data_accessor"
140-
# env vars used by cli-testing's Keycloak.ts seeder
141-
export ACCOUNT="${ZENKO_ACCOUNT_NAME}"
142-
export STORAGE_MANAGER="${STORAGE_MANAGER_USER_NAME}"
143-
export STORAGE_ACCOUNT_OWNER="${STORAGE_ACCOUNT_OWNER_USER_NAME}"
144-
export DATA_CONSUMER="${DATA_CONSUMER_USER_NAME}"
145-
export DATA_ACCESSOR="${DATA_ACCESSOR_USER_NAME}"
128+
export ACCOUNT="zenko-ctst" # cli-testing Keycloak seeder (fallback would be wrong 'AccountTest')
146129
export SEED_KEYCLOAK_DEFAULT_ROLES=true
147-
export ZENKO_PORT="80"
148-
149-
# PRA admin credentials (may not exist for non-PRA runs; ignore errors)
150-
export ADMIN_PRA_ACCESS_KEY_ID=$(kubectl get secret ${ZENKO_NAME}-pra-management-vault-admin-creds.v1 -o jsonpath='{.data.accessKey}' 2>/dev/null | base64 -d 2>/dev/null || echo "")
151-
export ADMIN_PRA_SECRET_ACCESS_KEY=$(kubectl get secret ${ZENKO_NAME}-pra-management-vault-admin-creds.v1 -o jsonpath='{.data.secretKey}' 2>/dev/null | base64 -d 2>/dev/null || echo "")
152-
153-
# --- 11. Service user credentials ---
154-
BACKBEAT_LCBP_1_CREDS=$(kubectl get secret -l app.kubernetes.io/name=backbeat-lcbp-user-creds,app.kubernetes.io/instance=${ZENKO_NAME} -o jsonpath='{.items[0].data.backbeat-lifecycle-bp-1\.json}' | base64 -d)
155-
BACKBEAT_LCC_1_CREDS=$(kubectl get secret -l app.kubernetes.io/name=backbeat-lcc-user-creds,app.kubernetes.io/instance=${ZENKO_NAME} -o jsonpath='{.items[0].data.backbeat-lifecycle-conductor-1\.json}' | base64 -d)
156-
BACKBEAT_LCOP_1_CREDS=$(kubectl get secret -l app.kubernetes.io/name=backbeat-lcop-user-creds,app.kubernetes.io/instance=${ZENKO_NAME} -o jsonpath='{.items[0].data.backbeat-lifecycle-op-1\.json}' | base64 -d)
157-
BACKBEAT_QP_1_CREDS=$(kubectl get secret -l app.kubernetes.io/name=backbeat-qp-user-creds,app.kubernetes.io/instance=${ZENKO_NAME} -o jsonpath='{.items[0].data.backbeat-qp-1\.json}' | base64 -d)
158-
SORBET_FWD_2_ACCESSKEY=$(kubectl get secret -l app.kubernetes.io/name=sorbet-fwd-creds,app.kubernetes.io/instance=${ZENKO_NAME} -o jsonpath='{.items[0].data.accessKey}' | base64 -d)
159-
SORBET_FWD_2_SECRETKEY=$(kubectl get secret -l app.kubernetes.io/name=sorbet-fwd-creds,app.kubernetes.io/instance=${ZENKO_NAME} -o jsonpath='{.items[0].data.secretKey}' | base64 -d)
160-
export SERVICE_USERS_CREDENTIALS=$(echo '{"backbeat-lifecycle-bp-1":'"${BACKBEAT_LCBP_1_CREDS}"',"backbeat-lifecycle-conductor-1":'"${BACKBEAT_LCC_1_CREDS}"',"backbeat-lifecycle-op-1":'"${BACKBEAT_LCOP_1_CREDS}"',"backbeat-qp-1":'"${BACKBEAT_QP_1_CREDS}"',"sorbet-fwd-2":{"accessKey":"'"${SORBET_FWD_2_ACCESSKEY}"'","secretKey":"'"${SORBET_FWD_2_SECRETKEY}"'"}}' | jq -R)
161-
162-
# --- 12. Kafka topics for sorbet ---
163-
SORBET_CONFIG=$(kubectl get secret -l app.kubernetes.io/name=cold-sorbet-config-e2e-azure-archive,app.kubernetes.io/instance=${ZENKO_NAME} \
164-
-o jsonpath='{.items[0].data.config\.json}' | base64 -di)
165-
export KAFKA_DEAD_LETTER_TOPIC=$(echo "${SORBET_CONFIG}" | jq -r '."kafka-dead-letter-topic"')
166-
export KAFKA_OBJECT_TASK_TOPIC=$(echo "${SORBET_CONFIG}" | jq -r '."kafka-object-task-topic"')
167-
export KAFKA_GC_REQUEST_TOPIC=$(echo "${SORBET_CONFIG}" | jq -r '."kafka-gc-request-topic"')
168130

169131
# --- 13. Kafka host from backbeat config + port-forward ---
170132
KAFKA_HOST_PORT_ORIG=$(kubectl get secret -l app.kubernetes.io/name=backbeat-config,app.kubernetes.io/instance=${ZENKO_NAME} \
@@ -235,19 +197,7 @@ else
235197
fi
236198
export PROMETHEUS_SERVICE="${PROMETHEUS_SVC}.${NAMESPACE}.svc.cluster.local"
237199

238-
# --- 14. Zenko CR metadata ---
239-
export TIME_PROGRESSION_FACTOR=$(kubectl get zenko ${ZENKO_NAME} -o jsonpath="{.metadata.annotations.zenko\.io/time-progression-factor}")
240-
export INSTANCE_ID=$(kubectl get zenko ${ZENKO_NAME} -o jsonpath='{.status.instanceID}')
241-
export KAFKA_CLEANER_INTERVAL=$(kubectl get zenko ${ZENKO_NAME} -o jsonpath='{.spec.kafkaCleaner.interval}')
242-
export SORBETD_RESTORE_TIMEOUT=$(kubectl get zenko ${ZENKO_NAME} -o jsonpath='{.spec.sorbet.server.azure.restoreTimeout}')
243-
244-
# Backbeat API (use ingress — already exported as BACKBEAT_API_ENDPOINT)
245-
export BACKBEAT_API_HOST="backbeat-api.zenko.local"
246-
export BACKBEAT_API_PORT="80"
247-
248-
# Utilization service
249-
export UTILIZATION_SERVICE_HOST=$(kubectl get zenko ${ZENKO_NAME} -o jsonpath='{.spec.scuba.api.ingress.hostname}')
250-
export UTILIZATION_SERVICE_PORT="80"
200+
# --- 14. Zenko CR metadata (now fetched by tests_common/configuration.ts via k8s API) ---
251201

252202
# Azure archive settings
253203
export AZURE_ARCHIVE_ACCESS_TIER="Hot"
@@ -286,11 +236,7 @@ else
286236
"subdomain":"${SUBDOMAIN}",
287237
"DRSubdomain":"${DR_SUBDOMAIN:-}",
288238
"ssl":false,
289-
"port":"${ZENKO_PORT}",
290-
"AccountName":"${ZENKO_ACCOUNT_NAME}",
291-
"AdminAccessKey":"${ADMIN_ACCESS_KEY_ID}",
292-
"AdminSecretKey":"${ADMIN_SECRET_ACCESS_KEY}",
293-
"VaultAuthHost":"${VAULT_AUTH_HOST}",
239+
"port":"80",
294240
"NotificationDestination":"${NOTIF_DEST_NAME}",
295241
"NotificationDestinationTopic":"${NOTIF_DEST_TOPIC}",
296242
"NotificationDestinationAlt":"${NOTIF_ALT_DEST_NAME}",
@@ -304,40 +250,18 @@ else
304250
"PrometheusEndpoint":"http://localhost:${PROMETHEUS_PORT}",
305251
"KafkaHosts":"${KAFKA_HOST_PORT}",
306252
"KafkaAuthHosts":"${KAFKA_AUTH_HOST_PORT}",
307-
"KafkaConnectUrl":"${KAFKA_CONNECT_URL}",
308253
"KeycloakUsername":"${OIDC_USERNAME}",
309254
"KeycloakPassword":"${OIDC_PASSWORD}",
310255
"KeycloakTestPassword":"${KEYCLOAK_TEST_PASSWORD}",
311256
"KeycloakHost":"${OIDC_HOST}",
312-
"KeycloakPort":"${KEYCLOAK_TEST_PORT}",
313257
"KeycloakRealm":"${KEYCLOAK_TEST_REALM_NAME}",
314-
"KeycloakClientId":"${KEYCLOAK_TEST_CLIENT_ID}",
315-
"KeycloakGrantType":"${KEYCLOAK_TEST_GRANT_TYPE}",
316-
"StorageManagerUsername":"${STORAGE_MANAGER_USER_NAME}",
317-
"StorageAccountOwnerUsername":"${STORAGE_ACCOUNT_OWNER_USER_NAME}",
318-
"DataConsumerUsername":"${DATA_CONSUMER_USER_NAME}",
319-
"DataAccessorUsername":"${DATA_ACCESSOR_USER_NAME}",
320-
"ServiceUsersCredentials":${SERVICE_USERS_CREDENTIALS},
321258
"AzureAccountName":"${AZURE_ACCOUNT_NAME}",
322259
"AzureAccountKey":"${AZURE_SECRET_KEY}",
323260
"AzureArchiveContainer":"${AZURE_ARCHIVE_BUCKET_NAME}",
324261
"AzureArchiveContainer2":"${AZURE_ARCHIVE_BUCKET_NAME_2:-}",
325262
"AzureArchiveAccessTier":"${AZURE_ARCHIVE_ACCESS_TIER}",
326263
"AzureArchiveManifestTier":"${AZURE_ARCHIVE_MANIFEST_ACCESS_TIER}",
327264
"AzureArchiveQueue":"${AZURE_ARCHIVE_QUEUE_NAME:-}",
328-
"TimeProgressionFactor":"${TIME_PROGRESSION_FACTOR}",
329-
"KafkaObjectTaskTopic":"${KAFKA_OBJECT_TASK_TOPIC}",
330-
"KafkaGCRequestTopic":"${KAFKA_GC_REQUEST_TOPIC}",
331-
"KafkaDeadLetterQueueTopic":"${KAFKA_DEAD_LETTER_TOPIC}",
332-
"InstanceID":"${INSTANCE_ID}",
333-
"BackbeatApiHost":"${BACKBEAT_API_HOST}",
334-
"BackbeatApiPort":"${BACKBEAT_API_PORT}",
335-
"KafkaCleanerInterval":"${KAFKA_CLEANER_INTERVAL}",
336-
"SorbetdRestoreTimeout":"${SORBETD_RESTORE_TIMEOUT}",
337-
"DRAdminAccessKey":"${ADMIN_PRA_ACCESS_KEY_ID}",
338-
"DRAdminSecretKey":"${ADMIN_PRA_SECRET_ACCESS_KEY}",
339-
"UtilizationServiceHost":"${UTILIZATION_SERVICE_HOST}",
340-
"UtilizationServicePort":"${UTILIZATION_SERVICE_PORT}",
341265
"KubeconfigPath":"${KUBECONFIG:-${HOME}/.kube/config}"
342266
}
343267
EOF
@@ -358,24 +282,11 @@ if [ -n "${GITHUB_ENV:-}" ]; then # Don't do it for Codespace
358282
echo "MONGO_AUTH_PASSWORD=$MONGO_AUTH_PASSWORD" >> "$GITHUB_ENV"
359283
echo "ADMIN_ACCESS_KEY_ID=$ADMIN_ACCESS_KEY_ID" >> "$GITHUB_ENV"
360284
echo "ADMIN_SECRET_ACCESS_KEY=$ADMIN_SECRET_ACCESS_KEY" >> "$GITHUB_ENV"
361-
echo "ZENKO_ACCESS_KEY=$ZENKO_ACCESS_KEY" >> "$GITHUB_ENV"
362-
echo "ZENKO_SECRET_KEY=$ZENKO_SECRET_KEY" >> "$GITHUB_ENV"
363-
echo "ZENKO_SESSION_TOKEN=$ZENKO_SESSION_TOKEN" >> "$GITHUB_ENV"
364285
echo "KEYCLOAK_TEST_USER=$KEYCLOAK_TEST_USER" >> "$GITHUB_ENV"
365286
echo "KEYCLOAK_TEST_PASSWORD=$KEYCLOAK_TEST_PASSWORD" >> "$GITHUB_ENV"
366287
echo "KEYCLOAK_TEST_HOST=$KEYCLOAK_TEST_HOST" >> "$GITHUB_ENV"
367-
echo "KEYCLOAK_TEST_PORT=$KEYCLOAK_TEST_PORT" >> "$GITHUB_ENV"
368288
echo "KEYCLOAK_TEST_REALM_NAME=$KEYCLOAK_TEST_REALM_NAME" >> "$GITHUB_ENV"
369289
echo "KEYCLOAK_REALM=$KEYCLOAK_REALM" >> "$GITHUB_ENV"
370-
echo "KEYCLOAK_TEST_CLIENT_ID=$KEYCLOAK_TEST_CLIENT_ID" >> "$GITHUB_ENV"
371-
echo "KEYCLOAK_TEST_GRANT_TYPE=$KEYCLOAK_TEST_GRANT_TYPE" >> "$GITHUB_ENV"
372-
echo "CLOUDSERVER_HOST=$CLOUDSERVER_HOST" >> "$GITHUB_ENV"
373-
echo "CLOUDSERVER_ENDPOINT=$CLOUDSERVER_ENDPOINT" >> "$GITHUB_ENV"
374-
echo "BACKBEAT_API_ENDPOINT=$BACKBEAT_API_ENDPOINT" >> "$GITHUB_ENV"
375-
echo "VAULT_ENDPOINT=$VAULT_ENDPOINT" >> "$GITHUB_ENV"
376-
echo "VAULT_STS_ENDPOINT=$VAULT_STS_ENDPOINT" >> "$GITHUB_ENV"
377-
echo "VAULT_AUTH_HOST=$VAULT_AUTH_HOST" >> "$GITHUB_ENV"
378-
echo "KAFKA_CONNECT_URL=$KAFKA_CONNECT_URL" >> "$GITHUB_ENV"
379290
echo "NODE_EXTRA_CA_CERTS=$NODE_EXTRA_CA_CERTS" >> "$GITHUB_ENV"
380291
echo "MOCHA_FILE=$MOCHA_FILE" >> "$GITHUB_ENV"
381292
echo "VERIFY_CERTIFICATES=$VERIFY_CERTIFICATES" >> "$GITHUB_ENV"

tests/functional/ctst/common/common.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ListObjectVersionsOutput } from '@aws-sdk/client-s3';
22
import { Given, setDefaultTimeout, Then, When } from '@cucumber/cucumber';
33
import { CacheHelper, Constants, Identity, IdentityEnum, S3, Utils } from 'cli-testing';
4+
import { config, ZENKO_ACCOUNT_NAME } from 'tests_common/configuration';
45
import Zenko from 'world/Zenko';
56
import { parseGoDuration, safeJsonParse } from './utils';
67
import assert from 'assert';
@@ -39,8 +40,7 @@ export async function cleanS3Bucket(
3940
// Do not try to clean a bucket with compliance retention
4041
return;
4142
}
42-
Identity.useIdentity(IdentityEnum.ACCOUNT, world.getSaved<string>('accountName') ||
43-
world.parameters.AccountName);
43+
Identity.useIdentity(IdentityEnum.ACCOUNT, world.getSaved<string>('accountName') || ZENKO_ACCOUNT_NAME);
4444
world.resetCommand();
4545
world.addCommandParameter({ bucket: bucketName });
4646
const createdObjects = world.getCreatedObjects();
@@ -143,14 +143,14 @@ async function createBucket(world: Zenko, versioning: string, bucketName: string
143143

144144
Given('a {string} bucket with dot', async function (this: Zenko, versioning: string) {
145145
const preName = this.getSaved<string>('accountName') ||
146-
this.parameters.AccountName || Constants.ACCOUNT_NAME;
146+
ZENKO_ACCOUNT_NAME;
147147
await createBucket(this, versioning,
148148
`${preName}.${Constants.BUCKET_NAME_TEST}${Utils.randomString()}`.toLocaleLowerCase());
149149
});
150150

151151
Given('a {string} bucket', async function (this: Zenko, versioning: string) {
152152
const preName = this.getSaved<string>('accountName') ||
153-
this.parameters.AccountName || Constants.ACCOUNT_NAME;
153+
ZENKO_ACCOUNT_NAME;
154154
await createBucket(this, versioning,
155155
`${preName}${Constants.BUCKET_NAME_TEST}${Utils.randomString()}`.toLocaleLowerCase());
156156
});
@@ -310,7 +310,7 @@ Then('i {string} be able to add user metadata to object {string}',
310310

311311
Then('kafka consumed messages should not take too much place on disk', { timeout: -1 },
312312
async function (this: Zenko) {
313-
const kfkcIntervalSeconds = parseGoDuration(this.parameters.KafkaCleanerInterval);
313+
const kfkcIntervalSeconds = parseGoDuration(config.ZenkoCR.KafkaCleanerInterval);
314314
const checkInterval = kfkcIntervalSeconds * (1000 + 5000);
315315

316316
const timeoutID = setTimeout(() => {
@@ -326,7 +326,7 @@ Then('kafka consumed messages should not take too much place on disk', { timeout
326326
const ignoredTopics = ['dead-letter'];
327327
const allTopics = await kafkaAdmin.listTopics();
328328
const topics: string[] = allTopics
329-
.filter(t => (t.includes(this.parameters.InstanceID) &&
329+
.filter(t => (t.includes(config.ZenkoCR.InstanceID) &&
330330
!ignoredTopics.some(e => t.includes(e))));
331331

332332
const previousOffsets = await getTopicsOffsets(topics, kafkaAdmin);

tests/functional/ctst/common/hooks.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import {
22
Before,
3+
BeforeAll,
34
After,
45
setParallelCanAssign,
56
parallelCanAssignHelpers,
67
ITestCaseHookParameter,
78
} from '@cucumber/cucumber';
89
import Zenko from '../world/Zenko';
910
import { CacheHelper, Identity, WorkCoordination } from 'cli-testing';
11+
import { initConfig, config } from 'tests_common/configuration';
1012
import { prepareQuotaScenarios, teardownQuotaScenarios } from 'steps/quotas/quotas';
1113
import { prepareUtilizationScenarios } from 'steps/utilization/utilizationAPI';
1214
import { prepareMetricsScenarios } from './utils';
@@ -18,7 +20,14 @@ import {
1820
} from './utils';
1921
import { createKubeCustomObjectClient, waitForZenkoToStabilize } from 'steps/utils/kubernetes';
2022

21-
import 'cli-testing/hooks/KeycloakSetup';
23+
BeforeAll(async function () {
24+
// Some hooks are defined in cli-testing and use the configuration,
25+
// we need to have this run before anything else
26+
await initConfig();
27+
console.log("before all ", config);
28+
});
29+
30+
// import 'cli-testing/hooks/KeycloakSetup';
2231
import 'cli-testing/hooks/Logger';
2332
import 'cli-testing/hooks/versionTags';
2433

0 commit comments

Comments
 (0)