Skip to content

Commit f2272e2

Browse files
committed
add recorder test
1 parent a299678 commit f2272e2

File tree

4 files changed

+156
-10
lines changed

4 files changed

+156
-10
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
Copyright 2018 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package recorder_test
18+
19+
import (
20+
"testing"
21+
22+
logf "github.com/kubernetes-sigs/controller-runtime/pkg/runtime/log"
23+
"github.com/kubernetes-sigs/controller-runtime/pkg/test"
24+
. "github.com/onsi/ginkgo"
25+
. "github.com/onsi/gomega"
26+
"k8s.io/client-go/rest"
27+
)
28+
29+
func TestRecorder(t *testing.T) {
30+
RegisterFailHandler(Fail)
31+
RunSpecsWithDefaultAndCustomReporters(t, "Recorder Integration Suite", []Reporter{test.NewlineReporter{}})
32+
}
33+
34+
var testenv *test.Environment
35+
var cfg *rest.Config
36+
37+
var _ = BeforeSuite(func(done Done) {
38+
logf.SetLogger(logf.ZapLogger(false))
39+
40+
testenv = &test.Environment{}
41+
42+
var err error
43+
cfg, err = testenv.Start()
44+
Expect(err).NotTo(HaveOccurred())
45+
46+
close(done)
47+
}, 60)
48+
49+
var _ = AfterSuite(func() {
50+
testenv.Stop()
51+
})
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
Copyright 2018 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package recorder_test
18+
19+
import (
20+
"github.com/kubernetes-sigs/controller-runtime/pkg/internal/recorder"
21+
. "github.com/onsi/ginkgo"
22+
. "github.com/onsi/gomega"
23+
"k8s.io/client-go/kubernetes/scheme"
24+
)
25+
26+
var _ = Describe("recorder", func() {
27+
Describe("NewProvider", func() {
28+
It("should return a provider instance and a nil error.", func() {
29+
provider, err := recorder.NewProvider(cfg, scheme.Scheme)
30+
Expect(provider).NotTo(BeNil())
31+
Expect(err).NotTo(HaveOccurred())
32+
})
33+
34+
It("should return an error if failed to init clientSet.", func() {
35+
// Invalid the config
36+
cfg1 := *cfg
37+
cfg1.ContentType = "invalid-type"
38+
_, err := recorder.NewProvider(&cfg1, scheme.Scheme)
39+
Expect(err.Error()).To(ContainSubstring("failed to init clientSet"))
40+
})
41+
})
42+
Describe("GetEventRecorder", func() {
43+
It("should return a recorder instance.", func() {
44+
provider, err := recorder.NewProvider(cfg, scheme.Scheme)
45+
Expect(err).NotTo(HaveOccurred())
46+
47+
recorder := provider.GetEventRecorderFor("test")
48+
Expect(recorder).NotTo(BeNil())
49+
})
50+
})
51+
})

