github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/test/e2e/pod_rm_test.go (about) 1 package integration 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "strings" 8 9 . "github.com/containers/libpod/test/utils" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 ) 13 14 var _ = Describe("Podman pod rm", func() { 15 var ( 16 tempdir string 17 err error 18 podmanTest *PodmanTestIntegration 19 ) 20 21 BeforeEach(func() { 22 tempdir, err = CreateTempDirInTempDir() 23 if err != nil { 24 os.Exit(1) 25 } 26 podmanTest = PodmanTestCreate(tempdir) 27 podmanTest.Setup() 28 podmanTest.SeedImages() 29 }) 30 31 AfterEach(func() { 32 podmanTest.CleanupPod() 33 f := CurrentGinkgoTestDescription() 34 processTestResult(f) 35 36 }) 37 38 It("podman pod rm empty pod", func() { 39 _, ec, podid := podmanTest.CreatePod("") 40 Expect(ec).To(Equal(0)) 41 42 result := podmanTest.Podman([]string{"pod", "rm", podid}) 43 result.WaitWithDefaultTimeout() 44 Expect(result.ExitCode()).To(Equal(0)) 45 46 // Also check that we don't leak cgroups 47 err := filepath.Walk("/sys/fs/cgroup", func(path string, info os.FileInfo, err error) error { 48 if err != nil { 49 return err 50 } 51 if !info.IsDir() { 52 Expect(err).To(BeNil()) 53 } 54 if strings.Contains(info.Name(), podid) { 55 return fmt.Errorf("leaking cgroup path %s", path) 56 } 57 return nil 58 }) 59 Expect(err).To(BeNil()) 60 }) 61 62 It("podman pod rm latest pod", func() { 63 _, ec, podid := podmanTest.CreatePod("") 64 Expect(ec).To(Equal(0)) 65 66 _, ec2, podid2 := podmanTest.CreatePod("") 67 Expect(ec2).To(Equal(0)) 68 69 result := podmanTest.Podman([]string{"pod", "rm", "--latest"}) 70 result.WaitWithDefaultTimeout() 71 Expect(result.ExitCode()).To(Equal(0)) 72 73 result = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc"}) 74 result.WaitWithDefaultTimeout() 75 Expect(result.ExitCode()).To(Equal(0)) 76 Expect(result.OutputToString()).To(ContainSubstring(podid)) 77 Expect(result.OutputToString()).To(Not(ContainSubstring(podid2))) 78 }) 79 80 It("podman pod rm removes a pod with a container", func() { 81 _, ec, podid := podmanTest.CreatePod("") 82 Expect(ec).To(Equal(0)) 83 84 _, ec2, _ := podmanTest.RunLsContainerInPod("", podid) 85 Expect(ec2).To(Equal(0)) 86 87 result := podmanTest.Podman([]string{"pod", "rm", podid}) 88 result.WaitWithDefaultTimeout() 89 Expect(result.ExitCode()).To(Equal(0)) 90 91 result = podmanTest.Podman([]string{"ps", "-qa"}) 92 result.WaitWithDefaultTimeout() 93 Expect(len(result.OutputToStringArray())).To(Equal(0)) 94 }) 95 96 It("podman pod rm -f does remove a running container", func() { 97 _, ec, podid := podmanTest.CreatePod("") 98 Expect(ec).To(Equal(0)) 99 100 session := podmanTest.RunTopContainerInPod("", podid) 101 session.WaitWithDefaultTimeout() 102 Expect(session.ExitCode()).To(Equal(0)) 103 104 result := podmanTest.Podman([]string{"pod", "rm", "-f", podid}) 105 result.WaitWithDefaultTimeout() 106 Expect(result.ExitCode()).To(Equal(0)) 107 108 result = podmanTest.Podman([]string{"ps", "-q"}) 109 result.WaitWithDefaultTimeout() 110 Expect(result.OutputToString()).To(BeEmpty()) 111 }) 112 113 It("podman pod rm -a doesn't remove a running container", func() { 114 fmt.Printf("To start, there are %d pods\n", podmanTest.NumberOfPods()) 115 _, ec, podid1 := podmanTest.CreatePod("") 116 Expect(ec).To(Equal(0)) 117 118 _, ec, _ = podmanTest.CreatePod("") 119 Expect(ec).To(Equal(0)) 120 fmt.Printf("Started %d pods\n", podmanTest.NumberOfPods()) 121 122 session := podmanTest.RunTopContainerInPod("", podid1) 123 session.WaitWithDefaultTimeout() 124 Expect(session.ExitCode()).To(Equal(0)) 125 podmanTest.WaitForContainer() 126 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) 127 fmt.Printf("Started container running in one pod") 128 129 num_pods := podmanTest.NumberOfPods() 130 Expect(num_pods).To(Equal(2)) 131 ps := podmanTest.Podman([]string{"pod", "ps"}) 132 ps.WaitWithDefaultTimeout() 133 fmt.Printf("Current %d pod(s):\n%s\n", num_pods, ps.OutputToString()) 134 135 fmt.Printf("Removing all empty pods\n") 136 result := podmanTest.Podman([]string{"pod", "rm", "-a"}) 137 result.WaitWithDefaultTimeout() 138 Expect(result).To(ExitWithError()) 139 foundExpectedError, _ := result.ErrorGrepString("cannot be removed") 140 Expect(foundExpectedError).To(Equal(true)) 141 142 num_pods = podmanTest.NumberOfPods() 143 ps = podmanTest.Podman([]string{"pod", "ps"}) 144 ps.WaitWithDefaultTimeout() 145 fmt.Printf("Final %d pod(s):\n%s\n", num_pods, ps.OutputToString()) 146 Expect(num_pods).To(Equal(1)) 147 // Confirm top container still running inside remaining pod 148 Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) 149 }) 150 151 It("podman pod rm -fa removes everything", func() { 152 _, ec, podid1 := podmanTest.CreatePod("") 153 Expect(ec).To(Equal(0)) 154 155 _, ec, podid2 := podmanTest.CreatePod("") 156 Expect(ec).To(Equal(0)) 157 158 _, ec, _ = podmanTest.CreatePod("") 159 Expect(ec).To(Equal(0)) 160 161 session := podmanTest.RunTopContainerInPod("", podid1) 162 session.WaitWithDefaultTimeout() 163 Expect(session.ExitCode()).To(Equal(0)) 164 165 session = podmanTest.Podman([]string{"create", "-d", "--pod", podid1, ALPINE, "ls"}) 166 session.WaitWithDefaultTimeout() 167 Expect(session.ExitCode()).To(Equal(0)) 168 169 _, ec, _ = podmanTest.RunLsContainerInPod("", podid2) 170 Expect(ec).To(Equal(0)) 171 172 session = podmanTest.RunTopContainerInPod("", podid2) 173 session.WaitWithDefaultTimeout() 174 Expect(session.ExitCode()).To(Equal(0)) 175 176 result := podmanTest.Podman([]string{"pod", "rm", "-fa"}) 177 result.WaitWithDefaultTimeout() 178 Expect(result.ExitCode()).To(Equal(0)) 179 180 result = podmanTest.Podman([]string{"ps", "-q"}) 181 result.WaitWithDefaultTimeout() 182 Expect(result.OutputToString()).To(BeEmpty()) 183 184 // one pod should have been deleted 185 result = podmanTest.Podman([]string{"pod", "ps", "-q"}) 186 result.WaitWithDefaultTimeout() 187 Expect(result.OutputToString()).To(BeEmpty()) 188 }) 189 190 It("podman rm bogus pod", func() { 191 session := podmanTest.Podman([]string{"pod", "rm", "bogus"}) 192 session.WaitWithDefaultTimeout() 193 // TODO: `podman rm` returns 1 for a bogus container. Should the RC be consistent? 194 Expect(session.ExitCode()).To(Equal(125)) 195 }) 196 197 It("podman rm bogus pod and a running pod", func() { 198 _, ec, podid1 := podmanTest.CreatePod("") 199 Expect(ec).To(Equal(0)) 200 201 session := podmanTest.RunTopContainerInPod("test1", podid1) 202 session.WaitWithDefaultTimeout() 203 Expect(session.ExitCode()).To(Equal(0)) 204 205 session = podmanTest.Podman([]string{"pod", "rm", "bogus", "test1"}) 206 session.WaitWithDefaultTimeout() 207 Expect(session.ExitCode()).To(Equal(125)) 208 209 session = podmanTest.Podman([]string{"pod", "rm", "test1", "bogus"}) 210 session.WaitWithDefaultTimeout() 211 Expect(session.ExitCode()).To(Equal(125)) 212 }) 213 214 It("podman rm --ignore bogus pod and a running pod", func() { 215 SkipIfRemote() 216 217 _, ec, podid1 := podmanTest.CreatePod("") 218 Expect(ec).To(Equal(0)) 219 220 session := podmanTest.RunTopContainerInPod("test1", podid1) 221 session.WaitWithDefaultTimeout() 222 Expect(session.ExitCode()).To(Equal(0)) 223 224 session = podmanTest.Podman([]string{"pod", "rm", "--force", "--ignore", "bogus", "test1"}) 225 session.WaitWithDefaultTimeout() 226 Expect(session.ExitCode()).To(Equal(0)) 227 228 session = podmanTest.Podman([]string{"pod", "rm", "--ignore", "test1", "bogus"}) 229 session.WaitWithDefaultTimeout() 230 Expect(session.ExitCode()).To(Equal(0)) 231 }) 232 })