Skip to content

Commit 4c36498

Browse files
committed
[tests] Add tests for tenant Kubernetes cluster
Signed-off-by: Andrei Kvapil <[email protected]>
1 parent 0b5712f commit 4c36498

3 files changed

Lines changed: 111 additions & 7 deletions

File tree

‎hack/e2e-apps.bats‎

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#!/usr/bin/env bats
2+
# -----------------------------------------------------------------------------
3+
# Cozystack end‑to‑end provisioning test (Bats)
4+
# -----------------------------------------------------------------------------
5+
6+
@test "Create tenant with isolated mode enabled" {
7+
kubectl create -f - <<EOF
8+
apiVersion: apps.cozystack.io/v1alpha1
9+
kind: Tenant
10+
metadata:
11+
name: test
12+
namespace: tenant-root
13+
spec:
14+
etcd: false
15+
host: ""
16+
ingress: false
17+
isolated: true
18+
monitoring: false
19+
resourceQuotas: {}
20+
seaweedfs: false
21+
EOF
22+
kubectl wait hr/tenant-test -n tenant-root --timeout=1m --for=condition=ready
23+
kubectl wait namespace tenant-test --timeout=20s --for=jsonpath='{.status.phase}'=Active
24+
}
25+
26+
@test "Create a tenant Kubernetes control plane" {
27+
kubectl create -f - <<EOF
28+
apiVersion: apps.cozystack.io/v1alpha1
29+
kind: Kubernetes
30+
metadata:
31+
name: test
32+
namespace: tenant-test
33+
spec:
34+
addons:
35+
certManager:
36+
enabled: false
37+
valuesOverride: {}
38+
cilium:
39+
valuesOverride: {}
40+
fluxcd:
41+
enabled: false
42+
valuesOverride: {}
43+
gatewayAPI:
44+
enabled: false
45+
gpuOperator:
46+
enabled: false
47+
valuesOverride: {}
48+
ingressNginx:
49+
enabled: true
50+
hosts: []
51+
valuesOverride: {}
52+
monitoringAgents:
53+
enabled: false
54+
valuesOverride: {}
55+
verticalPodAutoscaler:
56+
valuesOverride: {}
57+
controlPlane:
58+
apiServer:
59+
resources: {}
60+
resourcesPreset: small
61+
controllerManager:
62+
resources: {}
63+
resourcesPreset: micro
64+
konnectivity:
65+
server:
66+
resources: {}
67+
resourcesPreset: micro
68+
replicas: 2
69+
scheduler:
70+
resources: {}
71+
resourcesPreset: micro
72+
host: ""
73+
nodeGroups:
74+
md0:
75+
ephemeralStorage: 20Gi
76+
gpus: []
77+
instanceType: u1.medium
78+
maxReplicas: 10
79+
minReplicas: 0
80+
resources:
81+
cpu: ""
82+
memory: ""
83+
roles:
84+
- ingress-nginx
85+
storageClass: replicated
86+
EOF
87+
kubectl wait namespace tenant-test --timeout=20s --for=jsonpath='{.status.phase}'=Active
88+
timeout 10 sh -ec 'until kubectl get kamajicontrolplane -n tenant-test kubernetes-test; do sleep 1; done'
89+
kubectl wait --for=condition=TenantControlPlaneCreated kamajicontrolplane -n tenant-test kubernetes-test --timeout=4m
90+
kubectl wait tcp -n tenant-test kubernetes-test --timeout=2m --for=jsonpath='{.status.kubernetesResources.version.status}'=Ready
91+
kubectl wait deploy --timeout=4m --for=condition=available -n tenant-test kubernetes-test kubernetes-test-cluster-autoscaler kubernetes-test-kccm kubernetes-test-kcsi-controller
92+
kubectl wait machinedeployment kubernetes-test-md0 -n tenant-test --timeout=1m --for=jsonpath='{.status.replicas}'=2
93+
kubectl wait machinedeployment kubernetes-test-md0 -n tenant-test --timeout=5m --for=jsonpath='{.status.v1beta2.readyReplicas}'=2
94+
}

hack/e2e.bats renamed to hack/e2e-cluster.bats

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33
# Cozystack end‑to‑end provisioning test (Bats)
44
# -----------------------------------------------------------------------------
55

6-
export TALOSCONFIG=$PWD/talosconfig
7-
export KUBECONFIG=$PWD/kubeconfig
8-
96
@test "Environment variable COZYSTACK_INSTALLER_YAML is defined" {
107
if [ -z "${COZYSTACK_INSTALLER_YAML:-}" ]; then
118
echo 'COZYSTACK_INSTALLER_YAML environment variable is not set!' >&2
@@ -376,7 +373,10 @@ EOF
376373

377374
# Verify Grafana via ingress
378375
ingress_ip=$(kubectl get svc root-ingress-controller -n tenant-root -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
379-
curl -sS -k "https://${ingress_ip}" -H 'Host: grafana.example.org' | grep -q Found
376+
if ! curl -sS -k "https://${ingress_ip}" -H 'Host: grafana.example.org' --max-time 30 | grep -q Found; then
377+
echo "Failed to access Grafana via ingress at ${ingress_ip}" >&2
378+
exit 1
379+
fi
380380
}
381381

382382
@test "Keycloak OIDC stack is healthy" {

‎packages/core/testing/Makefile‎

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,13 @@ image-e2e-sandbox:
3030
yq -i '.e2e.image = strenv(IMAGE)' values.yaml
3131
rm -f images/e2e-sandbox.json
3232

33-
test: ## Run the end-to-end tests in existing sandbox.
34-
docker exec "${SANDBOX_NAME}" sh -c 'cd /workspace && export COZYSTACK_INSTALLER_YAML=$$(helm template -n cozy-system installer ./packages/core/installer) && hack/run_test.sh hack/e2e.bats'
33+
test: test-cluster test-apps ## Run the end-to-end tests in existing sandbox
34+
35+
test-cluster: ## Run the end-to-end for creating a cluster
36+
docker exec "${SANDBOX_NAME}" sh -c 'cd /workspace && export COZYSTACK_INSTALLER_YAML=$$(helm template -n cozy-system installer ./packages/core/installer) && hack/run_test.sh hack/e2e-cluster.bats'
37+
38+
test-apps: ## Run the end-to-end tests for apps
39+
docker exec "${SANDBOX_NAME}" sh -c 'cd /workspace && hack/run_test.sh hack/e2e-apps.bats'
3540

3641
delete: ## Remove sandbox from existing Kubernetes cluster.
3742
docker rm -f "${SANDBOX_NAME}" || true
@@ -40,5 +45,10 @@ exec: ## Opens an interactive shell in the sandbox container.
4045
docker exec -ti "${SANDBOX_NAME}" bash
4146

4247
apply: delete
43-
docker run -d --rm --name "${SANDBOX_NAME}" --privileged "$$(yq .e2e.image values.yaml)" sleep infinity
48+
docker run \
49+
-d --rm --name "${SANDBOX_NAME}" --privileged \
50+
-e TALOSCONFIG=/workspace/talosconfig \
51+
-e KUBECONFIG=/workspace/kubeconfig \
52+
"$$(yq .e2e.image values.yaml)" \
53+
sleep infinity
4454
docker cp "${ROOT_DIR}" "${SANDBOX_NAME}":/workspace

0 commit comments

Comments
 (0)