By("executing a command in the container with noninteractive stdin") execOutput = newKubectlCommand("exec", fmt.Sprintf("--namespace=%v", ns), "-i", simplePodName, "cat"). withStdinData("abcd1234"). exec() if e, a := "abcd1234", execOutput; e != a { Failf("Unexpected kubectl exec output. Wanted %q, got %q", e, a) } // pretend that we're a user in an interactive shell r, c, err := newBlockingReader("echo hi\nexit\n") if err != nil { Failf("Error creating blocking reader: %v", err) } // NOTE this is solely for test cleanup! defer c.Close() By("executing a command in the container with pseudo-interactive stdin") execOutput = newKubectlCommand("exec", fmt.Sprintf("--namespace=%v", ns), "-i", simplePodName, "bash"). withStdinReader(r). exec() if e, a := "hi", execOutput; e != a { Failf("Unexpected kubectl exec output. Wanted %q, got %q", e, a) } }) It("should support port-forward", func() { By("forwarding the container port to a local port") cmd := kubectlCmd("port-forward", fmt.Sprintf("--namespace=%v", ns), simplePodName, fmt.Sprintf(":%d", simplePodPort)) defer tryKill(cmd) // This is somewhat ugly but is the only way to retrieve the port that was picked