diff --git a/Makefile b/Makefile index 92c0390ed554..ed2575ad4ccf 100644 --- a/Makefile +++ b/Makefile @@ -874,7 +874,7 @@ test-test-extension-junit: $(SETUP_ENVTEST) $(GOTESTSUM) ## Run unit and integra .PHONY: test-e2e test-e2e: $(GINKGO) generate-e2e-templates ## Run the end-to-end tests $(GINKGO) -v --trace -poll-progress-after=$(GINKGO_POLL_PROGRESS_AFTER) \ - -poll-progress-interval=$(GINKGO_POLL_PROGRESS_INTERVAL) --tags=e2e --focus="$(GINKGO_FOCUS)" \ + -poll-progress-interval=$(GINKGO_POLL_PROGRESS_INTERVAL) --tags=e2e --focus="$(GINKGO_FOCUS)" --label-filter=Foo \ $(_SKIP_ARGS) --nodes=$(GINKGO_NODES) --timeout=$(GINKGO_TIMEOUT) --no-color=$(GINKGO_NOCOLOR) \ --output-dir="$(ARTIFACTS)" --junit-report="junit.e2e_suite.1.xml" $(GINKGO_ARGS) $(ROOT_DIR)/$(TEST_DIR)/e2e -- \ -e2e.artifacts-folder="$(ARTIFACTS)" \ diff --git a/scripts/ci-e2e.sh b/scripts/ci-e2e.sh index 242e972c0998..b7ae54a6e65f 100755 --- a/scripts/ci-e2e.sh +++ b/scripts/ci-e2e.sh @@ -114,6 +114,14 @@ docker events > "${ARTIFACTS_LOCAL}/docker-events.txt" 2>&1 & ctr -n moby events > "${ARTIFACTS_LOCAL}/containerd-events.txt" 2>&1 & # Run e2e tests -mkdir -p "$ARTIFACTS" -echo "+ run tests!" -make test-e2e + +ORIGINAL_ARTIFACTS="${ARTIFACTS}" + +for i in {1..10}; do + ARTIFACTS="${ORIGINAL_ARTIFACTS}/${i}" + echo "Using artifacts location: $ARTIFACTS" + mkdir -p "$ARTIFACTS" + echo "+ run tests!" + + make test-e2e +done diff --git a/test/e2e/clusterctl_upgrade_test.go b/test/e2e/clusterctl_upgrade_test.go index 652d35b07510..8aab4efea7d9 100644 --- a/test/e2e/clusterctl_upgrade_test.go +++ b/test/e2e/clusterctl_upgrade_test.go @@ -26,7 +26,7 @@ import ( "sigs.k8s.io/cluster-api/test/framework" ) -var _ = Describe("When testing clusterctl upgrades (v0.4=>current)", func() { +var _ = Describe("When testing clusterctl upgrades (v0.4=>current) [PR-Blocking]", Label("Foo"), func() { ClusterctlUpgradeSpec(ctx, func() ClusterctlUpgradeSpecInput { return ClusterctlUpgradeSpecInput{ E2EConfig: e2eConfig, diff --git a/test/framework/alltypes_helpers.go b/test/framework/alltypes_helpers.go index d5ce38bb5f5c..681271b5922e 100644 --- a/test/framework/alltypes_helpers.go +++ b/test/framework/alltypes_helpers.go @@ -88,8 +88,12 @@ func getClusterAPITypes(ctx context.Context, lister Lister) []metav1.TypeMeta { Eventually(func() error { return lister.List(ctx, crdList, capiProviderOptions()...) }, retryableOperationTimeout, retryableOperationInterval).Should(Succeed(), "failed to list CRDs for CAPI providers") + crdListCertManager := &apiextensionsv1.CustomResourceDefinitionList{} + Eventually(func() error { + return lister.List(ctx, crdListCertManager, client.MatchingLabels{"app": "cert-manager"}) + }, retryableOperationTimeout, retryableOperationInterval).Should(Succeed(), "failed to list CRDs for CAPI providers") - for _, crd := range crdList.Items { + for _, crd := range append(crdList.Items, crdListCertManager.Items...) { for _, version := range crd.Spec.Versions { if !version.Storage { continue @@ -104,6 +108,7 @@ func getClusterAPITypes(ctx context.Context, lister Lister) []metav1.TypeMeta { }) } } + return discoveredTypes } diff --git a/test/framework/clusterctl/clusterctl_helpers.go b/test/framework/clusterctl/clusterctl_helpers.go index d970a5e3f229..c9cbd8ff4628 100644 --- a/test/framework/clusterctl/clusterctl_helpers.go +++ b/test/framework/clusterctl/clusterctl_helpers.go @@ -18,6 +18,7 @@ package clusterctl import ( "context" + "fmt" "os" "path/filepath" "time" @@ -128,6 +129,36 @@ func InitManagementClusterAndWatchControllerLogs(ctx context.Context, input Init }) } } + + certManagerDeployments := framework.GetCertManagerDeployments(ctx, framework.GetControllerDeploymentsInput{ + Lister: client, + }) + for _, deployment := range certManagerDeployments { + fmt.Printf("Pod status of %q:\n%++v\n", deployment.Namespace, deployment.Name, deployment.Status) + // framework.WaitForDeploymentsAvailable(ctx, framework.WaitForDeploymentsAvailableInput{ + // Getter: client, + // Deployment: deployment, + // }, intervals...) + + // Start streaming logs from all controller providers + framework.WatchDeploymentLogsByName(ctx, framework.WatchDeploymentLogsByNameInput{ + GetLister: client, + Cache: input.ClusterProxy.GetCache(ctx), + ClientSet: input.ClusterProxy.GetClientSet(), + Deployment: deployment, + LogPath: filepath.Join(input.LogFolder, "logs", deployment.GetNamespace()), + }) + + // if !input.DisableMetricsCollection { + // framework.WatchPodMetrics(ctx, framework.WatchPodMetricsInput{ + // GetLister: client, + // ClientSet: input.ClusterProxy.GetClientSet(), + // Deployment: deployment, + // MetricsPath: filepath.Join(input.LogFolder, "metrics", deployment.GetNamespace()), + // }) + // } + } + } // UpgradeManagementClusterAndWaitInput is the input type for UpgradeManagementClusterAndWait. diff --git a/test/framework/controller_helpers.go b/test/framework/controller_helpers.go index a4327a37264d..28558ddb5a87 100644 --- a/test/framework/controller_helpers.go +++ b/test/framework/controller_helpers.go @@ -21,6 +21,7 @@ import ( . "github.com/onsi/gomega" appsv1 "k8s.io/api/apps/v1" + "sigs.k8s.io/controller-runtime/pkg/client" ) // GetControllerDeploymentsInput is the input for GetControllerDeployments. @@ -46,6 +47,23 @@ func GetControllerDeployments(ctx context.Context, input GetControllerDeployment return deployments } +// GetControllerDeployments returns all the deployment for the cluster API controllers existing in a management cluster. +func GetCertManagerDeployments(ctx context.Context, input GetControllerDeploymentsInput) []*appsv1.Deployment { + deploymentList := &appsv1.DeploymentList{} + Eventually(func() error { + return input.Lister.List(ctx, deploymentList, client.InNamespace("cert-manager")) + }, retryableOperationTimeout, retryableOperationInterval).Should(Succeed(), "Failed to list deployments for the cluster API controllers") + + deployments := make([]*appsv1.Deployment, 0, len(deploymentList.Items)) + for i := range deploymentList.Items { + d := &deploymentList.Items[i] + if !skipDeployment(d, input.ExcludeNamespaces) { + deployments = append(deployments, d) + } + } + return deployments +} + func skipDeployment(d *appsv1.Deployment, excludeNamespaces []string) bool { if !d.DeletionTimestamp.IsZero() { return true