Skip to content

Commit 97441bd

Browse files
committed
adjust etcd tests and implement multigateway tests
1 parent 1922d04 commit 97441bd

File tree

11 files changed

+1465
-140
lines changed

11 files changed

+1465
-140
lines changed

pkg/resource-handler/controller/etcd/etcd_controller_test.go

Lines changed: 117 additions & 119 deletions
Large diffs are not rendered by default.

pkg/resource-handler/controller/etcd/statefulset_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,15 +473,15 @@ func TestBuildStatefulSet(t *testing.T) {
473473
},
474474
},
475475
},
476-
"scheme without Etcd type - should error": {
476+
"scheme with incorrect type - should error": {
477477
etcd: &multigresv1alpha1.Etcd{
478478
ObjectMeta: metav1.ObjectMeta{
479479
Name: "test-etcd",
480480
Namespace: "default",
481481
},
482482
Spec: multigresv1alpha1.EtcdSpec{},
483483
},
484-
scheme: runtime.NewScheme(), // empty scheme without Etcd type
484+
scheme: runtime.NewScheme(), // empty scheme with incorrect type
485485
wantErr: true,
486486
},
487487
}
Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
package multigateway
2+
3+
import (
4+
"testing"
5+
6+
"github.com/google/go-cmp/cmp"
7+
appsv1 "k8s.io/api/apps/v1"
8+
corev1 "k8s.io/api/core/v1"
9+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
"k8s.io/apimachinery/pkg/runtime"
11+
12+
multigresv1alpha1 "github.com/numtide/multigres-operator/api/v1alpha1"
13+
)
14+
15+
func int32Ptr(i int32) *int32 {
16+
return &i
17+
}
18+
19+
func boolPtr(b bool) *bool {
20+
return &b
21+
}
22+
23+
func TestBuildDeployment(t *testing.T) {
24+
scheme := runtime.NewScheme()
25+
_ = multigresv1alpha1.AddToScheme(scheme)
26+
27+
tests := map[string]struct {
28+
mg *multigresv1alpha1.MultiGateway
29+
scheme *runtime.Scheme
30+
want *appsv1.Deployment
31+
wantErr bool
32+
}{
33+
"minimal spec - all defaults": {
34+
mg: &multigresv1alpha1.MultiGateway{
35+
ObjectMeta: metav1.ObjectMeta{
36+
Name: "test-multigateway",
37+
Namespace: "default",
38+
UID: "test-uid",
39+
},
40+
Spec: multigresv1alpha1.MultiGatewaySpec{},
41+
},
42+
scheme: scheme,
43+
want: &appsv1.Deployment{
44+
ObjectMeta: metav1.ObjectMeta{
45+
Name: "test-multigateway",
46+
Namespace: "default",
47+
Labels: map[string]string{
48+
"app.kubernetes.io/name": "multigres",
49+
"app.kubernetes.io/instance": "test-multigateway",
50+
"app.kubernetes.io/component": "multigateway",
51+
"app.kubernetes.io/part-of": "multigres",
52+
"app.kubernetes.io/managed-by": "multigres-operator",
53+
"multigres.com/cell": "multigres-global-topo",
54+
},
55+
OwnerReferences: []metav1.OwnerReference{
56+
{
57+
APIVersion: "multigres.com/v1alpha1",
58+
Kind: "MultiGateway",
59+
Name: "test-multigateway",
60+
UID: "test-uid",
61+
Controller: boolPtr(true),
62+
BlockOwnerDeletion: boolPtr(true),
63+
},
64+
},
65+
},
66+
Spec: appsv1.DeploymentSpec{
67+
Replicas: int32Ptr(2),
68+
Selector: &metav1.LabelSelector{
69+
MatchLabels: map[string]string{
70+
"app.kubernetes.io/name": "multigres",
71+
"app.kubernetes.io/instance": "test-multigateway",
72+
"app.kubernetes.io/component": "multigateway",
73+
"app.kubernetes.io/part-of": "multigres",
74+
"app.kubernetes.io/managed-by": "multigres-operator",
75+
"multigres.com/cell": "multigres-global-topo",
76+
},
77+
},
78+
Template: corev1.PodTemplateSpec{
79+
ObjectMeta: metav1.ObjectMeta{
80+
Labels: map[string]string{
81+
"app.kubernetes.io/name": "multigres",
82+
"app.kubernetes.io/instance": "test-multigateway",
83+
"app.kubernetes.io/component": "multigateway",
84+
"app.kubernetes.io/part-of": "multigres",
85+
"app.kubernetes.io/managed-by": "multigres-operator",
86+
"multigres.com/cell": "multigres-global-topo",
87+
},
88+
},
89+
Spec: corev1.PodSpec{
90+
Containers: []corev1.Container{
91+
{
92+
Name: "multigateway",
93+
Image: DefaultImage,
94+
Resources: corev1.ResourceRequirements{},
95+
Env: buildContainerEnv(),
96+
Ports: buildContainerPorts(
97+
&multigresv1alpha1.MultiGateway{},
98+
),
99+
},
100+
},
101+
},
102+
},
103+
},
104+
},
105+
},
106+
"custom replicas and image": {
107+
mg: &multigresv1alpha1.MultiGateway{
108+
ObjectMeta: metav1.ObjectMeta{
109+
Name: "test-multigateway",
110+
Namespace: "default",
111+
UID: "test-uid",
112+
},
113+
Spec: multigresv1alpha1.MultiGatewaySpec{
114+
Replicas: int32Ptr(3),
115+
Image: "foo/bar:1.2.3",
116+
},
117+
},
118+
scheme: scheme,
119+
want: &appsv1.Deployment{
120+
ObjectMeta: metav1.ObjectMeta{
121+
Name: "test-multigateway",
122+
Namespace: "default",
123+
Labels: map[string]string{
124+
"app.kubernetes.io/name": "multigres",
125+
"app.kubernetes.io/instance": "test-multigateway",
126+
"app.kubernetes.io/component": "multigateway",
127+
"app.kubernetes.io/part-of": "multigres",
128+
"app.kubernetes.io/managed-by": "multigres-operator",
129+
"multigres.com/cell": "multigres-global-topo",
130+
},
131+
OwnerReferences: []metav1.OwnerReference{
132+
{
133+
APIVersion: "multigres.com/v1alpha1",
134+
Kind: "MultiGateway",
135+
Name: "test-multigateway",
136+
UID: "test-uid",
137+
Controller: boolPtr(true),
138+
BlockOwnerDeletion: boolPtr(true),
139+
},
140+
},
141+
},
142+
Spec: appsv1.DeploymentSpec{
143+
Replicas: int32Ptr(3),
144+
Selector: &metav1.LabelSelector{
145+
MatchLabels: map[string]string{
146+
"app.kubernetes.io/name": "multigres",
147+
"app.kubernetes.io/instance": "test-multigateway",
148+
"app.kubernetes.io/component": "multigateway",
149+
"app.kubernetes.io/part-of": "multigres",
150+
"app.kubernetes.io/managed-by": "multigres-operator",
151+
"multigres.com/cell": "multigres-global-topo",
152+
},
153+
},
154+
Template: corev1.PodTemplateSpec{
155+
ObjectMeta: metav1.ObjectMeta{
156+
Labels: map[string]string{
157+
"app.kubernetes.io/name": "multigres",
158+
"app.kubernetes.io/instance": "test-multigateway",
159+
"app.kubernetes.io/component": "multigateway",
160+
"app.kubernetes.io/part-of": "multigres",
161+
"app.kubernetes.io/managed-by": "multigres-operator",
162+
"multigres.com/cell": "multigres-global-topo",
163+
},
164+
},
165+
Spec: corev1.PodSpec{
166+
Containers: []corev1.Container{
167+
{
168+
Name: "multigateway",
169+
Image: "foo/bar:1.2.3",
170+
Resources: corev1.ResourceRequirements{},
171+
Env: buildContainerEnv(),
172+
Ports: buildContainerPorts(
173+
&multigresv1alpha1.MultiGateway{},
174+
),
175+
},
176+
},
177+
},
178+
},
179+
},
180+
},
181+
},
182+
"scheme with incorrect type - should error": {
183+
mg: &multigresv1alpha1.MultiGateway{
184+
ObjectMeta: metav1.ObjectMeta{
185+
Name: "test-multigateway",
186+
Namespace: "default",
187+
},
188+
Spec: multigresv1alpha1.MultiGatewaySpec{},
189+
},
190+
scheme: runtime.NewScheme(), // empty scheme with incorrect type
191+
wantErr: true,
192+
},
193+
}
194+
195+
for name, tc := range tests {
196+
t.Run(name, func(t *testing.T) {
197+
got, err := BuildDeployment(tc.mg, tc.scheme)
198+
199+
if (err != nil) != tc.wantErr {
200+
t.Errorf("BuildDeployment() error = %v, wantErr %v", err, tc.wantErr)
201+
return
202+
}
203+
204+
if tc.wantErr {
205+
return
206+
}
207+
208+
if diff := cmp.Diff(tc.want, got); diff != "" {
209+
t.Errorf("BuildDeployment() mismatch (-want +got):\n%s", diff)
210+
}
211+
})
212+
}
213+
}

