github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/test/e2e/pod_rm_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 pod rm", 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 pod rm empty pod", func() { 40 _, ec, podid := podmanTest.CreatePod("") 41 Expect(ec).To(Equal(0)) 42 43 result := podmanTest.Podman([]string{"pod", "rm", podid}) 44 result.WaitWithDefaultTimeout() 45 Expect(result.ExitCode()).To(Equal(0)) 46 47 // Also check that we don't leak cgroups 48 err := filepath.Walk("/sys/fs/cgroup", func(path string, info os.FileInfo, err error) error { 49 if err != nil { 50 return err 51 } 52 if !info.IsDir() { 53 Expect(err).To(BeNil()) 54 } 55 if strings.Contains(info.Name(), podid) { 56 return fmt.Errorf("leaking cgroup path %s", path) 57 } 58 return nil 59 }) 60 Expect(err).To(BeNil()) 61 }) 62 63 It("podman pod rm latest pod", func() { 64 _, ec, podid := podmanTest.CreatePod("") 65 Expect(ec).To(Equal(0)) 66 67 _, ec2, podid2 := podmanTest.CreatePod("pod2") 68 Expect(ec2).To(Equal(0)) 69 70 latest := "--latest" 71 if IsRemote() { 72 latest = "pod2" 73 } 74 result := podmanTest.Podman([]string{"pod", "rm", latest}) 75 result.WaitWithDefaultTimeout() 76 Expect(result.ExitCode()).To(Equal(0)) 77 78 result = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc"}) 79 result.WaitWithDefaultTimeout() 80 Expect(result.ExitCode()).To(Equal(0)) 81 Expect(result.OutputToString()).To(ContainSubstring(podid)) 82 Expect(result.OutputToString()).To(Not(ContainSubstring(podid2))) 83 }) 84 85 It("podman pod rm removes a pod with a container", func() { 86 _, ec, podid := podmanTest.CreatePod("") 87 Expect(ec).To(Equal(0)) 88 89 _, ec2, _ := podmanTest.RunLsContainerInPod("", podid) 90 Expect(ec2).To(Equal(0)) 91 92 result := podmanTest.Podman([]string{"pod", "rm", podid}) 93 result.WaitWithDefaultTimeout() 94 Expect(result.ExitCode()).To(Equal(0)) 95 96 result = podmanTest.Podman([]string{"ps", "-qa"}) 97 result.WaitWithDefaultTimeout() 98 Expect(len(result.OutputToStringArray())).To(Equal(0)) 99 }) 100 101 It("podman pod rm -f does remove a running container", func() { 102 _, ec, podid := podmanTest.CreatePod("") 103 Expect(ec).To(Equal(0)) 104 105 session := podmanTest.RunTopContainerInPod("", podid) 106 session.WaitWithDefaultTimeout() 107 Expect(session.ExitCode()).To(Equal(0)) 108 109 result := podmanTest.Podman([]string{"pod", "rm", "-f", podid}) 110 result.WaitWithDefaultTimeout() 111 Expect(result.ExitCode()).To(Equal(0)) 112 113 result = podmanTest.Podman([]string{"ps", "-q"}) 114 result.WaitWithDefaultTimeout() 115 Expect(result.OutputToString()).To(BeEmpty()) 116 }) 117 118 It("podman pod rm -a doesn't remove a running container", func() { 119 fmt.Printf("To start, there are %d pods\n", podmanTest.NumberOfPods()) 120 _, ec, podid1 := podmanTest.CreatePod("") 121 Expect(ec).To(Equal(0)) 122 123 _, ec, _ = podmanTest.CreatePod("") 124 Expect(ec).To(Equal(0)) 125 fmt.Printf("Started %d pods\n", podmanTest.NumberOfPods()) 126 127 session := podmanTest.RunTopContainerInPod("", podid1) 128 session.WaitWithDefaultTimeout() 129 Expect(session.ExitCode()).To(Equal(0)) 130 podmanTest.WaitForContainer() 131 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) 132 fmt.Printf("Started container running in one pod") 133 134 num_pods := podmanTest.NumberOfPods() 135 Expect(num_pods).To(Equal(2)) 136 ps := podmanTest.Podman([]string{"pod", "ps"}) 137 ps.WaitWithDefaultTimeout() 138 fmt.Printf("Current %d pod(s):\n%s\n", num_pods, ps.OutputToString()) 139 140 fmt.Printf("Removing all empty pods\n") 141 result := podmanTest.Podman([]string{"pod", "rm", "-a"}) 142 result.WaitWithDefaultTimeout() 143 Expect(result).To(ExitWithError()) 144 foundExpectedError, _ := result.ErrorGrepString("cannot be removed") 145 Expect(foundExpectedError).To(Equal(true)) 146 147 num_pods = podmanTest.NumberOfPods() 148 ps = podmanTest.Podman([]string{"pod", "ps"}) 149 ps.WaitWithDefaultTimeout() 150 fmt.Printf("Final %d pod(s):\n%s\n", num_pods, ps.OutputToString()) 151 Expect(num_pods).To(Equal(1)) 152 // Confirm top container still running inside remaining pod 153 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) 154 }) 155 156 It("podman pod rm -fa removes everything", func() { 157 _, ec, podid1 := podmanTest.CreatePod("") 158 Expect(ec).To(Equal(0)) 159 160 _, ec, podid2 := podmanTest.CreatePod("") 161 Expect(ec).To(Equal(0)) 162 163 _, ec, _ = podmanTest.CreatePod("") 164 Expect(ec).To(Equal(0)) 165 166 session := podmanTest.RunTopContainerInPod("", podid1) 167 session.WaitWithDefaultTimeout() 168 Expect(session.ExitCode()).To(Equal(0)) 169 170 session = podmanTest.Podman([]string{"create", "--pod", podid1, ALPINE, "ls"}) 171 session.WaitWithDefaultTimeout() 172 Expect(session.ExitCode()).To(Equal(0)) 173 174 _, ec, _ = podmanTest.RunLsContainerInPod("", podid2) 175 Expect(ec).To(Equal(0)) 176 177 session = podmanTest.RunTopContainerInPod("", podid2) 178 session.WaitWithDefaultTimeout() 179 Expect(session.ExitCode()).To(Equal(0)) 180 181 result := podmanTest.Podman([]string{"pod", "rm", "-fa"}) 182 result.WaitWithDefaultTimeout() 183 Expect(result.ExitCode()).To(Equal(0)) 184 185 result = podmanTest.Podman([]string{"ps", "-q"}) 186 result.WaitWithDefaultTimeout() 187 Expect(result.OutputToString()).To(BeEmpty()) 188 189 // one pod should have been deleted 190 result = podmanTest.Podman([]string{"pod", "ps", "-q"}) 191 result.WaitWithDefaultTimeout() 192 Expect(result.OutputToString()).To(BeEmpty()) 193 }) 194 195 It("podman rm bogus pod", func() { 196 session := podmanTest.Podman([]string{"pod", "rm", "bogus"}) 197 session.WaitWithDefaultTimeout() 198 Expect(session.ExitCode()).To(Equal(1)) 199 }) 200 201 It("podman rm bogus pod and a running pod", func() { 202 _, ec, podid1 := podmanTest.CreatePod("") 203 Expect(ec).To(Equal(0)) 204 205 session := podmanTest.RunTopContainerInPod("test1", podid1) 206 session.WaitWithDefaultTimeout() 207 Expect(session.ExitCode()).To(Equal(0)) 208 209 session = podmanTest.Podman([]string{"pod", "rm", "bogus", "test1"}) 210 session.WaitWithDefaultTimeout() 211 Expect(session.ExitCode()).To(Equal(1)) 212 213 session = podmanTest.Podman([]string{"pod", "rm", "test1", "bogus"}) 214 session.WaitWithDefaultTimeout() 215 Expect(session.ExitCode()).To(Equal(1)) 216 }) 217 218 It("podman rm --ignore bogus pod and a running pod", func() { 219 220 _, ec, podid1 := podmanTest.CreatePod("") 221 Expect(ec).To(Equal(0)) 222 223 session := podmanTest.RunTopContainerInPod("test1", podid1) 224 session.WaitWithDefaultTimeout() 225 Expect(session.ExitCode()).To(Equal(0)) 226 227 session = podmanTest.Podman([]string{"pod", "rm", "--force", "--ignore", "bogus", "test1"}) 228 session.WaitWithDefaultTimeout() 229 Expect(session.ExitCode()).To(Equal(0)) 230 231 session = podmanTest.Podman([]string{"pod", "rm", "--ignore", "test1", "bogus"}) 232 session.WaitWithDefaultTimeout() 233 Expect(session.ExitCode()).To(Equal(0)) 234 }) 235 236 It("podman pod start/remove single pod via --pod-id-file", func() { 237 tmpDir, err := ioutil.TempDir("", "") 238 Expect(err).To(BeNil()) 239 tmpFile := tmpDir + "podID" 240 defer os.RemoveAll(tmpDir) 241 242 podName := "rudolph" 243 244 // Create a pod with --pod-id-file. 245 session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--pod-id-file", tmpFile}) 246 session.WaitWithDefaultTimeout() 247 Expect(session.ExitCode()).To(Equal(0)) 248 249 // Create container inside the pod. 250 session = podmanTest.Podman([]string{"create", "--pod", podName, ALPINE, "top"}) 251 session.WaitWithDefaultTimeout() 252 Expect(session.ExitCode()).To(Equal(0)) 253 254 session = podmanTest.Podman([]string{"pod", "start", "--pod-id-file", tmpFile}) 255 session.WaitWithDefaultTimeout() 256 Expect(session.ExitCode()).To(Equal(0)) 257 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2)) // infra+top 258 259 session = podmanTest.Podman([]string{"pod", "rm", "--pod-id-file", tmpFile, "--force"}) 260 session.WaitWithDefaultTimeout() 261 Expect(session.ExitCode()).To(Equal(0)) 262 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 263 }) 264 265 It("podman pod start/remove multiple pods via --pod-id-file", func() { 266 tmpDir, err := ioutil.TempDir("", "") 267 Expect(err).To(BeNil()) 268 defer os.RemoveAll(tmpDir) 269 270 podIDFiles := []string{} 271 for _, i := range "0123456789" { 272 tmpFile := tmpDir + "cid" + string(i) 273 podName := "rudolph" + string(i) 274 // Create a pod with --pod-id-file. 275 session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--pod-id-file", tmpFile}) 276 session.WaitWithDefaultTimeout() 277 Expect(session.ExitCode()).To(Equal(0)) 278 279 // Create container inside the pod. 280 session = podmanTest.Podman([]string{"create", "--pod", podName, ALPINE, "top"}) 281 session.WaitWithDefaultTimeout() 282 Expect(session.ExitCode()).To(Equal(0)) 283 284 // Append the id files along with the command. 285 podIDFiles = append(podIDFiles, "--pod-id-file") 286 podIDFiles = append(podIDFiles, tmpFile) 287 } 288 289 cmd := []string{"pod", "start"} 290 cmd = append(cmd, podIDFiles...) 291 session := podmanTest.Podman(cmd) 292 session.WaitWithDefaultTimeout() 293 Expect(session.ExitCode()).To(Equal(0)) 294 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(20)) // 10*(infra+top) 295 296 cmd = []string{"pod", "rm", "--force"} 297 cmd = append(cmd, podIDFiles...) 298 session = podmanTest.Podman(cmd) 299 session.WaitWithDefaultTimeout() 300 Expect(session.ExitCode()).To(Equal(0)) 301 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0)) 302 }) 303 })