github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/test/e2e/pod_start_test.go (about) 1 package integration 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "strconv" 8 "strings" 9 10 . "github.com/containers/podman/v2/test/utils" 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 ) 14 15 var _ = Describe("Podman pod start", func() { 16 var ( 17 tempdir string 18 err error 19 podmanTest *PodmanTestIntegration 20 ) 21 22 BeforeEach(func() { 23 tempdir, err = CreateTempDirInTempDir() 24 if err != nil { 25 os.Exit(1) 26 } 27 podmanTest = PodmanTestCreate(tempdir) 28 podmanTest.Setup() 29 podmanTest.SeedImages() 30 }) 31 32 AfterEach(func() { 33 podmanTest.Cleanup() 34 f := CurrentGinkgoTestDescription() 35 processTestResult(f) 36 37 }) 38 39 It("podman pod start bogus pod", func() { 40 session := podmanTest.Podman([]string{"pod", "start", "123"}) 41 session.WaitWithDefaultTimeout() 42 Expect(session.ExitCode()).To(Equal(125)) 43 }) 44 45 It("podman pod start single empty pod", func() { 46 _, ec, podid := podmanTest.CreatePod("") 47 Expect(ec).To(Equal(0)) 48 49 session := podmanTest.Podman([]string{"pod", "start", podid}) 50 session.WaitWithDefaultTimeout() 51 Expect(session.ExitCode()).To(Equal(125)) 52 }) 53 54 It("podman pod start single pod by name", func() { 55 _, ec, _ := podmanTest.CreatePod("foobar99") 56 Expect(ec).To(Equal(0)) 57 58 session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "ls"}) 59 session.WaitWithDefaultTimeout() 60 Expect(session.ExitCode()).To(Equal(0)) 61 62 session = podmanTest.Podman([]string{"pod", "start", "foobar99"}) 63 session.WaitWithDefaultTimeout() 64 Expect(session.ExitCode()).To(Equal(0)) 65 }) 66 67 It("podman pod start multiple pods", func() { 68 _, ec, podid1 := podmanTest.CreatePod("foobar99") 69 Expect(ec).To(Equal(0)) 70 71 session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"}) 72 session.WaitWithDefaultTimeout() 73 Expect(session.ExitCode()).To(Equal(0)) 74 75 _, ec2, podid2 := podmanTest.CreatePod("foobar100") 76 Expect(ec2).To(Equal(0)) 77 78 session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"}) 79 session.WaitWithDefaultTimeout() 80 Expect(session.ExitCode()).To(Equal(0)) 81 82 session = podmanTest.Podman([]string{"pod", "start", podid1, podid2}) 83 session.WaitWithDefaultTimeout() 84 Expect(session.ExitCode()).To(Equal(0)) 85 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2)) 86 }) 87 88 It("podman pod start all pods", func() { 89 _, ec, _ := podmanTest.CreatePod("foobar99") 90 Expect(ec).To(Equal(0)) 91 92 session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"}) 93 session.WaitWithDefaultTimeout() 94 Expect(session.ExitCode()).To(Equal(0)) 95 96 _, ec, _ = podmanTest.CreatePod("foobar100") 97 Expect(ec).To(Equal(0)) 98 99 session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"}) 100 session.WaitWithDefaultTimeout() 101 Expect(session.ExitCode()).To(Equal(0)) 102 103 session = podmanTest.Podman([]string{"pod", "start", "--all"}) 104 session.WaitWithDefaultTimeout() 105 Expect(session.ExitCode()).To(Equal(0)) 106 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2)) 107 }) 108 109 It("podman pod start latest pod", func() { 110 _, ec, _ := podmanTest.CreatePod("foobar99") 111 Expect(ec).To(Equal(0)) 112 113 session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"}) 114 session.WaitWithDefaultTimeout() 115 Expect(session.ExitCode()).To(Equal(0)) 116 117 _, ec, _ = podmanTest.CreatePod("foobar100") 118 Expect(ec).To(Equal(0)) 119 120 session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"}) 121 session.WaitWithDefaultTimeout() 122 Expect(session.ExitCode()).To(Equal(0)) 123 124 podid := "--latest" 125 if IsRemote() { 126 podid = "foobar100" 127 } 128 session = podmanTest.Podman([]string{"pod", "start", podid}) 129 session.WaitWithDefaultTimeout() 130 Expect(session.ExitCode()).To(Equal(0)) 131 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) 132 }) 133 134 It("podman pod start multiple pods with bogus", func() { 135 _, ec, podid := podmanTest.CreatePod("foobar99") 136 Expect(ec).To(Equal(0)) 137 138 session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"}) 139 session.WaitWithDefaultTimeout() 140 Expect(session.ExitCode()).To(Equal(0)) 141 142 session = podmanTest.Podman([]string{"pod", "start", podid, "doesnotexist"}) 143 session.WaitWithDefaultTimeout() 144 Expect(session.ExitCode()).To(Equal(125)) 145 }) 146 147 It("podman pod start single pod via --pod-id-file", func() { 148 tmpDir, err := ioutil.TempDir("", "") 149 Expect(err).To(BeNil()) 150 tmpFile := tmpDir + "podID" 151 defer os.RemoveAll(tmpDir) 152 153 podName := "rudolph" 154 155 // Create a pod with --pod-id-file. 156 session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--pod-id-file", tmpFile}) 157 session.WaitWithDefaultTimeout() 158 Expect(session.ExitCode()).To(Equal(0)) 159 160 // Create container inside the pod. 161 session = podmanTest.Podman([]string{"create", "--pod", podName, ALPINE, "top"}) 162 session.WaitWithDefaultTimeout() 163 Expect(session.ExitCode()).To(Equal(0)) 164 165 session = podmanTest.Podman([]string{"pod", "start", "--pod-id-file", tmpFile}) 166 session.WaitWithDefaultTimeout() 167 Expect(session.ExitCode()).To(Equal(0)) 168 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2)) // infra+top 169 }) 170 171 It("podman pod start multiple pods via --pod-id-file", func() { 172 tmpDir, err := ioutil.TempDir("", "") 173 Expect(err).To(BeNil()) 174 defer os.RemoveAll(tmpDir) 175 176 podIDFiles := []string{} 177 for _, i := range "0123456789" { 178 tmpFile := tmpDir + "cid" + string(i) 179 podName := "rudolph" + string(i) 180 // Create a pod with --pod-id-file. 181 session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--pod-id-file", tmpFile}) 182 session.WaitWithDefaultTimeout() 183 Expect(session.ExitCode()).To(Equal(0)) 184 185 // Create container inside the pod. 186 session = podmanTest.Podman([]string{"create", "--pod", podName, ALPINE, "top"}) 187 session.WaitWithDefaultTimeout() 188 Expect(session.ExitCode()).To(Equal(0)) 189 190 // Append the id files along with the command. 191 podIDFiles = append(podIDFiles, "--pod-id-file") 192 podIDFiles = append(podIDFiles, tmpFile) 193 } 194 195 cmd := []string{"pod", "start"} 196 cmd = append(cmd, podIDFiles...) 197 session := podmanTest.Podman(cmd) 198 session.WaitWithDefaultTimeout() 199 Expect(session.ExitCode()).To(Equal(0)) 200 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(20)) // 10*(infra+top) 201 }) 202 203 It("podman pod create --infra-conmon-pod create + start", func() { 204 tmpDir, err := ioutil.TempDir("", "") 205 Expect(err).To(BeNil()) 206 tmpFile := tmpDir + "podID" 207 defer os.RemoveAll(tmpDir) 208 209 podName := "rudolph" 210 // Create a pod with --infra-conmon-pid. 211 session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--infra-conmon-pidfile", tmpFile}) 212 session.WaitWithDefaultTimeout() 213 Expect(session.ExitCode()).To(Equal(0)) 214 215 session = podmanTest.Podman([]string{"pod", "start", podName}) 216 session.WaitWithDefaultTimeout() 217 Expect(session.ExitCode()).To(Equal(0)) 218 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) // infra 219 220 readFirstLine := func(path string) string { 221 content, err := ioutil.ReadFile(path) 222 Expect(err).To(BeNil()) 223 return strings.Split(string(content), "\n")[0] 224 } 225 226 // Read the infra-conmon-pidfile and perform some sanity checks 227 // on the pid. 228 infraConmonPID := readFirstLine(tmpFile) 229 _, err = strconv.Atoi(infraConmonPID) // Make sure it's a proper integer 230 Expect(err).To(BeNil()) 231 232 cmdline := readFirstLine(fmt.Sprintf("/proc/%s/cmdline", infraConmonPID)) 233 Expect(cmdline).To(ContainSubstring("/conmon")) 234 }) 235 236 })