github.com/AbhinandanKurakure/podman/v3@v3.4.10/test/e2e/pause_test.go (about) 1 package integration 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "strings" 9 10 . "github.com/containers/podman/v3/test/utils" 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 . "github.com/onsi/gomega/gexec" 14 ) 15 16 var _ = Describe("Podman pause", func() { 17 var ( 18 tempdir string 19 err error 20 podmanTest *PodmanTestIntegration 21 ) 22 23 pausedState := "paused" 24 createdState := "created" 25 26 BeforeEach(func() { 27 SkipIfRootlessCgroupsV1("Pause is not supported in cgroups v1") 28 tempdir, err = CreateTempDirInTempDir() 29 if err != nil { 30 os.Exit(1) 31 } 32 33 if CGROUPSV2 { 34 b, err := ioutil.ReadFile("/proc/self/cgroup") 35 if err != nil { 36 Skip("cannot read self cgroup") 37 } 38 39 path := filepath.Join("/sys/fs/cgroup", strings.TrimSuffix(strings.Replace(string(b), "0::", "", 1), "\n"), "cgroup.freeze") 40 _, err = os.Stat(path) 41 if err != nil { 42 Skip("freezer controller not available on the current kernel") 43 } 44 } 45 46 podmanTest = PodmanTestCreate(tempdir) 47 podmanTest.Setup() 48 podmanTest.SeedImages() 49 }) 50 51 AfterEach(func() { 52 podmanTest.Cleanup() 53 f := CurrentGinkgoTestDescription() 54 processTestResult(f) 55 56 }) 57 58 It("podman pause bogus container", func() { 59 session := podmanTest.Podman([]string{"pause", "foobar"}) 60 session.WaitWithDefaultTimeout() 61 Expect(session).To(ExitWithError()) 62 }) 63 64 It("podman unpause bogus container", func() { 65 session := podmanTest.Podman([]string{"unpause", "foobar"}) 66 session.WaitWithDefaultTimeout() 67 Expect(session).To(ExitWithError()) 68 }) 69 70 It("podman pause a created container by id", func() { 71 session := podmanTest.Podman([]string{"create", ALPINE, "ls"}) 72 session.WaitWithDefaultTimeout() 73 Expect(session).Should(Exit(0)) 74 cid := session.OutputToString() 75 76 result := podmanTest.Podman([]string{"pause", cid}) 77 result.WaitWithDefaultTimeout() 78 79 Expect(result).To(ExitWithError()) 80 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 81 Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(createdState)) 82 83 // check we can read stats for a paused container 84 result = podmanTest.Podman([]string{"stats", "--no-stream", cid}) 85 result.WaitWithDefaultTimeout() 86 Expect(result).To(ExitWithError()) 87 }) 88 89 It("podman pause a running container by id", func() { 90 session := podmanTest.RunTopContainer("") 91 session.WaitWithDefaultTimeout() 92 Expect(session).Should(Exit(0)) 93 cid := session.OutputToString() 94 result := podmanTest.Podman([]string{"pause", cid}) 95 result.WaitWithDefaultTimeout() 96 97 Expect(result).Should(Exit(0)) 98 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 99 Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState)) 100 101 result = podmanTest.Podman([]string{"unpause", cid}) 102 result.WaitWithDefaultTimeout() 103 }) 104 105 It("podman container pause a running container by id", func() { 106 session := podmanTest.RunTopContainer("") 107 session.WaitWithDefaultTimeout() 108 Expect(session).Should(Exit(0)) 109 cid := session.OutputToString() 110 111 result := podmanTest.Podman([]string{"container", "pause", cid}) 112 result.WaitWithDefaultTimeout() 113 114 Expect(result).Should(Exit(0)) 115 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 116 Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState)) 117 118 result = podmanTest.Podman([]string{"container", "unpause", cid}) 119 result.WaitWithDefaultTimeout() 120 }) 121 122 It("podman unpause a running container by id", func() { 123 session := podmanTest.RunTopContainer("") 124 session.WaitWithDefaultTimeout() 125 Expect(session).Should(Exit(0)) 126 cid := session.OutputToString() 127 128 result := podmanTest.Podman([]string{"unpause", cid}) 129 result.WaitWithDefaultTimeout() 130 131 Expect(result).Should(Exit(125)) 132 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) 133 134 }) 135 136 It("podman remove a paused container by id without force", func() { 137 session := podmanTest.RunTopContainer("") 138 session.WaitWithDefaultTimeout() 139 Expect(session).Should(Exit(0)) 140 cid := session.OutputToString() 141 142 result := podmanTest.Podman([]string{"pause", cid}) 143 result.WaitWithDefaultTimeout() 144 145 Expect(result).Should(Exit(0)) 146 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 147 Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState)) 148 149 result = podmanTest.Podman([]string{"rm", cid}) 150 result.WaitWithDefaultTimeout() 151 152 Expect(result).Should(Exit(2)) 153 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 154 Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState)) 155 156 }) 157 158 It("podman remove a paused container by id with force", func() { 159 session := podmanTest.RunTopContainer("") 160 session.WaitWithDefaultTimeout() 161 Expect(session).Should(Exit(0)) 162 cid := session.OutputToString() 163 164 result := podmanTest.Podman([]string{"pause", cid}) 165 result.WaitWithDefaultTimeout() 166 167 Expect(result).Should(Exit(0)) 168 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 169 Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState)) 170 171 result = podmanTest.Podman([]string{"rm", "--force", cid}) 172 result.WaitWithDefaultTimeout() 173 174 Expect(result).Should(Exit(0)) 175 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 176 }) 177 178 It("podman stop a paused container by id", func() { 179 session := podmanTest.RunTopContainer("") 180 session.WaitWithDefaultTimeout() 181 Expect(session).Should(Exit(0)) 182 cid := session.OutputToString() 183 184 result := podmanTest.Podman([]string{"pause", cid}) 185 result.WaitWithDefaultTimeout() 186 187 Expect(result).Should(Exit(0)) 188 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 189 Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState)) 190 191 result = podmanTest.Podman([]string{"stop", cid}) 192 result.WaitWithDefaultTimeout() 193 194 Expect(result).Should(Exit(125)) 195 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 196 Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState)) 197 198 result = podmanTest.Podman([]string{"unpause", cid}) 199 result.WaitWithDefaultTimeout() 200 Expect(result).Should(Exit(0)) 201 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) 202 203 result = podmanTest.Podman([]string{"rm", cid}) 204 result.WaitWithDefaultTimeout() 205 Expect(result).Should(Exit(2)) 206 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) 207 208 result = podmanTest.Podman([]string{"rm", "-f", cid}) 209 result.WaitWithDefaultTimeout() 210 Expect(result).Should(Exit(0)) 211 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 212 213 }) 214 215 It("podman pause a running container by name", func() { 216 session := podmanTest.RunTopContainer("test1") 217 session.WaitWithDefaultTimeout() 218 Expect(session).Should(Exit(0)) 219 220 result := podmanTest.Podman([]string{"pause", "test1"}) 221 result.WaitWithDefaultTimeout() 222 223 Expect(result).Should(Exit(0)) 224 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 225 Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(Equal(pausedState)) 226 227 result = podmanTest.Podman([]string{"unpause", "test1"}) 228 result.WaitWithDefaultTimeout() 229 }) 230 231 It("podman pause a running container by id and another by name", func() { 232 session1 := podmanTest.RunTopContainer("test1") 233 session1.WaitWithDefaultTimeout() 234 Expect(session1).Should(Exit(0)) 235 236 session2 := podmanTest.RunTopContainer("") 237 session2.WaitWithDefaultTimeout() 238 Expect(session2).Should(Exit(0)) 239 cid2 := session2.OutputToString() 240 241 result := podmanTest.Podman([]string{"pause", cid2}) 242 result.WaitWithDefaultTimeout() 243 244 Expect(result).Should(Exit(0)) 245 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) 246 247 result = podmanTest.Podman([]string{"pause", "test1"}) 248 result.WaitWithDefaultTimeout() 249 250 Expect(result).Should(Exit(0)) 251 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 252 253 result = podmanTest.Podman([]string{"unpause", "test1"}) 254 result.WaitWithDefaultTimeout() 255 result = podmanTest.Podman([]string{"unpause", cid2}) 256 result.WaitWithDefaultTimeout() 257 }) 258 259 It("Pause all containers (no containers exist)", func() { 260 result := podmanTest.Podman([]string{"pause", "--all"}) 261 result.WaitWithDefaultTimeout() 262 Expect(result).Should(Exit(0)) 263 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 264 265 }) 266 267 It("Unpause all containers (no paused containers exist)", func() { 268 result := podmanTest.Podman([]string{"unpause", "--all"}) 269 result.WaitWithDefaultTimeout() 270 Expect(result).Should(Exit(0)) 271 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 272 }) 273 274 It("Pause a bunch of running containers", func() { 275 for i := 0; i < 3; i++ { 276 name := fmt.Sprintf("test%d", i) 277 run := podmanTest.Podman([]string{"run", "-dt", "--name", name, nginx}) 278 run.WaitWithDefaultTimeout() 279 Expect(run).Should(Exit(0)) 280 281 } 282 running := podmanTest.Podman([]string{"ps", "-q"}) 283 running.WaitWithDefaultTimeout() 284 Expect(running).Should(Exit(0)) 285 Expect(len(running.OutputToStringArray())).To(Equal(3)) 286 287 pause := podmanTest.Podman([]string{"pause", "--all"}) 288 pause.WaitWithDefaultTimeout() 289 Expect(pause).Should(Exit(0)) 290 291 running = podmanTest.Podman([]string{"ps", "-q"}) 292 running.WaitWithDefaultTimeout() 293 Expect(running).Should(Exit(0)) 294 Expect(len(running.OutputToStringArray())).To(Equal(0)) 295 296 unpause := podmanTest.Podman([]string{"unpause", "--all"}) 297 unpause.WaitWithDefaultTimeout() 298 Expect(unpause).Should(Exit(0)) 299 }) 300 301 It("Unpause a bunch of running containers", func() { 302 for i := 0; i < 3; i++ { 303 name := fmt.Sprintf("test%d", i) 304 run := podmanTest.Podman([]string{"run", "-dt", "--name", name, nginx}) 305 run.WaitWithDefaultTimeout() 306 Expect(run).Should(Exit(0)) 307 308 } 309 pause := podmanTest.Podman([]string{"pause", "--all"}) 310 pause.WaitWithDefaultTimeout() 311 Expect(pause).Should(Exit(0)) 312 313 unpause := podmanTest.Podman([]string{"unpause", "--all"}) 314 unpause.WaitWithDefaultTimeout() 315 Expect(unpause).Should(Exit(0)) 316 317 running := podmanTest.Podman([]string{"ps", "-q"}) 318 running.WaitWithDefaultTimeout() 319 Expect(running).Should(Exit(0)) 320 Expect(len(running.OutputToStringArray())).To(Equal(3)) 321 }) 322 323 })