github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/test/e2e/import_test.go (about)

     1  package integration
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  
     7  	. "github.com/containers/podman/v2/test/utils"
     8  	. "github.com/onsi/ginkgo"
     9  	. "github.com/onsi/gomega"
    10  )
    11  
    12  var _ = Describe("Podman import", func() {
    13  	var (
    14  		tempdir    string
    15  		err        error
    16  		podmanTest *PodmanTestIntegration
    17  	)
    18  
    19  	BeforeEach(func() {
    20  		SkipIfRemote("FIXME: These look like it is supposed to work in remote")
    21  		tempdir, err = CreateTempDirInTempDir()
    22  		if err != nil {
    23  			os.Exit(1)
    24  		}
    25  		podmanTest = PodmanTestCreate(tempdir)
    26  		podmanTest.Setup()
    27  		podmanTest.SeedImages()
    28  	})
    29  
    30  	AfterEach(func() {
    31  		podmanTest.Cleanup()
    32  		f := CurrentGinkgoTestDescription()
    33  		processTestResult(f)
    34  
    35  	})
    36  
    37  	It("podman import with source and reference", func() {
    38  		outfile := filepath.Join(podmanTest.TempDir, "container.tar")
    39  		_, ec, cid := podmanTest.RunLsContainer("")
    40  		Expect(ec).To(Equal(0))
    41  
    42  		export := podmanTest.Podman([]string{"export", "-o", outfile, cid})
    43  		export.WaitWithDefaultTimeout()
    44  		Expect(export.ExitCode()).To(Equal(0))
    45  
    46  		importImage := podmanTest.Podman([]string{"import", outfile, "foobar.com/imported-image:latest"})
    47  		importImage.WaitWithDefaultTimeout()
    48  		Expect(importImage.ExitCode()).To(Equal(0))
    49  
    50  		results := podmanTest.Podman([]string{"inspect", "--type", "image", "foobar.com/imported-image:latest"})
    51  		results.WaitWithDefaultTimeout()
    52  		Expect(results.ExitCode()).To(Equal(0))
    53  	})
    54  
    55  	It("podman import without reference", func() {
    56  		outfile := filepath.Join(podmanTest.TempDir, "container.tar")
    57  		_, ec, cid := podmanTest.RunLsContainer("")
    58  		Expect(ec).To(Equal(0))
    59  
    60  		export := podmanTest.Podman([]string{"export", "-o", outfile, cid})
    61  		export.WaitWithDefaultTimeout()
    62  		Expect(export.ExitCode()).To(Equal(0))
    63  
    64  		importImage := podmanTest.Podman([]string{"import", outfile})
    65  		importImage.WaitWithDefaultTimeout()
    66  		Expect(importImage.ExitCode()).To(Equal(0))
    67  
    68  		// tag the image which proves it is in R/W storage
    69  		tag := podmanTest.Podman([]string{"tag", importImage.OutputToString(), "foo"})
    70  		tag.WaitWithDefaultTimeout()
    71  		Expect(tag.ExitCode()).To(BeZero())
    72  	})
    73  
    74  	It("podman import with message flag", func() {
    75  		outfile := filepath.Join(podmanTest.TempDir, "container.tar")
    76  		_, ec, cid := podmanTest.RunLsContainer("")
    77  		Expect(ec).To(Equal(0))
    78  
    79  		export := podmanTest.Podman([]string{"export", "-o", outfile, cid})
    80  		export.WaitWithDefaultTimeout()
    81  		Expect(export.ExitCode()).To(Equal(0))
    82  
    83  		importImage := podmanTest.Podman([]string{"import", "--message", "importing container test message", outfile, "imported-image"})
    84  		importImage.WaitWithDefaultTimeout()
    85  		Expect(importImage.ExitCode()).To(Equal(0))
    86  
    87  		results := podmanTest.Podman([]string{"history", "imported-image", "--format", "{{.Comment}}"})
    88  		results.WaitWithDefaultTimeout()
    89  		Expect(results.ExitCode()).To(Equal(0))
    90  		Expect(results.LineInOutputStartsWith("importing container test message")).To(BeTrue())
    91  	})
    92  
    93  	It("podman import with change flag CMD=<path>", func() {
    94  		outfile := filepath.Join(podmanTest.TempDir, "container.tar")
    95  		_, ec, cid := podmanTest.RunLsContainer("")
    96  		Expect(ec).To(Equal(0))
    97  
    98  		export := podmanTest.Podman([]string{"export", "-o", outfile, cid})
    99  		export.WaitWithDefaultTimeout()
   100  		Expect(export.ExitCode()).To(Equal(0))
   101  
   102  		importImage := podmanTest.Podman([]string{"import", "--change", "CMD=/bin/bash", outfile, "imported-image"})
   103  		importImage.WaitWithDefaultTimeout()
   104  		Expect(importImage.ExitCode()).To(Equal(0))
   105  
   106  		results := podmanTest.Podman([]string{"inspect", "imported-image"})
   107  		results.WaitWithDefaultTimeout()
   108  		Expect(results.ExitCode()).To(Equal(0))
   109  		imageData := results.InspectImageJSON()
   110  		Expect(imageData[0].Config.Cmd[0]).To(Equal("/bin/sh"))
   111  		Expect(imageData[0].Config.Cmd[1]).To(Equal("-c"))
   112  		Expect(imageData[0].Config.Cmd[2]).To(Equal("/bin/bash"))
   113  	})
   114  
   115  	It("podman import with change flag CMD <path>", func() {
   116  		outfile := filepath.Join(podmanTest.TempDir, "container.tar")
   117  		_, ec, cid := podmanTest.RunLsContainer("")
   118  		Expect(ec).To(Equal(0))
   119  
   120  		export := podmanTest.Podman([]string{"export", "-o", outfile, cid})
   121  		export.WaitWithDefaultTimeout()
   122  		Expect(export.ExitCode()).To(Equal(0))
   123  
   124  		importImage := podmanTest.Podman([]string{"import", "--change", "CMD /bin/sh", outfile, "imported-image"})
   125  		importImage.WaitWithDefaultTimeout()
   126  		Expect(importImage.ExitCode()).To(Equal(0))
   127  
   128  		results := podmanTest.Podman([]string{"inspect", "imported-image"})
   129  		results.WaitWithDefaultTimeout()
   130  		Expect(results.ExitCode()).To(Equal(0))
   131  		imageData := results.InspectImageJSON()
   132  		Expect(imageData[0].Config.Cmd[0]).To(Equal("/bin/sh"))
   133  		Expect(imageData[0].Config.Cmd[1]).To(Equal("-c"))
   134  		Expect(imageData[0].Config.Cmd[2]).To(Equal("/bin/sh"))
   135  	})
   136  
   137  	It("podman import with change flag CMD [\"path\",\"path'\"", func() {
   138  		outfile := filepath.Join(podmanTest.TempDir, "container.tar")
   139  		_, ec, cid := podmanTest.RunLsContainer("")
   140  		Expect(ec).To(Equal(0))
   141  
   142  		export := podmanTest.Podman([]string{"export", "-o", outfile, cid})
   143  		export.WaitWithDefaultTimeout()
   144  		Expect(export.ExitCode()).To(Equal(0))
   145  
   146  		importImage := podmanTest.Podman([]string{"import", "--change", "CMD [\"/bin/bash\"]", outfile, "imported-image"})
   147  		importImage.WaitWithDefaultTimeout()
   148  		Expect(importImage.ExitCode()).To(Equal(0))
   149  
   150  		results := podmanTest.Podman([]string{"inspect", "imported-image"})
   151  		results.WaitWithDefaultTimeout()
   152  		Expect(results.ExitCode()).To(Equal(0))
   153  		imageData := results.InspectImageJSON()
   154  		Expect(imageData[0].Config.Cmd[0]).To(Equal("/bin/bash"))
   155  	})
   156  
   157  	It("podman import with signature", func() {
   158  		outfile := filepath.Join(podmanTest.TempDir, "container.tar")
   159  		_, ec, cid := podmanTest.RunLsContainer("")
   160  		Expect(ec).To(Equal(0))
   161  
   162  		export := podmanTest.Podman([]string{"export", "-o", outfile, cid})
   163  		export.WaitWithDefaultTimeout()
   164  		Expect(export.ExitCode()).To(Equal(0))
   165  
   166  		importImage := podmanTest.Podman([]string{"import", "--signature-policy", "/no/such/file", outfile})
   167  		importImage.WaitWithDefaultTimeout()
   168  		Expect(importImage.ExitCode()).To(Not(Equal(0)))
   169  
   170  		result := podmanTest.Podman([]string{"import", "--signature-policy", "/etc/containers/policy.json", outfile})
   171  		result.WaitWithDefaultTimeout()
   172  		Expect(result.ExitCode()).To(Equal(0))
   173  	})
   174  })