@@ -6,15 +6,8 @@ import (
6
6
"testing"
7
7
)
8
8
9
- func assertNoNetlinkChanges (eip * egressIPWatcher ) error {
10
- select {
11
- case change := <- eip .testModeChan :
12
- return fmt .Errorf ("Unexpected netlink change %q" , change )
13
- default :
14
- return nil
15
- }
16
- }
17
-
9
+ // Checks the "testModeChan" of eip and ensures that the expected netlink event occurred
10
+ // (or rather, that a netlink event would have occurred if "testModeChan" wasn't set).
18
11
func assertNetlinkChange (eip * egressIPWatcher , expected string ) error {
19
12
select {
20
13
case change := <- eip .testModeChan :
@@ -27,6 +20,17 @@ func assertNetlinkChange(eip *egressIPWatcher, expected string) error {
27
20
}
28
21
}
29
22
23
+ // Checks the "testModeChan" of eip and ensures that no netlink events have occurred
24
+ // since the last assertNetlinkChange() or assertNoNetlinkChanges() call.
25
+ func assertNoNetlinkChanges (eip * egressIPWatcher ) error {
26
+ select {
27
+ case change := <- eip .testModeChan :
28
+ return fmt .Errorf ("Unexpected netlink change %q" , change )
29
+ default :
30
+ return nil
31
+ }
32
+ }
33
+
30
34
type egressTrafficType string
31
35
32
36
const (
@@ -108,7 +112,7 @@ func assertNoOVSChanges(eip *egressIPWatcher, flows *[]string) error {
108
112
return assertOVSChanges (eip , flows )
109
113
}
110
114
111
- func TestEgressIP (t * testing.T ) {
115
+ func setupEgressIPWatcher (t * testing.T ) ( * egressIPWatcher , [] string ) {
112
116
_ , oc , _ := setupOVSController (t )
113
117
if oc .localIP != "172.17.0.4" {
114
118
panic ("details of fake ovsController changed" )
@@ -122,17 +126,19 @@ func TestEgressIP(t *testing.T) {
122
126
t .Fatalf ("unexpected error dumping OVS flows: %v" , err )
123
127
}
124
128
129
+ return eip , flows
130
+ }
131
+
132
+ func TestEgressIP (t * testing.T ) {
133
+ eip , flows := setupEgressIPWatcher (t )
134
+
125
135
eip .updateNodeEgress ("172.17.0.3" , []string {})
126
136
eip .updateNodeEgress ("172.17.0.4" , []string {})
127
137
eip .deleteNamespaceEgress (42 )
128
138
eip .deleteNamespaceEgress (43 )
129
139
130
- if len (eip .nodesByNodeIP ) != 0 || len (eip .nodesByEgressIP ) != 0 || len (eip .namespacesByVNID ) != 0 || len (eip .namespacesByEgressIP ) != 0 {
131
- t .Fatalf ("Unexpected eip state: %#v" , eip )
132
- }
133
-
134
140
// No namespaces use egress yet, so should be no changes
135
- err = assertNoNetlinkChanges (eip )
141
+ err : = assertNoNetlinkChanges (eip )
136
142
if err != nil {
137
143
t .Fatalf ("%v" , err )
138
144
}
@@ -152,12 +158,7 @@ func TestEgressIP(t *testing.T) {
152
158
t .Fatalf ("%v" , err )
153
159
}
154
160
155
- ns42 := eip .namespacesByVNID [42 ]
156
- if ns42 == nil || eip .namespacesByEgressIP ["172.17.0.100" ] != ns42 || eip .nodesByEgressIP ["172.17.0.100" ] != nil {
157
- t .Fatalf ("Unexpected eip state: %#v" , eip )
158
- }
159
-
160
- eip .updateNodeEgress ("172.17.0.3" , []string {"172.17.0.100" })
161
+ eip .updateNodeEgress ("172.17.0.3" , []string {"172.17.0.100" }) // Added .100
161
162
err = assertNoNetlinkChanges (eip )
162
163
if err != nil {
163
164
t .Fatalf ("%v" , err )
@@ -167,13 +168,8 @@ func TestEgressIP(t *testing.T) {
167
168
t .Fatalf ("%v" , err )
168
169
}
169
170
170
- node3 := eip .nodesByNodeIP ["172.17.0.3" ]
171
- if node3 == nil || eip .namespacesByEgressIP ["172.17.0.100" ] != ns42 || eip .nodesByEgressIP ["172.17.0.100" ] != node3 {
172
- t .Fatalf ("Unexpected eip state: %#v" , eip )
173
- }
174
-
175
171
// Assign HostSubnet.EgressIP first, then NetNamespace.EgressIP, with a remote EgressIP
176
- eip .updateNodeEgress ("172.17.0.3" , []string {"172.17.0.101" , "172.17.0.100" })
172
+ eip .updateNodeEgress ("172.17.0.3" , []string {"172.17.0.101" , "172.17.0.100" }) // Added .101
177
173
err = assertNoNetlinkChanges (eip )
178
174
if err != nil {
179
175
t .Fatalf ("%v" , err )
@@ -183,10 +179,6 @@ func TestEgressIP(t *testing.T) {
183
179
t .Fatalf ("%v" , err )
184
180
}
185
181
186
- if eip .nodesByEgressIP ["172.17.0.100" ] != node3 || eip .nodesByEgressIP ["172.17.0.101" ] != node3 {
187
- t .Fatalf ("Unexpected eip state: %#v" , eip )
188
- }
189
-
190
182
eip .updateNamespaceEgress (43 , "172.17.0.101" )
191
183
err = assertNoNetlinkChanges (eip )
192
184
if err != nil {
@@ -197,11 +189,6 @@ func TestEgressIP(t *testing.T) {
197
189
t .Fatalf ("%v" , err )
198
190
}
199
191
200
- ns43 := eip .namespacesByVNID [43 ]
201
- if ns43 == nil || eip .namespacesByEgressIP ["172.17.0.101" ] != ns43 || eip .nodesByEgressIP ["172.17.0.101" ] != node3 {
202
- t .Fatalf ("Unexpected eip state: %#v" , eip )
203
- }
204
-
205
192
// Assign NetNamespace.EgressIP first, then HostSubnet.EgressIP, with a local EgressIP
206
193
eip .updateNamespaceEgress (44 , "172.17.0.102" )
207
194
err = assertNoNetlinkChanges (eip )
@@ -213,12 +200,7 @@ func TestEgressIP(t *testing.T) {
213
200
t .Fatalf ("%v" , err )
214
201
}
215
202
216
- ns44 := eip .namespacesByVNID [44 ]
217
- if ns44 == nil || eip .namespacesByEgressIP ["172.17.0.102" ] != ns44 || eip .nodesByEgressIP ["172.17.0.102" ] != nil {
218
- t .Fatalf ("Unexpected eip state: %#v" , eip )
219
- }
220
-
221
- eip .updateNodeEgress ("172.17.0.4" , []string {"172.17.0.102" })
203
+ eip .updateNodeEgress ("172.17.0.4" , []string {"172.17.0.102" }) // Added .102
222
204
err = assertNetlinkChange (eip , "claim 172.17.0.102" )
223
205
if err != nil {
224
206
t .Fatalf ("%v" , err )
@@ -228,13 +210,8 @@ func TestEgressIP(t *testing.T) {
228
210
t .Fatalf ("%v" , err )
229
211
}
230
212
231
- node4 := eip .nodesByNodeIP ["172.17.0.4" ]
232
- if node4 == nil || eip .nodesByEgressIP ["172.17.0.102" ] != node4 {
233
- t .Fatalf ("Unexpected eip state: %#v" , eip )
234
- }
235
-
236
213
// Assign HostSubnet.EgressIP first, then NetNamespace.EgressIP, with a local EgressIP
237
- eip .updateNodeEgress ("172.17.0.4" , []string {"172.17.0.102" , "172.17.0.103" })
214
+ eip .updateNodeEgress ("172.17.0.4" , []string {"172.17.0.102" , "172.17.0.103" }) // Added .103
238
215
err = assertNoNetlinkChanges (eip )
239
216
if err != nil {
240
217
t .Fatalf ("%v" , err )
@@ -244,10 +221,6 @@ func TestEgressIP(t *testing.T) {
244
221
t .Fatalf ("%v" , err )
245
222
}
246
223
247
- if eip .nodesByEgressIP ["172.17.0.102" ] != node4 || eip .nodesByEgressIP ["172.17.0.103" ] != node4 {
248
- t .Fatalf ("Unexpected eip state: %#v" , eip )
249
- }
250
-
251
224
eip .updateNamespaceEgress (45 , "172.17.0.103" )
252
225
err = assertNetlinkChange (eip , "claim 172.17.0.103" )
253
226
if err != nil {
@@ -258,11 +231,6 @@ func TestEgressIP(t *testing.T) {
258
231
t .Fatalf ("%v" , err )
259
232
}
260
233
261
- ns45 := eip .namespacesByVNID [45 ]
262
- if ns45 == nil || eip .namespacesByEgressIP ["172.17.0.103" ] != ns45 || eip .nodesByEgressIP ["172.17.0.103" ] != node4 {
263
- t .Fatalf ("Unexpected eip state: %#v" , eip )
264
- }
265
-
266
234
// Drop namespace EgressIP
267
235
eip .deleteNamespaceEgress (44 )
268
236
err = assertNetlinkChange (eip , "release 172.17.0.102" )
@@ -274,10 +242,6 @@ func TestEgressIP(t *testing.T) {
274
242
t .Fatalf ("%v" , err )
275
243
}
276
244
277
- if eip .namespacesByVNID [44 ] != nil || eip .namespacesByEgressIP ["172.17.0.102" ] != nil || eip .nodesByEgressIP ["172.17.0.102" ] != node4 {
278
- t .Fatalf ("Unexpected eip state: %#v" , eip )
279
- }
280
-
281
245
// Add namespace EgressIP back again after having removed it...
282
246
eip .updateNamespaceEgress (44 , "172.17.0.102" )
283
247
err = assertNetlinkChange (eip , "claim 172.17.0.102" )
@@ -289,13 +253,8 @@ func TestEgressIP(t *testing.T) {
289
253
t .Fatalf ("%v" , err )
290
254
}
291
255
292
- ns44 = eip .namespacesByVNID [44 ]
293
- if ns44 == nil || eip .namespacesByEgressIP ["172.17.0.102" ] != ns44 || eip .nodesByEgressIP ["172.17.0.102" ] != node4 {
294
- t .Fatalf ("Unexpected eip state: %#v" , eip )
295
- }
296
-
297
256
// Drop remote node EgressIP
298
- eip .updateNodeEgress ("172.17.0.3" , []string {"172.17.0.100" })
257
+ eip .updateNodeEgress ("172.17.0.3" , []string {"172.17.0.100" }) // Dropped .101
299
258
err = assertNoNetlinkChanges (eip )
300
259
if err != nil {
301
260
t .Fatalf ("%v" , err )
@@ -305,12 +264,8 @@ func TestEgressIP(t *testing.T) {
305
264
t .Fatalf ("%v" , err )
306
265
}
307
266
308
- if eip .namespacesByVNID [43 ] != ns43 || eip .namespacesByEgressIP ["172.17.0.101" ] != ns43 || eip .nodesByEgressIP ["172.17.0.101" ] != nil {
309
- t .Fatalf ("Unexpected eip state: %#v" , eip )
310
- }
311
-
312
267
// Drop local node EgressIP
313
- eip .updateNodeEgress ("172.17.0.4" , []string {"172.17.0.102" })
268
+ eip .updateNodeEgress ("172.17.0.4" , []string {"172.17.0.102" }) // Dropped .103
314
269
err = assertNetlinkChange (eip , "release 172.17.0.103" )
315
270
if err != nil {
316
271
t .Fatalf ("%v" , err )
@@ -320,9 +275,34 @@ func TestEgressIP(t *testing.T) {
320
275
t .Fatalf ("%v" , err )
321
276
}
322
277
278
+ // Add them back, swapped
279
+ eip .updateNodeEgress ("172.17.0.3" , []string {"172.17.0.100" , "172.17.0.103" }) // Added .103
280
+ err = assertNoNetlinkChanges (eip )
281
+ if err != nil {
282
+ t .Fatalf ("%v" , err )
283
+ }
284
+ err = assertOVSChanges (eip , & flows , egressOVSChange {vnid : 45 , egress : Remote , remote : "172.17.0.3" })
285
+ if err != nil {
286
+ t .Fatalf ("%v" , err )
287
+ }
288
+
289
+ eip .updateNodeEgress ("172.17.0.4" , []string {"172.17.0.101" , "172.17.0.102" }) // Added .101
290
+ err = assertNetlinkChange (eip , "claim 172.17.0.101" )
291
+ if err != nil {
292
+ t .Fatalf ("%v" , err )
293
+ }
294
+ err = assertOVSChanges (eip , & flows , egressOVSChange {vnid : 43 , egress : Local })
295
+ if err != nil {
296
+ t .Fatalf ("%v" , err )
297
+ }
298
+ }
299
+
300
+ func TestNodeIPAsEgressIP (t * testing.T ) {
301
+ eip , flows := setupEgressIPWatcher (t )
302
+
323
303
// Trying to assign node IP as egress IP should fail. (It will log an error but this test doesn't notice that.)
324
304
eip .updateNodeEgress ("172.17.0.4" , []string {"172.17.0.4" , "172.17.0.102" })
325
- err = assertNoNetlinkChanges (eip )
305
+ err : = assertNoNetlinkChanges (eip )
326
306
if err != nil {
327
307
t .Fatalf ("%v" , err )
328
308
}
0 commit comments