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

Commit e09d28f

Browse files
author
odacremolbap
committed
flesh out memory broker test, WIP
1 parent 995968b commit e09d28f

File tree

8 files changed

+483
-34
lines changed

8 files changed

+483
-34
lines changed

go.mod

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ require (
1515
sigs.k8s.io/yaml v1.3.0
1616
)
1717

18-
require golang.org/x/net v0.7.0 // indirect
18+
require (
19+
github.com/benbjohnson/clock v1.1.0 // indirect
20+
golang.org/x/net v0.7.0 // indirect
21+
)
1922

2023
require (
2124
contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d // indirect

go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5
5858
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
5959
github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 h1:yL7+Jz0jTC6yykIK/Wh74gnTJnrGr5AyrNMXuA0gves=
6060
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
61+
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
6162
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
6263
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
6364
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=

pkg/reconciler/common/reconcile_serciveaccount.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ import (
2626

2727
const (
2828
// Broker ClusterRole that was created as part of TriggerMesh core installation.
29-
BrokerDeploymentRole = "triggermesh-broker"
29+
BrokerDeploymentRole = "triggermesh-broker"
30+
serviceAccountResourceSuffix = "broker"
31+
roleBindingResourceSuffix = "broker"
3032
)
3133

3234
type ServiceAccountReconciler interface {
@@ -65,7 +67,7 @@ func (r *serviceAccountReconciler) Reconcile(ctx context.Context, rb eventingv1a
6567

6668
func buildBrokerServiceAccount(rb eventingv1alpha1.ReconcilableBroker) *corev1.ServiceAccount {
6769
meta := rb.GetObjectMeta()
68-
ns, name := meta.GetNamespace(), meta.GetName()+"-"+rb.GetOwnedObjectsSuffix()+"-"+secretResourceSuffix
70+
ns, name := meta.GetNamespace(), meta.GetName()+"-"+rb.GetOwnedObjectsSuffix()+"-"+serviceAccountResourceSuffix
6971

7072
return resources.NewServiceAccount(ns, name,
7173
resources.ServiceAccountWithMetaOptions(
@@ -115,7 +117,7 @@ func (r *serviceAccountReconciler) reconcileServiceAccount(ctx context.Context,
115117

116118
func buildBrokerRoleBinding(rb eventingv1alpha1.ReconcilableBroker, sa *corev1.ServiceAccount) *rbacv1.RoleBinding {
117119
meta := rb.GetObjectMeta()
118-
ns, name := meta.GetNamespace(), meta.GetName()+"-"+rb.GetOwnedObjectsSuffix()+"-"+secretResourceSuffix
120+
ns, name := meta.GetNamespace(), meta.GetName()+"-"+rb.GetOwnedObjectsSuffix()+"-"+roleBindingResourceSuffix
119121

120122
return resources.NewRoleBinding(ns, name, BrokerDeploymentRole, sa.Name,
121123
resources.RoleBindingWithMetaOptions(
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
package memorybroker
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
corev1 "k8s.io/api/core/v1"
8+
rbacv1 "k8s.io/api/rbac/v1"
9+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
"k8s.io/apimachinery/pkg/runtime"
11+
v1addr "knative.dev/pkg/client/injection/ducks/duck/v1/addressable"
12+
"knative.dev/pkg/configmap"
13+
"knative.dev/pkg/controller"
14+
logtesting "knative.dev/pkg/logging/testing"
15+
knt "knative.dev/pkg/reconciler/testing"
16+
17+
fakeeventingclient "github.com/triggermesh/triggermesh-core/pkg/client/generated/injection/client/fake"
18+
"github.com/triggermesh/triggermesh-core/pkg/client/generated/injection/reconciler/eventing/v1alpha1/memorybroker"
19+
"github.com/triggermesh/triggermesh-core/pkg/reconciler/common"
20+
tmt "github.com/triggermesh/triggermesh-core/pkg/reconciler/testing"
21+
tmtv1alpha1 "github.com/triggermesh/triggermesh-core/pkg/reconciler/testing/v1alpha1"
22+
)
23+
24+
const (
25+
tBrokerImage = "image.test:v.test"
26+
testNamespace = "test-namespace"
27+
testName = "test-name"
28+
)
29+
30+
var (
31+
tKey = testNamespace + "/" + testName
32+
tTrue = true
33+
)
34+
35+
func TestAllCases(t *testing.T) {
36+
table := knt.TableTest{
37+
{
38+
Name: "bad workqueue key",
39+
// Make sure Reconcile handles bad keys.
40+
Key: "too/many/parts",
41+
}, {
42+
Name: "no element found by that name",
43+
Key: tKey,
44+
WantErr: false,
45+
}, {
46+
Name: "new broker",
47+
Key: tKey,
48+
Objects: []runtime.Object{
49+
tmtv1alpha1.NewMemoryBroker(testNamespace, testName),
50+
},
51+
WantCreates: []runtime.Object{
52+
newSecretForBroker(testNamespace, testName),
53+
newServiceAccountForBroker(testNamespace, testName),
54+
newRoleBindingForBroker(testNamespace, testName),
55+
},
56+
},
57+
}
58+
59+
logger := logtesting.TestLogger(t)
60+
table.Test(t, tmt.MakeFactory(func(ctx context.Context, listers *tmt.Listers, cmw configmap.Watcher) controller.Reconciler {
61+
ctx = v1addr.WithDuck(ctx)
62+
r := &reconciler{
63+
secretReconciler: common.NewSecretReconciler(ctx,
64+
listers.GetSecretLister(),
65+
listers.GetTriggerLister(),
66+
),
67+
saReconciler: common.NewServiceAccountReconciler(ctx,
68+
listers.GetServiceAccountLister(),
69+
listers.GetRoleBindingLister(),
70+
),
71+
brokerReconciler: common.NewBrokerReconciler(ctx,
72+
listers.GetDeploymentLister(),
73+
listers.GetServiceLister(),
74+
listers.GetEndpointsLister(),
75+
tBrokerImage, corev1.PullAlways),
76+
}
77+
78+
return memorybroker.NewReconciler(ctx, logger,
79+
fakeeventingclient.Get(ctx),
80+
listers.GetMemoryBrokerLister(),
81+
controller.GetEventRecorder(ctx),
82+
r,
83+
controller.Options{SkipStatusUpdates: true})
84+
}, false, logger))
85+
}
86+
87+
func newSecretForBroker(namespace, name string) *corev1.Secret {
88+
s := &corev1.Secret{
89+
TypeMeta: metav1.TypeMeta{
90+
APIVersion: "v1",
91+
Kind: "Secret",
92+
},
93+
ObjectMeta: metav1.ObjectMeta{
94+
Namespace: namespace,
95+
Name: name + "-mb-config",
96+
Labels: map[string]string{
97+
"app.kubernetes.io/component": "broker-config",
98+
"app.kubernetes.io/instance": name + "-mb-config",
99+
"app.kubernetes.io/managed-by": "triggermesh-core",
100+
"app.kubernetes.io/name": "memorybroker",
101+
"app.kubernetes.io/part-of": "triggermesh",
102+
},
103+
OwnerReferences: []metav1.OwnerReference{
104+
{
105+
APIVersion: "eventing.triggermesh.io/v1alpha1",
106+
Kind: "MemoryBroker",
107+
Name: name,
108+
Controller: &tTrue,
109+
BlockOwnerDeletion: &tTrue,
110+
},
111+
},
112+
},
113+
Type: corev1.SecretTypeOpaque,
114+
Data: map[string][]byte{
115+
"config": []byte("triggers: {}\n"),
116+
},
117+
}
118+
119+
return s
120+
}
121+
122+
func newServiceAccountForBroker(namespace, name string) *corev1.ServiceAccount {
123+
sa := &corev1.ServiceAccount{
124+
TypeMeta: metav1.TypeMeta{
125+
APIVersion: "v1",
126+
Kind: "ServiceAccount",
127+
},
128+
ObjectMeta: metav1.ObjectMeta{
129+
Namespace: namespace,
130+
Name: name + "-mb-broker",
131+
Labels: map[string]string{
132+
"app.kubernetes.io/component": "broker-serviceaccount",
133+
"app.kubernetes.io/instance": name + "-mb-broker",
134+
"app.kubernetes.io/managed-by": "triggermesh-core",
135+
"app.kubernetes.io/name": "memorybroker",
136+
"app.kubernetes.io/part-of": "triggermesh",
137+
},
138+
OwnerReferences: []metav1.OwnerReference{
139+
{
140+
APIVersion: "eventing.triggermesh.io/v1alpha1",
141+
Kind: "MemoryBroker",
142+
Name: name,
143+
Controller: &tTrue,
144+
BlockOwnerDeletion: &tTrue,
145+
},
146+
},
147+
},
148+
}
149+
150+
return sa
151+
}
152+
153+
func newRoleBindingForBroker(namespace, name string) *rbacv1.RoleBinding {
154+
rb := &rbacv1.RoleBinding{
155+
TypeMeta: metav1.TypeMeta{
156+
APIVersion: "rbac.authorization.k8s.io/v1",
157+
Kind: "RoleBinding",
158+
},
159+
ObjectMeta: metav1.ObjectMeta{
160+
Namespace: namespace,
161+
Name: name + "-mb-broker",
162+
Labels: map[string]string{
163+
"app.kubernetes.io/component": "broker-rolebinding",
164+
"app.kubernetes.io/instance": name + "mb-broker",
165+
"app.kubernetes.io/managed-by": "triggermesh-core",
166+
"app.kubernetes.io/name": "memorybroker",
167+
"app.kubernetes.io/part-of": "triggermesh",
168+
},
169+
OwnerReferences: []metav1.OwnerReference{
170+
{
171+
APIVersion: "eventing.triggermesh.io/v1alpha1",
172+
Kind: "MemoryBroker",
173+
Name: name,
174+
Controller: &tTrue,
175+
BlockOwnerDeletion: &tTrue,
176+
},
177+
},
178+
},
179+
Subjects: []rbacv1.Subject{
180+
{Kind: "ServiceAccount", Name: name + "-mb-broker", Namespace: namespace},
181+
},
182+
RoleRef: rbacv1.RoleRef{
183+
APIGroup: "rbac.authorization.k8s.io",
184+
Kind: "ClusterRole",
185+
Name: "triggermesh-broker",
186+
},
187+
}
188+
189+
return rb
190+
}

pkg/reconciler/testing/doc.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
// Copyright 2023 TriggerMesh Inc.
22
// SPDX-License-Identifier: Apache-2.0
33

4+
/*
5+
Copyright 2019 The Knative Authors
6+
7+
Licensed under the Apache License, Version 2.0 (the "License");
8+
you may not use this file except in compliance with the License.
9+
You may obtain a copy of the License at
10+
11+
http://www.apache.org/licenses/LICENSE-2.0
12+
13+
Unless required by applicable law or agreed to in writing, software
14+
distributed under the License is distributed on an "AS IS" BASIS,
15+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
See the License for the specific language governing permissions and
17+
limitations under the License.
18+
*/
19+
420
// Package testing contains test helpers for reconcilers.
21+
//
22+
// Heavily based on Knative's tests.
523
package testing

0 commit comments

Comments
 (0)