github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/test/e2e/load_test.go (about) 1 package integration 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 8 . "github.com/containers/podman/v2/test/utils" 9 . "github.com/onsi/ginkgo" 10 . "github.com/onsi/gomega" 11 ) 12 13 var _ = Describe("Podman load", func() { 14 var ( 15 tempdir string 16 err error 17 podmanTest *PodmanTestIntegration 18 ) 19 20 BeforeEach(func() { 21 tempdir, err = CreateTempDirInTempDir() 22 if err != nil { 23 os.Exit(1) 24 } 25 podmanTest = PodmanTestCreate(tempdir) 26 podmanTest.Setup() 27 podmanTest.AddImageToRWStore(ALPINE) 28 }) 29 30 AfterEach(func() { 31 podmanTest.Cleanup() 32 f := CurrentGinkgoTestDescription() 33 processTestResult(f) 34 35 }) 36 37 It("podman load input flag", func() { 38 outfile := filepath.Join(podmanTest.TempDir, "alpine.tar") 39 40 images := podmanTest.Podman([]string{"images"}) 41 images.WaitWithDefaultTimeout() 42 fmt.Println(images.OutputToStringArray()) 43 44 save := podmanTest.Podman([]string{"save", "-o", outfile, ALPINE}) 45 save.WaitWithDefaultTimeout() 46 Expect(save.ExitCode()).To(Equal(0)) 47 48 rmi := podmanTest.Podman([]string{"rmi", ALPINE}) 49 rmi.WaitWithDefaultTimeout() 50 Expect(rmi.ExitCode()).To(Equal(0)) 51 52 result := podmanTest.Podman([]string{"load", "-i", outfile}) 53 result.WaitWithDefaultTimeout() 54 Expect(result.ExitCode()).To(Equal(0)) 55 }) 56 57 It("podman load compressed tar file", func() { 58 outfile := filepath.Join(podmanTest.TempDir, "alpine.tar") 59 60 save := podmanTest.Podman([]string{"save", "-o", outfile, ALPINE}) 61 save.WaitWithDefaultTimeout() 62 Expect(save.ExitCode()).To(Equal(0)) 63 64 compress := SystemExec("gzip", []string{outfile}) 65 Expect(compress.ExitCode()).To(Equal(0)) 66 outfile = outfile + ".gz" 67 68 rmi := podmanTest.Podman([]string{"rmi", ALPINE}) 69 rmi.WaitWithDefaultTimeout() 70 Expect(rmi.ExitCode()).To(Equal(0)) 71 72 result := podmanTest.Podman([]string{"load", "-i", outfile}) 73 result.WaitWithDefaultTimeout() 74 Expect(result.ExitCode()).To(Equal(0)) 75 }) 76 77 It("podman load oci-archive image", func() { 78 outfile := filepath.Join(podmanTest.TempDir, "alpine.tar") 79 80 save := podmanTest.Podman([]string{"save", "-o", outfile, "--format", "oci-archive", ALPINE}) 81 save.WaitWithDefaultTimeout() 82 Expect(save.ExitCode()).To(Equal(0)) 83 84 rmi := podmanTest.Podman([]string{"rmi", ALPINE}) 85 rmi.WaitWithDefaultTimeout() 86 Expect(rmi.ExitCode()).To(Equal(0)) 87 88 result := podmanTest.Podman([]string{"load", "-i", outfile}) 89 result.WaitWithDefaultTimeout() 90 Expect(result.ExitCode()).To(Equal(0)) 91 }) 92 93 It("podman load oci-archive with signature", func() { 94 outfile := filepath.Join(podmanTest.TempDir, "alpine.tar") 95 96 save := podmanTest.Podman([]string{"save", "-o", outfile, "--format", "oci-archive", ALPINE}) 97 save.WaitWithDefaultTimeout() 98 Expect(save.ExitCode()).To(Equal(0)) 99 100 rmi := podmanTest.Podman([]string{"rmi", ALPINE}) 101 rmi.WaitWithDefaultTimeout() 102 Expect(rmi.ExitCode()).To(Equal(0)) 103 104 result := podmanTest.Podman([]string{"load", "--signature-policy", "/etc/containers/policy.json", "-i", outfile}) 105 result.WaitWithDefaultTimeout() 106 Expect(result.ExitCode()).To(Equal(0)) 107 }) 108 109 It("podman load with quiet flag", func() { 110 outfile := filepath.Join(podmanTest.TempDir, "alpine.tar") 111 112 save := podmanTest.Podman([]string{"save", "-o", outfile, ALPINE}) 113 save.WaitWithDefaultTimeout() 114 Expect(save.ExitCode()).To(Equal(0)) 115 116 rmi := podmanTest.Podman([]string{"rmi", ALPINE}) 117 rmi.WaitWithDefaultTimeout() 118 Expect(rmi.ExitCode()).To(Equal(0)) 119 120 result := podmanTest.Podman([]string{"load", "-q", "-i", outfile}) 121 result.WaitWithDefaultTimeout() 122 Expect(result.ExitCode()).To(Equal(0)) 123 }) 124 125 It("podman load directory", func() { 126 SkipIfRemote("Remote does not support loading directories") 127 outdir := filepath.Join(podmanTest.TempDir, "alpine") 128 129 save := podmanTest.Podman([]string{"save", "--format", "oci-dir", "-o", outdir, ALPINE}) 130 save.WaitWithDefaultTimeout() 131 Expect(save.ExitCode()).To(Equal(0)) 132 133 rmi := podmanTest.Podman([]string{"rmi", ALPINE}) 134 rmi.WaitWithDefaultTimeout() 135 Expect(rmi.ExitCode()).To(Equal(0)) 136 137 result := podmanTest.Podman([]string{"load", "-i", outdir}) 138 result.WaitWithDefaultTimeout() 139 Expect(result.ExitCode()).To(Equal(0)) 140 }) 141 142 It("podman-remote load directory", func() { 143 // Remote-only test looking for the specific remote error 144 // message when trying to load a directory. 145 if !IsRemote() { 146 Skip("Remote only test") 147 } 148 149 result := podmanTest.Podman([]string{"load", "-i", podmanTest.TempDir}) 150 result.WaitWithDefaultTimeout() 151 Expect(result.ExitCode()).To(Equal(125)) 152 153 errMsg := fmt.Sprintf("remote client supports archives only but %q is a directory", podmanTest.TempDir) 154 found, _ := result.ErrorGrepString(errMsg) 155 Expect(found).Should(BeTrue()) 156 }) 157 158 It("podman load bogus file", func() { 159 save := podmanTest.Podman([]string{"load", "-i", "foobar.tar"}) 160 save.WaitWithDefaultTimeout() 161 Expect(save).To(ExitWithError()) 162 }) 163 164 It("podman load multiple tags", func() { 165 if podmanTest.Host.Arch == "ppc64le" { 166 Skip("skip on ppc64le") 167 } 168 outfile := filepath.Join(podmanTest.TempDir, "alpine.tar") 169 alpVersion := "quay.io/libpod/alpine:3.2" 170 171 pull := podmanTest.Podman([]string{"pull", alpVersion}) 172 pull.WaitWithDefaultTimeout() 173 Expect(pull.ExitCode()).To(Equal(0)) 174 175 save := podmanTest.Podman([]string{"save", "-o", outfile, ALPINE, alpVersion}) 176 save.WaitWithDefaultTimeout() 177 Expect(save.ExitCode()).To(Equal(0)) 178 179 rmi := podmanTest.Podman([]string{"rmi", ALPINE, alpVersion}) 180 rmi.WaitWithDefaultTimeout() 181 Expect(rmi.ExitCode()).To(Equal(0)) 182 183 result := podmanTest.Podman([]string{"load", "-i", outfile}) 184 result.WaitWithDefaultTimeout() 185 Expect(result.ExitCode()).To(Equal(0)) 186 187 inspect := podmanTest.Podman([]string{"inspect", ALPINE}) 188 inspect.WaitWithDefaultTimeout() 189 Expect(result.ExitCode()).To(Equal(0)) 190 inspect = podmanTest.Podman([]string{"inspect", alpVersion}) 191 inspect.WaitWithDefaultTimeout() 192 Expect(result.ExitCode()).To(Equal(0)) 193 }) 194 195 It("podman load localhost registry from scratch", func() { 196 outfile := filepath.Join(podmanTest.TempDir, "load_test.tar.gz") 197 setup := podmanTest.Podman([]string{"tag", ALPINE, "hello:world"}) 198 setup.WaitWithDefaultTimeout() 199 Expect(setup.ExitCode()).To(Equal(0)) 200 201 setup = podmanTest.Podman([]string{"save", "-o", outfile, "--format", "oci-archive", "hello:world"}) 202 setup.WaitWithDefaultTimeout() 203 Expect(setup.ExitCode()).To(Equal(0)) 204 205 setup = podmanTest.Podman([]string{"rmi", "hello:world"}) 206 setup.WaitWithDefaultTimeout() 207 Expect(setup.ExitCode()).To(Equal(0)) 208 209 load := podmanTest.Podman([]string{"load", "-i", outfile}) 210 load.WaitWithDefaultTimeout() 211 Expect(load.ExitCode()).To(Equal(0)) 212 213 result := podmanTest.Podman([]string{"images", "hello:world"}) 214 result.WaitWithDefaultTimeout() 215 Expect(result.LineInOutputContains("docker")).To(Not(BeTrue())) 216 Expect(result.LineInOutputContains("localhost")).To(BeTrue()) 217 }) 218 219 It("podman load localhost registry from scratch and :latest", func() { 220 outfile := filepath.Join(podmanTest.TempDir, "load_test.tar.gz") 221 222 setup := podmanTest.Podman([]string{"tag", ALPINE, "hello"}) 223 setup.WaitWithDefaultTimeout() 224 Expect(setup.ExitCode()).To(Equal(0)) 225 226 setup = podmanTest.Podman([]string{"save", "-o", outfile, "--format", "oci-archive", "hello"}) 227 setup.WaitWithDefaultTimeout() 228 Expect(setup.ExitCode()).To(Equal(0)) 229 230 setup = podmanTest.Podman([]string{"rmi", "hello"}) 231 setup.WaitWithDefaultTimeout() 232 Expect(setup.ExitCode()).To(Equal(0)) 233 234 load := podmanTest.Podman([]string{"load", "-i", outfile}) 235 load.WaitWithDefaultTimeout() 236 Expect(load.ExitCode()).To(Equal(0)) 237 238 result := podmanTest.Podman([]string{"images", "hello:latest"}) 239 result.WaitWithDefaultTimeout() 240 Expect(result.LineInOutputContains("docker")).To(Not(BeTrue())) 241 Expect(result.LineInOutputContains("localhost")).To(BeTrue()) 242 }) 243 244 It("podman load localhost registry from dir", func() { 245 SkipIfRemote("podman-remote does not support loading directories") 246 outfile := filepath.Join(podmanTest.TempDir, "load") 247 248 setup := podmanTest.Podman([]string{"tag", ALPINE, "hello:world"}) 249 setup.WaitWithDefaultTimeout() 250 Expect(setup.ExitCode()).To(Equal(0)) 251 252 setup = podmanTest.Podman([]string{"save", "-o", outfile, "--format", "oci-dir", "hello:world"}) 253 setup.WaitWithDefaultTimeout() 254 Expect(setup.ExitCode()).To(Equal(0)) 255 256 setup = podmanTest.Podman([]string{"rmi", "hello:world"}) 257 setup.WaitWithDefaultTimeout() 258 Expect(setup.ExitCode()).To(Equal(0)) 259 260 load := podmanTest.Podman([]string{"load", "-i", outfile}) 261 load.WaitWithDefaultTimeout() 262 Expect(load.ExitCode()).To(Equal(0)) 263 264 result := podmanTest.Podman([]string{"images", "load:latest"}) 265 result.WaitWithDefaultTimeout() 266 Expect(result.LineInOutputContains("docker")).To(Not(BeTrue())) 267 Expect(result.LineInOutputContains("localhost")).To(BeTrue()) 268 }) 269 270 It("podman load xz compressed image", func() { 271 outfile := filepath.Join(podmanTest.TempDir, "alp.tar") 272 273 save := podmanTest.Podman([]string{"save", "-o", outfile, ALPINE}) 274 save.WaitWithDefaultTimeout() 275 Expect(save.ExitCode()).To(Equal(0)) 276 session := SystemExec("xz", []string{outfile}) 277 Expect(session.ExitCode()).To(Equal(0)) 278 279 rmi := podmanTest.Podman([]string{"rmi", ALPINE}) 280 rmi.WaitWithDefaultTimeout() 281 Expect(rmi.ExitCode()).To(Equal(0)) 282 283 result := podmanTest.Podman([]string{"load", "-i", outfile + ".xz"}) 284 result.WaitWithDefaultTimeout() 285 Expect(result.ExitCode()).To(Equal(0)) 286 }) 287 288 It("podman load multi-image archive", func() { 289 result := podmanTest.Podman([]string{"load", "-i", "./testdata/image/docker-two-images.tar.xz"}) 290 result.WaitWithDefaultTimeout() 291 Expect(result.ExitCode()).To(Equal(0)) 292 Expect(result.LineInOutputContains("example.com/empty:latest")).To(BeTrue()) 293 Expect(result.LineInOutputContains("example.com/empty/but:different")).To(BeTrue()) 294 }) 295 })