Skip to content

Commit f26fe5d

Browse files
authored
Merge pull request #73 from alecmerdler/broadcaster
Ensure given event broadcaster is used by manager
2 parents 8224053 + 96526e6 commit f26fe5d

File tree

2 files changed

+75
-5
lines changed

2 files changed

+75
-5
lines changed

manager/controller_test.go

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@ package manager
33
import (
44
"context"
55
"fmt"
6+
"net/http"
67
"testing"
78
"time"
89

910
"github.com/stretchr/testify/require"
11+
v1 "k8s.io/api/core/v1"
1012
"k8s.io/apimachinery/pkg/runtime/schema"
13+
"k8s.io/apimachinery/pkg/types"
1114
"k8s.io/client-go/kubernetes/fake"
15+
"k8s.io/client-go/kubernetes/scheme"
1216
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
1317
"k8s.io/client-go/tools/record"
1418
ctrlmanageropts "k8s.io/controller-manager/options"
@@ -52,7 +56,7 @@ func TestControllerQueueDone(t *testing.T) {
5256
CtxQueue := queue.NewQueueOperationsCtx()
5357
registry := typed.NewRegistry()
5458
broadcaster := record.NewBroadcaster()
55-
eventSink := &typedcorev1.EventSinkImpl{Interface: fake.NewSimpleClientset().CoreV1().Events("")}
59+
eventSink := newFakeEventSink()
5660

5761
controller := NewOwnedResourceController(klogr.New(), "my-controller", gvr, CtxQueue, registry, broadcaster, func(_ context.Context, gvr schema.GroupVersionResource, namespace, name string) {
5862
fmt.Println("processing", gvr, namespace, name)
@@ -81,3 +85,71 @@ func TestControllerQueueDone(t *testing.T) {
8185
return controller.Queue.Len() == 0
8286
}, 1*time.Second, 1*time.Millisecond)
8387
}
88+
89+
func TestControllerEventsBroadcast(t *testing.T) {
90+
gvr := schema.GroupVersionResource{
91+
Group: "example.com",
92+
Version: "v1",
93+
Resource: "mytypes",
94+
}
95+
CtxQueue := queue.NewQueueOperationsCtx()
96+
registry := typed.NewRegistry()
97+
broadcaster := record.NewBroadcaster()
98+
eventSink := newFakeEventSink()
99+
recorder := broadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "my-controller"})
100+
101+
controller := NewOwnedResourceController(klogr.New(), "my-controller", gvr, CtxQueue, registry, broadcaster, func(_ context.Context, gvr schema.GroupVersionResource, namespace, name string) {
102+
fmt.Println("processing", gvr, namespace, name)
103+
})
104+
105+
mgr := NewManager(ctrlmanageropts.RecommendedDebuggingOptions().DebuggingConfiguration, ":8888", broadcaster, eventSink)
106+
ctx, cancel := context.WithCancel(context.Background())
107+
defer cancel()
108+
go func() {
109+
_ = mgr.Start(ctx, controller)
110+
}()
111+
require.Eventually(t, healthCheckPassing(), 1*time.Second, 50*time.Millisecond)
112+
113+
recorder.Event(&v1.ObjectReference{Namespace: "test", Name: "a"}, v1.EventTypeNormal, "test", "test")
114+
115+
require.Eventually(t, func() bool {
116+
return len(eventSink.Events) > 0
117+
}, 5*time.Second, 1*time.Millisecond)
118+
}
119+
120+
type fakeEventSink struct {
121+
Events map[types.UID]*v1.Event
122+
}
123+
124+
func newFakeEventSink() *fakeEventSink {
125+
return &fakeEventSink{
126+
Events: make(map[types.UID]*v1.Event),
127+
}
128+
}
129+
130+
func (f *fakeEventSink) Create(event *v1.Event) (*v1.Event, error) {
131+
f.Events[event.UID] = event
132+
return event, nil
133+
}
134+
135+
func (f *fakeEventSink) Update(event *v1.Event) (*v1.Event, error) {
136+
f.Events[event.UID] = event
137+
return event, nil
138+
}
139+
140+
func (f *fakeEventSink) Patch(oldEvent *v1.Event, _ []byte) (*v1.Event, error) {
141+
f.Events[oldEvent.UID] = oldEvent
142+
return oldEvent, nil
143+
}
144+
145+
func healthCheckPassing() func() bool {
146+
return func() bool {
147+
resp, err := http.Get("http://localhost:8888/healthz")
148+
if err != nil {
149+
return false
150+
}
151+
defer resp.Body.Close()
152+
153+
return resp.StatusCode == http.StatusOK
154+
}
155+
}

manager/manager.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ func (m *Manager) Start(ctx context.Context, controllers ...Controller) error {
6868
}
6969
m.RUnlock()
7070

71-
broadcaster := record.NewBroadcaster()
72-
7371
m.once.Do(func() {
7472
m.Lock()
7573
m.errG, ctx = errgroup.WithContext(ctx)
@@ -88,8 +86,8 @@ func (m *Manager) Start(ctx context.Context, controllers ...Controller) error {
8886

8987
// start broadcaster
9088
m.errG.Go(func() error {
91-
broadcaster.StartStructuredLogging(2)
92-
broadcaster.StartRecordingToSink(m.sink)
89+
m.broadcaster.StartStructuredLogging(2)
90+
m.broadcaster.StartRecordingToSink(m.sink)
9391
return nil
9492
})
9593

0 commit comments

Comments
 (0)