Skip to content
This repository was archived by the owner on Dec 11, 2023. It is now read-only.

Commit 94a54d0

Browse files
author
odacremolbap
committed
extract common resource creation for tests
1 parent a342178 commit 94a54d0

File tree

9 files changed

+418
-253
lines changed

9 files changed

+418
-253
lines changed

pkg/reconciler/common/reconcile_broker.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ func buildBrokerService(rb eventingv1alpha1.ReconcilableBroker) *corev1.Service
225225
func (r *brokerReconciler) reconcileService(ctx context.Context, rb eventingv1alpha1.ReconcilableBroker) (*corev1.Service, error) {
226226
desired := buildBrokerService(rb)
227227
current, err := r.serviceLister.Services(desired.Namespace).Get(desired.Name)
228+
228229
switch {
229230
case err == nil:
230231
// Set Status

pkg/reconciler/memorybroker/reconciler_test.go

Lines changed: 67 additions & 253 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@ package memorybroker
33
import (
44
"context"
55
"testing"
6+
"time"
67

7-
appsv1 "k8s.io/api/apps/v1"
88
corev1 "k8s.io/api/core/v1"
9-
rbacv1 "k8s.io/api/rbac/v1"
109
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1110
"k8s.io/apimachinery/pkg/runtime"
12-
"k8s.io/apimachinery/pkg/util/intstr"
1311
kt "k8s.io/client-go/testing"
1412

1513
v1addr "knative.dev/pkg/client/injection/ducks/duck/v1/addressable"
@@ -21,25 +19,24 @@ import (
2119
fakeeventingclient "github.com/triggermesh/triggermesh-core/pkg/client/generated/injection/client/fake"
2220
"github.com/triggermesh/triggermesh-core/pkg/client/generated/injection/reconciler/eventing/v1alpha1/memorybroker"
2321
"github.com/triggermesh/triggermesh-core/pkg/reconciler/common"
22+
"github.com/triggermesh/triggermesh-core/pkg/reconciler/resources"
2423
tmt "github.com/triggermesh/triggermesh-core/pkg/reconciler/testing"
24+
tresources "github.com/triggermesh/triggermesh-core/pkg/reconciler/testing/resources"
2525
tmtv1alpha1 "github.com/triggermesh/triggermesh-core/pkg/reconciler/testing/v1alpha1"
2626
)
2727

28-
const (
29-
tBrokerImage = "image.test:v.test"
30-
tNamespace = "test-namespace"
31-
tName = "test-name"
32-
tBrokerSuffix = "-mb-broker"
33-
)
34-
3528
var (
36-
tKey = tNamespace + "/" + tName
37-
tTrue = true
38-
tReplicas int32 = 1
39-
// tNow = metav1.NewTime(time.Now())
29+
tKey = tresources.TestNamespace + "/" + tresources.TestName
30+
tTrue = true
31+
tNow = metav1.NewTime(time.Now())
4032
)
4133

4234
func TestAllCases(t *testing.T) {
35+
bh := tresources.BrokerHelper{
36+
Suffix: "mb",
37+
Kind: "MemoryBroker",
38+
}
39+
4340
table := knt.TableTest{
4441
{
4542
Name: "bad workqueue key",
@@ -53,19 +50,18 @@ func TestAllCases(t *testing.T) {
5350
Name: "new broker",
5451
Key: tKey,
5552
Objects: []runtime.Object{
56-
tmtv1alpha1.NewMemoryBroker(tNamespace, tName),
53+
tmtv1alpha1.NewMemoryBroker(tresources.TestNamespace, tresources.TestName),
5754
},
5855
WantCreates: []runtime.Object{
59-
newSecretForBroker(tNamespace, tName),
60-
newServiceAccountForBroker(tNamespace, tName),
61-
newRoleBindingForBroker(tNamespace, tName),
62-
newDeploymentForBroker(tNamespace, tName),
63-
newServiceForBroker(tNamespace, tName),
56+
newSecretForBroker(tresources.TestNamespace, tresources.TestName),
57+
tresources.NewServiceAccountForBroker(tresources.TestNamespace, tresources.TestName, bh),
58+
tresources.NewRoleBindingForBroker(tresources.TestNamespace, tresources.TestName, bh),
59+
tresources.NewDeploymentForBroker(tresources.TestNamespace, tresources.TestName, bh),
60+
tresources.NewServiceForBroker(tresources.TestNamespace, tresources.TestName, bh),
6461
},
6562
WantStatusUpdates: []kt.UpdateActionImpl{
6663
{
67-
Object: tmtv1alpha1.NewMemoryBroker(tNamespace, tName,
68-
// tmtv1alpha1.MemoryBrokerWithStatusAddress("http://"+tName+"-mb-broker."+tNamespace+".svc.cluster.local"),
64+
Object: tmtv1alpha1.NewMemoryBroker(tresources.TestNamespace, tresources.TestName,
6965
tmtv1alpha1.MemoryBrokerWithStatusCondition("Addressable", corev1.ConditionUnknown, "", ""),
7066
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerConfigSecretReady", corev1.ConditionTrue, "", ""),
7167
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerDeploymentReady", corev1.ConditionUnknown, "", ""),
@@ -78,41 +74,61 @@ func TestAllCases(t *testing.T) {
7874
},
7975
},
8076
WantEvents: []string{
81-
knt.Eventf(corev1.EventTypeWarning, "UnavailableEndpoints", `Endpoints for broker service "`+tNamespace+`/`+tName+`-mb-broker" do not exist`),
77+
knt.Eventf(corev1.EventTypeWarning, "UnavailableEndpoints", `Endpoints for broker service "`+tresources.TestNamespace+`/`+tresources.TestName+`-mb-broker" do not exist`),
78+
},
79+
}, {
80+
Name: "update status",
81+
Key: tKey,
82+
Objects: []runtime.Object{
83+
tmtv1alpha1.NewMemoryBroker(tresources.TestNamespace, tresources.TestName,
84+
tmtv1alpha1.MemoryBrokerWithStatusCondition("Addressable", corev1.ConditionUnknown, "", ""),
85+
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerConfigSecretReady", corev1.ConditionTrue, "", ""),
86+
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerDeploymentReady", corev1.ConditionUnknown, "", ""),
87+
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerEndpointsReady", corev1.ConditionFalse, "UnavailableEndpoints", "Endpoints for broker service do not exist"),
88+
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerServiceAccountReady", corev1.ConditionTrue, "", ""),
89+
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerServiceReady", corev1.ConditionTrue, "", ""),
90+
tmtv1alpha1.MemoryBrokerWithStatusCondition("MemoryBrokerBrokerRoleBinding", corev1.ConditionTrue, "", ""),
91+
tmtv1alpha1.MemoryBrokerWithStatusCondition("Ready", corev1.ConditionFalse, "UnavailableEndpoints", "Endpoints for broker service do not exist"),
92+
),
93+
newSecretForBroker(tresources.TestNamespace, tresources.TestName),
94+
tresources.NewServiceAccountForBroker(tresources.TestNamespace, tresources.TestName, bh),
95+
tresources.NewRoleBindingForBroker(tresources.TestNamespace, tresources.TestName, bh),
96+
tresources.NewDeploymentForBroker(tresources.TestNamespace, tresources.TestName, bh, tresources.WithDeploymentReady()),
97+
tresources.NewServiceForBroker(tresources.TestNamespace, tresources.TestName, bh),
98+
tresources.NewEndpointForBroker(tresources.TestNamespace, tresources.TestName, bh),
99+
},
100+
WantStatusUpdates: []kt.UpdateActionImpl{
101+
{
102+
Object: tmtv1alpha1.NewMemoryBroker(tresources.TestNamespace, tresources.TestName,
103+
tmtv1alpha1.MemoryBrokerWithStatusCondition("Addressable", corev1.ConditionTrue, "", ""),
104+
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerConfigSecretReady", corev1.ConditionTrue, "", ""),
105+
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerDeploymentReady", corev1.ConditionTrue, "", ""),
106+
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerEndpointsReady", corev1.ConditionTrue, "", ""),
107+
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerServiceAccountReady", corev1.ConditionTrue, "", ""),
108+
tmtv1alpha1.MemoryBrokerWithStatusCondition("BrokerServiceReady", corev1.ConditionTrue, "", ""),
109+
tmtv1alpha1.MemoryBrokerWithStatusCondition("MemoryBrokerBrokerRoleBinding", corev1.ConditionTrue, "", ""),
110+
tmtv1alpha1.MemoryBrokerWithStatusCondition("Ready", corev1.ConditionTrue, "", ""),
111+
tmtv1alpha1.MemoryBrokerWithStatusAddress("http://"+tresources.TestName+"-mb-broker."+tresources.TestNamespace+".svc.cluster.local"),
112+
),
113+
},
114+
},
115+
}, {
116+
Name: "deleting broker",
117+
Key: tKey,
118+
Objects: []runtime.Object{
119+
tmtv1alpha1.NewMemoryBroker(tresources.TestNamespace, tresources.TestName,
120+
tmtv1alpha1.MemoryBrokerWithMetaOptions(resources.MetaSetDeletion(&tNow))),
121+
},
122+
WantCreates: []runtime.Object{
123+
// Reconciliation is skipped and no objects are created.
82124
},
83-
84-
// }, {
85-
// Name: "update status",
86-
// Key: tKey,
87-
// Objects: []runtime.Object{
88-
// tmtv1alpha1.NewMemoryBroker(tNamespace, tName),
89-
// },
90-
// WantCreates: []runtime.Object{
91-
// newSecretForBroker(tNamespace, tName),
92-
// newServiceAccountForBroker(tNamespace, tName),
93-
// newRoleBindingForBroker(tNamespace, tName),
94-
// newDeploymentForBroker(tNamespace, tName),
95-
// newServiceForBroker(tNamespace, tName),
96-
// },
97-
// WantEvents: []string{
98-
// knt.Eventf(corev1.EventTypeWarning, "UnavailableEndpoints", `Endpoints for broker service "`+tNamespace+`/`+tName+`-mb-broker" do not exist`),
99-
// },
100-
// }, {
101-
// Name: "deleting broker",
102-
// Key: tKey,
103-
// Objects: []runtime.Object{
104-
// tmtv1alpha1.NewMemoryBroker(tNamespace, tName,
105-
// tmtv1alpha1.MemoryBrokerWithMetaOptions(resources.MetaSetDeletion(&tNow))),
106-
// },
107-
// WantCreates: []runtime.Object{
108-
// // Reconciliation is skipped and no objects are created.
109-
// },
110125
},
111126
}
112127

113128
logger := logtesting.TestLogger(t)
114129
table.Test(t, tmt.MakeFactory(func(ctx context.Context, listers *tmt.Listers, cmw configmap.Watcher) controller.Reconciler {
115130
ctx = v1addr.WithDuck(ctx)
131+
116132
r := &reconciler{
117133
secretReconciler: common.NewSecretReconciler(ctx,
118134
listers.GetSecretLister(),
@@ -126,7 +142,7 @@ func TestAllCases(t *testing.T) {
126142
listers.GetDeploymentLister(),
127143
listers.GetServiceLister(),
128144
listers.GetEndpointsLister(),
129-
tBrokerImage, corev1.PullAlways),
145+
tresources.TestBrokerImage, corev1.PullAlways),
130146
}
131147

132148
return memorybroker.NewReconciler(ctx, logger,
@@ -172,205 +188,3 @@ func newSecretForBroker(namespace, name string) *corev1.Secret {
172188

173189
return s
174190
}
175-
176-
func newServiceAccountForBroker(namespace, name string) *corev1.ServiceAccount {
177-
sa := &corev1.ServiceAccount{
178-
TypeMeta: metav1.TypeMeta{
179-
APIVersion: "v1",
180-
Kind: "ServiceAccount",
181-
},
182-
ObjectMeta: metav1.ObjectMeta{
183-
Namespace: namespace,
184-
Name: name + tBrokerSuffix,
185-
Labels: map[string]string{
186-
"app.kubernetes.io/component": "broker-serviceaccount",
187-
"app.kubernetes.io/instance": name + tBrokerSuffix,
188-
"app.kubernetes.io/managed-by": "triggermesh-core",
189-
"app.kubernetes.io/name": "memorybroker",
190-
"app.kubernetes.io/part-of": "triggermesh",
191-
},
192-
OwnerReferences: []metav1.OwnerReference{
193-
{
194-
APIVersion: "eventing.triggermesh.io/v1alpha1",
195-
Kind: "MemoryBroker",
196-
Name: name,
197-
Controller: &tTrue,
198-
BlockOwnerDeletion: &tTrue,
199-
},
200-
},
201-
},
202-
}
203-
204-
return sa
205-
}
206-
207-
func newRoleBindingForBroker(namespace, name string) *rbacv1.RoleBinding {
208-
rb := &rbacv1.RoleBinding{
209-
TypeMeta: metav1.TypeMeta{
210-
APIVersion: "rbac.authorization.k8s.io/v1",
211-
Kind: "RoleBinding",
212-
},
213-
ObjectMeta: metav1.ObjectMeta{
214-
Namespace: namespace,
215-
Name: name + tBrokerSuffix,
216-
Labels: map[string]string{
217-
"app.kubernetes.io/component": "broker-rolebinding",
218-
"app.kubernetes.io/instance": name + tBrokerSuffix,
219-
"app.kubernetes.io/managed-by": "triggermesh-core",
220-
"app.kubernetes.io/name": "memorybroker",
221-
"app.kubernetes.io/part-of": "triggermesh",
222-
},
223-
OwnerReferences: []metav1.OwnerReference{
224-
{
225-
APIVersion: "eventing.triggermesh.io/v1alpha1",
226-
Kind: "MemoryBroker",
227-
Name: name,
228-
Controller: &tTrue,
229-
BlockOwnerDeletion: &tTrue,
230-
},
231-
},
232-
},
233-
Subjects: []rbacv1.Subject{
234-
{Kind: "ServiceAccount", Name: name + tBrokerSuffix, Namespace: namespace},
235-
},
236-
RoleRef: rbacv1.RoleRef{
237-
APIGroup: "rbac.authorization.k8s.io",
238-
Kind: "ClusterRole",
239-
Name: "triggermesh-broker",
240-
},
241-
}
242-
243-
return rb
244-
}
245-
246-
func newServiceForBroker(namespace, name string) *corev1.Service {
247-
s := &corev1.Service{
248-
TypeMeta: metav1.TypeMeta{
249-
APIVersion: "v1",
250-
Kind: "Service",
251-
},
252-
ObjectMeta: metav1.ObjectMeta{
253-
Namespace: namespace,
254-
Name: name + tBrokerSuffix,
255-
Labels: map[string]string{
256-
"app.kubernetes.io/component": "broker-service",
257-
"app.kubernetes.io/instance": name + tBrokerSuffix,
258-
"app.kubernetes.io/managed-by": "triggermesh-core",
259-
"app.kubernetes.io/name": "memorybroker",
260-
"app.kubernetes.io/part-of": "triggermesh",
261-
},
262-
OwnerReferences: []metav1.OwnerReference{
263-
{
264-
APIVersion: "eventing.triggermesh.io/v1alpha1",
265-
Kind: "MemoryBroker",
266-
Name: name,
267-
Controller: &tTrue,
268-
BlockOwnerDeletion: &tTrue,
269-
},
270-
},
271-
},
272-
Spec: corev1.ServiceSpec{
273-
Selector: map[string]string{
274-
"app.kubernetes.io/component": "broker-deployment",
275-
"app.kubernetes.io/instance": name + "-mb-broker",
276-
},
277-
Ports: []corev1.ServicePort{
278-
{
279-
Name: "httpce",
280-
Port: 80,
281-
TargetPort: intstr.IntOrString{
282-
IntVal: 8080,
283-
},
284-
},
285-
},
286-
Type: corev1.ServiceTypeClusterIP,
287-
},
288-
}
289-
290-
return s
291-
}
292-
293-
func newDeploymentForBroker(namespace, name string) *appsv1.Deployment {
294-
d := &appsv1.Deployment{
295-
TypeMeta: metav1.TypeMeta{
296-
APIVersion: "apps/v1",
297-
Kind: "Deployment",
298-
},
299-
ObjectMeta: metav1.ObjectMeta{
300-
Namespace: namespace,
301-
Name: name + tBrokerSuffix,
302-
Labels: map[string]string{
303-
"app.kubernetes.io/component": "broker-deployment",
304-
"app.kubernetes.io/instance": name + tBrokerSuffix,
305-
"app.kubernetes.io/managed-by": "triggermesh-core",
306-
"app.kubernetes.io/name": "memorybroker",
307-
"app.kubernetes.io/part-of": "triggermesh",
308-
},
309-
OwnerReferences: []metav1.OwnerReference{
310-
{
311-
APIVersion: "eventing.triggermesh.io/v1alpha1",
312-
Kind: "MemoryBroker",
313-
Name: name,
314-
Controller: &tTrue,
315-
BlockOwnerDeletion: &tTrue,
316-
},
317-
},
318-
},
319-
Spec: appsv1.DeploymentSpec{
320-
Replicas: &tReplicas,
321-
Selector: &metav1.LabelSelector{
322-
MatchLabels: map[string]string{
323-
"app.kubernetes.io/component": "broker-deployment",
324-
"app.kubernetes.io/instance": name + tBrokerSuffix,
325-
},
326-
},
327-
Template: corev1.PodTemplateSpec{
328-
ObjectMeta: metav1.ObjectMeta{
329-
Labels: map[string]string{
330-
"app.kubernetes.io/component": "broker-deployment",
331-
"app.kubernetes.io/instance": name + tBrokerSuffix,
332-
"app.kubernetes.io/managed-by": "triggermesh-core",
333-
"app.kubernetes.io/part-of": "triggermesh",
334-
},
335-
},
336-
Spec: corev1.PodSpec{
337-
ServiceAccountName: name + tBrokerSuffix,
338-
Containers: []corev1.Container{
339-
{
340-
Name: "broker",
341-
Image: tBrokerImage,
342-
Args: []string{"start"},
343-
ImagePullPolicy: corev1.PullAlways,
344-
Ports: []corev1.ContainerPort{
345-
{
346-
Name: "httpce",
347-
ContainerPort: 8080,
348-
},
349-
{
350-
Name: "metrics",
351-
ContainerPort: 9090,
352-
},
353-
},
354-
Env: []corev1.EnvVar{
355-
{Name: "PORT", Value: "8080"},
356-
{Name: "BROKER_NAME", Value: name},
357-
{
358-
Name: "KUBERNETES_NAMESPACE",
359-
ValueFrom: &corev1.EnvVarSource{
360-
FieldRef: &corev1.ObjectFieldSelector{
361-
FieldPath: "metadata.namespace",
362-
},
363-
},
364-
},
365-
{Name: "KUBERNETES_BROKER_CONFIG_SECRET_NAME", Value: name + "-mb-config"},
366-
{Name: "KUBERNETES_BROKER_CONFIG_SECRET_KEY", Value: "config"},
367-
},
368-
},
369-
},
370-
},
371-
},
372-
},
373-
}
374-
375-
return d
376-
}

0 commit comments

Comments
 (0)