Skip to content

Commit e9b614b

Browse files
author
Phillip Wittrock
authored
Merge pull request #12 from pwittrock/master
Get pkg/controller tests to 100% coverage
2 parents 6f99e24 + 47d8c08 commit e9b614b

File tree

8 files changed

+481
-69
lines changed

8 files changed

+481
-69
lines changed

OWNERS_ALIASES

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# See the OWNERS docs: https://git.k8s.io/community/contributors/devel/owners.md
22

33
aliases:
4-
- controller-runtime-admins
4+
- controller-runtime-admins:
55
- directxman12
66
- droot
77
- pwittrock
8-
- controller-runtime-maintainers
8+
- controller-runtime-maintainers:

pkg/controller/controller.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ type controller struct {
109109
// defaults to cache.WaitForCacheSync
110110
waitForCache func(stopCh <-chan struct{}, cacheSyncs ...cache.InformerSynced) bool
111111

112+
// started is true if the Controller has been started
113+
started bool
114+
112115
// TODO(pwittrock): Consider initializing a logger with the controller name as the tag
113116
}
114117

@@ -178,6 +181,8 @@ func (c *controller) Start(stop <-chan struct{}) error {
178181
}, c.jitterPeriod, stop)
179182
}
180183

184+
c.started = true
185+
181186
<-stop
182187
log.Info("Stopping workers", "controller", c.name)
183188
return nil

pkg/controller/controller_suite_integration_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"testing"
2121
"time"
2222

23+
"github.com/kubernetes-sigs/controller-runtime/pkg/controller"
2324
"github.com/kubernetes-sigs/controller-runtime/pkg/internal/informer"
2425
logf "github.com/kubernetes-sigs/controller-runtime/pkg/runtime/log"
2526
"github.com/kubernetes-sigs/controller-runtime/pkg/test"
@@ -46,6 +47,7 @@ var _ = BeforeSuite(func() {
4647

4748
var err error
4849
cfg, err = testenv.Start()
50+
controller.TestConfig = cfg
4951
Expect(err).NotTo(HaveOccurred())
5052

5153
time.Sleep(1 * time.Second)

pkg/controller/manager.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ import (
2121
"sync"
2222

2323
"github.com/kubernetes-sigs/controller-runtime/pkg/client"
24-
"github.com/kubernetes-sigs/controller-runtime/pkg/client/config"
2524
"github.com/kubernetes-sigs/controller-runtime/pkg/controller/reconcile"
2625
"github.com/kubernetes-sigs/controller-runtime/pkg/internal/apiutil"
2726
"github.com/kubernetes-sigs/controller-runtime/pkg/internal/informer"
2827
"github.com/kubernetes-sigs/controller-runtime/pkg/runtime/inject"
2928
"k8s.io/api/apps/v1"
29+
"k8s.io/apimachinery/pkg/api/meta"
3030
"k8s.io/apimachinery/pkg/runtime"
3131
"k8s.io/client-go/kubernetes/scheme"
3232
"k8s.io/client-go/rest"
@@ -92,8 +92,12 @@ func (cm *controllerManager) NewController(ca Args, r reconcile.Reconcile) (Cont
9292
cm.mu.Lock()
9393
defer cm.mu.Unlock()
9494

95+
if r == nil {
96+
return nil, fmt.Errorf("must specify Reconcile")
97+
}
98+
9599
if len(ca.Name) == 0 {
96-
return nil, fmt.Errorf("must specify name for Controller")
100+
return nil, fmt.Errorf("must specify Name for Controller")
97101
}
98102

99103
if ca.MaxConcurrentReconciles <= 0 {
@@ -196,6 +200,9 @@ type ManagerArgs struct {
196200
// Scheme is the scheme used to resolve runtime.Objects to GroupVersionKinds / Resources
197201
// Defaults to the kubernetes/client-go scheme.Scheme
198202
Scheme *runtime.Scheme
203+
204+
// Mapper is the rest mapper used to map go types to Kubernetes APIs
205+
MapperProvider func(c *rest.Config) (meta.RESTMapper, error)
199206
}
200207

201208
// NewManager returns a new fully initialized Manager.
@@ -204,11 +211,7 @@ func NewManager(args ManagerArgs) (Manager, error) {
204211

205212
// Initialize a rest.config if none was specified
206213
if cm.config == nil {
207-
var err error
208-
cm.config, err = config.GetConfig()
209-
if err != nil {
210-
return nil, err
211-
}
214+
return nil, fmt.Errorf("must specify Config")
212215
}
213216

214217
// Use the Kubernetes client-go scheme if none is specified
@@ -228,7 +231,10 @@ func NewManager(args ManagerArgs) (Manager, error) {
228231
objCache := client.NewObjectCache(spi.KnownInformersByType(), cm.scheme)
229232
spi.Callbacks = append(spi.Callbacks, objCache)
230233

231-
mapper, err := apiutil.NewDiscoveryRESTMapper(cm.config)
234+
if args.MapperProvider == nil {
235+
args.MapperProvider = apiutil.NewDiscoveryRESTMapper
236+
}
237+
mapper, err := args.MapperProvider(cm.config)
232238
if err != nil {
233239
log.Error(err, "Failed to get API Group-Resources")
234240
return nil, err

0 commit comments

Comments
 (0)