diff --git a/Makefile b/Makefile index 6ea3ffd5..99309f4e 100644 --- a/Makefile +++ b/Makefile @@ -47,7 +47,6 @@ assets: test: make -C packages/core/testing apply make -C packages/core/testing test - #make -C packages/core/testing test-applications generate: hack/update-codegen.sh diff --git a/hack/e2e.application.sh b/hack/e2e.application.sh deleted file mode 100755 index 792630de..00000000 --- a/hack/e2e.application.sh +++ /dev/null @@ -1,165 +0,0 @@ -#!/bin/bash - -RED='\033[0;31m' -GREEN='\033[0;32m' -RESET='\033[0m' -YELLOW='\033[0;33m' - - -ROOT_NS="tenant-root" -TEST_TENANT="tenant-e2e" - -values_base_path="/hack/testdata/" -checks_base_path="/hack/testdata/" - -function delete_hr() { - local release_name="$1" - local namespace="$2" - - if [[ -z "$release_name" ]]; then - echo -e "${RED}Error: Release name is required.${RESET}" - exit 1 - fi - - if [[ -z "$namespace" ]]; then - echo -e "${RED}Error: Namespace name is required.${RESET}" - exit 1 - fi - - if [[ "$release_name" == "tenant-e2e" ]]; then - echo -e "${YELLOW}Skipping deletion for release tenant-e2e.${RESET}" - return 0 - fi - - kubectl delete helmrelease $release_name -n $namespace -} - -function install_helmrelease() { - local release_name="$1" - local namespace="$2" - local chart_path="$3" - local repo_name="$4" - local repo_ns="$5" - local values_file="$6" - - if [[ -z "$release_name" ]]; then - echo -e "${RED}Error: Release name is required.${RESET}" - exit 1 - fi - - if [[ -z "$namespace" ]]; then - echo -e "${RED}Error: Namespace name is required.${RESET}" - exit 1 - fi - - if [[ -z "$chart_path" ]]; then - echo -e "${RED}Error: Chart path name is required.${RESET}" - exit 1 - fi - - if [[ -n "$values_file" && -f "$values_file" ]]; then - local values_section - values_section=$(echo " values:" && sed 's/^/ /' "$values_file") - fi - - local helmrelease_file=$(mktemp /tmp/HelmRelease.XXXXXX.yaml) - { - echo "apiVersion: helm.toolkit.fluxcd.io/v2" - echo "kind: HelmRelease" - echo "metadata:" - echo " labels:" - echo " cozystack.io/ui: \"true\"" - echo " name: \"$release_name\"" - echo " namespace: \"$namespace\"" - echo "spec:" - echo " chart:" - echo " spec:" - echo " chart: \"$chart_path\"" - echo " reconcileStrategy: Revision" - echo " sourceRef:" - echo " kind: HelmRepository" - echo " name: \"$repo_name\"" - echo " namespace: \"$repo_ns\"" - echo " version: '*'" - echo " interval: 1m0s" - echo " timeout: 5m0s" - [[ -n "$values_section" ]] && echo "$values_section" - } > "$helmrelease_file" - - kubectl apply -f "$helmrelease_file" - - rm -f "$helmrelease_file" -} - -function install_tenant (){ - local release_name="$1" - local namespace="$2" - local values_file="${values_base_path}tenant/values.yaml" - local repo_name="cozystack-apps" - local repo_ns="cozy-public" - install_helmrelease "$release_name" "$namespace" "tenant" "$repo_name" "$repo_ns" "$values_file" -} - -function make_extra_checks(){ - local checks_file="$1" - echo "after exec make $checks_file" - if [[ -n "$checks_file" && -f "$checks_file" ]]; then - echo -e "${YELLOW}Start extra checks with file: ${checks_file}${RESET}" - - fi -} - -function check_helmrelease_status() { - local release_name="$1" - local namespace="$2" - local checks_file="$3" - local timeout=300 # Timeout in seconds - local interval=5 # Interval between checks in seconds - local elapsed=0 - - - while [[ $elapsed -lt $timeout ]]; do - local status_output - status_output=$(kubectl get helmrelease "$release_name" -n "$namespace" -o json | jq -r '.status.conditions[-1].reason') - - if [[ "$status_output" == "InstallSucceeded" || "$status_output" == "UpgradeSucceeded" ]]; then - echo -e "${GREEN}Helm release '$release_name' is ready.${RESET}" - make_extra_checks "$checks_file" - delete_hr $release_name $namespace - return 0 - elif [[ "$status_output" == "InstallFailed" ]]; then - echo -e "${RED}Helm release '$release_name': InstallFailed${RESET}" - exit 1 - else - echo -e "${YELLOW}Helm release '$release_name' is not ready. Current status: $status_output${RESET}" - fi - - sleep "$interval" - elapsed=$((elapsed + interval)) - done - - echo -e "${RED}Timeout reached. Helm release '$release_name' is still not ready after $timeout seconds.${RESET}" - exit 1 -} - -chart_name="$1" - -if [ -z "$chart_name" ]; then - echo -e "${RED}No chart name provided. Exiting...${RESET}" - exit 1 -fi - - -checks_file="${checks_base_path}${chart_name}/check.sh" -repo_name="cozystack-apps" -repo_ns="cozy-public" -release_name="$chart_name-e2e" -values_file="${values_base_path}${chart_name}/values.yaml" - -install_tenant $TEST_TENANT $ROOT_NS -check_helmrelease_status $TEST_TENANT $ROOT_NS "${checks_base_path}tenant/check.sh" - -echo -e "${YELLOW}Running tests for chart: $chart_name${RESET}" - -install_helmrelease $release_name $TEST_TENANT $chart_name $repo_name $repo_ns $values_file -check_helmrelease_status $release_name $TEST_TENANT $checks_file diff --git a/hack/testdata/http-cache/check.sh b/hack/testdata/http-cache/check.sh deleted file mode 100644 index 61c7ebff..00000000 --- a/hack/testdata/http-cache/check.sh +++ /dev/null @@ -1 +0,0 @@ -return 0 diff --git a/hack/testdata/http-cache/values.yaml b/hack/testdata/http-cache/values.yaml deleted file mode 100644 index 2674c1c3..00000000 --- a/hack/testdata/http-cache/values.yaml +++ /dev/null @@ -1,2 +0,0 @@ -endpoints: - - 8.8.8.8:443 diff --git a/hack/testdata/kubernetes/check.sh b/hack/testdata/kubernetes/check.sh deleted file mode 100644 index 61c7ebff..00000000 --- a/hack/testdata/kubernetes/check.sh +++ /dev/null @@ -1 +0,0 @@ -return 0 diff --git a/hack/testdata/kubernetes/values.yaml b/hack/testdata/kubernetes/values.yaml deleted file mode 100644 index 71e290c5..00000000 --- a/hack/testdata/kubernetes/values.yaml +++ /dev/null @@ -1,62 +0,0 @@ -## @section Common parameters - -## @param host The hostname used to access the Kubernetes cluster externally (defaults to using the cluster name as a subdomain for the tenant host). -## @param controlPlane.replicas Number of replicas for Kubernetes contorl-plane components -## @param storageClass StorageClass used to store user data -## -host: "" -controlPlane: - replicas: 2 -storageClass: replicated - -## @param nodeGroups [object] nodeGroups configuration -## -nodeGroups: - md0: - minReplicas: 0 - maxReplicas: 10 - instanceType: "u1.medium" - ephemeralStorage: 20Gi - roles: - - ingress-nginx - - resources: - cpu: "" - memory: "" - -## @section Cluster Addons -## -addons: - - ## Cert-manager: automatically creates and manages SSL/TLS certificate - ## - certManager: - ## @param addons.certManager.enabled Enables the cert-manager - ## @param addons.certManager.valuesOverride Custom values to override - enabled: true - valuesOverride: {} - - ## Ingress-NGINX Controller - ## - ingressNginx: - ## @param addons.ingressNginx.enabled Enable Ingress-NGINX controller (expect nodes with 'ingress-nginx' role) - ## @param addons.ingressNginx.valuesOverride Custom values to override - ## - enabled: true - ## @param addons.ingressNginx.hosts List of domain names that should be passed through to the cluster by upper cluster - ## e.g: - ## hosts: - ## - example.org - ## - foo.example.net - ## - hosts: [] - valuesOverride: {} - - ## Flux CD - ## - fluxcd: - ## @param addons.fluxcd.enabled Enables Flux CD - ## @param addons.fluxcd.valuesOverride Custom values to override - ## - enabled: true - valuesOverride: {} diff --git a/hack/testdata/nats/check.sh b/hack/testdata/nats/check.sh deleted file mode 100644 index 61c7ebff..00000000 --- a/hack/testdata/nats/check.sh +++ /dev/null @@ -1 +0,0 @@ -return 0 diff --git a/hack/testdata/nats/values.yaml b/hack/testdata/nats/values.yaml deleted file mode 100644 index 7044641c..00000000 --- a/hack/testdata/nats/values.yaml +++ /dev/null @@ -1,10 +0,0 @@ - -## @section Common parameters - -## @param external Enable external access from outside the cluster -## @param replicas Persistent Volume size for NATS -## @param storageClass StorageClass used to store the data -## -external: false -replicas: 2 -storageClass: "" diff --git a/hack/testdata/tenant/check.sh b/hack/testdata/tenant/check.sh deleted file mode 100644 index 61c7ebff..00000000 --- a/hack/testdata/tenant/check.sh +++ /dev/null @@ -1 +0,0 @@ -return 0 diff --git a/hack/testdata/tenant/values.yaml b/hack/testdata/tenant/values.yaml deleted file mode 100644 index 3e75d05b..00000000 --- a/hack/testdata/tenant/values.yaml +++ /dev/null @@ -1,6 +0,0 @@ -host: "" -etcd: false -monitoring: false -ingress: false -seaweedfs: false -isolated: true diff --git a/packages/core/testing/Makefile b/packages/core/testing/Makefile index 747d4507..7b1eb049 100755 --- a/packages/core/testing/Makefile +++ b/packages/core/testing/Makefile @@ -11,14 +11,6 @@ include ../../../scripts/common-envs.mk help: ## Show this help. @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) -show: - helm template -n $(NAMESPACE) $(NAME) . - -apply: ## Create sandbox in existing Kubernetes cluster. - helm template -n $(NAMESPACE) $(NAME) . | kubectl apply -f - - -diff: - helm template -n $(NAMESPACE) $(NAME) . | kubectl diff -f - image: image-e2e-sandbox @@ -39,26 +31,11 @@ image-e2e-sandbox: test: ## Run the end-to-end tests in existing sandbox. docker exec "${SANDBOX_NAME}" sh -c 'cd /workspace && export COZYSTACK_INSTALLER_YAML=$$(helm template -n cozy-system installer ./packages/core/installer) && hack/e2e.sh' -test-applications: ## Run the end-to-end tests in existing sandbox for applications. - for app in $(TESTING_APPS); do \ - docker exec ${SANDBOX_NAME} bash -c "/hack/e2e.application.sh $${app}"; \ - done - docker exec ${SANDBOX_NAME} bash -c "kubectl get hr -A | grep -v 'True'" - delete: ## Remove sandbox from existing Kubernetes cluster. docker rm -f "${SANDBOX_NAME}" || true exec: ## Opens an interactive shell in the sandbox container. - docker exec -ti "${SANDBOX_NAME}" -- bash - -proxy: sync-hosts ## Enable a SOCKS5 proxy server; mirrord and gost must be installed. - mirrord exec --target deploy/cozystack-e2e-sandbox --target-namespace cozy-e2e-tests -- gost -L=127.0.0.1:10080 - -login: ## Downloads the kubeconfig into a temporary directory and runs a shell with the sandbox environment; mirrord must be installed. - mirrord exec --target deploy/cozystack-e2e-sandbox --target-namespace cozy-e2e-tests -- "$$SHELL" - -sync-hosts: - kubectl exec -n $(NAMESPACE) deploy/cozystack-e2e-$(NAME) -- sh -c 'kubectl get ing -A -o go-template='\''{{ "127.0.0.1 localhost\n"}}{{ range .items }}{{ range .status.loadBalancer.ingress }}{{ .ip }}{{ end }} {{ range .spec.rules }}{{ .host }}{{ end }}{{ "\n" }}{{ end }}'\'' > /etc/hosts' + docker exec -ti "${SANDBOX_NAME}" bash apply: delete docker run -d --rm --name "${SANDBOX_NAME}" --privileged "$$(yq .e2e.image values.yaml)" sleep infinity