github.com/AbhinandanKurakure/podman/v3@v3.4.10/test/e2e/manifest_test.go (about) 1 package integration 2 3 import ( 4 "os" 5 "path/filepath" 6 "strings" 7 8 . "github.com/containers/podman/v3/test/utils" 9 . "github.com/onsi/ginkgo" 10 . "github.com/onsi/gomega" 11 . "github.com/onsi/gomega/gexec" 12 ) 13 14 var _ = Describe("Podman manifest", func() { 15 var ( 16 tempdir string 17 err error 18 podmanTest *PodmanTestIntegration 19 ) 20 21 const ( 22 imageList = "docker://k8s.gcr.io/pause:3.1" 23 imageListInstance = "docker://k8s.gcr.io/pause@sha256:f365626a556e58189fc21d099fc64603db0f440bff07f77c740989515c544a39" 24 imageListARM64InstanceDigest = "sha256:f365626a556e58189fc21d099fc64603db0f440bff07f77c740989515c544a39" 25 imageListAMD64InstanceDigest = "sha256:59eec8837a4d942cc19a52b8c09ea75121acc38114a2c68b98983ce9356b8610" 26 imageListARMInstanceDigest = "sha256:c84b0a3a07b628bc4d62e5047d0f8dff80f7c00979e1e28a821a033ecda8fe53" 27 imageListPPC64LEInstanceDigest = "sha256:bcf9771c0b505e68c65440474179592ffdfa98790eb54ffbf129969c5e429990" 28 imageListS390XInstanceDigest = "sha256:882a20ee0df7399a445285361d38b711c299ca093af978217112c73803546d5e" 29 ) 30 31 BeforeEach(func() { 32 tempdir, err = CreateTempDirInTempDir() 33 if err != nil { 34 os.Exit(1) 35 } 36 podmanTest = PodmanTestCreate(tempdir) 37 podmanTest.Setup() 38 podmanTest.SeedImages() 39 }) 40 41 AfterEach(func() { 42 podmanTest.Cleanup() 43 f := CurrentGinkgoTestDescription() 44 processTestResult(f) 45 46 }) 47 It("podman manifest create", func() { 48 session := podmanTest.Podman([]string{"manifest", "create", "foo"}) 49 session.WaitWithDefaultTimeout() 50 Expect(session).Should(Exit(0)) 51 }) 52 53 It("podman manifest create", func() { 54 session := podmanTest.Podman([]string{"manifest", "create", "foo", imageList}) 55 session.WaitWithDefaultTimeout() 56 Expect(session).Should(Exit(0)) 57 }) 58 59 It("podman manifest inspect", func() { 60 session := podmanTest.Podman([]string{"manifest", "inspect", BB}) 61 session.WaitWithDefaultTimeout() 62 Expect(session).Should(Exit(0)) 63 64 session = podmanTest.Podman([]string{"manifest", "inspect", "quay.io/libpod/busybox"}) 65 session.WaitWithDefaultTimeout() 66 Expect(session).Should(Exit(0)) 67 68 // inspect manifest of single image 69 session = podmanTest.Podman([]string{"manifest", "inspect", "quay.io/libpod/busybox@sha256:6655df04a3df853b029a5fac8836035ac4fab117800c9a6c4b69341bb5306c3d"}) 70 session.WaitWithDefaultTimeout() 71 Expect(session).Should(Exit(0)) 72 }) 73 74 It("podman manifest add", func() { 75 session := podmanTest.Podman([]string{"manifest", "create", "foo"}) 76 session.WaitWithDefaultTimeout() 77 Expect(session).Should(Exit(0)) 78 session = podmanTest.Podman([]string{"manifest", "add", "--arch=arm64", "foo", imageListInstance}) 79 session.WaitWithDefaultTimeout() 80 Expect(session).Should(Exit(0)) 81 }) 82 83 It("podman manifest add one", func() { 84 session := podmanTest.Podman([]string{"manifest", "create", "foo"}) 85 session.WaitWithDefaultTimeout() 86 Expect(session).Should(Exit(0)) 87 session = podmanTest.Podman([]string{"manifest", "add", "--arch=arm64", "foo", imageListInstance}) 88 session.WaitWithDefaultTimeout() 89 Expect(session).Should(Exit(0)) 90 session = podmanTest.Podman([]string{"manifest", "inspect", "foo"}) 91 session.WaitWithDefaultTimeout() 92 Expect(session).Should(Exit(0)) 93 Expect(session.OutputToString()).To(ContainSubstring(imageListARM64InstanceDigest)) 94 }) 95 96 It("podman manifest tag", func() { 97 session := podmanTest.Podman([]string{"manifest", "create", "foobar"}) 98 session.WaitWithDefaultTimeout() 99 Expect(session).Should(Exit(0)) 100 session = podmanTest.Podman([]string{"manifest", "add", "foobar", "quay.io/libpod/busybox"}) 101 session.WaitWithDefaultTimeout() 102 Expect(session).Should(Exit(0)) 103 session = podmanTest.Podman([]string{"tag", "foobar", "foobar2"}) 104 session.WaitWithDefaultTimeout() 105 Expect(session).Should(Exit(0)) 106 session = podmanTest.Podman([]string{"manifest", "inspect", "foobar"}) 107 session.WaitWithDefaultTimeout() 108 Expect(session).Should(Exit(0)) 109 session2 := podmanTest.Podman([]string{"manifest", "inspect", "foobar2"}) 110 session2.WaitWithDefaultTimeout() 111 Expect(session2).Should(Exit(0)) 112 Expect(session2.OutputToString()).To(Equal(session.OutputToString())) 113 }) 114 115 It("podman manifest add --all", func() { 116 session := podmanTest.Podman([]string{"manifest", "create", "foo"}) 117 session.WaitWithDefaultTimeout() 118 Expect(session).Should(Exit(0)) 119 session = podmanTest.Podman([]string{"manifest", "add", "--all", "foo", imageList}) 120 session.WaitWithDefaultTimeout() 121 Expect(session).Should(Exit(0)) 122 session = podmanTest.Podman([]string{"manifest", "inspect", "foo"}) 123 session.WaitWithDefaultTimeout() 124 Expect(session).Should(Exit(0)) 125 Expect(session.OutputToString()).To(ContainSubstring(imageListAMD64InstanceDigest)) 126 Expect(session.OutputToString()).To(ContainSubstring(imageListARMInstanceDigest)) 127 Expect(session.OutputToString()).To(ContainSubstring(imageListARM64InstanceDigest)) 128 Expect(session.OutputToString()).To(ContainSubstring(imageListPPC64LEInstanceDigest)) 129 Expect(session.OutputToString()).To(ContainSubstring(imageListS390XInstanceDigest)) 130 }) 131 132 It("podman manifest add --os", func() { 133 session := podmanTest.Podman([]string{"manifest", "create", "foo"}) 134 session.WaitWithDefaultTimeout() 135 Expect(session).Should(Exit(0)) 136 session = podmanTest.Podman([]string{"manifest", "add", "--os", "bar", "foo", imageList}) 137 session.WaitWithDefaultTimeout() 138 Expect(session).Should(Exit(0)) 139 session = podmanTest.Podman([]string{"manifest", "inspect", "foo"}) 140 session.WaitWithDefaultTimeout() 141 Expect(session).Should(Exit(0)) 142 Expect(session.OutputToString()).To(ContainSubstring(`"os": "bar"`)) 143 }) 144 145 It("podman manifest annotate", func() { 146 SkipIfRemote("Not supporting annotate on remote connections") 147 session := podmanTest.Podman([]string{"manifest", "create", "foo"}) 148 session.WaitWithDefaultTimeout() 149 Expect(session).Should(Exit(0)) 150 session = podmanTest.Podman([]string{"manifest", "add", "foo", imageListInstance}) 151 session.WaitWithDefaultTimeout() 152 Expect(session).Should(Exit(0)) 153 session = podmanTest.Podman([]string{"manifest", "annotate", "--arch", "bar", "foo", imageListARM64InstanceDigest}) 154 session.WaitWithDefaultTimeout() 155 Expect(session).Should(Exit(0)) 156 session = podmanTest.Podman([]string{"manifest", "inspect", "foo"}) 157 session.WaitWithDefaultTimeout() 158 Expect(session).Should(Exit(0)) 159 Expect(session.OutputToString()).To(ContainSubstring(`"architecture": "bar"`)) 160 }) 161 162 It("podman manifest remove", func() { 163 session := podmanTest.Podman([]string{"manifest", "create", "foo"}) 164 session.WaitWithDefaultTimeout() 165 Expect(session).Should(Exit(0)) 166 session = podmanTest.Podman([]string{"manifest", "add", "--all", "foo", imageList}) 167 session.WaitWithDefaultTimeout() 168 Expect(session).Should(Exit(0)) 169 session = podmanTest.Podman([]string{"manifest", "inspect", "foo"}) 170 session.WaitWithDefaultTimeout() 171 Expect(session).Should(Exit(0)) 172 Expect(session.OutputToString()).To(ContainSubstring(imageListARM64InstanceDigest)) 173 session = podmanTest.Podman([]string{"manifest", "remove", "foo", imageListARM64InstanceDigest}) 174 session.WaitWithDefaultTimeout() 175 Expect(session).Should(Exit(0)) 176 session = podmanTest.Podman([]string{"manifest", "inspect", "foo"}) 177 session.WaitWithDefaultTimeout() 178 Expect(session).Should(Exit(0)) 179 Expect(session.OutputToString()).To(ContainSubstring(imageListAMD64InstanceDigest)) 180 Expect(session.OutputToString()).To(ContainSubstring(imageListARMInstanceDigest)) 181 Expect(session.OutputToString()).To(ContainSubstring(imageListPPC64LEInstanceDigest)) 182 Expect(session.OutputToString()).To(ContainSubstring(imageListS390XInstanceDigest)) 183 Expect(session.OutputToString()).To(Not(ContainSubstring(imageListARM64InstanceDigest))) 184 }) 185 186 It("podman manifest remove not-found", func() { 187 session := podmanTest.Podman([]string{"manifest", "create", "foo"}) 188 session.WaitWithDefaultTimeout() 189 Expect(session).Should(Exit(0)) 190 session = podmanTest.Podman([]string{"manifest", "add", "foo", imageList}) 191 session.WaitWithDefaultTimeout() 192 Expect(session).Should(Exit(0)) 193 session = podmanTest.Podman([]string{"manifest", "remove", "foo", "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"}) 194 session.WaitWithDefaultTimeout() 195 Expect(session).To(ExitWithError()) 196 197 session = podmanTest.Podman([]string{"manifest", "rm", "foo"}) 198 session.WaitWithDefaultTimeout() 199 Expect(session).Should(Exit(0)) 200 }) 201 202 It("podman manifest push", func() { 203 SkipIfRemote("manifest push to dir not supported in remote mode") 204 session := podmanTest.Podman([]string{"manifest", "create", "foo"}) 205 session.WaitWithDefaultTimeout() 206 Expect(session).Should(Exit(0)) 207 session = podmanTest.Podman([]string{"manifest", "add", "--all", "foo", imageList}) 208 session.WaitWithDefaultTimeout() 209 Expect(session).Should(Exit(0)) 210 dest := filepath.Join(podmanTest.TempDir, "pushed") 211 err := os.MkdirAll(dest, os.ModePerm) 212 Expect(err).To(BeNil()) 213 defer func() { 214 os.RemoveAll(dest) 215 }() 216 session = podmanTest.Podman([]string{"manifest", "push", "--all", "foo", "dir:" + dest}) 217 session.WaitWithDefaultTimeout() 218 Expect(session).Should(Exit(0)) 219 files, err := filepath.Glob(dest + string(os.PathSeparator) + "*") 220 Expect(err).To(BeNil()) 221 check := SystemExec("sha256sum", files) 222 check.WaitWithDefaultTimeout() 223 Expect(check).Should(Exit(0)) 224 prefix := "sha256:" 225 Expect(check.OutputToString()).To(ContainSubstring(strings.TrimPrefix(imageListAMD64InstanceDigest, prefix))) 226 Expect(check.OutputToString()).To(ContainSubstring(strings.TrimPrefix(imageListARMInstanceDigest, prefix))) 227 Expect(check.OutputToString()).To(ContainSubstring(strings.TrimPrefix(imageListPPC64LEInstanceDigest, prefix))) 228 Expect(check.OutputToString()).To(ContainSubstring(strings.TrimPrefix(imageListS390XInstanceDigest, prefix))) 229 Expect(check.OutputToString()).To(ContainSubstring(strings.TrimPrefix(imageListARM64InstanceDigest, prefix))) 230 }) 231 232 It("podman push --all", func() { 233 SkipIfRemote("manifest push to dir not supported in remote mode") 234 session := podmanTest.Podman([]string{"manifest", "create", "foo"}) 235 session.WaitWithDefaultTimeout() 236 Expect(session).Should(Exit(0)) 237 session = podmanTest.Podman([]string{"manifest", "add", "--all", "foo", imageList}) 238 session.WaitWithDefaultTimeout() 239 Expect(session).Should(Exit(0)) 240 dest := filepath.Join(podmanTest.TempDir, "pushed") 241 err := os.MkdirAll(dest, os.ModePerm) 242 Expect(err).To(BeNil()) 243 defer func() { 244 os.RemoveAll(dest) 245 }() 246 session = podmanTest.Podman([]string{"push", "foo", "dir:" + dest}) 247 session.WaitWithDefaultTimeout() 248 Expect(session).Should(Exit(0)) 249 files, err := filepath.Glob(dest + string(os.PathSeparator) + "*") 250 Expect(err).To(BeNil()) 251 check := SystemExec("sha256sum", files) 252 check.WaitWithDefaultTimeout() 253 Expect(check).Should(Exit(0)) 254 prefix := "sha256:" 255 Expect(check.OutputToString()).To(ContainSubstring(strings.TrimPrefix(imageListAMD64InstanceDigest, prefix))) 256 Expect(check.OutputToString()).To(ContainSubstring(strings.TrimPrefix(imageListARMInstanceDigest, prefix))) 257 Expect(check.OutputToString()).To(ContainSubstring(strings.TrimPrefix(imageListPPC64LEInstanceDigest, prefix))) 258 Expect(check.OutputToString()).To(ContainSubstring(strings.TrimPrefix(imageListS390XInstanceDigest, prefix))) 259 Expect(check.OutputToString()).To(ContainSubstring(strings.TrimPrefix(imageListARM64InstanceDigest, prefix))) 260 }) 261 262 It("podman manifest push --rm", func() { 263 SkipIfRemote("remote does not support --rm") 264 session := podmanTest.Podman([]string{"manifest", "create", "foo"}) 265 session.WaitWithDefaultTimeout() 266 Expect(session).Should(Exit(0)) 267 session = podmanTest.Podman([]string{"manifest", "add", "foo", imageList}) 268 session.WaitWithDefaultTimeout() 269 Expect(session).Should(Exit(0)) 270 dest := filepath.Join(podmanTest.TempDir, "pushed") 271 err := os.MkdirAll(dest, os.ModePerm) 272 Expect(err).To(BeNil()) 273 defer func() { 274 os.RemoveAll(dest) 275 }() 276 session = podmanTest.Podman([]string{"manifest", "push", "--purge", "foo", "dir:" + dest}) 277 session.WaitWithDefaultTimeout() 278 Expect(session).Should(Exit(0)) 279 session = podmanTest.Podman([]string{"manifest", "inspect", "foo"}) 280 session.WaitWithDefaultTimeout() 281 Expect(session).To(ExitWithError()) 282 283 session = podmanTest.Podman([]string{"manifest", "rm", "foo1", "foo2"}) 284 session.WaitWithDefaultTimeout() 285 Expect(session).To(ExitWithError()) 286 }) 287 288 It("podman manifest exists", func() { 289 manifestList := "manifest-list" 290 session := podmanTest.Podman([]string{"manifest", "create", manifestList}) 291 session.WaitWithDefaultTimeout() 292 Expect(session).Should(Exit(0)) 293 294 session = podmanTest.Podman([]string{"manifest", "exists", manifestList}) 295 session.WaitWithDefaultTimeout() 296 Expect(session).Should(Exit(0)) 297 298 session = podmanTest.Podman([]string{"manifest", "exists", "no-manifest"}) 299 session.WaitWithDefaultTimeout() 300 Expect(session).Should(Exit(1)) 301 }) 302 303 It("podman manifest rm should not remove referenced images", func() { 304 manifestList := "manifestlist" 305 imageName := "quay.io/libpod/busybox" 306 307 session := podmanTest.Podman([]string{"pull", imageName}) 308 session.WaitWithDefaultTimeout() 309 Expect(session).Should(Exit(0)) 310 311 session = podmanTest.Podman([]string{"manifest", "create", manifestList}) 312 session.WaitWithDefaultTimeout() 313 Expect(session).Should(Exit(0)) 314 315 session = podmanTest.Podman([]string{"manifest", "add", manifestList, imageName}) 316 session.WaitWithDefaultTimeout() 317 Expect(session).Should(Exit(0)) 318 319 session = podmanTest.Podman([]string{"manifest", "rm", manifestList}) 320 session.WaitWithDefaultTimeout() 321 Expect(session).Should(Exit(0)) 322 323 //image should still show up 324 session = podmanTest.Podman([]string{"images"}) 325 session.WaitWithDefaultTimeout() 326 Expect(session.OutputToString()).To(ContainSubstring(imageName)) 327 Expect(session).Should(Exit(0)) 328 }) 329 330 })