func doTestConnectSendDisconnect(bindAddress string, f *framework.Framework) { By("creating the target pod") pod := pfPod("", "10", "10", "100", fmt.Sprintf("%s", bindAddress)) if _, err := f.ClientSet.Core().Pods(f.Namespace.Name).Create(pod); err != nil { framework.Failf("Couldn't create pod: %v", err) } if err := f.WaitForPodReady(pod.Name); err != nil { framework.Failf("Pod did not start running: %v", err) } defer func() { logs, err := framework.GetPodLogs(f.ClientSet, f.Namespace.Name, pod.Name, "portforwardtester") if err != nil { framework.Logf("Error getting pod log: %v", err) } else { framework.Logf("Pod log:\n%s", logs) } }() By("Running 'kubectl port-forward'") cmd := runPortForward(f.Namespace.Name, pod.Name, 80) defer cmd.Stop() By("Dialing the local port") conn, err := net.Dial("tcp", fmt.Sprintf("127.0.0.1:%d", cmd.port)) if err != nil { framework.Failf("Couldn't connect to port %d: %v", cmd.port, err) } defer func() { By("Closing the connection to the local port") conn.Close() }() By("Reading data from the local port") fromServer, err := ioutil.ReadAll(conn) if err != nil { framework.Failf("Unexpected error reading data from the server: %v", err) } if e, a := strings.Repeat("x", 100), string(fromServer); e != a { framework.Failf("Expected %q from server, got %q", e, a) } By("Waiting for the target pod to stop running") if err := WaitForTerminatedContainer(f, pod, "portforwardtester"); err != nil { framework.Failf("Container did not terminate: %v", err) } By("Verifying logs") logOutput, err := framework.GetPodLogs(f.ClientSet, f.Namespace.Name, pod.Name, "portforwardtester") if err != nil { framework.Failf("Error retrieving pod logs: %v", err) } verifyLogMessage(logOutput, "Accepted client connection") verifyLogMessage(logOutput, "Done") }
func doTestMustConnectSendNothing(bindAddress string, f *framework.Framework) { By("creating the target pod") pod := pfPod("abc", "1", "1", "1", fmt.Sprintf("%s", bindAddress)) if _, err := f.ClientSet.Core().Pods(f.Namespace.Name).Create(pod); err != nil { framework.Failf("Couldn't create pod: %v", err) } if err := f.WaitForPodReady(pod.Name); err != nil { framework.Failf("Pod did not start running: %v", err) } defer func() { logs, err := framework.GetPodLogs(f.ClientSet, f.Namespace.Name, pod.Name, "portforwardtester") if err != nil { framework.Logf("Error getting pod log: %v", err) } else { framework.Logf("Pod log:\n%s", logs) } }() By("Running 'kubectl port-forward'") cmd := runPortForward(f.Namespace.Name, pod.Name, 80) defer cmd.Stop() By("Dialing the local port") conn, err := net.Dial("tcp", fmt.Sprintf("127.0.0.1:%d", cmd.port)) if err != nil { framework.Failf("Couldn't connect to port %d: %v", cmd.port, err) } By("Closing the connection to the local port") conn.Close() By("Waiting for the target pod to stop running") if err := WaitForTerminatedContainer(f, pod, "portforwardtester"); err != nil { framework.Failf("Container did not terminate: %v", err) } By("Verifying logs") logOutput, err := framework.GetPodLogs(f.ClientSet, f.Namespace.Name, pod.Name, "portforwardtester") if err != nil { framework.Failf("Error retrieving pod logs: %v", err) } verifyLogMessage(logOutput, "Accepted client connection") verifyLogMessage(logOutput, "Expected to read 3 bytes from client, but got 0 instead") }