1 package bsl_test
2
3 import (
4 "context"
5 "testing"
6 "time"
7
8 . "edge-infra.dev/pkg/edge/bsl"
9 fakebsl "edge-infra.dev/pkg/edge/bsl/fake"
10 "edge-infra.dev/pkg/lib/logging"
11
12 assertapi "github.com/stretchr/testify/assert"
13 "sigs.k8s.io/controller-runtime/pkg/client/fake"
14 )
15
16 var (
17 waitForCallbackFunction = 200 * time.Millisecond
18 )
19
20 func TestOnConfigMapUpdate(t *testing.T) {
21 assert := assertapi.New(t)
22
23 cl := fake.NewClientBuilder().Build()
24 ctx := context.Background()
25
26 configMap := fakebsl.GetBSLInfoConfigMap()
27 updatedConfigmap := fakebsl.GetBSLInfoConfigMap()
28 updatedConfigmap.Data[BSLSiteID] = "foo1"
29
30
31 callCount := 0
32 logger := logging.NewLogger().WithName("TestOnConfigMapUpdate")
33 watch, err := OnConfigMapUpdate(ctx, cl, logger, func(i *BSLInfo) {
34 assert.NotNil(configMap)
35 if callCount == 0 {
36 actual, err := FromConfigMap(configMap)
37 assert.NoError(err)
38 assert.Equal(actual, i)
39 } else {
40 actual, err := FromConfigMap(updatedConfigmap)
41 assert.NoError(err)
42 assert.Equal(actual, i)
43 }
44 callCount++
45 })
46 assert.NoError(err)
47 defer watch.Stop()
48
49 assert.NoError(cl.Create(ctx, configMap))
50 time.Sleep(waitForCallbackFunction)
51 assert.NoError(cl.Update(ctx, updatedConfigmap))
52 time.Sleep(waitForCallbackFunction)
53 assert.Equal(2, callCount)
54 }
55
56 func TestOnConfigMapUpdateInvalid(t *testing.T) {
57 assert := assertapi.New(t)
58
59 cl := fake.NewClientBuilder().Build()
60 ctx := context.Background()
61
62 configMap := fakebsl.GetBSLInfoConfigMap()
63 updatedConfigmap := fakebsl.GetBSLInfoConfigMap()
64 updatedConfigmap.Data[BSLSiteCoordinateLatitude] = "invalid value, number only"
65
66
67 callCount := 0
68 logger := logging.NewLogger().WithName("TestOnConfigMapUpdateInvalid")
69 watch, err := OnConfigMapUpdate(ctx, cl, logger, func(i *BSLInfo) {
70 assert.NotNil(configMap)
71 actual, err := FromConfigMap(configMap)
72 assert.NoError(err)
73 assert.Equal(actual, i)
74 callCount++
75 })
76 assert.NoError(err)
77 defer watch.Stop()
78
79 assert.NoError(cl.Create(ctx, configMap))
80 time.Sleep(waitForCallbackFunction)
81 assert.NoError(cl.Update(ctx, updatedConfigmap))
82 time.Sleep(waitForCallbackFunction)
83 assert.Equal(1, callCount)
84 }
85
86
87 func TestOnConfigMapUpdateFilterMatchAll(t *testing.T) {
88 assert := assertapi.New(t)
89
90 cl := fake.NewClientBuilder().Build()
91 ctx := context.Background()
92
93 configMap := fakebsl.GetBSLInfoConfigMap()
94 updatedConfigmap := fakebsl.GetBSLInfoConfigMap()
95 updatedConfigmap.Data[BSLSiteName] = "foo2"
96 updatedConfigmap.Data[BSLSiteReferenceID] = "new-id"
97
98
99 callCount := 0
100 logger := logging.NewLogger().WithName("TestOnConfigMapUpdateFilterMatchAll")
101 watch, err := OnConfigMapUpdate(ctx, cl, logger, func(i *BSLInfo) {
102 assert.NotNil(configMap)
103 if callCount == 0 {
104 actual, err := FromConfigMap(configMap)
105 assert.NoError(err)
106 assert.Equal(actual, i)
107 } else {
108 actual, err := FromConfigMap(updatedConfigmap)
109 assert.NoError(err)
110 assert.Equal(actual, i)
111 }
112 callCount++
113 }, BSLSiteName, BSLSiteReferenceID)
114 assert.NoError(err)
115 defer watch.Stop()
116
117 assert.NoError(cl.Create(ctx, configMap))
118 time.Sleep(waitForCallbackFunction)
119 assert.NoError(cl.Update(ctx, updatedConfigmap))
120 time.Sleep(waitForCallbackFunction)
121 assert.Equal(2, callCount)
122 }
123
124
125 func TestOnConfigMapUpdateFilterMatchOne(t *testing.T) {
126 assert := assertapi.New(t)
127
128 cl := fake.NewClientBuilder().Build()
129 ctx := context.Background()
130
131 configMap := fakebsl.GetBSLInfoConfigMap()
132 updatedConfigmap := fakebsl.GetBSLInfoConfigMap()
133 updatedConfigmap.Data[BSLSiteName] = "foo3"
134 updatedConfigmap.Data[BSLSiteAddressStreet] = "new-location"
135
136
137 callCount := 0
138 logger := logging.NewLogger().WithName("TestOnConfigMapUpdateFilterMatchOne")
139 watch, err := OnConfigMapUpdate(ctx, cl, logger, func(i *BSLInfo) {
140 assert.NotNil(configMap)
141 if callCount == 0 {
142 actual, err := FromConfigMap(configMap)
143 assert.NoError(err)
144 assert.Equal(actual, i)
145 } else {
146 actual, err := FromConfigMap(updatedConfigmap)
147 assert.NoError(err)
148 assert.Equal(actual, i)
149 }
150 callCount++
151 }, BSLSiteName, BSLSiteID)
152 assert.NoError(err)
153 defer watch.Stop()
154
155 assert.NoError(cl.Create(ctx, configMap))
156 time.Sleep(waitForCallbackFunction)
157 assert.NoError(cl.Update(ctx, updatedConfigmap))
158 time.Sleep(waitForCallbackFunction)
159 assert.Equal(2, callCount)
160 }
161
162 func TestOnConfigMapUpdateFilterMatchNone(t *testing.T) {
163 assert := assertapi.New(t)
164
165 cl := fake.NewClientBuilder().Build()
166 ctx := context.Background()
167
168 configMap := fakebsl.GetBSLInfoConfigMap()
169 updatedConfigmap := fakebsl.GetBSLInfoConfigMap()
170 updatedConfigmap.Data[BSLSiteName] = "foo4"
171
172
173 callCount := 0
174 logger := logging.NewLogger().WithName("TestOnConfigMapUpdateFilterMatchNone")
175 watch, err := OnConfigMapUpdate(ctx, cl, logger, func(i *BSLInfo) {
176 assert.NotNil(configMap)
177 actual, err := FromConfigMap(configMap)
178 assert.NoError(err)
179 assert.Equal(actual, i)
180 callCount++
181 }, BSLSiteID, BSLSiteEnterpriseUnitName)
182 assert.NoError(err)
183 defer watch.Stop()
184
185 assert.NoError(cl.Create(ctx, configMap))
186 time.Sleep(waitForCallbackFunction)
187 assert.NoError(cl.Update(ctx, updatedConfigmap))
188 time.Sleep(waitForCallbackFunction)
189 assert.Equal(1, callCount)
190 }
191
View as plain text