github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/test/e2e/rmi_test.go (about) 1 package integration 2 3 import ( 4 "fmt" 5 "os" 6 7 . "github.com/containers/libpod/test/utils" 8 . "github.com/onsi/ginkgo" 9 . "github.com/onsi/gomega" 10 ) 11 12 var _ = Describe("Podman rmi", func() { 13 var ( 14 tempdir string 15 err error 16 podmanTest *PodmanTestIntegration 17 ) 18 19 BeforeEach(func() { 20 tempdir, err = CreateTempDirInTempDir() 21 if err != nil { 22 os.Exit(1) 23 } 24 podmanTest = PodmanTestCreate(tempdir) 25 podmanTest.Setup() 26 podmanTest.RestoreAllArtifacts() 27 }) 28 29 AfterEach(func() { 30 podmanTest.Cleanup() 31 f := CurrentGinkgoTestDescription() 32 processTestResult(f) 33 34 }) 35 36 It("podman rmi bogus image", func() { 37 session := podmanTest.Podman([]string{"rmi", "debian:6.0.10"}) 38 session.WaitWithDefaultTimeout() 39 Expect(session.ExitCode()).To(Equal(1)) 40 41 }) 42 43 It("podman rmi with fq name", func() { 44 session := podmanTest.PodmanNoCache([]string{"rmi", ALPINE}) 45 session.WaitWithDefaultTimeout() 46 Expect(session.ExitCode()).To(Equal(0)) 47 48 }) 49 50 It("podman rmi with short name", func() { 51 session := podmanTest.PodmanNoCache([]string{"rmi", "alpine"}) 52 session.WaitWithDefaultTimeout() 53 Expect(session.ExitCode()).To(Equal(0)) 54 55 }) 56 57 It("podman rmi all images", func() { 58 podmanTest.RestoreArtifact(nginx) 59 session := podmanTest.PodmanNoCache([]string{"rmi", "-a"}) 60 session.WaitWithDefaultTimeout() 61 images := podmanTest.PodmanNoCache([]string{"images"}) 62 images.WaitWithDefaultTimeout() 63 fmt.Println(images.OutputToStringArray()) 64 Expect(session.ExitCode()).To(Equal(0)) 65 66 }) 67 68 It("podman rmi all images forcibly with short options", func() { 69 podmanTest.RestoreArtifact(nginx) 70 session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"}) 71 session.WaitWithDefaultTimeout() 72 Expect(session.ExitCode()).To(Equal(0)) 73 74 }) 75 76 It("podman rmi tagged image", func() { 77 setup := podmanTest.PodmanNoCache([]string{"images", "-q", ALPINE}) 78 setup.WaitWithDefaultTimeout() 79 Expect(setup.ExitCode()).To(Equal(0)) 80 81 session := podmanTest.PodmanNoCache([]string{"tag", "alpine", "foo:bar", "foo"}) 82 session.WaitWithDefaultTimeout() 83 Expect(session.ExitCode()).To(Equal(0)) 84 85 result := podmanTest.PodmanNoCache([]string{"images", "-q", "foo"}) 86 result.WaitWithDefaultTimeout() 87 Expect(result.ExitCode()).To(Equal(0)) 88 89 Expect(result.LineInOutputContains(setup.OutputToString())).To(BeTrue()) 90 }) 91 92 It("podman rmi image with tags by ID cannot be done without force", func() { 93 setup := podmanTest.PodmanNoCache([]string{"images", "-q", ALPINE}) 94 setup.WaitWithDefaultTimeout() 95 Expect(setup.ExitCode()).To(Equal(0)) 96 alpineId := setup.OutputToString() 97 98 session := podmanTest.PodmanNoCache([]string{"tag", "alpine", "foo:bar", "foo"}) 99 session.WaitWithDefaultTimeout() 100 Expect(session.ExitCode()).To(Equal(0)) 101 102 // Trying without --force should fail 103 result := podmanTest.PodmanNoCache([]string{"rmi", alpineId}) 104 result.WaitWithDefaultTimeout() 105 Expect(result).To(ExitWithError()) 106 107 // With --force it should work 108 resultForce := podmanTest.PodmanNoCache([]string{"rmi", "-f", alpineId}) 109 resultForce.WaitWithDefaultTimeout() 110 Expect(resultForce.ExitCode()).To(Equal(0)) 111 }) 112 113 It("podman rmi image that is a parent of another image", func() { 114 SkipIfRemote() 115 session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"}) 116 session.WaitWithDefaultTimeout() 117 Expect(session.ExitCode()).To(Equal(0)) 118 119 session = podmanTest.PodmanNoCache([]string{"run", "--name", "c_test", ALPINE, "true"}) 120 session.WaitWithDefaultTimeout() 121 Expect(session.ExitCode()).To(Equal(0)) 122 123 session = podmanTest.PodmanNoCache([]string{"commit", "-q", "c_test", "test"}) 124 session.WaitWithDefaultTimeout() 125 Expect(session.ExitCode()).To(Equal(0)) 126 127 session = podmanTest.PodmanNoCache([]string{"rm", "c_test"}) 128 session.WaitWithDefaultTimeout() 129 Expect(session.ExitCode()).To(Equal(0)) 130 131 session = podmanTest.PodmanNoCache([]string{"rmi", ALPINE}) 132 session.WaitWithDefaultTimeout() 133 Expect(session.ExitCode()).To(Equal(0)) 134 135 session = podmanTest.PodmanNoCache([]string{"images", "-q"}) 136 session.WaitWithDefaultTimeout() 137 Expect(session.ExitCode()).To(Equal(0)) 138 Expect(len(session.OutputToStringArray())).To(Equal(1)) 139 140 session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"}) 141 session.WaitWithDefaultTimeout() 142 Expect(session.ExitCode()).To(Equal(0)) 143 Expect(len(session.OutputToStringArray())).To(Equal(2)) 144 untaggedImg := session.OutputToStringArray()[1] 145 146 session = podmanTest.PodmanNoCache([]string{"rmi", "-f", untaggedImg}) 147 session.WaitWithDefaultTimeout() 148 Expect(session.ExitCode()).To(Equal(2)) 149 }) 150 151 It("podman rmi image that is created from another named imaged", func() { 152 SkipIfRemote() 153 session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"}) 154 session.WaitWithDefaultTimeout() 155 Expect(session.ExitCode()).To(Equal(0)) 156 157 session = podmanTest.PodmanNoCache([]string{"create", "--name", "c_test1", ALPINE, "true"}) 158 session.WaitWithDefaultTimeout() 159 Expect(session.ExitCode()).To(Equal(0)) 160 161 session = podmanTest.PodmanNoCache([]string{"commit", "-q", "c_test1", "test1"}) 162 session.WaitWithDefaultTimeout() 163 Expect(session.ExitCode()).To(Equal(0)) 164 165 session = podmanTest.PodmanNoCache([]string{"create", "--name", "c_test2", "test1", "true"}) 166 session.WaitWithDefaultTimeout() 167 Expect(session.ExitCode()).To(Equal(0)) 168 169 session = podmanTest.PodmanNoCache([]string{"commit", "-q", "c_test2", "test2"}) 170 session.WaitWithDefaultTimeout() 171 Expect(session.ExitCode()).To(Equal(0)) 172 173 session = podmanTest.PodmanNoCache([]string{"rm", "-a"}) 174 session.WaitWithDefaultTimeout() 175 Expect(session.ExitCode()).To(Equal(0)) 176 177 session = podmanTest.PodmanNoCache([]string{"rmi", "test2"}) 178 session.WaitWithDefaultTimeout() 179 Expect(session.ExitCode()).To(Equal(0)) 180 181 session = podmanTest.PodmanNoCache([]string{"images", "-q"}) 182 session.WaitWithDefaultTimeout() 183 Expect(session.ExitCode()).To(Equal(0)) 184 Expect(len(session.OutputToStringArray())).To(Equal(2)) 185 }) 186 187 It("podman rmi with cached images", func() { 188 SkipIfRemote() 189 session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"}) 190 session.WaitWithDefaultTimeout() 191 Expect(session.ExitCode()).To(Equal(0)) 192 193 dockerfile := `FROM docker.io/library/alpine:latest 194 RUN mkdir hello 195 RUN touch test.txt 196 ENV foo=bar 197 ` 198 podmanTest.BuildImage(dockerfile, "test", "true") 199 200 dockerfile = `FROM docker.io/library/alpine:latest 201 RUN mkdir hello 202 RUN touch test.txt 203 RUN mkdir blah 204 ENV foo=bar 205 ` 206 podmanTest.BuildImage(dockerfile, "test2", "true") 207 208 session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"}) 209 session.WaitWithDefaultTimeout() 210 Expect(session.ExitCode()).To(Equal(0)) 211 numOfImages := len(session.OutputToStringArray()) 212 213 session = podmanTest.PodmanNoCache([]string{"rmi", "test2"}) 214 session.WaitWithDefaultTimeout() 215 Expect(session.ExitCode()).To(Equal(0)) 216 217 session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"}) 218 session.WaitWithDefaultTimeout() 219 Expect(session.ExitCode()).To(Equal(0)) 220 Expect(numOfImages - len(session.OutputToStringArray())).To(Equal(2)) 221 222 session = podmanTest.PodmanNoCache([]string{"rmi", "test"}) 223 session.WaitWithDefaultTimeout() 224 Expect(session.ExitCode()).To(Equal(0)) 225 226 session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"}) 227 session.WaitWithDefaultTimeout() 228 Expect(session.ExitCode()).To(Equal(0)) 229 Expect(len(session.OutputToStringArray())).To(Equal(1)) 230 231 podmanTest.BuildImage(dockerfile, "test3", "true") 232 233 session = podmanTest.PodmanNoCache([]string{"rmi", ALPINE}) 234 session.WaitWithDefaultTimeout() 235 Expect(session.ExitCode()).To(Equal(0)) 236 237 session = podmanTest.PodmanNoCache([]string{"rmi", "test3"}) 238 session.WaitWithDefaultTimeout() 239 Expect(session.ExitCode()).To(Equal(0)) 240 241 session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"}) 242 session.WaitWithDefaultTimeout() 243 Expect(session.ExitCode()).To(Equal(0)) 244 Expect(len(session.OutputToString())).To(Equal(0)) 245 }) 246 247 It("podman rmi -a with no images should be exit 0", func() { 248 session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"}) 249 session.WaitWithDefaultTimeout() 250 Expect(session.ExitCode()).To(Equal(0)) 251 252 session2 := podmanTest.PodmanNoCache([]string{"rmi", "-fa"}) 253 session2.WaitWithDefaultTimeout() 254 Expect(session2.ExitCode()).To(Equal(0)) 255 }) 256 257 It("podman rmi -a with parent|child images", func() { 258 SkipIfRemote() 259 dockerfile := `FROM docker.io/library/alpine:latest AS base 260 RUN touch /1 261 ENV LOCAL=/1 262 RUN find $LOCAL 263 FROM base 264 RUN find $LOCAL 265 266 ` 267 podmanTest.BuildImage(dockerfile, "test", "true") 268 session := podmanTest.PodmanNoCache([]string{"rmi", "-a"}) 269 session.WaitWithDefaultTimeout() 270 fmt.Println(session.OutputToString()) 271 Expect(session.ExitCode()).To(Equal(0)) 272 273 images := podmanTest.PodmanNoCache([]string{"images", "-aq"}) 274 images.WaitWithDefaultTimeout() 275 Expect(images.ExitCode()).To(Equal(0)) 276 Expect(len(images.OutputToStringArray())).To(Equal(0)) 277 }) 278 279 // Don't rerun all tests; just assume that if we get that diagnostic, 280 // we're getting rmi 281 It("podman image rm is the same as rmi", func() { 282 session := podmanTest.PodmanNoCache([]string{"image", "rm"}) 283 session.WaitWithDefaultTimeout() 284 Expect(session.ExitCode()).To(Equal(125)) 285 match, _ := session.ErrorGrepString("image name or ID must be specified") 286 Expect(match).To(BeTrue()) 287 }) 288 })