Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve e2e test #380

Merged
merged 1 commit into from
Apr 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 6 additions & 10 deletions test/e2e/pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,8 @@ var _ = Describe("FabEdge", func() {
)
framework.ExpectNoError(err)

// 必须让edgePod在前面,因为云端pod不能主动打通边缘Pod的隧道
for _, p1 := range edgePods {
for _, p2 := range cloudPods {
for _, p1 := range cloudPods {
for _, p2 := range edgePods {
cluster.expectPodsCanCommunicate(p1, p2, bothIPv4AndIPv6)
}
}
Expand All @@ -114,7 +113,6 @@ var _ = Describe("FabEdge", func() {
framework.ExpectNoError(err)

By("pods communicate with each other")
// 必须让edgePod在前面,因为云端pod不能主动打通边缘Pod的隧道
for _, p1 := range edgePods {
for _, p2 := range hostEdgePods {
// for now, not all edge framework support dual stack, so only IPv4 is tested
Expand All @@ -137,9 +135,8 @@ var _ = Describe("FabEdge", func() {
)
framework.ExpectNoError(err)

// 必须让edgePod在前面,因为云端pod不能主动打通边缘Pod的隧道
for _, p1 := range edgePods {
for _, p2 := range hostCloudPods {
for _, p1 := range hostCloudPods {
for _, p2 := range edgePods {
// for now, not all edge framework support dual stack, so only IPv4 is tested
cluster.expectPodsCanCommunicate(p1, p2, onlyIPv4)
}
Expand All @@ -161,9 +158,8 @@ var _ = Describe("FabEdge", func() {
framework.ExpectNoError(err)

By("pods communicate with each other")
// 必须让edgePod在前面,因为云端pod不能主动打通边缘Pod的隧道
for _, p1 := range hostEdgePods {
for _, p2 := range cloudPods {
for _, p1 := range cloudPods {
for _, p2 := range hostEdgePods {
// for now, not all edge framework support dual stack, so only IPv4 is tested
cluster.expectPodsCanCommunicate(p1, p2, onlyIPv4)
}
Expand Down
83 changes: 49 additions & 34 deletions test/e2e/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,15 @@ import (
"fmt"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"sigs.k8s.io/controller-runtime/pkg/client"

netutil "github.com/fabedge/fabedge/pkg/util/net"
"github.com/fabedge/fabedge/test/e2e/framework"
)

var _ = Describe("FabEdge", func() {
// 集群间通信测试
// testcases for multi-clusters communication
if framework.TestContext.IsMultiClusterTest() {
// 测试集群内pod访问集群间云端服务端点的情况
It("let cluster cloud pods can access another cluster cloud services [multi-cluster]", func() {
for _, c1 := range clusters {
clientPods, _, err := framework.ListCloudAndEdgePods(c1.client,
Expand Down Expand Up @@ -70,64 +68,54 @@ var _ = Describe("FabEdge", func() {
})

} else {
// 单集群测试
// testcases for single cluster internal communication
var cluster Cluster
BeforeEach(func() {
cluster = clusters[0]
})

// 测试边缘pod访问本地服务端点的情况
It("let edge pods can access local service endpoint when it exists [p2p]", func() {
_, clientPods, err := framework.ListCloudAndEdgePods(cluster.client,
It("let edge pods can access edge services [p2p][e2e]", func() {
_, edgePods, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
client.MatchingLabels{labelKeyInstance: instanceNetTool},
)
framework.ExpectNoError(err)

_, servicePods, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
client.MatchingLabels{labelKeyLocation: LocationEdge, labelKeyUseHostNetwork: "false"},
)
framework.ExpectNoError(err)

hostToPod := make(map[string]string)
for _, pod := range servicePods {
hostToPod[pod.Spec.NodeName] = pod.Name
}
for _, serviceName := range cluster.edgeNginxServiceNames() {
for _, pod := range clientPods {
expectedPodName, ok := hostToPod[pod.Spec.NodeName]
Expect(ok).To(BeTrue())
servicePods, _, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
client.MatchingLabels{labelKeyLocation: LocationEdge, labelKeyUseHostNetwork: "false"},
)
framework.ExpectNoError(err)

for _, pod := range edgePods {
framework.Logf("pod %s visit service %s", pod.Name, serviceName)
cluster.expectCurlResultContains(pod, serviceName, expectedPodName)
cluster.checkServiceAvailability(pod, serviceName, servicePods)
}
}
})

// 测试边缘pod访问本地服务端点的情况
It("let edge pods can access local host service endpoint when it exists [p2n]", func() {
It("let edge pods can access local host service [p2n][e2e]", func() {
_, edgePods, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
client.MatchingLabels{labelKeyInstance: instanceNetTool},
)
framework.ExpectNoError(err)

_, hostEdgePods, err := framework.ListCloudAndEdgePods(cluster.client,
servicePods, _, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
client.MatchingLabels{labelKeyInstance: instanceHostNetTool},
client.MatchingLabels{labelKeyLocation: LocationEdge, labelKeyUseHostNetwork: "true"},
)
framework.ExpectNoError(err)

// for now, only test IPv4 service
serviceName := cluster.serviceHostEdgeNginx
edgePods = append(edgePods, hostEdgePods...)
for _, pod := range edgePods {
framework.Logf("pod %s visit service %s", pod.Name, serviceName)
cluster.expectCurlResultContains(pod, serviceName, pod.Spec.NodeName)
cluster.checkServiceAvailability(pod, serviceName, servicePods)
}
})

// 测试边缘pod访问云端服务端点的情况
It("let edge pods can access cloud services [p2p][c2e]", func() {
_, edgePods, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
Expand All @@ -149,7 +137,6 @@ var _ = Describe("FabEdge", func() {
}
})

// 测试边缘主机网络pod访问云端服务端点的情况
It("let edge pods using hostNetwork can access cloud services [n2p][e2c]", func() {
_, edgePods, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
Expand All @@ -171,10 +158,7 @@ var _ = Describe("FabEdge", func() {
}
})

// 测试边缘pod访问云端服务端点的情况
It("let edge pods can access cloud services with host network endpoints [p2n][e2c][host-service]", func() {
// todo: use more flexible control flags
Skip("feature not supported now, because higher linux kernel is needed")

_, edgePods, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
Expand All @@ -190,11 +174,42 @@ var _ = Describe("FabEdge", func() {

serviceName := cluster.serviceHostCloudNginx
edgePods = append(edgePods, hostEdgePods...)
servicePods, _, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
client.MatchingLabels{labelKeyLocation: LocationCloud, labelKeyUseHostNetwork: "true"},
)

for _, pod := range edgePods {
framework.Logf("pod %s visit service %s", pod.Name, serviceName)

_, stderr, err := cluster.execCurl(pod, serviceName)
Expect(err).ShouldNot(HaveOccurred(), stderr)
cluster.checkServiceAvailability(pod, serviceName, servicePods)
}
})

It("let cloud pods can access edge services [p2n][c22]", func() {
cloudPods, _, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
client.MatchingLabels{labelKeyInstance: instanceNetTool},
)
framework.ExpectNoError(err)

_, hostCloudPods, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
client.MatchingLabels{labelKeyInstance: instanceHostNetTool},
)
framework.ExpectNoError(err)

serviceName := cluster.serviceCloudNginx
servicePods, _, err := framework.ListCloudAndEdgePods(cluster.client,
client.InNamespace(namespaceSingle),
client.MatchingLabels{labelKeyLocation: LocationCloud, labelKeyUseHostNetwork: "true"},
)

cloudPods = append(cloudPods, hostCloudPods...)
for _, pod := range cloudPods {
framework.Logf("pod %s visit service %s", pod.Name, serviceName)

cluster.checkServiceAvailability(pod, serviceName, servicePods)
}
})
}
Expand Down