pkg/resource-handler/controller/multigateway/dummy.go

Lines changed: 0 additions & 5 deletions
This file was deleted.

pkg/resource-handler/controller/multigateway/multigateway_controller.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func (r *MultiGatewayReconciler) Reconcile(
7272
}
7373

7474
// Reconcile Service
75-
if err := r.reconcileClientService(ctx, mg); err != nil {
75+
if err := r.reconcileService(ctx, mg); err != nil {
7676
logger.Error(err, "Failed to reconcile client Service")
7777
return ctrl.Result{}, err
7878
}
@@ -143,14 +143,14 @@ func (r *MultiGatewayReconciler) reconcileDeployment(
143143
return nil
144144
}
145145

146-
// reconcileClientService creates or updates the client Service for MultiGateway.
147-
func (r *MultiGatewayReconciler) reconcileClientService(
146+
// reconcileService creates or updates the client Service for MultiGateway.
147+
func (r *MultiGatewayReconciler) reconcileService(
148148
ctx context.Context,
149149
mg *multigresv1alpha1.MultiGateway,
150150
) error {
151-
desired, err := BuildClientService(mg, r.Scheme)
151+
desired, err := BuildService(mg, r.Scheme)
152152
if err != nil {
153-
return fmt.Errorf("failed to build client Service: %w", err)
153+
return fmt.Errorf("failed to build Service: %w", err)
154154
}
155155

156156
existing := &corev1.Service{}
@@ -159,19 +159,19 @@ func (r *MultiGatewayReconciler) reconcileClientService(
159159
if errors.IsNotFound(err) {
160160
// Create new Service
161161
if err := r.Create(ctx, desired); err != nil {
162-
return fmt.Errorf("failed to create client Service: %w", err)
162+
return fmt.Errorf("failed to create Service: %w", err)
163163
}
164164
return nil
165165
}
166-
return fmt.Errorf("failed to get client Service: %w", err)
166+
return fmt.Errorf("failed to get Service: %w", err)
167167
}
168168

169169
// Update existing Service
170170
existing.Spec.Ports = desired.Spec.Ports
171171
existing.Spec.Selector = desired.Spec.Selector
172172
existing.Labels = desired.Labels
173173
if err := r.Update(ctx, existing); err != nil {
174-
return fmt.Errorf("failed to update client Service: %w", err)
174+
return fmt.Errorf("failed to update Service: %w", err)
175175
}
176176

177177
return nil

0 commit comments

Comments
 (0)