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