Skip to content

Commit 60c8a36

Browse files
committed
Add failure logic to tests that rely on side-effect-free dial functions.
1 parent 64548b3 commit 60c8a36

File tree

2 files changed

+96
-35
lines changed

2 files changed

+96
-35
lines changed

test/e2e/framework/network/utils.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,17 +166,17 @@ type NetexecDialResponse struct {
166166
Errors []string `json:"errors"`
167167
}
168168

169-
// DialFromEndpointContainer executes a curl via kubectl exec in an endpoint container.
169+
// DialFromEndpointContainer executes a curl via kubectl exec in an endpoint container. Returns an error to be handled by the caller.
170170
func (config *NetworkingTestConfig) DialFromEndpointContainer(protocol, targetIP string, targetPort, maxTries, minTries int, expectedEps sets.String) error {
171171
return config.DialFromContainer(protocol, echoHostname, config.EndpointPods[0].Status.PodIP, targetIP, EndpointHTTPPort, targetPort, maxTries, minTries, expectedEps)
172172
}
173173

174-
// DialFromTestContainer executes a curl via kubectl exec in a test container.
174+
// DialFromTestContainer executes a curl via kubectl exec in a test container. Returns an error to be handled by the caller.
175175
func (config *NetworkingTestConfig) DialFromTestContainer(protocol, targetIP string, targetPort, maxTries, minTries int, expectedEps sets.String) error {
176176
return config.DialFromContainer(protocol, echoHostname, config.TestContainerPod.Status.PodIP, targetIP, testContainerHTTPPort, targetPort, maxTries, minTries, expectedEps)
177177
}
178178

