Check RegisterMetricAndTrackRateLimiterUsage error when starting controllers

Signed-off-by: Ferran Rodenas <rodenasf@vmware.com>
This commit is contained in:
Ferran Rodenas
2017-10-31 15:19:55 +01:00
parent 0e0a85f2a7
commit d67898b875
28 changed files with 570 additions and 177 deletions

View File

@@ -92,7 +92,7 @@ type BootstrapSigner struct {
// NewBootstrapSigner returns a new *BootstrapSigner.
//
// TODO: Switch to shared informers
func NewBootstrapSigner(cl clientset.Interface, options BootstrapSignerOptions) *BootstrapSigner {
func NewBootstrapSigner(cl clientset.Interface, options BootstrapSignerOptions) (*BootstrapSigner, error) {
e := &BootstrapSigner{
client: cl,
configMapKey: options.ConfigMapNamespace + "/" + options.ConfigMapName,
@@ -100,7 +100,9 @@ func NewBootstrapSigner(cl clientset.Interface, options BootstrapSignerOptions)
syncQueue: workqueue.NewNamed("bootstrap_signer_queue"),
}
if cl.CoreV1().RESTClient().GetRateLimiter() != nil {
metrics.RegisterMetricAndTrackRateLimiterUsage("bootstrap_signer", cl.CoreV1().RESTClient().GetRateLimiter())
if err := metrics.RegisterMetricAndTrackRateLimiterUsage("bootstrap_signer", cl.CoreV1().RESTClient().GetRateLimiter()); err != nil {
return nil, err
}
}
configMapSelector := fields.SelectorFromSet(map[string]string{api.ObjectNameField: options.ConfigMapName})
e.configMaps, e.configMapsController = cache.NewInformer(
@@ -142,7 +144,7 @@ func NewBootstrapSigner(cl clientset.Interface, options BootstrapSignerOptions)
DeleteFunc: func(_ interface{}) { e.pokeConfigMapSync() },
},
)
return e
return e, nil
}
// Run runs controller loops and returns when they are done

View File

@@ -36,10 +36,14 @@ func init() {
const testTokenID = "abc123"
func newBootstrapSigner() (*BootstrapSigner, *fake.Clientset) {
func newBootstrapSigner() (*BootstrapSigner, *fake.Clientset, error) {
options := DefaultBootstrapSignerOptions()
cl := fake.NewSimpleClientset()
return NewBootstrapSigner(cl, options), cl
bsc, err := NewBootstrapSigner(cl, options)
if err != nil {
return nil, nil, err
}
return bsc, cl, nil
}
func newConfigMap(tokenID, signature string) *v1.ConfigMap {
@@ -60,13 +64,19 @@ func newConfigMap(tokenID, signature string) *v1.ConfigMap {
}
func TestNoConfigMap(t *testing.T) {
signer, cl := newBootstrapSigner()
signer, cl, err := newBootstrapSigner()
if err != nil {
t.Fatalf("error creating BootstrapSigner: %v", err)
}
signer.signConfigMap()
verifyActions(t, []core.Action{}, cl.Actions())
}
func TestSimpleSign(t *testing.T) {
signer, cl := newBootstrapSigner()
signer, cl, err := newBootstrapSigner()
if err != nil {
t.Fatalf("error creating BootstrapSigner: %v", err)
}
cm := newConfigMap("", "")
signer.configMaps.Add(cm)
@@ -87,7 +97,10 @@ func TestSimpleSign(t *testing.T) {
}
func TestNoSignNeeded(t *testing.T) {
signer, cl := newBootstrapSigner()
signer, cl, err := newBootstrapSigner()
if err != nil {
t.Fatalf("error creating BootstrapSigner: %v", err)
}
cm := newConfigMap(testTokenID, "eyJhbGciOiJIUzI1NiIsImtpZCI6ImFiYzEyMyJ9..QSxpUG7Q542CirTI2ECPSZjvBOJURUW5a7XqFpNI958")
signer.configMaps.Add(cm)
@@ -102,7 +115,10 @@ func TestNoSignNeeded(t *testing.T) {
}
func TestUpdateSignature(t *testing.T) {
signer, cl := newBootstrapSigner()
signer, cl, err := newBootstrapSigner()
if err != nil {
t.Fatalf("error creating BootstrapSigner: %v", err)
}
cm := newConfigMap(testTokenID, "old signature")
signer.configMaps.Add(cm)
@@ -123,7 +139,10 @@ func TestUpdateSignature(t *testing.T) {
}
func TestRemoveSignature(t *testing.T) {
signer, cl := newBootstrapSigner()
signer, cl, err := newBootstrapSigner()
if err != nil {
t.Fatalf("error creating BootstrapSigner: %v", err)
}
cm := newConfigMap(testTokenID, "old signature")
signer.configMaps.Add(cm)

View File

@@ -66,13 +66,15 @@ type TokenCleaner struct {
// NewTokenCleaner returns a new *NewTokenCleaner.
//
// TODO: Switch to shared informers
func NewTokenCleaner(cl clientset.Interface, options TokenCleanerOptions) *TokenCleaner {
func NewTokenCleaner(cl clientset.Interface, options TokenCleanerOptions) (*TokenCleaner, error) {
e := &TokenCleaner{
client: cl,
tokenSecretNamespace: options.TokenSecretNamespace,
}
if cl.CoreV1().RESTClient().GetRateLimiter() != nil {
metrics.RegisterMetricAndTrackRateLimiterUsage("token_cleaner", cl.CoreV1().RESTClient().GetRateLimiter())
if err := metrics.RegisterMetricAndTrackRateLimiterUsage("token_cleaner", cl.CoreV1().RESTClient().GetRateLimiter()); err != nil {
return nil, err
}
}
secretSelector := fields.SelectorFromSet(map[string]string{api.SecretTypeField: string(bootstrapapi.SecretTypeBootstrapToken)})
@@ -94,7 +96,7 @@ func NewTokenCleaner(cl clientset.Interface, options TokenCleanerOptions) *Token
UpdateFunc: func(oldSecret, newSecret interface{}) { e.evalSecret(newSecret) },
},
)
return e
return e, nil
}
// Run runs controller loops and returns when they are done

View File

@@ -32,14 +32,21 @@ func init() {
spew.Config.DisableMethods = true
}
func newTokenCleaner() (*TokenCleaner, *fake.Clientset) {
func newTokenCleaner() (*TokenCleaner, *fake.Clientset, error) {
options := DefaultTokenCleanerOptions()
cl := fake.NewSimpleClientset()
return NewTokenCleaner(cl, options), cl
tcc, err := NewTokenCleaner(cl, options)
if err != nil {
return nil, nil, err
}
return tcc, cl, nil
}
func TestCleanerNoExpiration(t *testing.T) {
cleaner, cl := newTokenCleaner()
cleaner, cl, err := newTokenCleaner()
if err != nil {
t.Fatalf("error creating TokenCleaner: %v", err)
}
secret := newTokenSecret("tokenID", "tokenSecret")
cleaner.secrets.Add(secret)
@@ -52,7 +59,10 @@ func TestCleanerNoExpiration(t *testing.T) {
}
func TestCleanerExpired(t *testing.T) {
cleaner, cl := newTokenCleaner()
cleaner, cl, err := newTokenCleaner()
if err != nil {
t.Fatalf("error creating TokenCleaner: %v", err)
}
secret := newTokenSecret("tokenID", "tokenSecret")
addSecretExpiration(secret, timeString(-time.Hour))
@@ -71,7 +81,10 @@ func TestCleanerExpired(t *testing.T) {
}
func TestCleanerNotExpired(t *testing.T) {
cleaner, cl := newTokenCleaner()
cleaner, cl, err := newTokenCleaner()
if err != nil {
t.Fatalf("error creating TokenCleaner: %v", err)
}
secret := newTokenSecret("tokenID", "tokenSecret")
addSecretExpiration(secret, timeString(time.Hour))