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