@@ -4,7 +4,10 @@ import (
4
4
"context"
5
5
6
6
"github.com/nginxinc/nginx-gateway-kubernetes/internal/events"
7
+ "github.com/nginxinc/nginx-gateway-kubernetes/internal/nginx/config"
7
8
"github.com/nginxinc/nginx-gateway-kubernetes/internal/nginx/config/configfakes"
9
+ "github.com/nginxinc/nginx-gateway-kubernetes/internal/nginx/file/filefakes"
10
+ "github.com/nginxinc/nginx-gateway-kubernetes/internal/nginx/runtime/runtimefakes"
8
11
"github.com/nginxinc/nginx-gateway-kubernetes/internal/state"
9
12
"github.com/nginxinc/nginx-gateway-kubernetes/internal/state/statefakes"
10
13
"github.com/nginxinc/nginx-gateway-kubernetes/internal/status/statusfakes"
@@ -37,6 +40,8 @@ var _ = Describe("EventLoop", func() {
37
40
var fakeUpdater * statusfakes.FakeUpdater
38
41
var fakeServiceStore * statefakes.FakeServiceStore
39
42
var fakeGenerator * configfakes.FakeGenerator
43
+ var fakeNginxFimeMgr * filefakes.FakeManager
44
+ var fakeNginxRuntimeMgr * runtimefakes.FakeManager
40
45
var cancel context.CancelFunc
41
46
var eventCh chan interface {}
42
47
var errorCh chan error
@@ -47,7 +52,9 @@ var _ = Describe("EventLoop", func() {
47
52
fakeUpdater = & statusfakes.FakeUpdater {}
48
53
fakeServiceStore = & statefakes.FakeServiceStore {}
49
54
fakeGenerator = & configfakes.FakeGenerator {}
50
- ctrl = events .NewEventLoop (fakeConf , fakeServiceStore , fakeGenerator , eventCh , fakeUpdater , zap .New ())
55
+ fakeNginxFimeMgr = & filefakes.FakeManager {}
56
+ fakeNginxRuntimeMgr = & runtimefakes.FakeManager {}
57
+ ctrl = events .NewEventLoop (fakeConf , fakeServiceStore , fakeGenerator , eventCh , fakeUpdater , zap .New (), fakeNginxFimeMgr , fakeNginxRuntimeMgr )
51
58
52
59
var ctx context.Context
53
60
@@ -71,8 +78,10 @@ var _ = Describe("EventLoop", func() {
71
78
It ("should process upsert event" , func () {
72
79
fakeChanges := []state.Change {
73
80
{
74
- Op : state .Upsert ,
75
- Host : state.Host {},
81
+ Op : state .Upsert ,
82
+ Host : state.Host {
83
+ Value : "example.com" ,
84
+ },
76
85
},
77
86
}
78
87
fakeStatusUpdates := []state.StatusUpdate {
@@ -83,6 +92,9 @@ var _ = Describe("EventLoop", func() {
83
92
}
84
93
fakeConf .UpsertHTTPRouteReturns (fakeChanges , fakeStatusUpdates )
85
94
95
+ fakeCfg := []byte ("fake" )
96
+ fakeGenerator .GenerateForHostReturns (fakeCfg , config.Warnings {})
97
+
86
98
hr := & v1alpha2.HTTPRoute {}
87
99
88
100
eventCh <- & events.UpsertEvent {
@@ -102,13 +114,22 @@ var _ = Describe("EventLoop", func() {
102
114
103
115
Eventually (fakeGenerator .GenerateForHostCallCount ).Should (Equal (1 ))
104
116
Expect (fakeGenerator .GenerateForHostArgsForCall (0 )).Should (Equal (fakeChanges [0 ].Host ))
117
+
118
+ Eventually (fakeNginxFimeMgr .WriteServerConfigCallCount ).Should (Equal (1 ))
119
+ host , cfg := fakeNginxFimeMgr .WriteServerConfigArgsForCall (0 )
120
+ Expect (host ).Should (Equal ("example.com" ))
121
+ Expect (cfg ).Should (Equal (fakeCfg ))
122
+
123
+ Eventually (fakeNginxRuntimeMgr .ReloadCallCount ).Should (Equal (1 ))
105
124
})
106
125
107
126
It ("should process delete event" , func () {
108
127
fakeChanges := []state.Change {
109
128
{
110
- Op : state .Delete ,
111
- Host : state.Host {},
129
+ Op : state .Delete ,
130
+ Host : state.Host {
131
+ Value : "example.com" ,
132
+ },
112
133
},
113
134
}
114
135
fakeStatusUpdates := []state.StatusUpdate {
@@ -137,9 +158,10 @@ var _ = Describe("EventLoop", func() {
137
158
return updates
138
159
}).Should (Equal (fakeStatusUpdates ))
139
160
140
- // TO-DO:
141
- // once we have a component that processes host deletion, ensure that
142
- // its corresponding method is eventually called
161
+ Eventually (fakeNginxFimeMgr .DeleteServerConfigCallCount ).Should (Equal (1 ))
162
+ Expect (fakeNginxFimeMgr .DeleteServerConfigArgsForCall (0 )).Should (Equal ("example.com" ))
163
+
164
+ Eventually (fakeNginxRuntimeMgr .ReloadCallCount ).Should (Equal (1 ))
143
165
})
144
166
})
145
167
@@ -180,6 +202,58 @@ var _ = Describe("EventLoop", func() {
180
202
})
181
203
})
182
204
205
+ Describe ("Processing events common cases" , func () {
206
+ AfterEach (func () {
207
+ cancel ()
208
+
209
+ var err error
210
+ Eventually (errorCh ).Should (Receive (& err ))
211
+ Expect (err ).To (BeNil ())
212
+ })
213
+
214
+ It ("should reload once in case of multiple changes" , func () {
215
+ fakeChanges := []state.Change {
216
+ {
217
+ Op : state .Delete ,
218
+ Host : state.Host {
219
+ Value : "one.example.com" ,
220
+ },
221
+ },
222
+ {
223
+ Op : state .Upsert ,
224
+ Host : state.Host {
225
+ Value : "two.example.com" ,
226
+ },
227
+ },
228
+ }
229
+ fakeConf .DeleteHTTPRouteReturns (fakeChanges , nil )
230
+
231
+ fakeCfg := []byte ("fake" )
232
+ fakeGenerator .GenerateForHostReturns (fakeCfg , config.Warnings {})
233
+
234
+ nsname := types.NamespacedName {Namespace : "test" , Name : "route" }
235
+
236
+ // the exact event doesn't matter. what matters is the generated changes return by DeleteHTTPRouteReturns
237
+ eventCh <- & events.DeleteEvent {
238
+ NamespacedName : nsname ,
239
+ Type : & v1alpha2.HTTPRoute {},
240
+ }
241
+
242
+ Eventually (fakeConf .DeleteHTTPRouteCallCount ).Should (Equal (1 ))
243
+ Expect (fakeConf .DeleteHTTPRouteArgsForCall (0 )).Should (Equal (nsname ))
244
+
245
+ Eventually (fakeNginxFimeMgr .WriteServerConfigCallCount ).Should (Equal (1 ))
246
+ host , cfg := fakeNginxFimeMgr .WriteServerConfigArgsForCall (0 )
247
+ Expect (host ).Should (Equal ("two.example.com" ))
248
+ Expect (cfg ).Should (Equal (fakeCfg ))
249
+
250
+ Eventually (fakeNginxFimeMgr .DeleteServerConfigCallCount ).Should (Equal (1 ))
251
+ Expect (fakeNginxFimeMgr .DeleteServerConfigArgsForCall (0 )).Should (Equal ("one.example.com" ))
252
+
253
+ Eventually (fakeNginxRuntimeMgr .ReloadCallCount ).Should (Equal (1 ))
254
+ })
255
+ })
256
+
183
257
Describe ("Edge cases" , func () {
184
258
AfterEach (func () {
185
259
cancel ()
0 commit comments