From 81804fc4641d279fec8f9bf48b21b22fc90cb891 Mon Sep 17 00:00:00 2001 From: Peter Hunt Date: Fri, 15 Feb 2019 16:39:24 -0500 Subject: pod infra container is started before a container in a pod is run, started, or attached. Prior, a pod would have to be started immediately when created, leading to confusion about what a pod state should be immediately after creation. The problem was podman run --pod ... would error out if the infra container wasn't started (as it is a dependency). Fix this by allowing for recursive start, where each of the container's dependencies are started prior to the new container. This is only applied to the case where a new container is attached to a pod. Also rework container_api Start, StartAndAttach, and Init functions, as there was some duplicated code, which made addressing the problem easier to fix. Signed-off-by: Peter Hunt --- test/e2e/pod_infra_container_test.go | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'test/e2e/pod_infra_container_test.go') diff --git a/test/e2e/pod_infra_container_test.go b/test/e2e/pod_infra_container_test.go index 161bf7f9c..ed5002ca7 100644 --- a/test/e2e/pod_infra_container_test.go +++ b/test/e2e/pod_infra_container_test.go @@ -309,4 +309,55 @@ var _ = Describe("Podman pod create", func() { session.WaitWithDefaultTimeout() Expect(session.ExitCode()).To(Equal(0)) }) + + It("podman run in pod starts infra", func() { + session := podmanTest.Podman([]string{"pod", "create"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + podID := session.OutputToString() + + result := podmanTest.Podman([]string{"ps", "-aq"}) + result.WaitWithDefaultTimeout() + Expect(result.ExitCode()).To(Equal(0)) + infraID := result.OutputToString() + + result = podmanTest.Podman([]string{"run", "--pod", podID, "-d", ALPINE, "top"}) + result.WaitWithDefaultTimeout() + Expect(result.ExitCode()).To(Equal(0)) + + result = podmanTest.Podman([]string{"ps", "-aq"}) + result.WaitWithDefaultTimeout() + Expect(result.ExitCode()).To(Equal(0)) + Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) + + Expect(result.OutputToString()).To(ContainSubstring(infraID)) + }) + + It("podman start in pod starts infra", func() { + session := podmanTest.Podman([]string{"pod", "create"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + podID := session.OutputToString() + + result := podmanTest.Podman([]string{"ps", "-aq"}) + result.WaitWithDefaultTimeout() + Expect(result.ExitCode()).To(Equal(0)) + infraID := result.OutputToString() + + result = podmanTest.Podman([]string{"create", "--pod", podID, ALPINE, "ls"}) + result.WaitWithDefaultTimeout() + Expect(result.ExitCode()).To(Equal(0)) + ctrID := result.OutputToString() + + result = podmanTest.Podman([]string{"start", ctrID}) + result.WaitWithDefaultTimeout() + Expect(result.ExitCode()).To(Equal(0)) + + result = podmanTest.Podman([]string{"ps", "-aq"}) + result.WaitWithDefaultTimeout() + Expect(result.ExitCode()).To(Equal(0)) + Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) + + Expect(result.OutputToString()).To(ContainSubstring(infraID)) + }) }) -- cgit v1.2.3-54-g00ecf