mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 03:11:40 +00:00
Merge pull request #77901 from k-toyoda-pi/use_expect_no_error_e2e_network_1
use framework.ExpectNoError() for e2e/network
This commit is contained in:
commit
a7f13bcaf0
@ -28,7 +28,6 @@ import (
|
|||||||
e2elog "k8s.io/kubernetes/test/e2e/framework/log"
|
e2elog "k8s.io/kubernetes/test/e2e/framework/log"
|
||||||
|
|
||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
"github.com/onsi/gomega"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const dnsTestPodHostName = "dns-querier-1"
|
const dnsTestPodHostName = "dns-querier-1"
|
||||||
@ -132,7 +131,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
}
|
}
|
||||||
headlessService := framework.CreateServiceSpec(dnsTestServiceName, "", true, testServiceSelector)
|
headlessService := framework.CreateServiceSpec(dnsTestServiceName, "", true, testServiceSelector)
|
||||||
_, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(headlessService)
|
_, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(headlessService)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create headless service: %s", dnsTestServiceName)
|
framework.ExpectNoError(err, "failed to create headless service: %s", dnsTestServiceName)
|
||||||
defer func() {
|
defer func() {
|
||||||
ginkgo.By("deleting the test headless service")
|
ginkgo.By("deleting the test headless service")
|
||||||
defer ginkgo.GinkgoRecover()
|
defer ginkgo.GinkgoRecover()
|
||||||
@ -142,7 +141,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
regularServiceName := "test-service-2"
|
regularServiceName := "test-service-2"
|
||||||
regularService := framework.CreateServiceSpec(regularServiceName, "", false, testServiceSelector)
|
regularService := framework.CreateServiceSpec(regularServiceName, "", false, testServiceSelector)
|
||||||
regularService, err = f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(regularService)
|
regularService, err = f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(regularService)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create regular service: %s", regularServiceName)
|
framework.ExpectNoError(err, "failed to create regular service: %s", regularServiceName)
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
ginkgo.By("deleting the test service")
|
ginkgo.By("deleting the test service")
|
||||||
@ -181,7 +180,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
}
|
}
|
||||||
headlessService := framework.CreateServiceSpec(dnsTestServiceName, "", true, testServiceSelector)
|
headlessService := framework.CreateServiceSpec(dnsTestServiceName, "", true, testServiceSelector)
|
||||||
_, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(headlessService)
|
_, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(headlessService)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create headless service: %s", dnsTestServiceName)
|
framework.ExpectNoError(err, "failed to create headless service: %s", dnsTestServiceName)
|
||||||
defer func() {
|
defer func() {
|
||||||
ginkgo.By("deleting the test headless service")
|
ginkgo.By("deleting the test headless service")
|
||||||
defer ginkgo.GinkgoRecover()
|
defer ginkgo.GinkgoRecover()
|
||||||
@ -191,7 +190,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
regularServiceName := "test-service-2"
|
regularServiceName := "test-service-2"
|
||||||
regularService := framework.CreateServiceSpec(regularServiceName, "", false, testServiceSelector)
|
regularService := framework.CreateServiceSpec(regularServiceName, "", false, testServiceSelector)
|
||||||
regularService, err = f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(regularService)
|
regularService, err = f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(regularService)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create regular service: %s", regularServiceName)
|
framework.ExpectNoError(err, "failed to create regular service: %s", regularServiceName)
|
||||||
defer func() {
|
defer func() {
|
||||||
ginkgo.By("deleting the test service")
|
ginkgo.By("deleting the test service")
|
||||||
defer ginkgo.GinkgoRecover()
|
defer ginkgo.GinkgoRecover()
|
||||||
@ -232,7 +231,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
podHostname := "dns-querier-2"
|
podHostname := "dns-querier-2"
|
||||||
headlessService := framework.CreateServiceSpec(serviceName, "", true, testServiceSelector)
|
headlessService := framework.CreateServiceSpec(serviceName, "", true, testServiceSelector)
|
||||||
_, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(headlessService)
|
_, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(headlessService)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create headless service: %s", serviceName)
|
framework.ExpectNoError(err, "failed to create headless service: %s", serviceName)
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
ginkgo.By("deleting the test headless service")
|
ginkgo.By("deleting the test headless service")
|
||||||
@ -267,7 +266,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
podHostname := "dns-querier-2"
|
podHostname := "dns-querier-2"
|
||||||
headlessService := framework.CreateServiceSpec(serviceName, "", true, testServiceSelector)
|
headlessService := framework.CreateServiceSpec(serviceName, "", true, testServiceSelector)
|
||||||
_, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(headlessService)
|
_, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(headlessService)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create headless service: %s", serviceName)
|
framework.ExpectNoError(err, "failed to create headless service: %s", serviceName)
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
ginkgo.By("deleting the test headless service")
|
ginkgo.By("deleting the test headless service")
|
||||||
@ -305,7 +304,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
serviceName := "dns-test-service-3"
|
serviceName := "dns-test-service-3"
|
||||||
externalNameService := framework.CreateServiceSpec(serviceName, "foo.example.com", false, nil)
|
externalNameService := framework.CreateServiceSpec(serviceName, "foo.example.com", false, nil)
|
||||||
_, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(externalNameService)
|
_, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(externalNameService)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create ExternalName service: %s", serviceName)
|
framework.ExpectNoError(err, "failed to create ExternalName service: %s", serviceName)
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
ginkgo.By("deleting the test externalName service")
|
ginkgo.By("deleting the test externalName service")
|
||||||
@ -329,7 +328,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
_, err = framework.UpdateService(f.ClientSet, f.Namespace.Name, serviceName, func(s *v1.Service) {
|
_, err = framework.UpdateService(f.ClientSet, f.Namespace.Name, serviceName, func(s *v1.Service) {
|
||||||
s.Spec.ExternalName = "bar.example.com"
|
s.Spec.ExternalName = "bar.example.com"
|
||||||
})
|
})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to change externalName of service: %s", serviceName)
|
framework.ExpectNoError(err, "failed to change externalName of service: %s", serviceName)
|
||||||
wheezyProbeCmd, wheezyFileName = createTargetedProbeCommand(hostFQDN, "CNAME", "wheezy")
|
wheezyProbeCmd, wheezyFileName = createTargetedProbeCommand(hostFQDN, "CNAME", "wheezy")
|
||||||
jessieProbeCmd, jessieFileName = createTargetedProbeCommand(hostFQDN, "CNAME", "jessie")
|
jessieProbeCmd, jessieFileName = createTargetedProbeCommand(hostFQDN, "CNAME", "jessie")
|
||||||
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
||||||
@ -349,7 +348,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
{Port: 80, Name: "http", Protocol: v1.ProtocolTCP},
|
{Port: 80, Name: "http", Protocol: v1.ProtocolTCP},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to change service type to ClusterIP for service: %s", serviceName)
|
framework.ExpectNoError(err, "failed to change service type to ClusterIP for service: %s", serviceName)
|
||||||
wheezyProbeCmd, wheezyFileName = createTargetedProbeCommand(hostFQDN, "A", "wheezy")
|
wheezyProbeCmd, wheezyFileName = createTargetedProbeCommand(hostFQDN, "A", "wheezy")
|
||||||
jessieProbeCmd, jessieFileName = createTargetedProbeCommand(hostFQDN, "A", "jessie")
|
jessieProbeCmd, jessieFileName = createTargetedProbeCommand(hostFQDN, "A", "jessie")
|
||||||
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
ginkgo.By("Running these commands on wheezy: " + wheezyProbeCmd + "\n")
|
||||||
@ -360,7 +359,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
pod3 := createDNSPod(f.Namespace.Name, wheezyProbeCmd, jessieProbeCmd, dnsTestPodHostName, dnsTestServiceName)
|
pod3 := createDNSPod(f.Namespace.Name, wheezyProbeCmd, jessieProbeCmd, dnsTestPodHostName, dnsTestServiceName)
|
||||||
|
|
||||||
svc, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Get(externalNameService.Name, metav1.GetOptions{})
|
svc, err := f.ClientSet.CoreV1().Services(f.Namespace.Name).Get(externalNameService.Name, metav1.GetOptions{})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to get service: %s", externalNameService.Name)
|
framework.ExpectNoError(err, "failed to get service: %s", externalNameService.Name)
|
||||||
|
|
||||||
validateTargetedProbeOutput(f, pod3, []string{wheezyFileName, jessieFileName}, svc.Spec.ClusterIP)
|
validateTargetedProbeOutput(f, pod3, []string{wheezyFileName, jessieFileName}, svc.Spec.ClusterIP)
|
||||||
})
|
})
|
||||||
@ -376,7 +375,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
Searches: []string{testSearchPath},
|
Searches: []string{testSearchPath},
|
||||||
}
|
}
|
||||||
testAgnhostPod, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(testAgnhostPod)
|
testAgnhostPod, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(testAgnhostPod)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create pod: %s", testAgnhostPod.Name)
|
framework.ExpectNoError(err, "failed to create pod: %s", testAgnhostPod.Name)
|
||||||
framework.Logf("Created pod %v", testAgnhostPod)
|
framework.Logf("Created pod %v", testAgnhostPod)
|
||||||
defer func() {
|
defer func() {
|
||||||
framework.Logf("Deleting pod %s...", testAgnhostPod.Name)
|
framework.Logf("Deleting pod %s...", testAgnhostPod.Name)
|
||||||
@ -384,7 +383,8 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
framework.Failf("ginkgo.Failed to delete pod %s: %v", testAgnhostPod.Name, err)
|
framework.Failf("ginkgo.Failed to delete pod %s: %v", testAgnhostPod.Name, err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
gomega.Expect(f.WaitForPodRunning(testAgnhostPod.Name)).NotTo(gomega.HaveOccurred(), "failed to wait for pod %s to be running", testAgnhostPod.Name)
|
err = f.WaitForPodRunning(testAgnhostPod.Name)
|
||||||
|
framework.ExpectNoError(err, "failed to wait for pod %s to be running", testAgnhostPod.Name)
|
||||||
|
|
||||||
runCommand := func(arg string) string {
|
runCommand := func(arg string) string {
|
||||||
cmd := []string{"/agnhost", arg}
|
cmd := []string{"/agnhost", arg}
|
||||||
@ -396,7 +396,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
CaptureStdout: true,
|
CaptureStdout: true,
|
||||||
CaptureStderr: true,
|
CaptureStderr: true,
|
||||||
})
|
})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to run command '/agnhost %s' on pod, stdout: %v, stderr: %v, err: %v", arg, stdout, stderr, err)
|
framework.ExpectNoError(err, "failed to run command '/agnhost %s' on pod, stdout: %v, stderr: %v, err: %v", arg, stdout, stderr, err)
|
||||||
return stdout
|
return stdout
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -424,7 +424,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
testDNSNameFull: testInjectedIP,
|
testDNSNameFull: testInjectedIP,
|
||||||
})
|
})
|
||||||
testServerPod, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(testServerPod)
|
testServerPod, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(testServerPod)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create pod: %s", testServerPod.Name)
|
framework.ExpectNoError(err, "failed to create pod: %s", testServerPod.Name)
|
||||||
e2elog.Logf("Created pod %v", testServerPod)
|
e2elog.Logf("Created pod %v", testServerPod)
|
||||||
defer func() {
|
defer func() {
|
||||||
e2elog.Logf("Deleting pod %s...", testServerPod.Name)
|
e2elog.Logf("Deleting pod %s...", testServerPod.Name)
|
||||||
@ -432,11 +432,12 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
framework.Failf("ginkgo.Failed to delete pod %s: %v", testServerPod.Name, err)
|
framework.Failf("ginkgo.Failed to delete pod %s: %v", testServerPod.Name, err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
gomega.Expect(f.WaitForPodRunning(testServerPod.Name)).NotTo(gomega.HaveOccurred(), "failed to wait for pod %s to be running", testServerPod.Name)
|
err = f.WaitForPodRunning(testServerPod.Name)
|
||||||
|
framework.ExpectNoError(err, "failed to wait for pod %s to be running", testServerPod.Name)
|
||||||
|
|
||||||
// Retrieve server pod IP.
|
// Retrieve server pod IP.
|
||||||
testServerPod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Get(testServerPod.Name, metav1.GetOptions{})
|
testServerPod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Get(testServerPod.Name, metav1.GetOptions{})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to get pod %v", testServerPod.Name)
|
framework.ExpectNoError(err, "failed to get pod %v", testServerPod.Name)
|
||||||
testServerIP := testServerPod.Status.PodIP
|
testServerIP := testServerPod.Status.PodIP
|
||||||
e2elog.Logf("testServerIP is %s", testServerIP)
|
e2elog.Logf("testServerIP is %s", testServerIP)
|
||||||
|
|
||||||
@ -455,7 +456,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
testUtilsPod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(testUtilsPod)
|
testUtilsPod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(testUtilsPod)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create pod: %s", testUtilsPod.Name)
|
framework.ExpectNoError(err, "failed to create pod: %s", testUtilsPod.Name)
|
||||||
e2elog.Logf("Created pod %v", testUtilsPod)
|
e2elog.Logf("Created pod %v", testUtilsPod)
|
||||||
defer func() {
|
defer func() {
|
||||||
e2elog.Logf("Deleting pod %s...", testUtilsPod.Name)
|
e2elog.Logf("Deleting pod %s...", testUtilsPod.Name)
|
||||||
@ -463,7 +464,8 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
framework.Failf("ginkgo.Failed to delete pod %s: %v", testUtilsPod.Name, err)
|
framework.Failf("ginkgo.Failed to delete pod %s: %v", testUtilsPod.Name, err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
gomega.Expect(f.WaitForPodRunning(testUtilsPod.Name)).NotTo(gomega.HaveOccurred(), "failed to wait for pod %s to be running", testUtilsPod.Name)
|
err = f.WaitForPodRunning(testUtilsPod.Name)
|
||||||
|
framework.ExpectNoError(err, "failed to wait for pod %s to be running", testUtilsPod.Name)
|
||||||
|
|
||||||
ginkgo.By("Verifying customized DNS option is configured on pod...")
|
ginkgo.By("Verifying customized DNS option is configured on pod...")
|
||||||
// TODO: Figure out a better way other than checking the actual resolv,conf file.
|
// TODO: Figure out a better way other than checking the actual resolv,conf file.
|
||||||
@ -476,7 +478,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
CaptureStdout: true,
|
CaptureStdout: true,
|
||||||
CaptureStderr: true,
|
CaptureStderr: true,
|
||||||
})
|
})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to examine resolv,conf file on pod, stdout: %v, stderr: %v, err: %v", stdout, stderr, err)
|
framework.ExpectNoError(err, "failed to examine resolv,conf file on pod, stdout: %v, stderr: %v, err: %v", stdout, stderr, err)
|
||||||
if !strings.Contains(stdout, "ndots:2") {
|
if !strings.Contains(stdout, "ndots:2") {
|
||||||
framework.Failf("customized DNS options not found in resolv.conf, got: %s", stdout)
|
framework.Failf("customized DNS options not found in resolv.conf, got: %s", stdout)
|
||||||
}
|
}
|
||||||
@ -508,7 +510,7 @@ var _ = SIGDescribe("DNS", func() {
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
err = wait.PollImmediate(5*time.Second, 3*time.Minute, digFunc)
|
err = wait.PollImmediate(5*time.Second, 3*time.Minute, digFunc)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to verify customized name server and search path")
|
framework.ExpectNoError(err, "failed to verify customized name server and search path")
|
||||||
|
|
||||||
// TODO: Add more test cases for other DNSPolicies.
|
// TODO: Add more test cases for other DNSPolicies.
|
||||||
})
|
})
|
||||||
|
@ -68,7 +68,7 @@ func (t *dnsTestCommon) init() {
|
|||||||
|
|
||||||
namespace := "kube-system"
|
namespace := "kube-system"
|
||||||
pods, err := t.f.ClientSet.CoreV1().Pods(namespace).List(options)
|
pods, err := t.f.ClientSet.CoreV1().Pods(namespace).List(options)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to list pods in namespace: %s", namespace)
|
framework.ExpectNoError(err, "failed to list pods in namespace: %s", namespace)
|
||||||
gomega.Expect(len(pods.Items)).Should(gomega.BeNumerically(">=", 1))
|
gomega.Expect(len(pods.Items)).Should(gomega.BeNumerically(">=", 1))
|
||||||
|
|
||||||
t.dnsPod = &pods.Items[0]
|
t.dnsPod = &pods.Items[0]
|
||||||
@ -157,23 +157,23 @@ func (t *dnsTestCommon) setConfigMap(cm *v1.ConfigMap) {
|
|||||||
}.AsSelector().String(),
|
}.AsSelector().String(),
|
||||||
}
|
}
|
||||||
cmList, err := t.c.CoreV1().ConfigMaps(t.ns).List(options)
|
cmList, err := t.c.CoreV1().ConfigMaps(t.ns).List(options)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to list ConfigMaps in namespace: %s", t.ns)
|
framework.ExpectNoError(err, "failed to list ConfigMaps in namespace: %s", t.ns)
|
||||||
|
|
||||||
if len(cmList.Items) == 0 {
|
if len(cmList.Items) == 0 {
|
||||||
ginkgo.By(fmt.Sprintf("Creating the ConfigMap (%s:%s) %+v", t.ns, t.name, *cm))
|
ginkgo.By(fmt.Sprintf("Creating the ConfigMap (%s:%s) %+v", t.ns, t.name, *cm))
|
||||||
_, err := t.c.CoreV1().ConfigMaps(t.ns).Create(cm)
|
_, err := t.c.CoreV1().ConfigMaps(t.ns).Create(cm)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create ConfigMap (%s:%s) %+v", t.ns, t.name, *cm)
|
framework.ExpectNoError(err, "failed to create ConfigMap (%s:%s) %+v", t.ns, t.name, *cm)
|
||||||
} else {
|
} else {
|
||||||
ginkgo.By(fmt.Sprintf("Updating the ConfigMap (%s:%s) to %+v", t.ns, t.name, *cm))
|
ginkgo.By(fmt.Sprintf("Updating the ConfigMap (%s:%s) to %+v", t.ns, t.name, *cm))
|
||||||
_, err := t.c.CoreV1().ConfigMaps(t.ns).Update(cm)
|
_, err := t.c.CoreV1().ConfigMaps(t.ns).Update(cm)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to update ConfigMap (%s:%s) to %+v", t.ns, t.name, *cm)
|
framework.ExpectNoError(err, "failed to update ConfigMap (%s:%s) to %+v", t.ns, t.name, *cm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *dnsTestCommon) fetchDNSConfigMapData() map[string]string {
|
func (t *dnsTestCommon) fetchDNSConfigMapData() map[string]string {
|
||||||
if t.name == "coredns" {
|
if t.name == "coredns" {
|
||||||
pcm, err := t.c.CoreV1().ConfigMaps(metav1.NamespaceSystem).Get(t.name, metav1.GetOptions{})
|
pcm, err := t.c.CoreV1().ConfigMaps(metav1.NamespaceSystem).Get(t.name, metav1.GetOptions{})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to get DNS ConfigMap: %s", t.name)
|
framework.ExpectNoError(err, "failed to get DNS ConfigMap: %s", t.name)
|
||||||
return pcm.Data
|
return pcm.Data
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -192,7 +192,7 @@ func (t *dnsTestCommon) deleteConfigMap() {
|
|||||||
ginkgo.By(fmt.Sprintf("Deleting the ConfigMap (%s:%s)", t.ns, t.name))
|
ginkgo.By(fmt.Sprintf("Deleting the ConfigMap (%s:%s)", t.ns, t.name))
|
||||||
t.cm = nil
|
t.cm = nil
|
||||||
err := t.c.CoreV1().ConfigMaps(t.ns).Delete(t.name, nil)
|
err := t.c.CoreV1().ConfigMaps(t.ns).Delete(t.name, nil)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to delete config map: %s", t.name)
|
framework.ExpectNoError(err, "failed to delete config map: %s", t.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *dnsTestCommon) createUtilPodLabel(baseName string) {
|
func (t *dnsTestCommon) createUtilPodLabel(baseName string) {
|
||||||
@ -224,9 +224,10 @@ func (t *dnsTestCommon) createUtilPodLabel(baseName string) {
|
|||||||
|
|
||||||
var err error
|
var err error
|
||||||
t.utilPod, err = t.c.CoreV1().Pods(t.f.Namespace.Name).Create(t.utilPod)
|
t.utilPod, err = t.c.CoreV1().Pods(t.f.Namespace.Name).Create(t.utilPod)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create pod: %v", t.utilPod)
|
framework.ExpectNoError(err, "failed to create pod: %v", t.utilPod)
|
||||||
e2elog.Logf("Created pod %v", t.utilPod)
|
e2elog.Logf("Created pod %v", t.utilPod)
|
||||||
gomega.Expect(t.f.WaitForPodRunning(t.utilPod.Name)).NotTo(gomega.HaveOccurred(), "pod failed to start running: %v", t.utilPod)
|
err = t.f.WaitForPodRunning(t.utilPod.Name)
|
||||||
|
framework.ExpectNoError(err, "pod failed to start running: %v", t.utilPod)
|
||||||
|
|
||||||
t.utilService = &v1.Service{
|
t.utilService = &v1.Service{
|
||||||
TypeMeta: metav1.TypeMeta{
|
TypeMeta: metav1.TypeMeta{
|
||||||
@ -249,7 +250,7 @@ func (t *dnsTestCommon) createUtilPodLabel(baseName string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.utilService, err = t.c.CoreV1().Services(t.f.Namespace.Name).Create(t.utilService)
|
t.utilService, err = t.c.CoreV1().Services(t.f.Namespace.Name).Create(t.utilService)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create service: %s/%s", t.f.Namespace.Name, t.utilService.ObjectMeta.Name)
|
framework.ExpectNoError(err, "failed to create service: %s/%s", t.f.Namespace.Name, t.utilService.ObjectMeta.Name)
|
||||||
e2elog.Logf("Created service %v", t.utilService)
|
e2elog.Logf("Created service %v", t.utilService)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,7 +273,7 @@ func (t *dnsTestCommon) deleteCoreDNSPods() {
|
|||||||
|
|
||||||
for _, pod := range pods.Items {
|
for _, pod := range pods.Items {
|
||||||
err = podClient.Delete(pod.Name, metav1.NewDeleteOptions(0))
|
err = podClient.Delete(pod.Name, metav1.NewDeleteOptions(0))
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to delete pod: %s", pod.Name)
|
framework.ExpectNoError(err, "failed to delete pod: %s", pod.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,13 +316,14 @@ func (t *dnsTestCommon) createDNSPodFromObj(pod *v1.Pod) {
|
|||||||
|
|
||||||
var err error
|
var err error
|
||||||
t.dnsServerPod, err = t.c.CoreV1().Pods(t.f.Namespace.Name).Create(t.dnsServerPod)
|
t.dnsServerPod, err = t.c.CoreV1().Pods(t.f.Namespace.Name).Create(t.dnsServerPod)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create pod: %v", t.dnsServerPod)
|
framework.ExpectNoError(err, "failed to create pod: %v", t.dnsServerPod)
|
||||||
e2elog.Logf("Created pod %v", t.dnsServerPod)
|
e2elog.Logf("Created pod %v", t.dnsServerPod)
|
||||||
gomega.Expect(t.f.WaitForPodRunning(t.dnsServerPod.Name)).NotTo(gomega.HaveOccurred(), "pod failed to start running: %v", t.dnsServerPod)
|
err = t.f.WaitForPodRunning(t.dnsServerPod.Name)
|
||||||
|
framework.ExpectNoError(err, "pod failed to start running: %v", t.dnsServerPod)
|
||||||
|
|
||||||
t.dnsServerPod, err = t.c.CoreV1().Pods(t.f.Namespace.Name).Get(
|
t.dnsServerPod, err = t.c.CoreV1().Pods(t.f.Namespace.Name).Get(
|
||||||
t.dnsServerPod.Name, metav1.GetOptions{})
|
t.dnsServerPod.Name, metav1.GetOptions{})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to get pod: %s", t.dnsServerPod.Name)
|
framework.ExpectNoError(err, "failed to get pod: %s", t.dnsServerPod.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *dnsTestCommon) createDNSServer(aRecords map[string]string) {
|
func (t *dnsTestCommon) createDNSServer(aRecords map[string]string) {
|
||||||
|
@ -33,7 +33,6 @@ import (
|
|||||||
e2elog "k8s.io/kubernetes/test/e2e/framework/log"
|
e2elog "k8s.io/kubernetes/test/e2e/framework/log"
|
||||||
|
|
||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
"github.com/onsi/gomega"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -84,7 +83,7 @@ var _ = SIGDescribe("ClusterDns [Feature:Example]", func() {
|
|||||||
var err error
|
var err error
|
||||||
namespaceName := fmt.Sprintf("dnsexample%d", i)
|
namespaceName := fmt.Sprintf("dnsexample%d", i)
|
||||||
namespaces[i], err = f.CreateNamespace(namespaceName, nil)
|
namespaces[i], err = f.CreateNamespace(namespaceName, nil)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create namespace: %s", namespaceName)
|
framework.ExpectNoError(err, "failed to create namespace: %s", namespaceName)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, ns := range namespaces {
|
for _, ns := range namespaces {
|
||||||
@ -106,13 +105,13 @@ var _ = SIGDescribe("ClusterDns [Feature:Example]", func() {
|
|||||||
label := labels.SelectorFromSet(labels.Set(map[string]string{"name": backendRcName}))
|
label := labels.SelectorFromSet(labels.Set(map[string]string{"name": backendRcName}))
|
||||||
options := metav1.ListOptions{LabelSelector: label.String()}
|
options := metav1.ListOptions{LabelSelector: label.String()}
|
||||||
pods, err := c.CoreV1().Pods(ns.Name).List(options)
|
pods, err := c.CoreV1().Pods(ns.Name).List(options)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to list pods in namespace: %s", ns.Name)
|
framework.ExpectNoError(err, "failed to list pods in namespace: %s", ns.Name)
|
||||||
err = framework.PodsResponding(c, ns.Name, backendPodName, false, pods)
|
err = framework.PodsResponding(c, ns.Name, backendPodName, false, pods)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "waiting for all pods to respond")
|
framework.ExpectNoError(err, "waiting for all pods to respond")
|
||||||
e2elog.Logf("found %d backend pods responding in namespace %s", len(pods.Items), ns.Name)
|
e2elog.Logf("found %d backend pods responding in namespace %s", len(pods.Items), ns.Name)
|
||||||
|
|
||||||
err = framework.ServiceResponding(c, ns.Name, backendSvcName)
|
err = framework.ServiceResponding(c, ns.Name, backendSvcName)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "waiting for the service to respond")
|
framework.ExpectNoError(err, "waiting for the service to respond")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now another tricky part:
|
// Now another tricky part:
|
||||||
@ -134,7 +133,7 @@ var _ = SIGDescribe("ClusterDns [Feature:Example]", func() {
|
|||||||
|
|
||||||
queryDNS := fmt.Sprintf(queryDNSPythonTemplate, backendSvcName+"."+namespaces[0].Name)
|
queryDNS := fmt.Sprintf(queryDNSPythonTemplate, backendSvcName+"."+namespaces[0].Name)
|
||||||
_, err = framework.LookForStringInPodExec(namespaces[0].Name, podName, []string{"python", "-c", queryDNS}, "ok", dnsReadyTimeout)
|
_, err = framework.LookForStringInPodExec(namespaces[0].Name, podName, []string{"python", "-c", queryDNS}, "ok", dnsReadyTimeout)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "waiting for output from pod exec")
|
framework.ExpectNoError(err, "waiting for output from pod exec")
|
||||||
|
|
||||||
updatedPodYaml := prepareResourceWithReplacedString(frontendPodYaml, fmt.Sprintf("dns-backend.development.svc.%s", framework.TestContext.ClusterDNSDomain), fmt.Sprintf("dns-backend.%s.svc.%s", namespaces[0].Name, framework.TestContext.ClusterDNSDomain))
|
updatedPodYaml := prepareResourceWithReplacedString(frontendPodYaml, fmt.Sprintf("dns-backend.development.svc.%s", framework.TestContext.ClusterDNSDomain), fmt.Sprintf("dns-backend.%s.svc.%s", namespaces[0].Name, framework.TestContext.ClusterDNSDomain))
|
||||||
|
|
||||||
@ -153,7 +152,7 @@ var _ = SIGDescribe("ClusterDns [Feature:Example]", func() {
|
|||||||
// wait for pods to print their result
|
// wait for pods to print their result
|
||||||
for _, ns := range namespaces {
|
for _, ns := range namespaces {
|
||||||
_, err := framework.LookForStringInLog(ns.Name, frontendPodName, frontendPodContainerName, podOutput, framework.PodStartTimeout)
|
_, err := framework.LookForStringInLog(ns.Name, frontendPodName, frontendPodContainerName, podOutput, framework.PodStartTimeout)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "pod %s failed to print result in logs", frontendPodName)
|
framework.ExpectNoError(err, "pod %s failed to print result in logs", frontendPodName)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -165,10 +164,10 @@ func getNsCmdFlag(ns *v1.Namespace) string {
|
|||||||
// pass enough context with the 'old' parameter so that it replaces what your really intended.
|
// pass enough context with the 'old' parameter so that it replaces what your really intended.
|
||||||
func prepareResourceWithReplacedString(inputFile, old, new string) string {
|
func prepareResourceWithReplacedString(inputFile, old, new string) string {
|
||||||
f, err := os.Open(inputFile)
|
f, err := os.Open(inputFile)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to open file: %s", inputFile)
|
framework.ExpectNoError(err, "failed to open file: %s", inputFile)
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
data, err := ioutil.ReadAll(f)
|
data, err := ioutil.ReadAll(f)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to read from file: %s", inputFile)
|
framework.ExpectNoError(err, "failed to read from file: %s", inputFile)
|
||||||
podYaml := strings.Replace(string(data), old, new, 1)
|
podYaml := strings.Replace(string(data), old, new, 1)
|
||||||
return podYaml
|
return podYaml
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ var _ = SIGDescribe("Firewall rule", func() {
|
|||||||
cs = f.ClientSet
|
cs = f.ClientSet
|
||||||
cloudConfig = framework.TestContext.CloudConfig
|
cloudConfig = framework.TestContext.CloudConfig
|
||||||
gceCloud, err = gce.GetGCECloud()
|
gceCloud, err = gce.GetGCECloud()
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
})
|
})
|
||||||
|
|
||||||
// This test takes around 6 minutes to run
|
// This test takes around 6 minutes to run
|
||||||
@ -68,7 +68,7 @@ var _ = SIGDescribe("Firewall rule", func() {
|
|||||||
|
|
||||||
ginkgo.By("Getting cluster ID")
|
ginkgo.By("Getting cluster ID")
|
||||||
clusterID, err := gce.GetClusterID(cs)
|
clusterID, err := gce.GetClusterID(cs)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
e2elog.Logf("Got cluster ID: %v", clusterID)
|
e2elog.Logf("Got cluster ID: %v", clusterID)
|
||||||
|
|
||||||
jig := framework.NewServiceTestJig(cs, serviceName)
|
jig := framework.NewServiceTestJig(cs, serviceName)
|
||||||
@ -90,25 +90,28 @@ var _ = SIGDescribe("Firewall rule", func() {
|
|||||||
svc.Spec.Type = v1.ServiceTypeNodePort
|
svc.Spec.Type = v1.ServiceTypeNodePort
|
||||||
svc.Spec.LoadBalancerSourceRanges = nil
|
svc.Spec.LoadBalancerSourceRanges = nil
|
||||||
})
|
})
|
||||||
gomega.Expect(cs.CoreV1().Services(svc.Namespace).Delete(svc.Name, nil)).NotTo(gomega.HaveOccurred())
|
err = cs.CoreV1().Services(svc.Namespace).Delete(svc.Name, nil)
|
||||||
|
framework.ExpectNoError(err)
|
||||||
ginkgo.By("Waiting for the local traffic health check firewall rule to be deleted")
|
ginkgo.By("Waiting for the local traffic health check firewall rule to be deleted")
|
||||||
localHCFwName := gce.MakeHealthCheckFirewallNameForLBService(clusterID, cloudprovider.DefaultLoadBalancerName(svc), false)
|
localHCFwName := gce.MakeHealthCheckFirewallNameForLBService(clusterID, cloudprovider.DefaultLoadBalancerName(svc), false)
|
||||||
_, err := gce.WaitForFirewallRule(gceCloud, localHCFwName, false, framework.LoadBalancerCleanupTimeout)
|
_, err := gce.WaitForFirewallRule(gceCloud, localHCFwName, false, framework.LoadBalancerCleanupTimeout)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
}()
|
}()
|
||||||
svcExternalIP := svc.Status.LoadBalancer.Ingress[0].IP
|
svcExternalIP := svc.Status.LoadBalancer.Ingress[0].IP
|
||||||
|
|
||||||
ginkgo.By("Checking if service's firewall rule is correct")
|
ginkgo.By("Checking if service's firewall rule is correct")
|
||||||
lbFw := gce.ConstructFirewallForLBService(svc, cloudConfig.NodeTag)
|
lbFw := gce.ConstructFirewallForLBService(svc, cloudConfig.NodeTag)
|
||||||
fw, err := gceCloud.GetFirewall(lbFw.Name)
|
fw, err := gceCloud.GetFirewall(lbFw.Name)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
gomega.Expect(gce.VerifyFirewallRule(fw, lbFw, cloudConfig.Network, false)).NotTo(gomega.HaveOccurred())
|
err = gce.VerifyFirewallRule(fw, lbFw, cloudConfig.Network, false)
|
||||||
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
ginkgo.By("Checking if service's nodes health check firewall rule is correct")
|
ginkgo.By("Checking if service's nodes health check firewall rule is correct")
|
||||||
nodesHCFw := gce.ConstructHealthCheckFirewallForLBService(clusterID, svc, cloudConfig.NodeTag, true)
|
nodesHCFw := gce.ConstructHealthCheckFirewallForLBService(clusterID, svc, cloudConfig.NodeTag, true)
|
||||||
fw, err = gceCloud.GetFirewall(nodesHCFw.Name)
|
fw, err = gceCloud.GetFirewall(nodesHCFw.Name)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
gomega.Expect(gce.VerifyFirewallRule(fw, nodesHCFw, cloudConfig.Network, false)).NotTo(gomega.HaveOccurred())
|
err = gce.VerifyFirewallRule(fw, nodesHCFw, cloudConfig.Network, false)
|
||||||
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
// OnlyLocal service is needed to examine which exact nodes the requests are being forwarded to by the Load Balancer on GCE
|
// OnlyLocal service is needed to examine which exact nodes the requests are being forwarded to by the Load Balancer on GCE
|
||||||
ginkgo.By("Updating LoadBalancer service to ExternalTrafficPolicy=Local")
|
ginkgo.By("Updating LoadBalancer service to ExternalTrafficPolicy=Local")
|
||||||
@ -118,13 +121,14 @@ var _ = SIGDescribe("Firewall rule", func() {
|
|||||||
|
|
||||||
ginkgo.By("Waiting for the nodes health check firewall rule to be deleted")
|
ginkgo.By("Waiting for the nodes health check firewall rule to be deleted")
|
||||||
_, err = gce.WaitForFirewallRule(gceCloud, nodesHCFw.Name, false, framework.LoadBalancerCleanupTimeout)
|
_, err = gce.WaitForFirewallRule(gceCloud, nodesHCFw.Name, false, framework.LoadBalancerCleanupTimeout)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
ginkgo.By("Waiting for the correct local traffic health check firewall rule to be created")
|
ginkgo.By("Waiting for the correct local traffic health check firewall rule to be created")
|
||||||
localHCFw := gce.ConstructHealthCheckFirewallForLBService(clusterID, svc, cloudConfig.NodeTag, false)
|
localHCFw := gce.ConstructHealthCheckFirewallForLBService(clusterID, svc, cloudConfig.NodeTag, false)
|
||||||
fw, err = gce.WaitForFirewallRule(gceCloud, localHCFw.Name, true, framework.LoadBalancerCreateTimeoutDefault)
|
fw, err = gce.WaitForFirewallRule(gceCloud, localHCFw.Name, true, framework.LoadBalancerCreateTimeoutDefault)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
gomega.Expect(gce.VerifyFirewallRule(fw, localHCFw, cloudConfig.Network, false)).NotTo(gomega.HaveOccurred())
|
err = gce.VerifyFirewallRule(fw, localHCFw, cloudConfig.Network, false)
|
||||||
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
ginkgo.By(fmt.Sprintf("Creating netexec pods on at most %v nodes", framework.MaxNodesForEndpointsTests))
|
ginkgo.By(fmt.Sprintf("Creating netexec pods on at most %v nodes", framework.MaxNodesForEndpointsTests))
|
||||||
for i, nodeName := range nodesNames {
|
for i, nodeName := range nodesNames {
|
||||||
@ -132,13 +136,15 @@ var _ = SIGDescribe("Firewall rule", func() {
|
|||||||
jig.LaunchNetexecPodOnNode(f, nodeName, podName, firewallTestHTTPPort, firewallTestUDPPort, true)
|
jig.LaunchNetexecPodOnNode(f, nodeName, podName, firewallTestHTTPPort, firewallTestUDPPort, true)
|
||||||
defer func() {
|
defer func() {
|
||||||
e2elog.Logf("Cleaning up the netexec pod: %v", podName)
|
e2elog.Logf("Cleaning up the netexec pod: %v", podName)
|
||||||
gomega.Expect(cs.CoreV1().Pods(ns).Delete(podName, nil)).NotTo(gomega.HaveOccurred())
|
err = cs.CoreV1().Pods(ns).Delete(podName, nil)
|
||||||
|
framework.ExpectNoError(err)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send requests from outside of the cluster because internal traffic is whitelisted
|
// Send requests from outside of the cluster because internal traffic is whitelisted
|
||||||
ginkgo.By("Accessing the external service ip from outside, all non-master nodes should be reached")
|
ginkgo.By("Accessing the external service ip from outside, all non-master nodes should be reached")
|
||||||
gomega.Expect(framework.TestHitNodesFromOutside(svcExternalIP, firewallTestHTTPPort, framework.LoadBalancerCreateTimeoutDefault, nodesSet)).NotTo(gomega.HaveOccurred())
|
err = framework.TestHitNodesFromOutside(svcExternalIP, firewallTestHTTPPort, framework.LoadBalancerCreateTimeoutDefault, nodesSet)
|
||||||
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
// Check if there are overlapping tags on the firewall that extend beyond just the vms in our cluster
|
// Check if there are overlapping tags on the firewall that extend beyond just the vms in our cluster
|
||||||
// by removing the tag on one vm and make sure it doesn't get any traffic. This is an imperfect
|
// by removing the tag on one vm and make sure it doesn't get any traffic. This is an imperfect
|
||||||
@ -158,11 +164,13 @@ var _ = SIGDescribe("Firewall rule", func() {
|
|||||||
nodesSet.Insert(nodesNames[0])
|
nodesSet.Insert(nodesNames[0])
|
||||||
gce.SetInstanceTags(cloudConfig, nodesNames[0], zone, removedTags)
|
gce.SetInstanceTags(cloudConfig, nodesNames[0], zone, removedTags)
|
||||||
// Make sure traffic is recovered before exit
|
// Make sure traffic is recovered before exit
|
||||||
gomega.Expect(framework.TestHitNodesFromOutside(svcExternalIP, firewallTestHTTPPort, framework.LoadBalancerCreateTimeoutDefault, nodesSet)).NotTo(gomega.HaveOccurred())
|
err = framework.TestHitNodesFromOutside(svcExternalIP, firewallTestHTTPPort, framework.LoadBalancerCreateTimeoutDefault, nodesSet)
|
||||||
|
framework.ExpectNoError(err)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
ginkgo.By("Accessing serivce through the external ip and examine got no response from the node without tags")
|
ginkgo.By("Accessing serivce through the external ip and examine got no response from the node without tags")
|
||||||
gomega.Expect(framework.TestHitNodesFromOutsideWithCount(svcExternalIP, firewallTestHTTPPort, framework.LoadBalancerCreateTimeoutDefault, nodesSet, 15)).NotTo(gomega.HaveOccurred())
|
err = framework.TestHitNodesFromOutsideWithCount(svcExternalIP, firewallTestHTTPPort, framework.LoadBalancerCreateTimeoutDefault, nodesSet, 15)
|
||||||
|
framework.ExpectNoError(err)
|
||||||
})
|
})
|
||||||
|
|
||||||
ginkgo.It("should have correct firewall rules for e2e cluster", func() {
|
ginkgo.It("should have correct firewall rules for e2e cluster", func() {
|
||||||
@ -174,8 +182,9 @@ var _ = SIGDescribe("Firewall rule", func() {
|
|||||||
ginkgo.By("Checking if e2e firewall rules are correct")
|
ginkgo.By("Checking if e2e firewall rules are correct")
|
||||||
for _, expFw := range gce.GetE2eFirewalls(cloudConfig.MasterName, cloudConfig.MasterTag, cloudConfig.NodeTag, cloudConfig.Network, cloudConfig.ClusterIPRange) {
|
for _, expFw := range gce.GetE2eFirewalls(cloudConfig.MasterName, cloudConfig.MasterTag, cloudConfig.NodeTag, cloudConfig.Network, cloudConfig.ClusterIPRange) {
|
||||||
fw, err := gceCloud.GetFirewall(expFw.Name)
|
fw, err := gceCloud.GetFirewall(expFw.Name)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
gomega.Expect(gce.VerifyFirewallRule(fw, expFw, cloudConfig.Network, false)).NotTo(gomega.HaveOccurred())
|
err = gce.VerifyFirewallRule(fw, expFw, cloudConfig.Network, false)
|
||||||
|
framework.ExpectNoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ginkgo.By("Checking well known ports on master and nodes are not exposed externally")
|
ginkgo.By("Checking well known ports on master and nodes are not exposed externally")
|
||||||
|
@ -28,7 +28,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
"github.com/onsi/gomega"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -52,7 +51,7 @@ var _ = SIGDescribe("NetworkPolicy", func() {
|
|||||||
|
|
||||||
ginkgo.By("Waiting for pod ready", func() {
|
ginkgo.By("Waiting for pod ready", func() {
|
||||||
err := f.WaitForPodReady(podServer.Name)
|
err := f.WaitForPodReady(podServer.Name)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
})
|
})
|
||||||
|
|
||||||
// Create pods, which should be able to communicate with the server on port 80 and 81.
|
// Create pods, which should be able to communicate with the server on port 80 and 81.
|
||||||
@ -77,7 +76,7 @@ var _ = SIGDescribe("NetworkPolicy", func() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
defer cleanupNetworkPolicy(f, policy)
|
defer cleanupNetworkPolicy(f, policy)
|
||||||
|
|
||||||
// Create a pod with name 'client-cannot-connect', which will attempt to communicate with the server,
|
// Create a pod with name 'client-cannot-connect', which will attempt to communicate with the server,
|
||||||
@ -112,7 +111,7 @@ var _ = SIGDescribe("NetworkPolicy", func() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
defer cleanupNetworkPolicy(f, policy)
|
defer cleanupNetworkPolicy(f, policy)
|
||||||
|
|
||||||
ginkgo.By("Creating client-a which should be able to contact the server.", func() {
|
ginkgo.By("Creating client-a which should be able to contact the server.", func() {
|
||||||
@ -132,12 +131,12 @@ var _ = SIGDescribe("NetworkPolicy", func() {
|
|||||||
nsB, err := f.CreateNamespace(nsBName, map[string]string{
|
nsB, err := f.CreateNamespace(nsBName, map[string]string{
|
||||||
"ns-name": nsBName,
|
"ns-name": nsBName,
|
||||||
})
|
})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
// Create Server with Service in NS-B
|
// Create Server with Service in NS-B
|
||||||
e2elog.Logf("Waiting for server to come up.")
|
e2elog.Logf("Waiting for server to come up.")
|
||||||
err = framework.WaitForPodRunningInNamespace(f.ClientSet, podServer)
|
err = framework.WaitForPodRunningInNamespace(f.ClientSet, podServer)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
// Create Policy for that service that allows traffic only via namespace B
|
// Create Policy for that service that allows traffic only via namespace B
|
||||||
ginkgo.By("Creating a network policy for the server which allows traffic from namespace-b.")
|
ginkgo.By("Creating a network policy for the server which allows traffic from namespace-b.")
|
||||||
@ -165,7 +164,7 @@ var _ = SIGDescribe("NetworkPolicy", func() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
policy, err = f.ClientSet.NetworkingV1().NetworkPolicies(nsA.Name).Create(policy)
|
policy, err = f.ClientSet.NetworkingV1().NetworkPolicies(nsA.Name).Create(policy)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
defer cleanupNetworkPolicy(f, policy)
|
defer cleanupNetworkPolicy(f, policy)
|
||||||
|
|
||||||
testCannotConnect(f, nsA, "client-a", service, 80)
|
testCannotConnect(f, nsA, "client-a", service, 80)
|
||||||
@ -194,7 +193,7 @@ var _ = SIGDescribe("NetworkPolicy", func() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
defer cleanupNetworkPolicy(f, policy)
|
defer cleanupNetworkPolicy(f, policy)
|
||||||
|
|
||||||
ginkgo.By("Testing pods can connect only to the port allowed by the policy.")
|
ginkgo.By("Testing pods can connect only to the port allowed by the policy.")
|
||||||
@ -224,7 +223,7 @@ var _ = SIGDescribe("NetworkPolicy", func() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
defer cleanupNetworkPolicy(f, policy)
|
defer cleanupNetworkPolicy(f, policy)
|
||||||
|
|
||||||
ginkgo.By("Creating a network policy for the Service which allows traffic only to another port.")
|
ginkgo.By("Creating a network policy for the Service which allows traffic only to another port.")
|
||||||
@ -248,7 +247,7 @@ var _ = SIGDescribe("NetworkPolicy", func() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
policy2, err = f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy2)
|
policy2, err = f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy2)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
defer cleanupNetworkPolicy(f, policy2)
|
defer cleanupNetworkPolicy(f, policy2)
|
||||||
|
|
||||||
ginkgo.By("Testing pods can connect to both ports when both policies are present.")
|
ginkgo.By("Testing pods can connect to both ports when both policies are present.")
|
||||||
@ -271,7 +270,7 @@ var _ = SIGDescribe("NetworkPolicy", func() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
defer cleanupNetworkPolicy(f, policy)
|
defer cleanupNetworkPolicy(f, policy)
|
||||||
|
|
||||||
ginkgo.By("Testing pods can connect to both ports when an 'allow-all' policy is present.")
|
ginkgo.By("Testing pods can connect to both ports when an 'allow-all' policy is present.")
|
||||||
@ -301,7 +300,7 @@ var _ = SIGDescribe("NetworkPolicy", func() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
defer cleanupNetworkPolicy(f, policy)
|
defer cleanupNetworkPolicy(f, policy)
|
||||||
|
|
||||||
ginkgo.By("Creating client-a which should be able to contact the server.", func() {
|
ginkgo.By("Creating client-a which should be able to contact the server.", func() {
|
||||||
@ -343,7 +342,7 @@ var _ = SIGDescribe("NetworkPolicy", func() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
policy, err := f.ClientSet.NetworkingV1().NetworkPolicies(f.Namespace.Name).Create(policy)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
defer cleanupNetworkPolicy(f, policy)
|
defer cleanupNetworkPolicy(f, policy)
|
||||||
|
|
||||||
ginkgo.By("Creating client-a which should be able to contact the server.", func() {
|
ginkgo.By("Creating client-a which should be able to contact the server.", func() {
|
||||||
@ -368,7 +367,7 @@ func testCanConnect(f *framework.Framework, ns *v1.Namespace, podName string, se
|
|||||||
|
|
||||||
e2elog.Logf("Waiting for %s to complete.", podClient.Name)
|
e2elog.Logf("Waiting for %s to complete.", podClient.Name)
|
||||||
err := framework.WaitForPodNoLongerRunningInNamespace(f.ClientSet, podClient.Name, ns.Name)
|
err := framework.WaitForPodNoLongerRunningInNamespace(f.ClientSet, podClient.Name, ns.Name)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "Pod did not finish as expected.")
|
framework.ExpectNoError(err, "Pod did not finish as expected.")
|
||||||
|
|
||||||
e2elog.Logf("Waiting for %s to complete.", podClient.Name)
|
e2elog.Logf("Waiting for %s to complete.", podClient.Name)
|
||||||
err = framework.WaitForPodSuccessInNamespace(f.ClientSet, podClient.Name, ns.Name)
|
err = framework.WaitForPodSuccessInNamespace(f.ClientSet, podClient.Name, ns.Name)
|
||||||
@ -508,7 +507,7 @@ func createServerPodAndService(f *framework.Framework, namespace *v1.Namespace,
|
|||||||
RestartPolicy: v1.RestartPolicyNever,
|
RestartPolicy: v1.RestartPolicyNever,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
e2elog.Logf("Created pod %v", pod.ObjectMeta.Name)
|
e2elog.Logf("Created pod %v", pod.ObjectMeta.Name)
|
||||||
|
|
||||||
svcName := fmt.Sprintf("svc-%s", podName)
|
svcName := fmt.Sprintf("svc-%s", podName)
|
||||||
@ -524,7 +523,7 @@ func createServerPodAndService(f *framework.Framework, namespace *v1.Namespace,
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
e2elog.Logf("Created service %s", svc.Name)
|
e2elog.Logf("Created service %s", svc.Name)
|
||||||
|
|
||||||
return pod, svc
|
return pod, svc
|
||||||
@ -569,7 +568,7 @@ func createNetworkClientPod(f *framework.Framework, namespace *v1.Namespace, pod
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
return pod
|
return pod
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ var _ = SIGDescribe("Services [Feature:GCEAlphaFeature][Slow]", func() {
|
|||||||
})
|
})
|
||||||
// Verify that service has been updated properly.
|
// Verify that service has been updated properly.
|
||||||
svcTier, err := gcecloud.GetServiceNetworkTier(svc)
|
svcTier, err := gcecloud.GetServiceNetworkTier(svc)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
gomega.Expect(svcTier).To(gomega.Equal(cloud.NetworkTierStandard))
|
gomega.Expect(svcTier).To(gomega.Equal(cloud.NetworkTierStandard))
|
||||||
// Record the LB name for test cleanup.
|
// Record the LB name for test cleanup.
|
||||||
serviceLBNames = append(serviceLBNames, cloudprovider.DefaultLoadBalancerName(svc))
|
serviceLBNames = append(serviceLBNames, cloudprovider.DefaultLoadBalancerName(svc))
|
||||||
@ -94,7 +94,7 @@ var _ = SIGDescribe("Services [Feature:GCEAlphaFeature][Slow]", func() {
|
|||||||
})
|
})
|
||||||
// Verify that service has been updated properly.
|
// Verify that service has been updated properly.
|
||||||
svcTier, err = gcecloud.GetServiceNetworkTier(svc)
|
svcTier, err = gcecloud.GetServiceNetworkTier(svc)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
gomega.Expect(svcTier).To(gomega.Equal(cloud.NetworkTierDefault))
|
gomega.Expect(svcTier).To(gomega.Equal(cloud.NetworkTierDefault))
|
||||||
|
|
||||||
// Wait until the ingress IP changes. Each tier has its own pool of
|
// Wait until the ingress IP changes. Each tier has its own pool of
|
||||||
@ -105,9 +105,9 @@ var _ = SIGDescribe("Services [Feature:GCEAlphaFeature][Slow]", func() {
|
|||||||
ginkgo.By("reserving a static IP for the load balancer")
|
ginkgo.By("reserving a static IP for the load balancer")
|
||||||
requestedAddrName := fmt.Sprintf("e2e-ext-lb-net-tier-%s", framework.RunID)
|
requestedAddrName := fmt.Sprintf("e2e-ext-lb-net-tier-%s", framework.RunID)
|
||||||
gceCloud, err := gce.GetGCECloud()
|
gceCloud, err := gce.GetGCECloud()
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
requestedIP, err := reserveAlphaRegionalAddress(gceCloud, requestedAddrName, cloud.NetworkTierStandard)
|
requestedIP, err := reserveAlphaRegionalAddress(gceCloud, requestedAddrName, cloud.NetworkTierStandard)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to reserve a STANDARD tiered address")
|
framework.ExpectNoError(err, "failed to reserve a STANDARD tiered address")
|
||||||
defer func() {
|
defer func() {
|
||||||
if requestedAddrName != "" {
|
if requestedAddrName != "" {
|
||||||
// Release GCE static address - this is not kube-managed and will not be automatically released.
|
// Release GCE static address - this is not kube-managed and will not be automatically released.
|
||||||
@ -116,7 +116,7 @@ var _ = SIGDescribe("Services [Feature:GCEAlphaFeature][Slow]", func() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
e2elog.Logf("Allocated static IP to be used by the load balancer: %q", requestedIP)
|
e2elog.Logf("Allocated static IP to be used by the load balancer: %q", requestedIP)
|
||||||
|
|
||||||
ginkgo.By("updating the Service to use the standard tier with a requested IP")
|
ginkgo.By("updating the Service to use the standard tier with a requested IP")
|
||||||
@ -127,7 +127,7 @@ var _ = SIGDescribe("Services [Feature:GCEAlphaFeature][Slow]", func() {
|
|||||||
// Verify that service has been updated properly.
|
// Verify that service has been updated properly.
|
||||||
gomega.Expect(svc.Spec.LoadBalancerIP).To(gomega.Equal(requestedIP))
|
gomega.Expect(svc.Spec.LoadBalancerIP).To(gomega.Equal(requestedIP))
|
||||||
svcTier, err = gcecloud.GetServiceNetworkTier(svc)
|
svcTier, err = gcecloud.GetServiceNetworkTier(svc)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
gomega.Expect(svcTier).To(gomega.Equal(cloud.NetworkTierStandard))
|
gomega.Expect(svcTier).To(gomega.Equal(cloud.NetworkTierStandard))
|
||||||
|
|
||||||
// Wait until the ingress IP changes and verifies the LB.
|
// Wait until the ingress IP changes and verifies the LB.
|
||||||
@ -163,9 +163,9 @@ func waitAndVerifyLBWithTier(jig *framework.ServiceTestJig, ns, svcName, existin
|
|||||||
|
|
||||||
// Verify the network tier matches the desired.
|
// Verify the network tier matches the desired.
|
||||||
svcNetTier, err := gcecloud.GetServiceNetworkTier(svc)
|
svcNetTier, err := gcecloud.GetServiceNetworkTier(svc)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
netTier, err := getLBNetworkTierByIP(ingressIP)
|
netTier, err := getLBNetworkTierByIP(ingressIP)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to get the network tier of the load balancer")
|
framework.ExpectNoError(err, "failed to get the network tier of the load balancer")
|
||||||
gomega.Expect(netTier).To(gomega.Equal(svcNetTier))
|
gomega.Expect(netTier).To(gomega.Equal(svcNetTier))
|
||||||
|
|
||||||
return ingressIP
|
return ingressIP
|
||||||
|
@ -116,7 +116,7 @@ var _ = SIGDescribe("Proxy", func() {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
// Make an RC with a single pod. The 'porter' image is
|
// Make an RC with a single pod. The 'porter' image is
|
||||||
// a simple server which serves the values of the
|
// a simple server which serves the values of the
|
||||||
@ -160,10 +160,12 @@ var _ = SIGDescribe("Proxy", func() {
|
|||||||
Labels: labels,
|
Labels: labels,
|
||||||
CreatedPods: &pods,
|
CreatedPods: &pods,
|
||||||
}
|
}
|
||||||
gomega.Expect(framework.RunRC(cfg)).NotTo(gomega.HaveOccurred())
|
err = framework.RunRC(cfg)
|
||||||
|
framework.ExpectNoError(err)
|
||||||
defer framework.DeleteRCAndWaitForGC(f.ClientSet, f.Namespace.Name, cfg.Name)
|
defer framework.DeleteRCAndWaitForGC(f.ClientSet, f.Namespace.Name, cfg.Name)
|
||||||
|
|
||||||
gomega.Expect(endpoints.WaitForEndpoint(f.ClientSet, f.Namespace.Name, service.Name)).NotTo(gomega.HaveOccurred())
|
err = endpoints.WaitForEndpoint(f.ClientSet, f.Namespace.Name, service.Name)
|
||||||
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
// table constructors
|
// table constructors
|
||||||
// Try proxying through the service and directly to through the pod.
|
// Try proxying through the service and directly to through the pod.
|
||||||
@ -297,7 +299,7 @@ func pickNode(cs clientset.Interface) (string, error) {
|
|||||||
|
|
||||||
func nodeProxyTest(f *framework.Framework, prefix, nodeDest string) {
|
func nodeProxyTest(f *framework.Framework, prefix, nodeDest string) {
|
||||||
node, err := pickNode(f.ClientSet)
|
node, err := pickNode(f.ClientSet)
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
// TODO: Change it to test whether all requests succeeded when requests
|
// TODO: Change it to test whether all requests succeeded when requests
|
||||||
// not reaching Kubelet issue is debugged.
|
// not reaching Kubelet issue is debugged.
|
||||||
serviceUnavailableErrors := 0
|
serviceUnavailableErrors := 0
|
||||||
@ -308,7 +310,7 @@ func nodeProxyTest(f *framework.Framework, prefix, nodeDest string) {
|
|||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
serviceUnavailableErrors++
|
serviceUnavailableErrors++
|
||||||
} else {
|
} else {
|
||||||
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
framework.ExpectNoError(err)
|
||||||
gomega.Expect(status).To(gomega.Equal(http.StatusOK))
|
gomega.Expect(status).To(gomega.Equal(http.StatusOK))
|
||||||
gomega.Expect(d).To(gomega.BeNumerically("<", proxyHTTPCallTimeout))
|
gomega.Expect(d).To(gomega.BeNumerically("<", proxyHTTPCallTimeout))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user