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  })