Skip to content

Commit 6ec9294

Browse files
committed
adjust etcd tests and implement multigateway tests
1 parent 1922d04 commit 6ec9294

File tree

11 files changed

+1455
-140
lines changed

11 files changed

+1455
-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: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
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(&multigresv1alpha1.MultiGateway{}),
97+
},
98+
},
99+
},
100+
},
101+
},
102+
},
103+
},
104+
"custom replicas and image": {
105+
mg: &multigresv1alpha1.MultiGateway{
106+
ObjectMeta: metav1.ObjectMeta{
107+
Name: "test-multigateway",
108+
Namespace: "default",
109+
UID: "test-uid",
110+
},
111+
Spec: multigresv1alpha1.MultiGatewaySpec{
112+
Replicas: int32Ptr(3),
113+
Image: "foo/bar:1.2.3",
114+
},
115+
},
116+
scheme: scheme,
117+
want: &appsv1.Deployment{
118+
ObjectMeta: metav1.ObjectMeta{
119+
Name: "test-multigateway",
120+
Namespace: "default",
121+
Labels: map[string]string{
122+
"app.kubernetes.io/name": "multigres",
123+
"app.kubernetes.io/instance": "test-multigateway",
124+
"app.kubernetes.io/component": "multigateway",
125+
"app.kubernetes.io/part-of": "multigres",
126+
"app.kubernetes.io/managed-by": "multigres-operator",
127+
"multigres.com/cell": "multigres-global-topo",
128+
},
129+
OwnerReferences: []metav1.OwnerReference{
130+
{
131+
APIVersion: "multigres.com/v1alpha1",
132+
Kind: "MultiGateway",
133+
Name: "test-multigateway",
134+
UID: "test-uid",
135+
Controller: boolPtr(true),
136+
BlockOwnerDeletion: boolPtr(true),
137+
},
138+
},
139+
},
140+
Spec: appsv1.DeploymentSpec{
141+
Replicas: int32Ptr(3),
142+
Selector: &metav1.LabelSelector{
143+
MatchLabels: map[string]string{
144+
"app.kubernetes.io/name": "multigres",
145+
"app.kubernetes.io/instance": "test-multigateway",
146+
"app.kubernetes.io/component": "multigateway",
147+
"app.kubernetes.io/part-of": "multigres",
148+
"app.kubernetes.io/managed-by": "multigres-operator",
149+
"multigres.com/cell": "multigres-global-topo",
150+
},
151+
},
152+
Template: corev1.PodTemplateSpec{
153+
ObjectMeta: metav1.ObjectMeta{
154+
Labels: map[string]string{
155+
"app.kubernetes.io/name": "multigres",
156+
"app.kubernetes.io/instance": "test-multigateway",
157+
"app.kubernetes.io/component": "multigateway",
158+
"app.kubernetes.io/part-of": "multigres",
159+
"app.kubernetes.io/managed-by": "multigres-operator",
160+
"multigres.com/cell": "multigres-global-topo",
161+
},
162+
},
163+
Spec: corev1.PodSpec{
164+
Containers: []corev1.Container{
165+
{
166+
Name: "multigateway",
167+
Image: "foo/bar:1.2.3",
168+
Resources: corev1.ResourceRequirements{},
169+
Env: buildContainerEnv(),
170+
Ports: buildContainerPorts(&multigresv1alpha1.MultiGateway{}),
171+
},
172+
},
173+
},
174+
},
175+
},
176+
},
177+
},
178+
"scheme with incorrect type - should error": {
179+
mg: &multigresv1alpha1.MultiGateway{
180+
ObjectMeta: metav1.ObjectMeta{
181+
Name: "test-multigateway",
182+
Namespace: "default",
183+
},
184+
Spec: multigresv1alpha1.MultiGatewaySpec{},
185+
},
186+
scheme: runtime.NewScheme(), // empty scheme with incorrect type
187+
wantErr: true,
188+
},
189+
}
190+
191+
for name, tc := range tests {
192+
t.Run(name, func(t *testing.T) {
193+
got, err := BuildDeployment(tc.mg, tc.scheme)
194+
195+
if (err != nil) != tc.wantErr {
196+
t.Errorf("BuildDeployment() error = %v, wantErr %v", err, tc.wantErr)
197+
return
198+
}
199+
200+
if tc.wantErr {
201+
return
202+
}
203+
204+
if diff := cmp.Diff(tc.want, got); diff != "" {
205+
t.Errorf("BuildDeployment() mismatch (-want +got):\n%s", diff)
206+
}
207+
})
208+
}
209+
}

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)