github.com/AbhinandanKurakure/podman/v3@v3.4.10/test/e2e/start_test.go (about) 1 package integration 2 3 import ( 4 "io/ioutil" 5 "os" 6 "strconv" 7 "strings" 8 9 . "github.com/containers/podman/v3/test/utils" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 . "github.com/onsi/gomega/gexec" 13 ) 14 15 var _ = Describe("Podman 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 start bogus container", func() { 40 session := podmanTest.Podman([]string{"start", "123"}) 41 session.WaitWithDefaultTimeout() 42 Expect(session).Should(Exit(125)) 43 }) 44 45 It("podman start single container by id", func() { 46 session := podmanTest.Podman([]string{"create", ALPINE, "ls"}) 47 session.WaitWithDefaultTimeout() 48 Expect(session).Should(Exit(0)) 49 cid := session.OutputToString() 50 session = podmanTest.Podman([]string{"start", cid}) 51 session.WaitWithDefaultTimeout() 52 Expect(session).Should(Exit(0)) 53 }) 54 55 It("podman start --rm removed on failure", func() { 56 session := podmanTest.Podman([]string{"create", "--name=test", "--rm", ALPINE, "foo"}) 57 session.WaitWithDefaultTimeout() 58 Expect(session).Should(Exit(0)) 59 session = podmanTest.Podman([]string{"start", "test"}) 60 session.WaitWithDefaultTimeout() 61 Expect(session).Should(Exit(125)) 62 session = podmanTest.Podman([]string{"container", "exists", "test"}) 63 session.WaitWithDefaultTimeout() 64 Expect(session).To(ExitWithError()) 65 }) 66 67 It("podman start --rm --attach removed on failure", func() { 68 session := podmanTest.Podman([]string{"create", "--rm", ALPINE, "foo"}) 69 session.WaitWithDefaultTimeout() 70 Expect(session).Should(Exit(0)) 71 cid := session.OutputToString() 72 session = podmanTest.Podman([]string{"start", "--attach", cid}) 73 session.WaitWithDefaultTimeout() 74 Expect(session).Should(Exit(125)) 75 session = podmanTest.Podman([]string{"container", "exists", cid}) 76 session.WaitWithDefaultTimeout() 77 Expect(session).To(ExitWithError()) 78 }) 79 80 It("podman container start single container by id", func() { 81 session := podmanTest.Podman([]string{"container", "create", ALPINE, "ls"}) 82 session.WaitWithDefaultTimeout() 83 Expect(session).Should(Exit(0)) 84 cid := session.OutputToString() 85 session = podmanTest.Podman([]string{"container", "start", cid}) 86 session.WaitWithDefaultTimeout() 87 Expect(session).Should(Exit(0)) 88 Expect(session.OutputToString()).To(Equal(cid)) 89 }) 90 91 It("podman container start single container by short id", func() { 92 session := podmanTest.Podman([]string{"container", "create", ALPINE, "ls"}) 93 session.WaitWithDefaultTimeout() 94 Expect(session).Should(Exit(0)) 95 cid := session.OutputToString() 96 shortID := cid[0:10] 97 session = podmanTest.Podman([]string{"container", "start", shortID}) 98 session.WaitWithDefaultTimeout() 99 Expect(session).Should(Exit(0)) 100 Expect(session.OutputToString()).To(Equal(shortID)) 101 }) 102 103 It("podman container start single container by short id", func() { 104 session := podmanTest.Podman([]string{"container", "create", ALPINE, "ls"}) 105 session.WaitWithDefaultTimeout() 106 Expect(session).Should(Exit(0)) 107 cid := session.OutputToString() 108 shortID := cid[0:10] 109 session = podmanTest.Podman([]string{"container", "start", shortID}) 110 session.WaitWithDefaultTimeout() 111 Expect(session).Should(Exit(0)) 112 Expect(session.OutputToString()).To(Equal(shortID)) 113 114 session = podmanTest.Podman([]string{"stop", shortID}) 115 session.WaitWithDefaultTimeout() 116 Expect(session).Should(Exit(0)) 117 Expect(session.OutputToString()).To(Equal(shortID)) 118 }) 119 120 It("podman start single container by name", func() { 121 name := "foobar99" 122 session := podmanTest.Podman([]string{"create", "--name", name, ALPINE, "ls"}) 123 session.WaitWithDefaultTimeout() 124 Expect(session).Should(Exit(0)) 125 session = podmanTest.Podman([]string{"start", name}) 126 session.WaitWithDefaultTimeout() 127 Expect(session).Should(Exit(0)) 128 if podmanTest.RemoteTest { 129 Skip("Container-start name check doesn't work on remote client. It always returns the full ID.") 130 } 131 Expect(session.OutputToString()).To(Equal(name)) 132 }) 133 134 It("podman start single container with attach and test the signal", func() { 135 session := podmanTest.Podman([]string{"create", "--entrypoint", "sh", ALPINE, "-c", "exit 1"}) 136 session.WaitWithDefaultTimeout() 137 Expect(session).Should(Exit(0)) 138 cid := session.OutputToString() 139 session = podmanTest.Podman([]string{"start", "--attach", cid}) 140 session.WaitWithDefaultTimeout() 141 // It should forward the signal 142 Expect(session).Should(Exit(1)) 143 }) 144 145 It("podman start multiple containers", func() { 146 session := podmanTest.Podman([]string{"create", "--name", "foobar99", ALPINE, "ls"}) 147 session.WaitWithDefaultTimeout() 148 cid1 := session.OutputToString() 149 session2 := podmanTest.Podman([]string{"create", "--name", "foobar100", ALPINE, "ls"}) 150 session2.WaitWithDefaultTimeout() 151 cid2 := session2.OutputToString() 152 session = podmanTest.Podman([]string{"start", cid1, cid2}) 153 session.WaitWithDefaultTimeout() 154 Expect(session).Should(Exit(0)) 155 }) 156 157 It("podman start multiple containers with bogus", func() { 158 session := podmanTest.Podman([]string{"create", "--name", "foobar99", ALPINE, "ls"}) 159 session.WaitWithDefaultTimeout() 160 cid1 := session.OutputToString() 161 session = podmanTest.Podman([]string{"start", cid1, "doesnotexist"}) 162 session.WaitWithDefaultTimeout() 163 Expect(session).Should(Exit(125)) 164 }) 165 166 It("podman multiple containers -- attach should fail", func() { 167 session := podmanTest.Podman([]string{"create", "--name", "foobar1", ALPINE, "ls"}) 168 session.WaitWithDefaultTimeout() 169 Expect(session).Should(Exit(0)) 170 session = podmanTest.Podman([]string{"create", "--name", "foobar2", ALPINE, "ls"}) 171 session.WaitWithDefaultTimeout() 172 Expect(session).Should(Exit(0)) 173 session = podmanTest.Podman([]string{"start", "-a", "foobar1", "foobar2"}) 174 session.WaitWithDefaultTimeout() 175 Expect(session).Should(Exit(125)) 176 }) 177 178 It("podman failed to start with --rm should delete the container", func() { 179 session := podmanTest.Podman([]string{"create", "--name", "test1", "-it", "--rm", ALPINE, "foo"}) 180 session.WaitWithDefaultTimeout() 181 Expect(session).Should(Exit(0)) 182 183 start := podmanTest.Podman([]string{"start", "test1"}) 184 start.WaitWithDefaultTimeout() 185 186 wait := podmanTest.Podman([]string{"wait", "test1"}) 187 wait.WaitWithDefaultTimeout() 188 Expect(wait).To(ExitWithError()) 189 190 Eventually(podmanTest.NumberOfContainers(), defaultWaitTimeout, 3.0).Should(BeZero()) 191 }) 192 193 It("podman failed to start without --rm should NOT delete the container", func() { 194 session := podmanTest.Podman([]string{"create", "-it", ALPINE, "foo"}) 195 session.WaitWithDefaultTimeout() 196 Expect(session).Should(Exit(0)) 197 198 start := podmanTest.Podman([]string{"start", session.OutputToString()}) 199 start.WaitWithDefaultTimeout() 200 Expect(start).To(ExitWithError()) 201 202 Eventually(podmanTest.NumberOfContainers(), defaultWaitTimeout, 3.0).Should(Equal(1)) 203 }) 204 205 It("podman start --sig-proxy should not work without --attach", func() { 206 session := podmanTest.Podman([]string{"create", ALPINE, "ls"}) 207 session.WaitWithDefaultTimeout() 208 Expect(session).Should(Exit(0)) 209 210 session = podmanTest.Podman([]string{"start", "-l", "--sig-proxy"}) 211 session.WaitWithDefaultTimeout() 212 Expect(session).Should(Exit(125)) 213 }) 214 215 It("podman start container with special pidfile", func() { 216 SkipIfRemote("pidfile not handled by remote") 217 pidfile := tempdir + "pidfile" 218 session := podmanTest.Podman([]string{"create", "--pidfile", pidfile, ALPINE, "ls"}) 219 session.WaitWithDefaultTimeout() 220 Expect(session).Should(Exit(0)) 221 cid := session.OutputToString() 222 223 session = podmanTest.Podman([]string{"start", cid}) 224 session.WaitWithDefaultTimeout() 225 Expect(session).Should(Exit(0)) 226 readFirstLine := func(path string) string { 227 content, err := ioutil.ReadFile(path) 228 Expect(err).To(BeNil()) 229 return strings.Split(string(content), "\n")[0] 230 } 231 containerPID := readFirstLine(pidfile) 232 _, err = strconv.Atoi(containerPID) // Make sure it's a proper integer 233 Expect(err).To(BeNil()) 234 }) 235 })