forked from argoproj/notifications-engine
-
Notifications
You must be signed in to change notification settings - Fork 0
/
factory_test.go
73 lines (59 loc) · 2.12 KB
/
factory_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package api
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/tools/cache"
"github.com/argoproj/notifications-engine/pkg/services"
)
var (
settings = Settings{ConfigMapName: "my-config-map", SecretName: "my-secret", InitGetVars: func(cfg *Config, configMap *v1.ConfigMap, secret *v1.Secret) (GetVars, error) {
return func(obj map[string]interface{}, dest services.Destination) map[string]interface{} {
return map[string]interface{}{"obj": obj}
}, nil
}}
)
func TestGetAPI(t *testing.T) {
cm := &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{Name: "my-config-map", Namespace: "default"},
Data: map[string]string{
"service.slack": `{"token": "abc"}`,
},
}
secret := &v1.Secret{
ObjectMeta: metav1.ObjectMeta{Name: "my-secret", Namespace: "default"},
}
clientset := fake.NewSimpleClientset(cm, secret)
informerFactory := informers.NewSharedInformerFactory(clientset, time.Minute)
secrets := informerFactory.Core().V1().Secrets().Informer()
configMaps := informerFactory.Core().V1().ConfigMaps().Informer()
factory := NewFactory(settings, "default", secrets, configMaps)
go informerFactory.Start(context.Background().Done())
if !cache.WaitForCacheSync(context.Background().Done(), configMaps.HasSynced, secrets.HasSynced) {
assert.Fail(t, "failed to sync informers")
}
api, err := factory.GetAPI()
require.NoError(t, err)
svcs := api.GetNotificationServices()
assert.Len(t, svcs, 1)
assert.NotNil(t, svcs["slack"])
_, err = clientset.CoreV1().ConfigMaps("default").Update(context.Background(), &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{Name: "my-config-map", Namespace: "default"},
Data: map[string]string{
"service.email": `{"username": "test"}`,
},
}, metav1.UpdateOptions{})
assert.NoError(t, err)
time.Sleep(1 * time.Second)
api, err = factory.GetAPI()
require.NoError(t, err)
svcs = api.GetNotificationServices()
assert.Len(t, svcs, 1)
assert.NotNil(t, svcs["email"])
}