github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/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/hanks177/podman/v4/test/utils" 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 . "github.com/onsi/gomega/gexec" 14 ) 15 16 var _ = Describe("Podman pod start", func() { 17 var ( 18 tempdir string 19 err error 20 podmanTest *PodmanTestIntegration 21 ) 22 23 BeforeEach(func() { 24 tempdir, err = CreateTempDirInTempDir() 25 if err != nil { 26 os.Exit(1) 27 } 28 podmanTest = PodmanTestCreate(tempdir) 29 podmanTest.Setup() 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).Should(Exit(125)) 43 }) 44 45 It("podman pod start single empty pod", func() { 46 _, ec, podid := podmanTest.CreatePod(nil) 47 Expect(ec).To(Equal(0)) 48 49 session := podmanTest.Podman([]string{"pod", "start", podid}) 50 session.WaitWithDefaultTimeout() 51 Expect(session).Should(Exit(125)) 52 }) 53 54 It("podman pod start single pod by name", func() { 55 _, ec, _ := podmanTest.CreatePod(map[string][]string{"--name": {"foobar99"}}) 56 Expect(ec).To(Equal(0)) 57 58 session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "ls"}) 59 session.WaitWithDefaultTimeout() 60 Expect(session).Should(Exit(0)) 61 62 session = podmanTest.Podman([]string{"pod", "start", "foobar99"}) 63 session.WaitWithDefaultTimeout() 64 Expect(session).Should(Exit(0)) 65 }) 66 67 It("podman pod start multiple pods", func() { 68 _, ec, podid1 := podmanTest.CreatePod(map[string][]string{"--name": {"foobar99"}}) 69 Expect(ec).To(Equal(0)) 70 71 session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"}) 72 session.WaitWithDefaultTimeout() 73 Expect(session).Should(Exit(0)) 74 75 _, ec2, podid2 := podmanTest.CreatePod(map[string][]string{"--name": {"foobar100"}}) 76 Expect(ec2).To(Equal(0)) 77 78 session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"}) 79 session.WaitWithDefaultTimeout() 80 Expect(session).Should(Exit(0)) 81 82 session = podmanTest.Podman([]string{"pod", "start", podid1, podid2}) 83 session.WaitWithDefaultTimeout() 84 Expect(session).Should(Exit(0)) 85 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2)) 86 }) 87 88 It("multiple pods in conflict", func() { 89 podName := []string{"Pod_" + RandomString(10), "Pod_" + RandomString(10)} 90 91 pod, _, podid1 := podmanTest.CreatePod(map[string][]string{ 92 "--infra": {"true"}, 93 "--name": {podName[0]}, 94 "--publish": {"127.0.0.1:8083:80"}, 95 }) 96 Expect(pod).To(Exit(0)) 97 98 session := podmanTest.Podman([]string{"create", "--pod", podName[0], ALPINE, "top"}) 99 session.WaitWithDefaultTimeout() 100 Expect(session).To(Exit(0)) 101 102 pod, _, podid2 := podmanTest.CreatePod(map[string][]string{ 103 "--infra": {"true"}, 104 "--name": {podName[1]}, 105 "--publish": {"127.0.0.1:8083:80"}, 106 }) 107 Expect(pod).To(Exit(0)) 108 109 session = podmanTest.Podman([]string{"create", "--pod", podName[1], ALPINE, "top"}) 110 session.WaitWithDefaultTimeout() 111 Expect(session).To(Exit(0)) 112 113 session = podmanTest.Podman([]string{"pod", "start", podid1, podid2}) 114 session.WaitWithDefaultTimeout() 115 Expect(session).To(Exit(125)) 116 }) 117 118 It("podman pod start all pods", func() { 119 _, ec, _ := podmanTest.CreatePod(map[string][]string{"--name": {"foobar99"}}) 120 Expect(ec).To(Equal(0)) 121 122 session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"}) 123 session.WaitWithDefaultTimeout() 124 Expect(session).Should(Exit(0)) 125 126 _, ec, _ = podmanTest.CreatePod(map[string][]string{"--name": {"foobar100"}}) 127 Expect(ec).To(Equal(0)) 128 129 session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"}) 130 session.WaitWithDefaultTimeout() 131 Expect(session).Should(Exit(0)) 132 133 session = podmanTest.Podman([]string{"pod", "start", "--all"}) 134 session.WaitWithDefaultTimeout() 135 Expect(session).Should(Exit(0)) 136 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2)) 137 }) 138 139 It("podman pod start latest pod", func() { 140 _, ec, _ := podmanTest.CreatePod(map[string][]string{"--name": {"foobar99"}}) 141 Expect(ec).To(Equal(0)) 142 143 session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"}) 144 session.WaitWithDefaultTimeout() 145 Expect(session).Should(Exit(0)) 146 147 _, ec, _ = podmanTest.CreatePod(map[string][]string{"--name": {"foobar100"}}) 148 Expect(ec).To(Equal(0)) 149 150 session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"}) 151 session.WaitWithDefaultTimeout() 152 Expect(session).Should(Exit(0)) 153 154 podid := "--latest" 155 if IsRemote() { 156 podid = "foobar100" 157 } 158 session = podmanTest.Podman([]string{"pod", "start", podid}) 159 session.WaitWithDefaultTimeout() 160 Expect(session).Should(Exit(0)) 161 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) 162 }) 163 164 It("podman pod start multiple pods with bogus", func() { 165 _, ec, podid := podmanTest.CreatePod(map[string][]string{"--name": {"foobar99"}}) 166 Expect(ec).To(Equal(0)) 167 168 session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"}) 169 session.WaitWithDefaultTimeout() 170 Expect(session).Should(Exit(0)) 171 172 session = podmanTest.Podman([]string{"pod", "start", podid, "doesnotexist"}) 173 session.WaitWithDefaultTimeout() 174 Expect(session).Should(Exit(125)) 175 }) 176 177 It("podman pod start single pod via --pod-id-file", func() { 178 tmpDir, err := ioutil.TempDir("", "") 179 Expect(err).To(BeNil()) 180 tmpFile := tmpDir + "podID" 181 defer os.RemoveAll(tmpDir) 182 183 podName := "rudolph" 184 185 // Create a pod with --pod-id-file. 186 session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--pod-id-file", tmpFile}) 187 session.WaitWithDefaultTimeout() 188 Expect(session).Should(Exit(0)) 189 190 // Create container inside the pod. 191 session = podmanTest.Podman([]string{"create", "--pod", podName, ALPINE, "top"}) 192 session.WaitWithDefaultTimeout() 193 Expect(session).Should(Exit(0)) 194 195 session = podmanTest.Podman([]string{"pod", "start", "--pod-id-file", tmpFile}) 196 session.WaitWithDefaultTimeout() 197 Expect(session).Should(Exit(0)) 198 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2)) // infra+top 199 }) 200 201 It("podman pod start multiple pods via --pod-id-file", func() { 202 tmpDir, err := ioutil.TempDir("", "") 203 Expect(err).To(BeNil()) 204 defer os.RemoveAll(tmpDir) 205 206 podIDFiles := []string{} 207 for _, i := range "0123456789" { 208 tmpFile := tmpDir + "cid" + string(i) 209 podName := "rudolph" + string(i) 210 // Create a pod with --pod-id-file. 211 session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--pod-id-file", tmpFile}) 212 session.WaitWithDefaultTimeout() 213 Expect(session).Should(Exit(0)) 214 215 // Create container inside the pod. 216 session = podmanTest.Podman([]string{"create", "--pod", podName, ALPINE, "top"}) 217 session.WaitWithDefaultTimeout() 218 Expect(session).Should(Exit(0)) 219 220 // Append the id files along with the command. 221 podIDFiles = append(podIDFiles, "--pod-id-file") 222 podIDFiles = append(podIDFiles, tmpFile) 223 } 224 225 cmd := []string{"pod", "start"} 226 cmd = append(cmd, podIDFiles...) 227 session := podmanTest.Podman(cmd) 228 session.WaitWithDefaultTimeout() 229 Expect(session).Should(Exit(0)) 230 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(20)) // 10*(infra+top) 231 }) 232 233 It("podman pod create --infra-conmon-pod create + start", func() { 234 tmpDir, err := ioutil.TempDir("", "") 235 Expect(err).To(BeNil()) 236 tmpFile := tmpDir + "podID" 237 defer os.RemoveAll(tmpDir) 238 239 podName := "rudolph" 240 // Create a pod with --infra-conmon-pid. 241 session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--infra-conmon-pidfile", tmpFile}) 242 session.WaitWithDefaultTimeout() 243 Expect(session).Should(Exit(0)) 244 245 session = podmanTest.Podman([]string{"pod", "start", podName}) 246 session.WaitWithDefaultTimeout() 247 Expect(session).Should(Exit(0)) 248 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) // infra 249 250 readFirstLine := func(path string) string { 251 content, err := ioutil.ReadFile(path) 252 Expect(err).To(BeNil()) 253 return strings.Split(string(content), "\n")[0] 254 } 255 256 // Read the infra-conmon-pidfile and perform some sanity checks 257 // on the pid. 258 infraConmonPID := readFirstLine(tmpFile) 259 _, err = strconv.Atoi(infraConmonPID) // Make sure it's a proper integer 260 Expect(err).To(BeNil()) 261 262 cmdline := readFirstLine(fmt.Sprintf("/proc/%s/cmdline", infraConmonPID)) 263 Expect(cmdline).To(ContainSubstring("/conmon")) 264 }) 265 266 })