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 inline execution and attach", func() { By("executing a command with run and attach") runOutput := runKubectl(fmt.Sprintf("--namespace=%v", ns), "run", "run-test", "--image=busybox", "--restart=Never", "--attach=true", "echo", "running", "in", "container") expectedRunOutput := "running in container" Expect(runOutput).To(ContainSubstring(expectedRunOutput))