pkg/manager/manager.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ import (
2222
"github.com/kubernetes-sigs/controller-runtime/pkg/cache"
2323
"github.com/kubernetes-sigs/controller-runtime/pkg/client"
2424
"github.com/kubernetes-sigs/controller-runtime/pkg/client/apiutil"
25-
"github.com/kubernetes-sigs/controller-runtime/pkg/internal/recorder"
25+
internalrecorder "github.com/kubernetes-sigs/controller-runtime/pkg/internal/recorder"
26+
"github.com/kubernetes-sigs/controller-runtime/pkg/recorder"
2627
"k8s.io/apimachinery/pkg/api/meta"
2728
"k8s.io/apimachinery/pkg/runtime"
2829
"k8s.io/client-go/kubernetes/scheme"
@@ -74,8 +75,9 @@ type Options struct {
7475
MapperProvider func(c *rest.Config) (meta.RESTMapper, error)
7576

7677
// Dependency injection for testing
77-
newCache func(config *rest.Config, opts cache.Options) (cache.Cache, error)
78-
newClient func(config *rest.Config, options client.Options) (client.Client, error)
78+
newCache func(config *rest.Config, opts cache.Options) (cache.Cache, error)
79+
newClient func(config *rest.Config, options client.Options) (client.Client, error)
80+
newRecorderProvider func(config *rest.Config, scheme *runtime.Scheme) (recorder.Provider, error)
7981
}
8082

8183
// Runnable allows a component to be started.
@@ -139,7 +141,11 @@ func New(config *rest.Config, options Options) (Manager, error) {
139141
cm.fieldIndexes = cm.cache
140142
cm.client = client.DelegatingClient{Reader: cm.cache, Writer: writeObj}
141143

142-
cm.recorderProvider, err = recorder.NewProvider(cm.config, cm.scheme)
144+
if options.newRecorderProvider == nil {
145+
options.newRecorderProvider = internalrecorder.NewProvider
146+
}
147+
// Create the recorder provider to inject event recorders for the components.
148+
cm.recorderProvider, err = options.newRecorderProvider(cm.config, cm.scheme)
143149
if err != nil {
144150
return nil, err
145151
}

pkg/manager/manager_test.go

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/kubernetes-sigs/controller-runtime/pkg/cache/informertest"
2424
"github.com/kubernetes-sigs/controller-runtime/pkg/client"
2525
"github.com/kubernetes-sigs/controller-runtime/pkg/reconcile"
26+
"github.com/kubernetes-sigs/controller-runtime/pkg/recorder"
2627
"github.com/kubernetes-sigs/controller-runtime/pkg/runtime/inject"
2728
. "github.com/onsi/ginkgo"
2829
. "github.com/onsi/gomega"
@@ -81,6 +82,17 @@ var _ = Describe("manger.Manager", func() {
8182
Expect(err).To(HaveOccurred())
8283
Expect(err.Error()).To(ContainSubstring("expected error"))
8384

85+
close(done)
86+
})
87+
It("should return an error it can't create a recorder.Provider", func(done Done) {
88+
m, err := New(cfg, Options{
89+
newRecorderProvider: func(config *rest.Config, scheme *runtime.Scheme) (recorder.Provider, error) {
90+
return nil, fmt.Errorf("expected error")
91+
}})
92+
Expect(m).To(BeNil())
93+
Expect(err).To(HaveOccurred())
94+
Expect(err.Error()).To(ContainSubstring("expected error"))
95+
8496
close(done)
8597
})
8698
})
@@ -276,6 +288,11 @@ var _ = Describe("manger.Manager", func() {
276288
Expect(stop).To(BeNil())
277289
return nil
278290
},
291+
recorder: func(provider recorder.Provider) error {
292+
defer GinkgoRecover()
293+
Expect(provider).To(Equal(mrg.recorderProvider))
294+
return nil
295+
},
279296
f: func(f inject.Func) error {
280297
defer GinkgoRecover()
281298
Expect(f).NotTo(BeNil())
@@ -327,6 +344,12 @@ var _ = Describe("manger.Manager", func() {
327344
},
328345
})
329346
Expect(err).To(Equal(expected))
347+
err = m.SetFields(&injectable{
348+
recorder: func(provider recorder.Provider) error {
349+
return expected
350+
},
351+
})
352+
Expect(err).To(Equal(expected))
330353
close(done)
331354
})
332355
})
@@ -362,6 +385,12 @@ var _ = Describe("manger.Manager", func() {
362385
Expect(ok).To(BeTrue())
363386
Expect(m.GetFieldIndexer()).To(Equal(mrg.fieldIndexes))
364387
})
388+
389+
It("should provide a function to get the EventRecorder", func() {
390+
m, err := New(cfg, Options{})
391+
Expect(err).NotTo(HaveOccurred())
392+
Expect(m.GetRecorder("test")).NotTo(BeNil())
393+
})
365394
})
366395

367396
var _ reconcile.Reconcile = &failRec{}
@@ -387,14 +416,16 @@ var _ inject.Client = &injectable{}
387416
var _ inject.Scheme = &injectable{}
388417
var _ inject.Config = &injectable{}
389418
var _ inject.Stoppable = &injectable{}
419+
var _ inject.Recorder = &injectable{}
390420

391421
type injectable struct {
392-
scheme func(scheme *runtime.Scheme) error
393-
client func(client.Client) error
394-
config func(config *rest.Config) error
395-
cache func(cache.Cache) error
396-
f func(inject.Func) error
397-
stop func(<-chan struct{}) error
422+
scheme func(scheme *runtime.Scheme) error
423+
client func(client.Client) error
424+
config func(config *rest.Config) error
425+
cache func(cache.Cache) error
426+
f func(inject.Func) error
427+
stop func(<-chan struct{}) error
428+
recorder func(provider recorder.Provider) error
398429
}
399430

400431
func (i *injectable) InjectCache(c cache.Cache) error {
@@ -442,3 +473,10 @@ func (i *injectable) InjectStopChannel(stop <-chan struct{}) error {
442473
func (i *injectable) Start(<-chan struct{}) error {
443474
return nil
444475
}
476+
477+
func (i *injectable) InjectRecorder(provider recorder.Provider) error {
478+
if i.recorder == nil {
479+
return nil
480+
}
481+
return i.recorder(provider)
482+
}

0 commit comments

Comments
 (0)