179-
// DialEchoFromTestContainer executes a curl via kubectl exec in a test container. The response is expected to match the echoMessage.
179+
// DialEchoFromTestContainer executes a curl via kubectl exec in a test container. The response is expected to match the echoMessage, Returns an error to be handled by the caller.
180180
func (config *NetworkingTestConfig) DialEchoFromTestContainer(protocol, targetIP string, targetPort, maxTries, minTries int, echoMessage string) error {
181181
expectedResponse := sets.NewString()
182182
expectedResponse.Insert(echoMessage)

test/e2e/network/networking.go

Lines changed: 93 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -164,37 +164,53 @@ var _ = SIGDescribe("Networking", func() {
164164
ginkgo.It("should function for pod-Service: http", func() {
165165
config := e2enetwork.NewNetworkingTestConfig(f, false, false)
166166
ginkgo.By(fmt.Sprintf("dialing(http) %v --> %v:%v (config.clusterIP)", config.TestContainerPod.Name, config.ClusterIP, e2enetwork.ClusterHTTPPort))
167-
config.DialFromTestContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
168-
167+
err := config.DialFromTestContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
168+
if err != nil {
169+
framework.Failf("failed dialing endpoint, %v", err)
170+
}
169171
ginkgo.By(fmt.Sprintf("dialing(http) %v --> %v:%v (nodeIP)", config.TestContainerPod.Name, config.NodeIP, config.NodeHTTPPort))
170-
config.DialFromTestContainer("http", config.NodeIP, config.NodeHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
172+
173+
err = config.DialFromTestContainer("http", config.NodeIP, config.NodeHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
174+
if err != nil {
175+
framework.Failf("failed dialing endpoint, %v", err)
176+
}
171177
})
172178

173179
ginkgo.It("should function for pod-Service: udp", func() {
174180
config := e2enetwork.NewNetworkingTestConfig(f, false, false)
175181
ginkgo.By(fmt.Sprintf("dialing(udp) %v --> %v:%v (config.clusterIP)", config.TestContainerPod.Name, config.ClusterIP, e2enetwork.ClusterUDPPort))
176-
config.DialFromTestContainer("udp", config.ClusterIP, e2enetwork.ClusterUDPPort, config.MaxTries, 0, config.EndpointHostnames())
182+
err := config.DialFromTestContainer("udp", config.ClusterIP, e2enetwork.ClusterUDPPort, config.MaxTries, 0, config.EndpointHostnames())
183+
if err != nil {
184+
framework.Failf("failed dialing endpoint, %v", err)
185+
}
177186

178187
ginkgo.By(fmt.Sprintf("dialing(udp) %v --> %v:%v (nodeIP)", config.TestContainerPod.Name, config.NodeIP, config.NodeUDPPort))
179-
config.DialFromTestContainer("udp", config.NodeIP, config.NodeUDPPort, config.MaxTries, 0, config.EndpointHostnames())
188+
err = config.DialFromTestContainer("udp", config.NodeIP, config.NodeUDPPort, config.MaxTries, 0, config.EndpointHostnames())
189+
if err != nil {
190+
framework.Failf("failed dialing endpoint, %v", err)
191+
}
180192
})
181193

182194
// Once basic tests checking for the sctp module not to be loaded are implemented, this
183195
// needs to be marked as [Disruptive]
184196
ginkgo.It("should function for pod-Service: sctp [Feature:SCTPConnectivity][Disruptive]", func() {
185197
config := e2enetwork.NewNetworkingTestConfig(f, false, true)
186198
ginkgo.By(fmt.Sprintf("dialing(sctp) %v --> %v:%v (config.clusterIP)", config.TestContainerPod.Name, config.ClusterIP, e2enetwork.ClusterSCTPPort))
187-
config.DialFromTestContainer("sctp", config.ClusterIP, e2enetwork.ClusterSCTPPort, config.MaxTries, 0, config.EndpointHostnames())
188-
199+
err := config.DialFromTestContainer("sctp", config.ClusterIP, e2enetwork.ClusterSCTPPort, config.MaxTries, 0, config.EndpointHostnames())
200+
if err != nil {
201+
framework.Failf("failed dialing endpoint, %v", err)
202+
}
189203
ginkgo.By(fmt.Sprintf("dialing(sctp) %v --> %v:%v (nodeIP)", config.TestContainerPod.Name, config.NodeIP, config.NodeSCTPPort))
190-
config.DialFromTestContainer("sctp", config.NodeIP, config.NodeSCTPPort, config.MaxTries, 0, config.EndpointHostnames())
204+
err = config.DialFromTestContainer("sctp", config.NodeIP, config.NodeSCTPPort, config.MaxTries, 0, config.EndpointHostnames())
205+
if err != nil {
206+
framework.Failf("failed dialing endpoint, %v", err)
207+
}
191208
})
192209

193210
ginkgo.It("should function for node-Service: http", func() {
194211
config := e2enetwork.NewNetworkingTestConfig(f, true, false)
195212
ginkgo.By(fmt.Sprintf("dialing(http) %v (node) --> %v:%v (config.clusterIP)", config.NodeIP, config.ClusterIP, e2enetwork.ClusterHTTPPort))
196213
config.DialFromNode("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
197-
198214
ginkgo.By(fmt.Sprintf("dialing(http) %v (node) --> %v:%v (nodeIP)", config.NodeIP, config.NodeIP, config.NodeHTTPPort))
199215
config.DialFromNode("http", config.NodeIP, config.NodeHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
200216
})
@@ -211,19 +227,30 @@ var _ = SIGDescribe("Networking", func() {
211227
ginkgo.It("should function for endpoint-Service: http", func() {
212228
config := e2enetwork.NewNetworkingTestConfig(f, false, false)
213229
ginkgo.By(fmt.Sprintf("dialing(http) %v (endpoint) --> %v:%v (config.clusterIP)", config.EndpointPods[0].Name, config.ClusterIP, e2enetwork.ClusterHTTPPort))
214-
config.DialFromEndpointContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
215-
230+
err := config.DialFromEndpointContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
231+
if err != nil {
232+
framework.Failf("failed dialing endpoint, %v", err)
233+
}
216234
ginkgo.By(fmt.Sprintf("dialing(http) %v (endpoint) --> %v:%v (nodeIP)", config.EndpointPods[0].Name, config.NodeIP, config.NodeHTTPPort))
217-
config.DialFromEndpointContainer("http", config.NodeIP, config.NodeHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
235+
err = config.DialFromEndpointContainer("http", config.NodeIP, config.NodeHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
236+
if err != nil {
237+
framework.Failf("failed dialing endpoint, %v", err)
238+
}
218239
})
219240

220241
ginkgo.It("should function for endpoint-Service: udp", func() {
221242
config := e2enetwork.NewNetworkingTestConfig(f, false, false)
222243
ginkgo.By(fmt.Sprintf("dialing(udp) %v (endpoint) --> %v:%v (config.clusterIP)", config.EndpointPods[0].Name, config.ClusterIP, e2enetwork.ClusterUDPPort))
223-
config.DialFromEndpointContainer("udp", config.ClusterIP, e2enetwork.ClusterUDPPort, config.MaxTries, 0, config.EndpointHostnames())
244+
err := config.DialFromEndpointContainer("udp", config.ClusterIP, e2enetwork.ClusterUDPPort, config.MaxTries, 0, config.EndpointHostnames())
245+
if err != nil {
246+
framework.Failf("failed dialing endpoint, %v", err)
247+
}
224248

225249
ginkgo.By(fmt.Sprintf("dialing(udp) %v (endpoint) --> %v:%v (nodeIP)", config.EndpointPods[0].Name, config.NodeIP, config.NodeUDPPort))
226-
config.DialFromEndpointContainer("udp", config.NodeIP, config.NodeUDPPort, config.MaxTries, 0, config.EndpointHostnames())
250+
err = config.DialFromEndpointContainer("udp", config.NodeIP, config.NodeUDPPort, config.MaxTries, 0, config.EndpointHostnames())
251+
if err != nil {
252+
framework.Failf("failed dialing endpoint, %v", err)
253+
}
227254
})
228255

229256
// This test ensures that in a situation where multiple services exist with the same selector,
@@ -235,49 +262,74 @@ var _ = SIGDescribe("Networking", func() {
235262

236263
// original service should work
237264
ginkgo.By(fmt.Sprintf("dialing(http) %v (endpoint) --> %v:%v (config.clusterIP)", config.EndpointPods[0].Name, config.ClusterIP, e2enetwork.ClusterHTTPPort))
238-
config.DialFromEndpointContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
239-
265+
err := config.DialFromEndpointContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
266+
if err != nil {
267+
framework.Failf("failed dialing endpoint, %v", err)
268+
}
240269
ginkgo.By(fmt.Sprintf("dialing(http) %v (endpoint) --> %v:%v (nodeIP)", config.EndpointPods[0].Name, config.NodeIP, config.NodeHTTPPort))
241-
config.DialFromEndpointContainer("http", config.NodeIP, config.NodeHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
242-
270+
err = config.DialFromEndpointContainer("http", config.NodeIP, config.NodeHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
271+
if err != nil {
272+
framework.Failf("failed dialing endpoint, %v", err)
273+
}
243274
// Dial second service
244275
ginkgo.By(fmt.Sprintf("dialing(http) %v (endpoint) --> %v:%v (svc2.clusterIP)", config.EndpointPods[0].Name, svc2.Spec.ClusterIP, e2enetwork.ClusterHTTPPort))
245-
config.DialFromEndpointContainer("http", svc2.Spec.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
276+
err = config.DialFromEndpointContainer("http", svc2.Spec.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
277+
if err != nil {
278+
framework.Failf("failed dialing endpoint, %v", err)
279+
}
246280

247281
ginkgo.By(fmt.Sprintf("dialing(http) %v (endpoint) --> %v:%v (nodeIP)", config.EndpointPods[0].Name, config.NodeIP, httpPort))
248-
config.DialFromEndpointContainer("http", config.NodeIP, httpPort, config.MaxTries, 0, config.EndpointHostnames())
282+
err = config.DialFromEndpointContainer("http", config.NodeIP, httpPort, config.MaxTries, 0, config.EndpointHostnames())
283+
if err != nil {
284+
framework.Failf("failed dialing endpoint, %v", err)
285+
}
249286

250287
ginkgo.By("deleting the original node port service")
251288
config.DeleteNodePortService()
252289

253290
// Second service should continue to function unaffected
254291
ginkgo.By(fmt.Sprintf("dialing(http) %v (endpoint) --> %v:%v (svc2.clusterIP)", config.EndpointPods[0].Name, svc2.Spec.ClusterIP, e2enetwork.ClusterHTTPPort))
255-
config.DialFromEndpointContainer("http", svc2.Spec.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
256-
292+
err = config.DialFromEndpointContainer("http", svc2.Spec.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
293+
if err != nil {
294+
framework.Failf("failed dialing endpoint, %v", err)
295+
}
257296
ginkgo.By(fmt.Sprintf("dialing(http) %v (endpoint) --> %v:%v (nodeIP)", config.EndpointPods[0].Name, config.NodeIP, httpPort))
258-
config.DialFromEndpointContainer("http", config.NodeIP, httpPort, config.MaxTries, 0, config.EndpointHostnames())
297+
err = config.DialFromEndpointContainer("http", config.NodeIP, httpPort, config.MaxTries, 0, config.EndpointHostnames())
298+
if err != nil {
299+
framework.Failf("failed dialing endpoint, %v", err)
300+
}
259301
})
260302

261303
ginkgo.It("should update endpoints: http", func() {
262304
config := e2enetwork.NewNetworkingTestConfig(f, false, false)
263305
ginkgo.By(fmt.Sprintf("dialing(http) %v --> %v:%v (config.clusterIP)", config.TestContainerPod.Name, config.ClusterIP, e2enetwork.ClusterHTTPPort))
264-
config.DialFromTestContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
265-
306+
err := config.DialFromTestContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, config.EndpointHostnames())
307+
if err != nil {
308+
framework.Failf("failed dialing endpoint, %v", err)
309+
}
266310
config.DeleteNetProxyPod()
267311

268312
ginkgo.By(fmt.Sprintf("dialing(http) %v --> %v:%v (config.clusterIP)", config.TestContainerPod.Name, config.ClusterIP, e2enetwork.ClusterHTTPPort))
269-
config.DialFromTestContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, config.MaxTries, config.EndpointHostnames())
313+
err = config.DialFromTestContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, config.MaxTries, config.EndpointHostnames())
314+
if err != nil {
315+
framework.Failf("failed dialing endpoint, %v", err)
316+
}
270317
})
271318

272319
ginkgo.It("should update endpoints: udp", func() {
273320
config := e2enetwork.NewNetworkingTestConfig(f, false, false)
274321
ginkgo.By(fmt.Sprintf("dialing(udp) %v --> %v:%v (config.clusterIP)", config.TestContainerPod.Name, config.ClusterIP, e2enetwork.ClusterUDPPort))
275-
config.DialFromTestContainer("udp", config.ClusterIP, e2enetwork.ClusterUDPPort, config.MaxTries, 0, config.EndpointHostnames())
276-
322+
err := config.DialFromTestContainer("udp", config.ClusterIP, e2enetwork.ClusterUDPPort, config.MaxTries, 0, config.EndpointHostnames())
323+
if err != nil {
324+
framework.Failf("failed dialing endpoint, %v", err)
325+
}
277326
config.DeleteNetProxyPod()
278327

279328
ginkgo.By(fmt.Sprintf("dialing(udp) %v --> %v:%v (config.clusterIP)", config.TestContainerPod.Name, config.ClusterIP, e2enetwork.ClusterUDPPort))
280-
config.DialFromTestContainer("udp", config.ClusterIP, e2enetwork.ClusterUDPPort, config.MaxTries, config.MaxTries, config.EndpointHostnames())
329+
err = config.DialFromTestContainer("udp", config.ClusterIP, e2enetwork.ClusterUDPPort, config.MaxTries, config.MaxTries, config.EndpointHostnames())
330+
if err != nil {
331+
framework.Failf("failed dialing endpoint, %v", err)
332+
}
281333
})
282334

283335
// Slow because we confirm that the nodePort doesn't serve traffic, which requires a period of polling.
@@ -344,14 +396,20 @@ var _ = SIGDescribe("Networking", func() {
344396
config := e2enetwork.NewNetworkingTestConfig(f, false, false)
345397
ginkgo.By(fmt.Sprintf("dialing(http) %v --> %v:%v (config.clusterIP)", config.TestContainerPod.Name, config.ClusterIP, e2enetwork.ClusterHTTPPort))
346398
message := strings.Repeat("42", 1000)
347-
config.DialEchoFromTestContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, message)
399+
err := config.DialEchoFromTestContainer("http", config.ClusterIP, e2enetwork.ClusterHTTPPort, config.MaxTries, 0, message)
400+
if err != nil {
401+
framework.Failf("failed dialing endpoint, %v", err)
402+
}
348403
})
349404

350405
ginkgo.It("should be able to handle large requests: udp", func() {
351406
config := e2enetwork.NewNetworkingTestConfig(f, false, false)
352407
ginkgo.By(fmt.Sprintf("dialing(udp) %v --> %v:%v (config.clusterIP)", config.TestContainerPod.Name, config.ClusterIP, e2enetwork.ClusterUDPPort))
353408
message := "n" + strings.Repeat("o", 1999)
354-
config.DialEchoFromTestContainer("udp", config.ClusterIP, e2enetwork.ClusterUDPPort, config.MaxTries, 0, message)
409+
err := config.DialEchoFromTestContainer("udp", config.ClusterIP, e2enetwork.ClusterUDPPort, config.MaxTries, 0, message)
410+
if err != nil {
411+
framework.Failf("failed dialing endpoint, %v", err)
412+
}
355413
})
356414
})
357415

@@ -361,7 +419,10 @@ var _ = SIGDescribe("Networking", func() {
361419
config := e2enetwork.NewNetworkingTestConfig(f, false, true)
362420
ginkgo.By(fmt.Sprintf("dialing(sctp) %v --> %v:%v (config.clusterIP)", config.TestContainerPod.Name, config.ClusterIP, e2enetwork.ClusterSCTPPort))
363421
message := "hello"
364-
config.DialEchoFromTestContainer("sctp", config.TestContainerPod.Status.PodIP, e2enetwork.EndpointSCTPPort, config.MaxTries, 0, message)
422+
err := config.DialEchoFromTestContainer("sctp", config.TestContainerPod.Status.PodIP, e2enetwork.EndpointSCTPPort, config.MaxTries, 0, message)
423+
if err != nil {
424+
framework.Failf("failed dialing endpoint, %v", err)
425+
}
365426
})
366427

367428
ginkgo.It("should recreate its iptables rules if they are deleted [Disruptive]", func() {

0 commit comments

Comments
 (0)