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

     1  package integration
     2  
     3  import (
     4  	"os"
     5  	"strings"
     6  
     7  	. "github.com/containers/podman/v2/test/utils"
     8  	. "github.com/onsi/ginkgo"
     9  	. "github.com/onsi/gomega"
    10  	"github.com/opencontainers/selinux/go-selinux"
    11  )
    12  
    13  var _ = Describe("Podman inspect", 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.SeedImages()
    28  	})
    29  
    30  	AfterEach(func() {
    31  		podmanTest.Cleanup()
    32  		f := CurrentGinkgoTestDescription()
    33  		processTestResult(f)
    34  
    35  	})
    36  
    37  	It("podman inspect alpine image", func() {
    38  		session := podmanTest.Podman([]string{"inspect", "--format=json", ALPINE})
    39  		session.WaitWithDefaultTimeout()
    40  		Expect(session.ExitCode()).To(Equal(0))
    41  		Expect(session.IsJSONOutputValid()).To(BeTrue())
    42  		imageData := session.InspectImageJSON()
    43  		Expect(imageData[0].RepoTags[0]).To(Equal("quay.io/libpod/alpine:latest"))
    44  	})
    45  
    46  	It("podman inspect bogus container", func() {
    47  		session := podmanTest.Podman([]string{"inspect", "foobar4321"})
    48  		session.WaitWithDefaultTimeout()
    49  		Expect(session).To(ExitWithError())
    50  	})
    51  
    52  	It("podman inspect with GO format", func() {
    53  		session := podmanTest.Podman([]string{"inspect", "--format", "{{.ID}}", ALPINE})
    54  		session.WaitWithDefaultTimeout()
    55  		Expect(session.ExitCode()).To(Equal(0))
    56  
    57  		result := podmanTest.Podman([]string{"images", "-q", "--no-trunc", ALPINE})
    58  		result.WaitWithDefaultTimeout()
    59  		Expect(session.ExitCode()).To(Equal(0))
    60  		Expect(strings.Contains(result.OutputToString(), session.OutputToString()))
    61  	})
    62  
    63  	It("podman inspect specified type", func() {
    64  		session := podmanTest.Podman([]string{"inspect", "--type", "image", ALPINE})
    65  		session.WaitWithDefaultTimeout()
    66  		Expect(session.ExitCode()).To(Equal(0))
    67  	})
    68  
    69  	It("podman inspect container with GO format for ConmonPidFile", func() {
    70  		session, ec, _ := podmanTest.RunLsContainer("test1")
    71  		Expect(ec).To(Equal(0))
    72  
    73  		session = podmanTest.Podman([]string{"inspect", "--format", "{{.ConmonPidFile}}", "test1"})
    74  		session.WaitWithDefaultTimeout()
    75  		Expect(session.ExitCode()).To(Equal(0))
    76  	})
    77  
    78  	It("podman inspect container with size", func() {
    79  		_, ec, _ := podmanTest.RunLsContainer("sizetest")
    80  		Expect(ec).To(Equal(0))
    81  
    82  		result := podmanTest.Podman([]string{"inspect", "--size", "sizetest"})
    83  		result.WaitWithDefaultTimeout()
    84  		Expect(result.ExitCode()).To(Equal(0))
    85  		conData := result.InspectContainerToJSON()
    86  		Expect(conData[0].SizeRootFs).To(BeNumerically(">", 0))
    87  		Expect(*conData[0].SizeRw).To(BeNumerically(">=", 0))
    88  	})
    89  
    90  	It("podman inspect container and image", func() {
    91  		ls, ec, _ := podmanTest.RunLsContainer("")
    92  		Expect(ec).To(Equal(0))
    93  		cid := ls.OutputToString()
    94  
    95  		result := podmanTest.Podman([]string{"inspect", "--format={{.ID}}", cid, ALPINE})
    96  		result.WaitWithDefaultTimeout()
    97  		Expect(result.ExitCode()).To(Equal(0))
    98  		Expect(len(result.OutputToStringArray())).To(Equal(2))
    99  	})
   100  
   101  	It("podman inspect container and filter for Image{ID}", func() {
   102  		ls, ec, _ := podmanTest.RunLsContainer("")
   103  		Expect(ec).To(Equal(0))
   104  		cid := ls.OutputToString()
   105  
   106  		result := podmanTest.Podman([]string{"inspect", "--format={{.ImageID}}", cid})
   107  		result.WaitWithDefaultTimeout()
   108  		Expect(result.ExitCode()).To(Equal(0))
   109  		Expect(len(result.OutputToStringArray())).To(Equal(1))
   110  
   111  		result = podmanTest.Podman([]string{"inspect", "--format={{.Image}}", cid})
   112  		result.WaitWithDefaultTimeout()
   113  		Expect(result.ExitCode()).To(Equal(0))
   114  		Expect(len(result.OutputToStringArray())).To(Equal(1))
   115  	})
   116  
   117  	It("podman inspect container and filter for CreateCommand", func() {
   118  		ls, ec, _ := podmanTest.RunLsContainer("")
   119  		Expect(ec).To(Equal(0))
   120  		cid := ls.OutputToString()
   121  
   122  		result := podmanTest.Podman([]string{"inspect", "--format={{.Config.CreateCommand}}", cid})
   123  		result.WaitWithDefaultTimeout()
   124  		Expect(result.ExitCode()).To(Equal(0))
   125  		Expect(len(result.OutputToStringArray())).To(Equal(1))
   126  	})
   127  
   128  	It("podman inspect -l with additional input should fail", func() {
   129  		SkipIfRemote("--latest flag n/a")
   130  		result := podmanTest.Podman([]string{"inspect", "-l", "1234foobar"})
   131  		result.WaitWithDefaultTimeout()
   132  		Expect(result.ExitCode()).To(Equal(125))
   133  	})
   134  
   135  	It("podman inspect with mount filters", func() {
   136  
   137  		ctrSession := podmanTest.Podman([]string{"create", "--name", "test", "-v", "/tmp:/test1", ALPINE, "top"})
   138  		ctrSession.WaitWithDefaultTimeout()
   139  		Expect(ctrSession.ExitCode()).To(Equal(0))
   140  
   141  		inspectSource := podmanTest.Podman([]string{"inspect", "test", "--format", "{{(index .Mounts 0).Source}}"})
   142  		inspectSource.WaitWithDefaultTimeout()
   143  		Expect(inspectSource.ExitCode()).To(Equal(0))
   144  		Expect(inspectSource.OutputToString()).To(Equal("/tmp"))
   145  
   146  		inspectSrc := podmanTest.Podman([]string{"inspect", "test", "--format", "{{(index .Mounts 0).Src}}"})
   147  		inspectSrc.WaitWithDefaultTimeout()
   148  		Expect(inspectSrc.ExitCode()).To(Equal(0))
   149  		Expect(inspectSrc.OutputToString()).To(Equal("/tmp"))
   150  
   151  		inspectDestination := podmanTest.Podman([]string{"inspect", "test", "--format", "{{(index .Mounts 0).Destination}}"})
   152  		inspectDestination.WaitWithDefaultTimeout()
   153  		Expect(inspectDestination.ExitCode()).To(Equal(0))
   154  		Expect(inspectDestination.OutputToString()).To(Equal("/test1"))
   155  
   156  		inspectDst := podmanTest.Podman([]string{"inspect", "test", "--format", "{{(index .Mounts 0).Dst}}"})
   157  		inspectDst.WaitWithDefaultTimeout()
   158  		Expect(inspectDst.ExitCode()).To(Equal(0))
   159  		Expect(inspectDst.OutputToString()).To(Equal("/test1"))
   160  	})
   161  
   162  	It("podman inspect shows healthcheck on docker image", func() {
   163  		podmanTest.AddImageToRWStore(healthcheck)
   164  		session := podmanTest.Podman([]string{"inspect", "--format=json", healthcheck})
   165  		session.WaitWithDefaultTimeout()
   166  		imageData := session.InspectImageJSON()
   167  		Expect(imageData[0].HealthCheck.Timeout).To(BeNumerically("==", 3000000000))
   168  		Expect(imageData[0].HealthCheck.Interval).To(BeNumerically("==", 60000000000))
   169  		Expect(imageData[0].HealthCheck.Test).To(Equal([]string{"CMD-SHELL", "curl -f http://localhost/ || exit 1"}))
   170  	})
   171  
   172  	It("podman inspect --latest with no container fails", func() {
   173  		SkipIfRemote("testing --latest flag")
   174  
   175  		session := podmanTest.Podman([]string{"inspect", "--latest"})
   176  		session.WaitWithDefaultTimeout()
   177  		Expect(session.ExitCode()).To(Not(Equal(0)))
   178  	})
   179  
   180  	It("podman [image,container] inspect on image", func() {
   181  		baseInspect := podmanTest.Podman([]string{"inspect", ALPINE})
   182  		baseInspect.WaitWithDefaultTimeout()
   183  		Expect(baseInspect.ExitCode()).To(Equal(0))
   184  		baseJSON := baseInspect.InspectImageJSON()
   185  		Expect(len(baseJSON)).To(Equal(1))
   186  
   187  		ctrInspect := podmanTest.Podman([]string{"container", "inspect", ALPINE})
   188  		ctrInspect.WaitWithDefaultTimeout()
   189  		Expect(ctrInspect.ExitCode()).To(Not(Equal(0)))
   190  
   191  		imageInspect := podmanTest.Podman([]string{"image", "inspect", ALPINE})
   192  		imageInspect.WaitWithDefaultTimeout()
   193  		Expect(imageInspect.ExitCode()).To(Equal(0))
   194  		imageJSON := imageInspect.InspectImageJSON()
   195  		Expect(len(imageJSON)).To(Equal(1))
   196  
   197  		Expect(baseJSON[0].ID).To(Equal(imageJSON[0].ID))
   198  	})
   199  
   200  	It("podman [image, container] inspect on container", func() {
   201  		ctrName := "testCtr"
   202  		create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE, "sh"})
   203  		create.WaitWithDefaultTimeout()
   204  		Expect(create.ExitCode()).To(Equal(0))
   205  
   206  		baseInspect := podmanTest.Podman([]string{"inspect", ctrName})
   207  		baseInspect.WaitWithDefaultTimeout()
   208  		Expect(baseInspect.ExitCode()).To(Equal(0))
   209  		baseJSON := baseInspect.InspectContainerToJSON()
   210  		Expect(len(baseJSON)).To(Equal(1))
   211  
   212  		ctrInspect := podmanTest.Podman([]string{"container", "inspect", ctrName})
   213  		ctrInspect.WaitWithDefaultTimeout()
   214  		Expect(ctrInspect.ExitCode()).To(Equal(0))
   215  		ctrJSON := ctrInspect.InspectContainerToJSON()
   216  		Expect(len(ctrJSON)).To(Equal(1))
   217  
   218  		imageInspect := podmanTest.Podman([]string{"image", "inspect", ctrName})
   219  		imageInspect.WaitWithDefaultTimeout()
   220  		Expect(imageInspect.ExitCode()).To(Not(Equal(0)))
   221  
   222  		Expect(baseJSON[0].ID).To(Equal(ctrJSON[0].ID))
   223  	})
   224  
   225  	It("podman inspect always produces a valid array", func() {
   226  		baseInspect := podmanTest.Podman([]string{"inspect", "doesNotExist"})
   227  		baseInspect.WaitWithDefaultTimeout()
   228  		Expect(baseInspect.ExitCode()).To(Not(Equal(0)))
   229  		emptyJSON := baseInspect.InspectContainerToJSON()
   230  		Expect(len(emptyJSON)).To(Equal(0))
   231  	})
   232  
   233  	It("podman inspect one container with not exist returns 1-length valid array", func() {
   234  		ctrName := "testCtr"
   235  		create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE, "sh"})
   236  		create.WaitWithDefaultTimeout()
   237  		Expect(create.ExitCode()).To(Equal(0))
   238  
   239  		baseInspect := podmanTest.Podman([]string{"inspect", ctrName, "doesNotExist"})
   240  		baseInspect.WaitWithDefaultTimeout()
   241  		Expect(baseInspect.ExitCode()).To(Not(Equal(0)))
   242  		baseJSON := baseInspect.InspectContainerToJSON()
   243  		Expect(len(baseJSON)).To(Equal(1))
   244  		Expect(baseJSON[0].Name).To(Equal(ctrName))
   245  	})
   246  
   247  	It("podman inspect container + image with same name gives container", func() {
   248  		podmanTest.AddImageToRWStore(ALPINE)
   249  		ctrName := "testcontainer"
   250  		create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE, "sh"})
   251  		create.WaitWithDefaultTimeout()
   252  		Expect(create.ExitCode()).To(Equal(0))
   253  
   254  		tag := podmanTest.Podman([]string{"tag", ALPINE, ctrName + ":latest"})
   255  		tag.WaitWithDefaultTimeout()
   256  		Expect(tag.ExitCode()).To(Equal(0))
   257  
   258  		baseInspect := podmanTest.Podman([]string{"inspect", ctrName})
   259  		baseInspect.WaitWithDefaultTimeout()
   260  		Expect(baseInspect.ExitCode()).To(Equal(0))
   261  		baseJSON := baseInspect.InspectContainerToJSON()
   262  		Expect(len(baseJSON)).To(Equal(1))
   263  		Expect(baseJSON[0].Name).To(Equal(ctrName))
   264  	})
   265  
   266  	It("podman inspect - HostConfig.SecurityOpt ", func() {
   267  		if !selinux.GetEnabled() {
   268  			Skip("SELinux not enabled")
   269  		}
   270  
   271  		ctrName := "hugo"
   272  		create := podmanTest.Podman([]string{
   273  			"create", "--name", ctrName,
   274  			"--security-opt", "seccomp=unconfined",
   275  			"--security-opt", "label=type:spc_t",
   276  			"--security-opt", "label=level:s0",
   277  			ALPINE, "sh"})
   278  
   279  		create.WaitWithDefaultTimeout()
   280  		Expect(create.ExitCode()).To(Equal(0))
   281  
   282  		baseInspect := podmanTest.Podman([]string{"inspect", ctrName})
   283  		baseInspect.WaitWithDefaultTimeout()
   284  		Expect(baseInspect.ExitCode()).To(Equal(0))
   285  		baseJSON := baseInspect.InspectContainerToJSON()
   286  		Expect(len(baseJSON)).To(Equal(1))
   287  		Expect(baseJSON[0].HostConfig.SecurityOpt).To(Equal([]string{"label=type:spc_t,label=level:s0", "seccomp=unconfined"}))
   288  	})
   289  
   290  	It("podman inspect pod", func() {
   291  		podName := "testpod"
   292  		create := podmanTest.Podman([]string{"pod", "create", "--name", podName})
   293  		create.WaitWithDefaultTimeout()
   294  		Expect(create.ExitCode()).To(Equal(0))
   295  
   296  		inspect := podmanTest.Podman([]string{"inspect", podName})
   297  		inspect.WaitWithDefaultTimeout()
   298  		Expect(inspect.ExitCode()).To(Equal(0))
   299  		Expect(inspect.IsJSONOutputValid()).To(BeTrue())
   300  		podData := inspect.InspectPodArrToJSON()
   301  		Expect(podData[0].Name).To(Equal(podName))
   302  	})
   303  
   304  	It("podman inspect pod with type", func() {
   305  		podName := "testpod"
   306  		create := podmanTest.Podman([]string{"pod", "create", "--name", podName})
   307  		create.WaitWithDefaultTimeout()
   308  		Expect(create.ExitCode()).To(Equal(0))
   309  
   310  		inspect := podmanTest.Podman([]string{"inspect", "--type", "pod", podName})
   311  		inspect.WaitWithDefaultTimeout()
   312  		Expect(inspect.ExitCode()).To(Equal(0))
   313  		Expect(inspect.IsJSONOutputValid()).To(BeTrue())
   314  		podData := inspect.InspectPodArrToJSON()
   315  		Expect(podData[0].Name).To(Equal(podName))
   316  	})
   317  
   318  	It("podman inspect latest pod", func() {
   319  		SkipIfRemote("--latest flag n/a")
   320  		podName := "testpod"
   321  		create := podmanTest.Podman([]string{"pod", "create", "--name", podName})
   322  		create.WaitWithDefaultTimeout()
   323  		Expect(create.ExitCode()).To(Equal(0))
   324  
   325  		inspect := podmanTest.Podman([]string{"inspect", "--type", "pod", "--latest"})
   326  		inspect.WaitWithDefaultTimeout()
   327  		Expect(inspect.ExitCode()).To(Equal(0))
   328  		Expect(inspect.IsJSONOutputValid()).To(BeTrue())
   329  		podData := inspect.InspectPodArrToJSON()
   330  		Expect(podData[0].Name).To(Equal(podName))
   331  	})
   332  	It("podman inspect latest defaults to latest container", func() {
   333  		SkipIfRemote("--latest flag n/a")
   334  		podName := "testpod"
   335  		pod := podmanTest.Podman([]string{"pod", "create", "--name", podName})
   336  		pod.WaitWithDefaultTimeout()
   337  		Expect(pod.ExitCode()).To(Equal(0))
   338  
   339  		inspect1 := podmanTest.Podman([]string{"inspect", "--type", "pod", podName})
   340  		inspect1.WaitWithDefaultTimeout()
   341  		Expect(inspect1.ExitCode()).To(Equal(0))
   342  		Expect(inspect1.IsJSONOutputValid()).To(BeTrue())
   343  		podData := inspect1.InspectPodArrToJSON()
   344  		infra := podData[0].Containers[0].Name
   345  
   346  		inspect := podmanTest.Podman([]string{"inspect", "--latest"})
   347  		inspect.WaitWithDefaultTimeout()
   348  		Expect(inspect.ExitCode()).To(Equal(0))
   349  		Expect(inspect.IsJSONOutputValid()).To(BeTrue())
   350  		containerData := inspect.InspectContainerToJSON()
   351  		Expect(containerData[0].Name).To(Equal(infra))
   352  	})
   353  
   354  	It("podman inspect network", func() {
   355  		name, path := generateNetworkConfig(podmanTest)
   356  		defer removeConf(path)
   357  
   358  		session := podmanTest.Podman([]string{"inspect", name, "--format", "{{.cniVersion}}"})
   359  		session.WaitWithDefaultTimeout()
   360  		Expect(session.ExitCode()).To(Equal(0))
   361  		Expect(session.LineInOutputContains("0.3.0")).To(BeTrue())
   362  	})
   363  
   364  	It("podman inspect a volume", func() {
   365  		session := podmanTest.Podman([]string{"volume", "create", "myvol"})
   366  		session.WaitWithDefaultTimeout()
   367  		volName := session.OutputToString()
   368  		Expect(session.ExitCode()).To(Equal(0))
   369  
   370  		session = podmanTest.Podman([]string{"inspect", volName})
   371  		session.WaitWithDefaultTimeout()
   372  		Expect(session.ExitCode()).To(Equal(0))
   373  		Expect(session.IsJSONOutputValid()).To(BeTrue())
   374  	})
   375  
   376  	It("podman inspect a volume with --format", func() {
   377  		session := podmanTest.Podman([]string{"volume", "create", "myvol"})
   378  		session.WaitWithDefaultTimeout()
   379  		volName := session.OutputToString()
   380  		Expect(session.ExitCode()).To(Equal(0))
   381  
   382  		session = podmanTest.Podman([]string{"inspect", "--format", "{{.Name}}", volName})
   383  		session.WaitWithDefaultTimeout()
   384  		Expect(session.ExitCode()).To(Equal(0))
   385  		Expect(session.OutputToString()).To(Equal(volName))
   386  	})
   387  	It("podman inspect --type container on a pod should fail", func() {
   388  		podName := "testpod"
   389  		create := podmanTest.Podman([]string{"pod", "create", "--name", podName})
   390  		create.WaitWithDefaultTimeout()
   391  		Expect(create.ExitCode()).To(Equal(0))
   392  
   393  		inspect := podmanTest.Podman([]string{"inspect", "--type", "container", podName})
   394  		inspect.WaitWithDefaultTimeout()
   395  		Expect(inspect).To(ExitWithError())
   396  	})
   397  
   398  	It("podman inspect --type network on a container should fail", func() {
   399  		ctrName := "testctr"
   400  		create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE})
   401  		create.WaitWithDefaultTimeout()
   402  		Expect(create.ExitCode()).To(Equal(0))
   403  
   404  		inspect := podmanTest.Podman([]string{"inspect", "--type", "network", ctrName})
   405  		inspect.WaitWithDefaultTimeout()
   406  		Expect(inspect).To(ExitWithError())
   407  	})
   408  
   409  	It("podman inspect --type pod on a container should fail", func() {
   410  		ctrName := "testctr"
   411  		create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE})
   412  		create.WaitWithDefaultTimeout()
   413  		Expect(create.ExitCode()).To(Equal(0))
   414  
   415  		inspect := podmanTest.Podman([]string{"inspect", "--type", "pod", ctrName})
   416  		inspect.WaitWithDefaultTimeout()
   417  		Expect(inspect).To(ExitWithError())
   418  	})
   419  
   420  	It("podman inspect --type volume on a container should fail", func() {
   421  		ctrName := "testctr"
   422  		create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE})
   423  		create.WaitWithDefaultTimeout()
   424  		Expect(create.ExitCode()).To(Equal(0))
   425  
   426  		inspect := podmanTest.Podman([]string{"inspect", "--type", "volume", ctrName})
   427  		inspect.WaitWithDefaultTimeout()
   428  		Expect(inspect).To(ExitWithError())
   429  	})
   430  
   431  })