Skip to content

Commit bbadc22

Browse files
committed
egressip_test updates
Split out one test case, add some new (already-passing) test cases, add some comments, and remove some double-checking-of-internal-state that will break with upcoming rewrites.
1 parent 6758ab7 commit bbadc22

File tree

1 file changed

+53
-73
lines changed

1 file changed

+53
-73
lines changed

pkg/network/node/egressip_test.go

+53-73
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,8 @@ import (
66
"testing"
77
)
88

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).
1811
func assertNetlinkChange(eip *egressIPWatcher, expected string) error {
1912
select {
2013
case change := <-eip.testModeChan:
@@ -27,6 +20,17 @@ func assertNetlinkChange(eip *egressIPWatcher, expected string) error {
2720
}
2821
}
2922

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+
3034
type egressTrafficType string
3135

3236
const (
@@ -108,7 +112,7 @@ func assertNoOVSChanges(eip *egressIPWatcher, flows *[]string) error {
108112
return assertOVSChanges(eip, flows)
109113
}
110114

111-
func TestEgressIP(t *testing.T) {
115+
func setupEgressIPWatcher(t *testing.T) (*egressIPWatcher, []string) {
112116
_, oc, _ := setupOVSController(t)
113117
if oc.localIP != "172.17.0.4" {
114118
panic("details of fake ovsController changed")
@@ -122,17 +126,19 @@ func TestEgressIP(t *testing.T) {
122126
t.Fatalf("unexpected error dumping OVS flows: %v", err)
123127
}
124128

129+
return eip, flows
130+
}
131+
132+
func TestEgressIP(t *testing.T) {
133+
eip, flows := setupEgressIPWatcher(t)
134+
125135
eip.updateNodeEgress("172.17.0.3", []string{})
126136
eip.updateNodeEgress("172.17.0.4", []string{})
127137
eip.deleteNamespaceEgress(42)
128138
eip.deleteNamespaceEgress(43)
129139

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-
134140
// No namespaces use egress yet, so should be no changes
135-
err = assertNoNetlinkChanges(eip)
141+
err := assertNoNetlinkChanges(eip)
136142
if err != nil {
137143
t.Fatalf("%v", err)
138144
}
@@ -152,12 +158,7 @@ func TestEgressIP(t *testing.T) {
152158
t.Fatalf("%v", err)
153159
}
154160

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
161162
err = assertNoNetlinkChanges(eip)
162163
if err != nil {
163164
t.Fatalf("%v", err)
@@ -167,13 +168,8 @@ func TestEgressIP(t *testing.T) {
167168
t.Fatalf("%v", err)
168169
}
169170

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-
175171
// 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
177173
err = assertNoNetlinkChanges(eip)
178174
if err != nil {
179175
t.Fatalf("%v", err)
@@ -183,10 +179,6 @@ func TestEgressIP(t *testing.T) {
183179
t.Fatalf("%v", err)
184180
}
185181

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-
190182
eip.updateNamespaceEgress(43, "172.17.0.101")
191183
err = assertNoNetlinkChanges(eip)
192184
if err != nil {
@@ -197,11 +189,6 @@ func TestEgressIP(t *testing.T) {
197189
t.Fatalf("%v", err)
198190
}
199191

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-
205192
// Assign NetNamespace.EgressIP first, then HostSubnet.EgressIP, with a local EgressIP
206193
eip.updateNamespaceEgress(44, "172.17.0.102")
207194
err = assertNoNetlinkChanges(eip)
@@ -213,12 +200,7 @@ func TestEgressIP(t *testing.T) {
213200
t.Fatalf("%v", err)
214201
}
215202

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
222204
err = assertNetlinkChange(eip, "claim 172.17.0.102")
223205
if err != nil {
224206
t.Fatalf("%v", err)
@@ -228,13 +210,8 @@ func TestEgressIP(t *testing.T) {
228210
t.Fatalf("%v", err)
229211
}
230212

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-
236213
// 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
238215
err = assertNoNetlinkChanges(eip)
239216
if err != nil {
240217
t.Fatalf("%v", err)
@@ -244,10 +221,6 @@ func TestEgressIP(t *testing.T) {
244221
t.Fatalf("%v", err)
245222
}
246223

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-
251224
eip.updateNamespaceEgress(45, "172.17.0.103")
252225
err = assertNetlinkChange(eip, "claim 172.17.0.103")
253226
if err != nil {
@@ -258,11 +231,6 @@ func TestEgressIP(t *testing.T) {
258231
t.Fatalf("%v", err)
259232
}
260233

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-
266234
// Drop namespace EgressIP
267235
eip.deleteNamespaceEgress(44)
268236
err = assertNetlinkChange(eip, "release 172.17.0.102")
@@ -274,10 +242,6 @@ func TestEgressIP(t *testing.T) {
274242
t.Fatalf("%v", err)
275243
}
276244

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-
281245
// Add namespace EgressIP back again after having removed it...
282246
eip.updateNamespaceEgress(44, "172.17.0.102")
283247
err = assertNetlinkChange(eip, "claim 172.17.0.102")
@@ -289,13 +253,8 @@ func TestEgressIP(t *testing.T) {
289253
t.Fatalf("%v", err)
290254
}
291255

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-
297256
// 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
299258
err = assertNoNetlinkChanges(eip)
300259
if err != nil {
301260
t.Fatalf("%v", err)
@@ -305,12 +264,8 @@ func TestEgressIP(t *testing.T) {
305264
t.Fatalf("%v", err)
306265
}
307266

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-
312267
// 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
314269
err = assertNetlinkChange(eip, "release 172.17.0.103")
315270
if err != nil {
316271
t.Fatalf("%v", err)
@@ -320,9 +275,34 @@ func TestEgressIP(t *testing.T) {
320275
t.Fatalf("%v", err)
321276
}
322277

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+
323303
// Trying to assign node IP as egress IP should fail. (It will log an error but this test doesn't notice that.)
324304
eip.updateNodeEgress("172.17.0.4", []string{"172.17.0.4", "172.17.0.102"})
325-
err = assertNoNetlinkChanges(eip)
305+
err := assertNoNetlinkChanges(eip)
326306
if err != nil {
327307
t.Fatalf("%v", err)
328308
}

0 commit comments

Comments
 (0)