mirror of
https://github.com/kubevela/kubevela.git
synced 2026-02-14 10:00:06 +00:00
Some checks failed
Webhook Upgrade Validation / webhook-upgrade-check (push) Failing after 27s
* refactor: Simplify application auto-update test by removing unnecessary reconciliation waits Signed-off-by: Chaitanya Reddy Onteddu <chaitanyareddy0702@gmail.com> * feat: Add e2e application tests with k3d and webhook validation Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com> * fix: Remove unnecessary blank line in application auto-update test Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com> * feat: Add k3d cleanup step after running application tests Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com> --------- Signed-off-by: Chaitanya Reddy Onteddu <chaitanyareddy0702@gmail.com> Signed-off-by: Ayush Kumar <ayushshyamkumar888@gmail.com> Co-authored-by: Chaitanya Reddy Onteddu <chaitanyareddy0702@gmail.com>
242 lines
11 KiB
Makefile
242 lines
11 KiB
Makefile
.PHONY: e2e-setup-core-pre-hook
|
|
e2e-setup-core-pre-hook:
|
|
sh ./hack/e2e/modify_charts.sh
|
|
|
|
.PHONY: e2e-setup-core-post-hook
|
|
e2e-setup-core-post-hook:
|
|
kubectl wait --for=condition=Available deployment/kubevela-vela-core -n vela-system --timeout=180s
|
|
helm install kruise https://github.com/openkruise/charts/releases/download/kruise-1.1.0/kruise-1.1.0.tgz --set featureGates="PreDownloadImageForInPlaceUpdate=true" --set daemon.socketLocation=/run/k3s/containerd/
|
|
kill -9 $(lsof -it:9098) || true
|
|
go run ./e2e/addon/mock &
|
|
bin/vela addon enable ./e2e/addon/mock/testdata/fluxcd
|
|
bin/vela addon enable ./e2e/addon/mock/testdata/terraform
|
|
# Wait for webhook service endpoints to be ready before enabling addons that require webhook validation
|
|
kubectl wait --for=condition=Ready pod -l app.kubernetes.io/name=vela-core -n vela-system --timeout=180s
|
|
bin/vela addon enable ./e2e/addon/mock/testdata/terraform-alibaba ALICLOUD_ACCESS_KEY=xxx ALICLOUD_SECRET_KEY=yyy ALICLOUD_REGION=cn-beijing
|
|
|
|
timeout 600s bash -c -- 'while true; do kubectl get ns flux-system; if [ $$? -eq 0 ] ; then break; else sleep 5; fi;done'
|
|
kubectl wait --for=condition=Ready pod -l app.kubernetes.io/name=vela-core,app.kubernetes.io/instance=kubevela -n vela-system --timeout=600s
|
|
kubectl wait --for=condition=Ready pod -l app=source-controller -n flux-system --timeout=600s
|
|
kubectl wait --for=condition=Ready pod -l app=helm-controller -n flux-system --timeout=600s
|
|
|
|
.PHONY: e2e-setup-core-wo-auth
|
|
e2e-setup-core-wo-auth:
|
|
helm upgrade --install \
|
|
--create-namespace \
|
|
--namespace vela-system \
|
|
--set image.pullPolicy=IfNotPresent \
|
|
--set image.repository=vela-core-test \
|
|
--set applicationRevisionLimit=5 \
|
|
--set controllerArgs.reSyncPeriod=1m \
|
|
--set optimize.disableComponentRevision=false \
|
|
--set image.tag=$(GIT_COMMIT) \
|
|
--set multicluster.clusterGateway.image.repository=ghcr.io/oam-dev/cluster-gateway \
|
|
--set admissionWebhooks.patch.image.repository=ghcr.io/oam-dev/kube-webhook-certgen/kube-webhook-certgen \
|
|
--set featureGates.enableCueValidation=true \
|
|
--set featureGates.validateResourcesExist=true \
|
|
--wait kubevela ./charts/vela-core \
|
|
--debug
|
|
|
|
.PHONY: e2e-setup-core-w-auth
|
|
e2e-setup-core-w-auth:
|
|
helm upgrade --install \
|
|
--create-namespace \
|
|
--namespace vela-system \
|
|
--set image.pullPolicy=IfNotPresent \
|
|
--set image.repository=vela-core-test \
|
|
--set applicationRevisionLimit=5 \
|
|
--set optimize.disableComponentRevision=false \
|
|
--set image.tag=$(GIT_COMMIT) \
|
|
--wait kubevela \
|
|
./charts/vela-core \
|
|
--set authentication.enabled=true \
|
|
--set authentication.withUser=true \
|
|
--set authentication.groupPattern='*' \
|
|
--set featureGates.zstdResourceTracker=true \
|
|
--set featureGates.zstdApplicationRevision=true \
|
|
--set featureGates.validateComponentWhenSharding=true \
|
|
--set featureGates.validateResourcesExist=true \
|
|
--set multicluster.clusterGateway.enabled=true \
|
|
--set multicluster.clusterGateway.image.repository=ghcr.io/oam-dev/cluster-gateway \
|
|
--set admissionWebhooks.patch.image.repository=ghcr.io/oam-dev/kube-webhook-certgen/kube-webhook-certgen \
|
|
--set sharding.enabled=true \
|
|
--debug
|
|
kubectl get deploy kubevela-vela-core -oyaml -n vela-system | \
|
|
sed 's/schedulable-shards=/shard-id=shard-0/g' | \
|
|
sed 's/instance: kubevela/instance: kubevela-shard/g' | \
|
|
sed 's/shard-id: master/shard-id: shard-0/g' | \
|
|
sed 's/name: kubevela/name: kubevela-shard/g' | \
|
|
kubectl apply -f -
|
|
kubectl wait deployment -n vela-system kubevela-shard-vela-core --for condition=Available=True --timeout=90s
|
|
|
|
|
|
.PHONY: e2e-setup-core
|
|
e2e-setup-core: e2e-setup-core-pre-hook e2e-setup-core-wo-auth e2e-setup-core-post-hook
|
|
|
|
.PHONY: e2e-setup-core-auth
|
|
e2e-setup-core-auth: e2e-setup-core-pre-hook e2e-setup-core-w-auth e2e-setup-core-post-hook
|
|
|
|
.PHONY: e2e-api-test
|
|
e2e-api-test:
|
|
# Run e2e test
|
|
ginkgo -v -skipPackage capability,setup,application -r e2e
|
|
ginkgo -v -r e2e/application
|
|
|
|
|
|
.PHONY: e2e-test
|
|
e2e-test:
|
|
# Run e2e test
|
|
ginkgo -v ./test/e2e-test
|
|
@$(OK) tests pass
|
|
|
|
# Run e2e tests with k3d and webhook validation
|
|
.PHONY: e2e-test-local
|
|
e2e-test-local:
|
|
# Create k3d cluster if needed
|
|
@k3d cluster create kubevela-debug --servers 1 --agents 1 || true
|
|
# Build and load image
|
|
docker build -t vela-core:e2e-test -f Dockerfile . --build-arg=VERSION=e2e-test --build-arg=GITVERSION=test
|
|
k3d image import vela-core:e2e-test -c kubevela-debug
|
|
# Deploy with Helm
|
|
kubectl delete validatingwebhookconfiguration kubevela-vela-core-admission 2>/dev/null || true
|
|
helm upgrade --install kubevela ./charts/vela-core \
|
|
--namespace vela-system --create-namespace \
|
|
--set image.repository=vela-core \
|
|
--set image.tag=e2e-test \
|
|
--set image.pullPolicy=IfNotPresent \
|
|
--set admissionWebhooks.enabled=true \
|
|
--set featureGates.enableCueValidation=true \
|
|
--set featureGates.validateResourcesExist=true \
|
|
--set applicationRevisionLimit=5 \
|
|
--set controllerArgs.reSyncPeriod=1m \
|
|
--wait --timeout 3m
|
|
# Run tests
|
|
ginkgo -v ./test/e2e-test
|
|
@$(OK) tests pass
|
|
|
|
# Run e2e application tests with k3d and webhook validation
|
|
.PHONY: e2e-application-test-local
|
|
e2e-application-test-local:
|
|
# Create k3d cluster if needed
|
|
@k3d cluster create kubevela-debug --servers 1 --agents 1 || true
|
|
# Build and load image
|
|
docker build -t vela-core:e2e-test -f Dockerfile . --build-arg=VERSION=e2e-test --build-arg=GITVERSION=test
|
|
k3d image import vela-core:e2e-test -c kubevela-debug
|
|
# Deploy with Helm
|
|
kubectl delete validatingwebhookconfiguration kubevela-vela-core-admission 2>/dev/null || true
|
|
helm upgrade --install kubevela ./charts/vela-core \
|
|
--namespace vela-system --create-namespace \
|
|
--set image.repository=vela-core \
|
|
--set image.tag=e2e-test \
|
|
--set image.pullPolicy=IfNotPresent \
|
|
--set admissionWebhooks.enabled=true \
|
|
--set featureGates.enableCueValidation=true \
|
|
--set featureGates.validateResourcesExist=true \
|
|
--set applicationRevisionLimit=5 \
|
|
--set controllerArgs.reSyncPeriod=1m \
|
|
--wait --timeout 3m
|
|
# Clean up any leftover vela resources from previous test runs
|
|
@vela ls -n default --quiet 2>/dev/null | tail -n +2 | awk '{print $$1}' | xargs -I {} vela delete {} -n default -y 2>/dev/null || true
|
|
@vela env delete env-application 2>/dev/null || true
|
|
# Run application tests
|
|
ginkgo -v -r e2e/application
|
|
@$(OK) tests pass
|
|
@$(MAKE) k3d-delete
|
|
|
|
# Run main_e2e_test.go with k3d cluster and embedded test binary
|
|
.PHONY: e2e-test-main-local
|
|
e2e-test-main-local:
|
|
@echo "==> Setting up k3d cluster for main_e2e_test..."
|
|
# Delete existing cluster if it exists and recreate
|
|
@k3d cluster delete kubevela-e2e-main 2>/dev/null || true
|
|
@k3d cluster create kubevela-e2e-main --servers 1 --agents 1
|
|
@echo "==> Building test binary with Dockerfile.e2e..."
|
|
# Detect architecture for proper binary naming
|
|
$(eval ARCH := $(shell uname -m | sed 's/x86_64/amd64/; s/aarch64\|arm64/arm64/'))
|
|
@echo " Detected architecture: $(ARCH)"
|
|
# Build test image with embedded e2e test
|
|
# Note: Use 'make e2e-test-main-rebuild' if you get "manager-${ARCH}: not found" errors
|
|
docker build -t vela-core:e2e-main-test -f Dockerfile.e2e . \
|
|
--no-cache \
|
|
--build-arg=TARGETARCH=$(ARCH) \
|
|
--build-arg=VERSION=e2e-main-test \
|
|
--build-arg=GITVERSION=test
|
|
# Load image into k3d cluster
|
|
k3d image import vela-core:e2e-main-test -c kubevela-e2e-main
|
|
@echo "==> Modifying Helm charts to enable e2e test..."
|
|
# Backup original chart
|
|
@cp ./charts/vela-core/templates/kubevela-controller.yaml ./charts/vela-core/templates/kubevela-controller.yaml.bak || true
|
|
# Modify charts to add test flags
|
|
sh ./hack/e2e/modify_charts.sh
|
|
@echo "==> Deploying vela-core with embedded test..."
|
|
# Clean up any existing webhook configs
|
|
kubectl delete validatingwebhookconfiguration kubevela-vela-core-admission 2>/dev/null || true
|
|
# Deploy with test binary and flags
|
|
helm upgrade --install kubevela ./charts/vela-core \
|
|
--namespace vela-system --create-namespace \
|
|
--set image.repository=vela-core \
|
|
--set image.tag=e2e-main-test \
|
|
--set image.pullPolicy=IfNotPresent \
|
|
--set admissionWebhooks.enabled=false \
|
|
--set multicluster.enabled=false \
|
|
--set multicluster.clusterGateway.enabled=false \
|
|
--set featureGates.enableCueValidation=true \
|
|
--set featureGates.validateResourcesExist=true \
|
|
--set applicationRevisionLimit=5 \
|
|
--set controllerArgs.reSyncPeriod=1m \
|
|
--wait --timeout 3m
|
|
@echo "==> Waiting for test to complete..."
|
|
# Give the test time to run (it starts the server and runs tests)
|
|
@sleep 10
|
|
@echo "==> Checking test results from pod logs..."
|
|
# Get the pod name and check logs for test results
|
|
@kubectl logs -n vela-system -l app.kubernetes.io/name=vela-core --tail=100 | grep -E "PASS|FAIL|TestE2EMain" || true
|
|
@echo "==> Test coverage will be available at /workspace/data/e2e-profile.out in the pod"
|
|
# Optionally copy coverage data from pod
|
|
@POD=$$(kubectl get pod -n vela-system -l app.kubernetes.io/name=vela-core -o jsonpath='{.items[0].metadata.name}') && \
|
|
kubectl cp vela-system/$$POD:/workspace/data/e2e-profile.out ./e2e-main-coverage.out 2>/dev/null || \
|
|
echo "Coverage data not yet available or test still running"
|
|
# Restore original chart
|
|
@mv ./charts/vela-core/templates/kubevela-controller.yaml.bak ./charts/vela-core/templates/kubevela-controller.yaml 2>/dev/null || true
|
|
@echo "==> Done. Check pod logs for detailed test output:"
|
|
@echo " kubectl logs -n vela-system -l app.kubernetes.io/name=vela-core -f"
|
|
@$(OK) main_e2e_test setup complete
|
|
|
|
# Clean up k3d cluster used for main_e2e_test
|
|
.PHONY: e2e-test-main-clean
|
|
e2e-test-main-clean:
|
|
@echo "==> Cleaning up k3d cluster for main_e2e_test..."
|
|
k3d cluster delete kubevela-e2e-main || true
|
|
# Restore original chart if backup exists
|
|
@mv ./charts/vela-core/templates/kubevela-controller.yaml.bak ./charts/vela-core/templates/kubevela-controller.yaml 2>/dev/null || true
|
|
@echo "==> Cleanup complete"
|
|
|
|
|
|
.PHONY: e2e-addon-test
|
|
e2e-addon-test:
|
|
cp bin/vela /tmp/
|
|
ginkgo -v ./test/e2e-addon-test
|
|
@$(OK) tests pass
|
|
|
|
.PHONY: e2e-multicluster-test
|
|
e2e-multicluster-test:
|
|
cd ./test/e2e-multicluster-test && go test -timeout=30m -v -ginkgo.v -ginkgo.trace -coverpkg=./... -coverprofile=/tmp/e2e_multicluster_test.out
|
|
@$(OK) tests pass
|
|
|
|
.PHONY: e2e-cleanup
|
|
e2e-cleanup:
|
|
# Clean up
|
|
rm -rf ~/.vela
|
|
|
|
.PHONY: end-e2e-core
|
|
end-e2e-core:
|
|
sh ./hack/e2e/end_e2e_core.sh
|
|
|
|
.PHONY: end-e2e-core-shards
|
|
end-e2e-core-shards: end-e2e-core
|
|
CORE_NAME=kubevela-shard sh ./hack/e2e/end_e2e_core.sh
|
|
|
|
.PHONY: end-e2e
|
|
end-e2e:
|
|
sh ./hack/e2e/end_e2e.sh
|