Skip to content

Commit

Permalink
Enable traceflow e2e test on Windows
Browse files Browse the repository at this point in the history
Signed-off-by: gran <gran@vmware.com>
  • Loading branch information
gran-vmv committed Nov 17, 2021
1 parent db0c92d commit c2b8706
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 16 deletions.
18 changes: 15 additions & 3 deletions test/e2e/fixtures.go
Expand Up @@ -415,6 +415,18 @@ func deletePodWrapper(tb testing.TB, data *TestData, namespace, name string) {
// created Pods. Pods are created in parallel to reduce the time required to run the tests.
func createTestBusyboxPods(tb testing.TB, data *TestData, num int, ns string, nodeName string) (
podNames []string, podIPs []*PodIPs, cleanupFn func(),
) {
return createTestPods(tb, data, num, ns, nodeName, data.createBusyboxPodOnNode)
}

func createTestAgnhostPods(tb testing.TB, data *TestData, num int, ns string, nodeName string) (
podNames []string, podIPs []*PodIPs, cleanupFn func(),
) {
return createTestPods(tb, data, num, ns, nodeName, data.createAgnhostPodOnNode)
}

func createTestPods(tb testing.TB, data *TestData, num int, ns string, nodeName string, createFunc func(string, string, string, bool) error) (
podNames []string, podIPs []*PodIPs, cleanupFn func(),
) {
cleanupFn = func() {
var wg sync.WaitGroup
Expand All @@ -436,9 +448,9 @@ func createTestBusyboxPods(tb testing.TB, data *TestData, num int, ns string, no

createPodAndGetIP := func() (string, *PodIPs, error) {
podName := randName("test-pod-")
tb.Logf("Creating a busybox test Pod '%s' and waiting for IP", podName)
if err := data.createBusyboxPodOnNode(podName, ns, nodeName, false); err != nil {
tb.Errorf("Error when creating busybox test Pod '%s': %v", podName, err)
tb.Logf("Creating a test Pod '%s' and waiting for IP", podName)
if err := createFunc(podName, ns, nodeName, false); err != nil {
tb.Errorf("Error when creating test Pod '%s': %v", podName, err)
return "", nil, err
}
podIP, err := data.podWaitForIPs(defaultTimeout, podName, ns)
Expand Down
43 changes: 30 additions & 13 deletions test/e2e/traceflow_test.go
Expand Up @@ -53,7 +53,6 @@ type testcase struct {
// TestTraceflow is the top-level test which contains all subtests for
// Traceflow related test cases so they can share setup, teardown.
func TestTraceflow(t *testing.T) {
skipIfHasWindowsNodes(t)
skipIfTraceflowDisabled(t)

data, err := setupTest(t)
Expand Down Expand Up @@ -97,8 +96,12 @@ func testTraceflowIntraNodeANP(t *testing.T, data *TestData) {
k8sUtils, err = NewKubernetesUtils(data)
failOnError(err, t)

node1 := nodeName(0)
node1Pods, _, node1CleanupFn := createTestBusyboxPods(t, data, 3, testNamespace, node1)
nodeIdx := 0
if len(clusterInfo.windowsNodes) != 0 {
nodeIdx = clusterInfo.windowsNodes[0]
}
node1 := nodeName(nodeIdx)
node1Pods, _, node1CleanupFn := createTestAgnhostPods(t, data, 3, testNamespace, node1)
defer node1CleanupFn()

var denyIngress *v1alpha1.NetworkPolicy
Expand Down Expand Up @@ -282,10 +285,14 @@ func testTraceflowIntraNodeANP(t *testing.T, data *TestData) {

// testTraceflowIntraNode verifies if traceflow can trace intra node traffic with some NetworkPolicies set.
func testTraceflowIntraNode(t *testing.T, data *TestData) {
node1 := nodeName(0)
nodeIdx := 0
if len(clusterInfo.windowsNodes) != 0 {
nodeIdx = clusterInfo.windowsNodes[0]
}
node1 := nodeName(nodeIdx)

agentPod, _ := data.getAntreaPodOnNode(node1)
node1Pods, node1IPs, node1CleanupFn := createTestBusyboxPods(t, data, 3, testNamespace, node1)
node1Pods, node1IPs, node1CleanupFn := createTestAgnhostPods(t, data, 3, testNamespace, node1)
defer node1CleanupFn()
var pod0IPv4Str, pod1IPv4Str, dstPodIPv4Str, dstPodIPv6Str string
if node1IPs[0].ipv4 != nil {
Expand Down Expand Up @@ -1097,11 +1104,17 @@ func testTraceflowInterNode(t *testing.T, data *TestData) {
skipIfProviderIs(t, "kind", "Skipping inter-Node Traceflow test for Kind because of #897")
}

node1 := nodeName(0)
node2 := nodeName(1)
nodeIdx0 := 0
nodeIdx1 := 1
if len(clusterInfo.windowsNodes) != 0 {
nodeIdx0 = clusterInfo.windowsNodes[0]
nodeIdx1 = clusterInfo.windowsNodes[1]
}
node1 := nodeName(nodeIdx0)
node2 := nodeName(nodeIdx1)

node1Pods, _, node1CleanupFn := createTestBusyboxPods(t, data, 1, testNamespace, node1)
node2Pods, node2IPs, node2CleanupFn := createTestBusyboxPods(t, data, 2, testNamespace, node2)
node1Pods, _, node1CleanupFn := createTestAgnhostPods(t, data, 1, testNamespace, node1)
node2Pods, node2IPs, node2CleanupFn := createTestAgnhostPods(t, data, 2, testNamespace, node2)
defer node1CleanupFn()
defer node2CleanupFn()
var dstPodIPv4Str, dstPodIPv6Str string
Expand Down Expand Up @@ -1943,9 +1956,13 @@ func testTraceflowInterNode(t *testing.T, data *TestData) {
}

func testTraceflowExternalIP(t *testing.T, data *TestData) {
node := nodeName(0)
nodeIP := nodeIP(0)
podNames, _, cleanupFn := createTestBusyboxPods(t, data, 1, testNamespace, node)
nodeIdx := 0
if len(clusterInfo.windowsNodes) != 0 {
nodeIdx = clusterInfo.windowsNodes[0]
}
node := nodeName(nodeIdx)
nodeIP := nodeIP(nodeIdx)
podNames, _, cleanupFn := createTestAgnhostPods(t, data, 1, testNamespace, node)
defer cleanupFn()

testcase := testcase{
Expand Down Expand Up @@ -2169,7 +2186,7 @@ func runTestTraceflow(t *testing.T, data *TestData, tc testcase) {
// Give a little time for Nodes to install OVS flows.
time.Sleep(time.Second * 2)
// Send an ICMP echo packet from the source Pod to the destination.
if err := data.runPingCommandFromTestPod(podInfo{srcPod, "linux", "", ""}, testNamespace, dstPodIPs, busyboxContainerName, 2, 0); err != nil {
if err := data.runPingCommandFromTestPod(podInfo{srcPod, "linux", "", ""}, testNamespace, dstPodIPs, agnhostContainerName, 2, 0); err != nil {
t.Logf("Ping '%s' -> '%v' failed: ERROR (%v)", srcPod, *dstPodIPs, err)
}
}
Expand Down

0 comments on commit c2b8706

Please sign in to comment.