Skip to content

Commit 3841e0e

Browse files
authored
🌱 update e2e for gc (#494)
* update e2e for gc Signed-off-by: Zhiwei Yin <[email protected]> * wait clustermanager is applied Signed-off-by: Zhiwei Yin <[email protected]> --------- Signed-off-by: Zhiwei Yin <[email protected]>
1 parent ffdcc06 commit 3841e0e

File tree

200 files changed

+19277
-14156
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

200 files changed

+19277
-14156
lines changed

go.mod

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,23 @@ require (
1616
github.com/pkg/errors v0.9.1
1717
github.com/spf13/cobra v1.8.1
1818
github.com/spf13/pflag v1.0.5
19-
google.golang.org/grpc v1.67.0
19+
google.golang.org/grpc v1.68.1
2020
gopkg.in/yaml.v2 v2.4.0
2121
helm.sh/helm/v3 v3.17.3
22-
k8s.io/api v0.32.3
22+
k8s.io/api v0.32.4
2323
k8s.io/apiextensions-apiserver v0.32.2
24-
k8s.io/apimachinery v0.32.3
24+
k8s.io/apimachinery v0.32.4
2525
k8s.io/cli-runtime v0.32.2
26-
k8s.io/client-go v0.32.3
27-
k8s.io/component-base v0.32.3
26+
k8s.io/client-go v0.32.4
27+
k8s.io/component-base v0.32.4
2828
k8s.io/klog/v2 v2.130.1
2929
k8s.io/kubectl v0.32.2
3030
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
31-
open-cluster-management.io/api v0.16.2-0.20250422072120-cadf714c3055
31+
open-cluster-management.io/api v1.0.0
3232
open-cluster-management.io/cluster-proxy v0.7.0
3333
open-cluster-management.io/managed-serviceaccount v0.8.0
34-
open-cluster-management.io/ocm v0.16.1-0.20250422150056-f4b6dcb15929
35-
open-cluster-management.io/sdk-go v0.16.1-0.20250411154302-3a424961ead4
34+
open-cluster-management.io/ocm v1.0.0
35+
open-cluster-management.io/sdk-go v1.0.0
3636
sigs.k8s.io/apiserver-network-proxy v0.29.0
3737
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0
3838
sigs.k8s.io/controller-runtime v0.20.2
@@ -87,13 +87,13 @@ require (
8787
github.com/gogo/protobuf v1.3.2 // indirect
8888
github.com/golang/protobuf v1.5.4 // indirect
8989
github.com/google/btree v1.1.3 // indirect
90-
github.com/google/gnostic-models v0.6.8 // indirect
90+
github.com/google/gnostic-models v0.6.9 // indirect
9191
github.com/google/go-cmp v0.7.0 // indirect
9292
github.com/google/gofuzz v1.2.0 // indirect
9393
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect
9494
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
9595
github.com/gorilla/mux v1.8.1 // indirect
96-
github.com/gorilla/websocket v1.5.1 // indirect
96+
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect
9797
github.com/gosuri/uitable v0.0.4 // indirect
9898
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
9999
github.com/hashicorp/errwrap v1.1.0 // indirect
@@ -141,32 +141,34 @@ require (
141141
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
142142
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
143143
github.com/xlab/treeprint v1.2.0 // indirect
144-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect
145-
go.opentelemetry.io/otel v1.28.0 // indirect
146-
go.opentelemetry.io/otel/metric v1.28.0 // indirect
147-
go.opentelemetry.io/otel/trace v1.28.0 // indirect
144+
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
145+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect
146+
go.opentelemetry.io/otel v1.33.0 // indirect
147+
go.opentelemetry.io/otel/metric v1.33.0 // indirect
148+
go.opentelemetry.io/otel/trace v1.33.0 // indirect
148149
go.uber.org/automaxprocs v1.6.0 // indirect
149-
golang.org/x/crypto v0.36.0 // indirect
150-
golang.org/x/net v0.37.0 // indirect
150+
golang.org/x/crypto v0.37.0 // indirect
151+
golang.org/x/net v0.38.0 // indirect
151152
golang.org/x/oauth2 v0.28.0 // indirect
152-
golang.org/x/sync v0.12.0 // indirect
153+
golang.org/x/sync v0.13.0 // indirect
153154
golang.org/x/sys v0.32.0 // indirect
154-
golang.org/x/term v0.30.0 // indirect
155-
golang.org/x/text v0.23.0 // indirect
156-
golang.org/x/time v0.7.0 // indirect
155+
golang.org/x/term v0.31.0 // indirect
156+
golang.org/x/text v0.24.0 // indirect
157+
golang.org/x/time v0.9.0 // indirect
157158
golang.org/x/tools v0.31.0 // indirect
158-
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
159+
google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 // indirect
159160
google.golang.org/protobuf v1.36.5 // indirect
160161
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
161162
gopkg.in/inf.v0 v0.9.1 // indirect
162163
gopkg.in/yaml.v3 v3.0.1 // indirect
163164
k8s.io/apiserver v0.32.3 // indirect
164165
k8s.io/kube-aggregator v0.32.1 // indirect
165-
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
166+
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
166167
oras.land/oras-go v1.2.5 // indirect
167168
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
168169
sigs.k8s.io/kube-storage-version-migrator v0.0.6-0.20230721195810-5c8923c5ff96 // indirect
169170
sigs.k8s.io/kustomize/api v0.18.0 // indirect
170-
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
171+
sigs.k8s.io/randfill v1.0.0 // indirect
172+
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect
171173
sigs.k8s.io/yaml v1.4.0 // indirect
172174
)

go.sum

Lines changed: 53 additions & 48 deletions
Large diffs are not rendered by default.

test/e2e/clusteradm/addon_create_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package clusteradme2e
44
import (
55
"context"
66
"fmt"
7+
"open-cluster-management.io/clusteradm/test/e2e/util"
78
"time"
89

910
"github.com/onsi/ginkgo/v2"
@@ -35,6 +36,8 @@ var _ = ginkgo.Describe("test clusteradm with addon create", func() {
3536
)
3637
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "clusteradm init error")
3738

39+
util.WaitClusterManagerApplied(operatorClient)
40+
3841
ginkgo.By("managedcluster1 join hub")
3942
err = e2e.Clusteradm().Join(
4043
"--context", e2e.Cluster().ManagedCluster1().Context(),

test/e2e/clusteradm/init_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,11 @@ var _ = ginkgo.Describe("test clusteradm with bootstrap token in singleton mode"
3232

3333
cm, err := operatorClient.OperatorV1().ClusterManagers().Get(context.TODO(), "cluster-manager", metav1.GetOptions{})
3434
gomega.Expect(err).NotTo(gomega.HaveOccurred())
35-
gomega.Expect(len(cm.Spec.RegistrationConfiguration.FeatureGates)).Should(gomega.Equal(1))
35+
36+
util.WaitClusterManagerApplied(operatorClient)
37+
38+
// 2 featureGates: DefaultClusterSet and ResourceCleanup
39+
gomega.Expect(len(cm.Spec.RegistrationConfiguration.FeatureGates)).Should(gomega.Equal(2))
3640

3741
err = e2e.Clusteradm().Init(
3842
"--use-bootstrap-token",
@@ -113,7 +117,8 @@ var _ = ginkgo.Describe("test clusteradm with bootstrap token in singleton mode"
113117
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "clusteradm init error")
114118
cm, err = operatorClient.OperatorV1().ClusterManagers().Get(context.TODO(), "cluster-manager", metav1.GetOptions{})
115119
gomega.Expect(err).NotTo(gomega.HaveOccurred())
116-
gomega.Expect(len(cm.Spec.RegistrationConfiguration.FeatureGates)).Should(gomega.Equal(2))
120+
// 3 featureGates: ManagedClusterAutoApproval, DefaultClusterSet and ResourceCleanup
121+
gomega.Expect(len(cm.Spec.RegistrationConfiguration.FeatureGates)).Should(gomega.Equal(3))
117122

118123
gomega.Eventually(func() error {
119124
return util.ValidateImagePullSecret(kubeClient, "e30=",

test/e2e/clusteradm/joinhubscenario_annotate_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ var _ = ginkgo.Describe("test clusteradm join with annotations", func() {
3030
)
3131
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "clusteradm init error")
3232

33+
util.WaitClusterManagerApplied(operatorClient)
34+
3335
ginkgo.By("managedcluster1 join hub with annotations")
3436
err = e2e.Clusteradm().Join(
3537
"--context", e2e.Cluster().ManagedCluster1().Context(),

test/e2e/clusteradm/joinhubscenario_bootstraptoken_singleton_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ var _ = ginkgo.Describe("test clusteradm with bootstrap token in singleton mode"
2828
)
2929
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "clusteradm init error")
3030

31+
util.WaitClusterManagerApplied(operatorClient)
32+
3133
ginkgo.By("managedcluster1 join hub")
3234
err = e2e.Clusteradm().Join(
3335
"--context", e2e.Cluster().ManagedCluster1().Context(),

test/e2e/clusteradm/joinhubscenario_bootstrsptoken_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package clusteradme2e
44
import (
55
"github.com/onsi/ginkgo/v2"
66
"github.com/onsi/gomega"
7+
"open-cluster-management.io/clusteradm/test/e2e/util"
78
)
89

910
var _ = ginkgo.Describe("test clusteradm with bootstrap token", func() {
@@ -26,6 +27,8 @@ var _ = ginkgo.Describe("test clusteradm with bootstrap token", func() {
2627
)
2728
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "clusteradm init error")
2829

30+
util.WaitClusterManagerApplied(operatorClient)
31+
2932
ginkgo.By("managedcluster1 join hub")
3033
err = e2e.Clusteradm().Join(
3134
"--context", e2e.Cluster().ManagedCluster1().Context(),

test/e2e/clusteradm/joinhubscenario_sa_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package clusteradme2e
44
import (
55
"github.com/onsi/ginkgo/v2"
66
"github.com/onsi/gomega"
7+
"open-cluster-management.io/clusteradm/test/e2e/util"
78
)
89

910
var _ = ginkgo.Describe("test clusteradm with service account", func() {
@@ -25,6 +26,8 @@ var _ = ginkgo.Describe("test clusteradm with service account", func() {
2526
)
2627
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "clusteradm init error")
2728

29+
util.WaitClusterManagerApplied(operatorClient)
30+
2831
ginkgo.By("managedcluster1 join hub")
2932
err = e2e.Clusteradm().Join(
3033
"--context", e2e.Cluster().ManagedCluster1().Context(),

test/e2e/clusteradm/joinhubscenario_timeout_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package clusteradme2e
44
import (
55
"github.com/onsi/ginkgo/v2"
66
"github.com/onsi/gomega"
7+
"open-cluster-management.io/clusteradm/test/e2e/util"
78
)
89

910
var _ = ginkgo.Describe("test clusteradm with timeout", func() {
@@ -25,6 +26,8 @@ var _ = ginkgo.Describe("test clusteradm with timeout", func() {
2526
)
2627
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "clusteradm init error")
2728

29+
util.WaitClusterManagerApplied(operatorClient)
30+
2831
ginkgo.By("managedcluster1 join hub")
2932
err = e2e.Clusteradm().Join(
3033
"--context", e2e.Cluster().ManagedCluster1().Context(),

test/e2e/util/helper.go

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,19 @@ import (
88
"os"
99
"time"
1010

11-
"k8s.io/apimachinery/pkg/api/meta"
12-
clusterapiv1 "open-cluster-management.io/api/cluster/v1"
13-
"open-cluster-management.io/clusteradm/pkg/config"
14-
11+
"github.com/onsi/gomega"
1512
"k8s.io/apimachinery/pkg/api/errors"
13+
"k8s.io/apimachinery/pkg/api/meta"
1614
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1715
"k8s.io/apimachinery/pkg/util/wait"
1816
"k8s.io/client-go/kubernetes"
1917
"k8s.io/client-go/rest"
2018
"k8s.io/client-go/tools/clientcmd"
2119
clusterclient "open-cluster-management.io/api/client/cluster/clientset/versioned"
20+
operatorclient "open-cluster-management.io/api/client/operator/clientset/versioned"
21+
clusterapiv1 "open-cluster-management.io/api/cluster/v1"
22+
operatorv1 "open-cluster-management.io/api/operator/v1"
23+
"open-cluster-management.io/clusteradm/pkg/config"
2224
)
2325

2426
// WaitNamespaceDeleted receive a kubeconfigpath, a context name and a namespace name,
@@ -98,6 +100,32 @@ func DeleteClusterFinalizers(restcfg *rest.Config) error {
98100
return nil
99101
}
100102

103+
func WaitClustersDeleted(restcfg *rest.Config) error {
104+
clientset, err := clusterclient.NewForConfig(restcfg)
105+
if err != nil {
106+
return err
107+
}
108+
109+
gomega.Eventually(func() error {
110+
clusterList, err := clientset.ClusterV1().ManagedClusters().List(context.TODO(), metav1.ListOptions{})
111+
if errors.IsNotFound(err) || len(clusterList.Items) == 0 {
112+
return nil
113+
}
114+
if err != nil {
115+
return err
116+
}
117+
for _, mcl := range clusterList.Items {
118+
err = clientset.ClusterV1().ManagedClusters().Delete(context.TODO(), mcl.Name, metav1.DeleteOptions{})
119+
if err != nil {
120+
return err
121+
}
122+
}
123+
return fmt.Errorf("wait all clusters are deleted")
124+
}, time.Second*120, time.Second*2).Should(gomega.Succeed())
125+
126+
return nil
127+
}
128+
101129
// buildConfigFromFlags build rest config for specified context in the kubeconfigfile.
102130
func buildConfigFromFlags(context, kubeconfigPath string) (*rest.Config, error) {
103131
return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
@@ -129,3 +157,24 @@ func NewTestImagePullCredentialFile(fileName string) string {
129157
func CleanupTestImagePullCredentialFile(fileName string) {
130158
_ = os.Remove(fileName)
131159
}
160+
161+
func WaitClusterManagerApplied(operatorClient operatorclient.Interface) {
162+
gomega.Eventually(func() error {
163+
cm, err := operatorClient.OperatorV1().ClusterManagers().Get(context.TODO(), "cluster-manager", metav1.GetOptions{})
164+
if err != nil {
165+
return err
166+
}
167+
if !meta.IsStatusConditionTrue(cm.Status.Conditions, operatorv1.ConditionClusterManagerApplied) {
168+
return fmt.Errorf("cluster manager is not applied")
169+
}
170+
171+
con := meta.FindStatusCondition(cm.Status.Conditions, operatorv1.ConditionHubRegistrationDegraded)
172+
if con == nil {
173+
return fmt.Errorf("hub registration is not degraded")
174+
}
175+
if con.Status != metav1.ConditionFalse || con.Reason != operatorv1.ReasonRegistrationFunctional {
176+
return fmt.Errorf("hub registration is not functional")
177+
}
178+
return nil
179+
}, time.Second*60, time.Second*2).Should(gomega.Succeed())
180+
}

0 commit comments

Comments
 (0)