Skip to content

Commit f227e40

Browse files
authored
Update the deployment's default image (#121)
* Update the deployment's default image * Fix the imagepullpolicy * Group testsuite by each kvcp configuration --------- Signed-off-by: lubronzhan <[email protected]>
1 parent 4a402b0 commit f227e40

File tree

3 files changed

+54
-67
lines changed

3 files changed

+54
-67
lines changed

test/e2e/defaultconfig/default_config_test.go

+45-62
Original file line numberDiff line numberDiff line change
@@ -11,69 +11,44 @@ import (
1111
. "github.com/onsi/ginkgo/v2"
1212
. "github.com/onsi/gomega"
1313
"github.com/stretchr/testify/require"
14+
api_errors "k8s.io/apimachinery/pkg/api/errors"
1415
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
16+
"k8s.io/utils/ptr"
1517

1618
tu "github.com/kube-vip/kube-vip-cloud-provider/pkg/testutil"
1719
"github.com/kube-vip/kube-vip-cloud-provider/test/e2e"
1820
)
1921

22+
// Each suite load default manifest from scratch, so that changes on manifest objects won't impact other tests suites.
2023
var f = e2e.NewFramework()
2124

22-
func TestDeployWithDifferentConfig(t *testing.T) {
25+
func TestDeployWithDefaultConfig(t *testing.T) {
2326
RegisterFailHandler(Fail)
2427
RunSpecs(t, "deploy with default config")
2528
}
2629

30+
var _ = BeforeSuite(func() {
31+
// By default, configMap only contains below 3 cidr:
32+
// cidr-default: 192.168.0.200/29
33+
// cidr-plunder: 192.168.0.210/29
34+
// cidr-testing: 192.168.0.220/29
35+
36+
require.NoError(f.T(), f.Deployment.EnsureResources())
37+
})
38+
2739
var _ = AfterSuite(func() {
28-
// Make sure even if test failed, the kube-vip-cloud-provider deployments are cleaned up
40+
// Reset resource requests for other tests.
2941
require.NoError(f.T(), f.Deployment.DeleteResources())
3042
})
3143

32-
var _ = Describe("Default config", func() {
33-
Context("Deploy service in default namespace", func() {
34-
BeforeEach(func() {
35-
// By default, kube-vip-cloud-provider will provide ip for service in any namespaces.
36-
require.NoError(f.T(), f.Deployment.EnsureResources())
37-
})
38-
39-
f.NamespacedTest("create-services", func(namespace string) {
40-
Specify("Service should be reconciled, has ip assigned and correct label", func() {
41-
ctx := context.TODO()
42-
By("Create a service type LB")
43-
svc := tu.NewService("test1", tu.TweakNamespace("default"))
44-
_, err := f.Client.CoreV1().Services(svc.Namespace).Create(ctx, svc, meta_v1.CreateOptions{})
45-
require.NoError(f.T(), err)
46-
47-
By("Service should have a valid IP assigned, and related kube-vip annotations and labels")
48-
require.Eventually(f.T(), func() bool {
49-
svc, err = f.Client.CoreV1().Services(svc.Namespace).Get(ctx, svc.Name, meta_v1.GetOptions{})
50-
if err != nil {
51-
return false
52-
}
53-
return e2e.ServiceIsReconciled(svc) && e2e.ServiceHasIPAssigned(svc)
54-
}, 30*time.Second, time.Second, fmt.Sprintf("Service is not successfully reconciled %v, with error %v", svc, err))
55-
})
56-
})
57-
58-
AfterEach(func() {
59-
// Reset resource requests for other tests.
60-
require.NoError(f.T(), f.Deployment.DeleteResources())
61-
})
62-
})
63-
64-
Context("Deploy service in namespace that kube-vip-cloud-provider is not configured to", func() {
65-
BeforeEach(func() {
66-
// Update configmap to only allocate ip for service in test-2 namespace
67-
f.Deployment.ConfigMap.Data = map[string]string{
68-
"cidr-test-2": "10.0.0.1/24",
69-
}
70-
require.NoError(f.T(), f.Deployment.EnsureResources())
71-
})
44+
var watchedNamespaces = []string{"default", "testing", "plunder"}
7245

46+
var _ = Describe("Default config", func() {
47+
Context("Deploy service in namespace that kube-vip-cloud-provider is configured and is not configured", func() {
7348
f.NamespacedTest("create-services-in-different-namespace", func(namespace string) {
74-
Specify("Service not be reconcile if namespace is not configured namespace test-2, service in default namespace should be reconciled", func() {
49+
Specify("Service not be reconcile if namespace is not configured namespace testing, service in default namespace should be reconciled", func() {
7550
ctx := context.TODO()
76-
By("Create a service type LB in namespace that's not test-2")
51+
By("Create a service type LB in namespace that's not testing")
7752
svc := tu.NewService("test1", tu.TweakNamespace(namespace))
7853
_, err := f.Client.CoreV1().Services(svc.Namespace).Create(ctx, svc, meta_v1.CreateOptions{})
7954
require.NoError(f.T(), err)
@@ -87,25 +62,33 @@ var _ = Describe("Default config", func() {
8762
return !e2e.ServiceIsReconciled(svc) && !e2e.ServiceHasIPAssigned(svc)
8863
}, 30*time.Second, time.Second, fmt.Sprintf("Service is not supposed to have label or annotation %v, with error %v", svc, err))
8964

90-
By("Create a service type LB in test-2 namespace")
91-
svc = tu.NewService("test2", tu.TweakNamespace("test-2"))
92-
_, err = f.Client.CoreV1().Services(svc.Namespace).Create(ctx, svc, meta_v1.CreateOptions{})
93-
require.NoError(f.T(), err)
94-
95-
By("Service should have a valid IP assigned, and related kube-vip annotations and labels")
96-
require.Eventually(f.T(), func() bool {
97-
svc, err = f.Client.CoreV1().Services(svc.Namespace).Get(ctx, svc.Name, meta_v1.GetOptions{})
98-
if err != nil {
65+
for _, ns := range watchedNamespaces {
66+
By("Create a service type LB in watched namespace")
67+
svc = tu.NewService(fmt.Sprintf("test-%s", ns), tu.TweakNamespace(ns))
68+
_, err = f.Client.CoreV1().Services(svc.Namespace).Create(ctx, svc, meta_v1.CreateOptions{})
69+
require.NoError(f.T(), err)
70+
71+
By("Service should have a valid IP assigned, and related kube-vip annotations and labels")
72+
require.Eventually(f.T(), func() bool {
73+
svc, err = f.Client.CoreV1().Services(svc.Namespace).Get(ctx, svc.Name, meta_v1.GetOptions{})
74+
if err != nil {
75+
return false
76+
}
77+
return e2e.ServiceIsReconciled(svc) && e2e.ServiceHasIPAssigned(svc)
78+
}, 30*time.Second, time.Second, fmt.Sprintf("Service is not successfully reconciled %v, with error %v", svc, err))
79+
80+
By("Clean up the service")
81+
err := f.Client.CoreV1().Services(ns).Delete(context.TODO(), svc.Name,
82+
meta_v1.DeleteOptions{PropagationPolicy: ptr.To(meta_v1.DeletePropagationBackground)})
83+
require.Eventually(f.T(), func() bool {
84+
svc, err = f.Client.CoreV1().Services(svc.Namespace).Get(ctx, svc.Name, meta_v1.GetOptions{})
85+
if api_errors.IsNotFound(err) {
86+
return true
87+
}
9988
return false
100-
}
101-
return e2e.ServiceIsReconciled(svc) && e2e.ServiceHasIPAssigned(svc)
102-
}, 30*time.Second, time.Second, fmt.Sprintf("Service is not successfully reconciled %v, with error %v", svc, err))
89+
}, 30*time.Second, time.Second, fmt.Sprintf("Service is not successfully deleted %v, with error %v", svc, err))
90+
}
10391
})
104-
}, "test-2")
105-
106-
AfterEach(func() {
107-
// Reset resource requests for other tests.
108-
require.NoError(f.T(), f.Deployment.DeleteResources())
109-
})
92+
}, watchedNamespaces[1:]...) // Don't delete default namespace.
11093
})
11194
})

test/e2e/deployment.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ func (d *Deployment) DeleteResources() error {
253253
func (d *Deployment) DeleteServiceAccount() error {
254254
// Common case of updating object if exists, create otherwise.
255255
err := d.client.CoreV1().ServiceAccounts(d.ServiceAccount.Namespace).Delete(context.TODO(), d.ServiceAccount.Name,
256-
*&meta_v1.DeleteOptions{PropagationPolicy: ptr.To(meta_v1.DeletePropagationBackground)})
256+
meta_v1.DeleteOptions{PropagationPolicy: ptr.To(meta_v1.DeletePropagationBackground)})
257257
if api_errors.IsNotFound(err) {
258258
return nil
259259
}
@@ -281,7 +281,7 @@ func (d *Deployment) DeleteServiceAccount() error {
281281
func (d *Deployment) DeleteClusterRoleBinding() error {
282282
// Common case of updating object if exists, create otherwise.
283283
err := d.client.RbacV1().ClusterRoleBindings().Delete(context.TODO(), d.ClusterRoleBinding.Name,
284-
*&meta_v1.DeleteOptions{PropagationPolicy: ptr.To(meta_v1.DeletePropagationBackground)})
284+
meta_v1.DeleteOptions{PropagationPolicy: ptr.To(meta_v1.DeletePropagationBackground)})
285285
if api_errors.IsNotFound(err) {
286286
return nil
287287
}
@@ -306,7 +306,7 @@ func (d *Deployment) DeleteClusterRoleBinding() error {
306306
func (d *Deployment) DeleteClusterRole() error {
307307
// Common case of updating object if exists, create otherwise.
308308
err := d.client.RbacV1().ClusterRoles().Delete(context.TODO(), d.ClusterRole.Name,
309-
*&meta_v1.DeleteOptions{PropagationPolicy: ptr.To(meta_v1.DeletePropagationBackground)})
309+
meta_v1.DeleteOptions{PropagationPolicy: ptr.To(meta_v1.DeletePropagationBackground)})
310310
if api_errors.IsNotFound(err) {
311311
return nil
312312
}
@@ -334,7 +334,7 @@ func (d *Deployment) DeleteClusterRole() error {
334334
func (d *Deployment) DeleteConfigMap() error {
335335
// Common case of updating object if exists, create otherwise.
336336
err := d.client.CoreV1().ConfigMaps(d.ConfigMap.Namespace).Delete(context.TODO(), d.ConfigMap.Name,
337-
*&meta_v1.DeleteOptions{PropagationPolicy: ptr.To(meta_v1.DeletePropagationBackground)})
337+
meta_v1.DeleteOptions{PropagationPolicy: ptr.To(meta_v1.DeletePropagationBackground)})
338338
if api_errors.IsNotFound(err) {
339339
return nil
340340
}
@@ -362,7 +362,7 @@ func (d *Deployment) DeleteConfigMap() error {
362362
func (d *Deployment) DeleteDeployment() error {
363363
// Common case of updating object if exists, create otherwise.
364364
err := d.client.AppsV1().Deployments(d.Deployment.Namespace).Delete(context.TODO(), d.Deployment.Name,
365-
*&meta_v1.DeleteOptions{PropagationPolicy: ptr.To(meta_v1.DeletePropagationBackground)})
365+
meta_v1.DeleteOptions{PropagationPolicy: ptr.To(meta_v1.DeletePropagationBackground)})
366366
if api_errors.IsNotFound(err) {
367367
return nil
368368
}

test/e2e/framework.go

+4
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ func NewFramework() *Framework {
6969

7070
require.NoError(t, deployment.UnmarshalResources())
7171

72+
// Update deployment's image
73+
deployment.Deployment.Spec.Template.Spec.Containers[0].Image = kvcpImage
74+
deployment.Deployment.Spec.Template.Spec.Containers[0].ImagePullPolicy = core_v1.PullIfNotPresent
75+
7276
return &Framework{
7377
Client: client,
7478
RetryInterval: time.Second,

0 commit comments

Comments
 (0)