github.com/containers/podman/v5@v5.1.0-rc1/test/e2e/import_test.go (about) 1 package integration 2 3 import ( 4 "path/filepath" 5 6 . "github.com/containers/podman/v5/test/utils" 7 . "github.com/onsi/ginkgo/v2" 8 . "github.com/onsi/gomega" 9 . "github.com/onsi/gomega/gexec" 10 ) 11 12 var _ = Describe("Podman import", func() { 13 14 It("podman import with source and reference", func() { 15 outfile := filepath.Join(podmanTest.TempDir, "container.tar") 16 _, ec, cid := podmanTest.RunLsContainer("") 17 Expect(ec).To(Equal(0)) 18 19 export := podmanTest.Podman([]string{"export", "-o", outfile, cid}) 20 export.WaitWithDefaultTimeout() 21 Expect(export).Should(ExitCleanly()) 22 23 importImage := podmanTest.Podman([]string{"import", outfile, "foobar.com/imported-image:latest"}) 24 importImage.WaitWithDefaultTimeout() 25 Expect(importImage).Should(Exit(0)) 26 if !IsRemote() { 27 messages := importImage.ErrorToString() 28 Expect(messages).Should(ContainSubstring("Getting image source signatures")) 29 Expect(messages).Should(ContainSubstring("Copying blob")) 30 Expect(messages).Should(ContainSubstring("Writing manifest to image destination")) 31 Expect(messages).Should(Not(ContainSubstring("level=")), "Unexpected logrus messages in stderr") 32 } 33 34 results := podmanTest.Podman([]string{"inspect", "--type", "image", "foobar.com/imported-image:latest"}) 35 results.WaitWithDefaultTimeout() 36 Expect(results).Should(ExitCleanly()) 37 }) 38 39 It("podman import with custom os, arch and variant", func() { 40 outfile := filepath.Join(podmanTest.TempDir, "container.tar") 41 _, ec, cid := podmanTest.RunLsContainer("") 42 Expect(ec).To(Equal(0)) 43 44 export := podmanTest.Podman([]string{"export", "-o", outfile, cid}) 45 export.WaitWithDefaultTimeout() 46 Expect(export).Should(ExitCleanly()) 47 48 importImage := podmanTest.Podman([]string{"import", "-q", "--os", "testos", "--arch", "testarch", outfile, "foobar.com/imported-image:latest"}) 49 importImage.WaitWithDefaultTimeout() 50 Expect(importImage).Should(ExitCleanly()) 51 52 results := podmanTest.Podman([]string{"inspect", "--type", "image", "foobar.com/imported-image:latest"}) 53 results.WaitWithDefaultTimeout() 54 Expect(results).Should(ExitCleanly()) 55 Expect(results.OutputToString()).To(ContainSubstring("testos")) 56 Expect(results.OutputToString()).To(ContainSubstring("testarch")) 57 }) 58 59 It("podman import without reference", func() { 60 outfile := filepath.Join(podmanTest.TempDir, "container.tar") 61 _, ec, cid := podmanTest.RunLsContainer("") 62 Expect(ec).To(Equal(0)) 63 64 export := podmanTest.Podman([]string{"export", "-o", outfile, cid}) 65 export.WaitWithDefaultTimeout() 66 Expect(export).Should(ExitCleanly()) 67 68 importImage := podmanTest.Podman([]string{"import", "-q", outfile}) 69 importImage.WaitWithDefaultTimeout() 70 Expect(importImage).Should(ExitCleanly()) 71 72 // tag the image which proves it is in R/W storage 73 tag := podmanTest.Podman([]string{"tag", importImage.OutputToString(), "foo"}) 74 tag.WaitWithDefaultTimeout() 75 Expect(tag).Should(ExitCleanly()) 76 }) 77 78 It("podman import with message flag", func() { 79 outfile := filepath.Join(podmanTest.TempDir, "container.tar") 80 _, ec, cid := podmanTest.RunLsContainer("") 81 Expect(ec).To(Equal(0)) 82 83 export := podmanTest.Podman([]string{"export", "-o", outfile, cid}) 84 export.WaitWithDefaultTimeout() 85 Expect(export).Should(ExitCleanly()) 86 87 importImage := podmanTest.Podman([]string{"import", "-q", "--message", "importing container test message", outfile, "imported-image"}) 88 importImage.WaitWithDefaultTimeout() 89 Expect(importImage).Should(ExitCleanly()) 90 91 results := podmanTest.Podman([]string{"history", "imported-image", "--format", "{{.Comment}}"}) 92 results.WaitWithDefaultTimeout() 93 Expect(results).Should(ExitCleanly()) 94 Expect(results.OutputToStringArray()).To(ContainElement(HavePrefix("importing container test message"))) 95 }) 96 97 It("podman import with change flag CMD=<path>", func() { 98 outfile := filepath.Join(podmanTest.TempDir, "container.tar") 99 _, ec, cid := podmanTest.RunLsContainer("") 100 Expect(ec).To(Equal(0)) 101 102 export := podmanTest.Podman([]string{"export", "-o", outfile, cid}) 103 export.WaitWithDefaultTimeout() 104 Expect(export).Should(ExitCleanly()) 105 106 importImage := podmanTest.Podman([]string{"import", "-q", "--change", "CMD=/bin/bash", outfile, "imported-image"}) 107 importImage.WaitWithDefaultTimeout() 108 Expect(importImage).Should(ExitCleanly()) 109 110 results := podmanTest.Podman([]string{"inspect", "imported-image"}) 111 results.WaitWithDefaultTimeout() 112 Expect(results).Should(ExitCleanly()) 113 imageData := results.InspectImageJSON() 114 Expect(imageData[0].Config.Cmd[0]).To(Equal("/bin/sh")) 115 Expect(imageData[0].Config.Cmd[1]).To(Equal("-c")) 116 Expect(imageData[0].Config.Cmd[2]).To(Equal("/bin/bash")) 117 }) 118 119 It("podman import with change flag CMD <path>", func() { 120 outfile := filepath.Join(podmanTest.TempDir, "container.tar") 121 _, ec, cid := podmanTest.RunLsContainer("") 122 Expect(ec).To(Equal(0)) 123 124 export := podmanTest.Podman([]string{"export", "-o", outfile, cid}) 125 export.WaitWithDefaultTimeout() 126 Expect(export).Should(ExitCleanly()) 127 128 importImage := podmanTest.Podman([]string{"import", "-q", "--change", "CMD /bin/sh", outfile, "imported-image"}) 129 importImage.WaitWithDefaultTimeout() 130 Expect(importImage).Should(ExitCleanly()) 131 132 results := podmanTest.Podman([]string{"inspect", "imported-image"}) 133 results.WaitWithDefaultTimeout() 134 Expect(results).Should(ExitCleanly()) 135 imageData := results.InspectImageJSON() 136 Expect(imageData[0].Config.Cmd[0]).To(Equal("/bin/sh")) 137 Expect(imageData[0].Config.Cmd[1]).To(Equal("-c")) 138 Expect(imageData[0].Config.Cmd[2]).To(Equal("/bin/sh")) 139 }) 140 141 It("podman import with change flag CMD [\"path\",\"path'\"", func() { 142 outfile := filepath.Join(podmanTest.TempDir, "container.tar") 143 _, ec, cid := podmanTest.RunLsContainer("") 144 Expect(ec).To(Equal(0)) 145 146 export := podmanTest.Podman([]string{"export", "-o", outfile, cid}) 147 export.WaitWithDefaultTimeout() 148 Expect(export).Should(ExitCleanly()) 149 150 importImage := podmanTest.Podman([]string{"import", "-q", "--change", "CMD [\"/bin/bash\"]", outfile, "imported-image"}) 151 importImage.WaitWithDefaultTimeout() 152 Expect(importImage).Should(ExitCleanly()) 153 154 results := podmanTest.Podman([]string{"inspect", "imported-image"}) 155 results.WaitWithDefaultTimeout() 156 Expect(results).Should(ExitCleanly()) 157 imageData := results.InspectImageJSON() 158 Expect(imageData[0].Config.Cmd[0]).To(Equal("/bin/bash")) 159 }) 160 161 It("podman import with signature", func() { 162 SkipIfRemote("--signature-policy N/A for remote") 163 164 outfile := filepath.Join(podmanTest.TempDir, "container.tar") 165 _, ec, cid := podmanTest.RunLsContainer("") 166 Expect(ec).To(Equal(0)) 167 168 export := podmanTest.Podman([]string{"export", "-o", outfile, cid}) 169 export.WaitWithDefaultTimeout() 170 Expect(export).Should(ExitCleanly()) 171 172 importImage := podmanTest.Podman([]string{"import", "-q", "--signature-policy", "/no/such/file", outfile}) 173 importImage.WaitWithDefaultTimeout() 174 Expect(importImage).To(ExitWithError(125, "open /no/such/file: no such file or directory")) 175 176 result := podmanTest.Podman([]string{"import", "-q", "--signature-policy", "/etc/containers/policy.json", outfile}) 177 result.WaitWithDefaultTimeout() 178 Expect(result).Should(ExitCleanly()) 179 }) 180 })