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