github.com/AbhinandanKurakure/podman/v3@v3.4.10/test/e2e/pod_ps_test.go (about)

     1  package integration
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"sort"
     7  
     8  	. "github.com/containers/podman/v3/test/utils"
     9  	"github.com/containers/storage/pkg/stringid"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  	. "github.com/onsi/gomega/gexec"
    13  )
    14  
    15  var _ = Describe("Podman ps", func() {
    16  	var (
    17  		tempdir    string
    18  		err        error
    19  		podmanTest *PodmanTestIntegration
    20  	)
    21  
    22  	BeforeEach(func() {
    23  		tempdir, err = CreateTempDirInTempDir()
    24  		if err != nil {
    25  			os.Exit(1)
    26  		}
    27  		podmanTest = PodmanTestCreate(tempdir)
    28  		podmanTest.Setup()
    29  		podmanTest.SeedImages()
    30  	})
    31  
    32  	AfterEach(func() {
    33  		podmanTest.Cleanup()
    34  		f := CurrentGinkgoTestDescription()
    35  		processTestResult(f)
    36  
    37  	})
    38  
    39  	It("podman pod ps no pods", func() {
    40  		session := podmanTest.Podman([]string{"pod", "ps"})
    41  		session.WaitWithDefaultTimeout()
    42  		Expect(session).Should(Exit(0))
    43  	})
    44  
    45  	It("podman pod ps default", func() {
    46  		_, ec, podid := podmanTest.CreatePod(nil)
    47  		Expect(ec).To(Equal(0))
    48  
    49  		session := podmanTest.RunTopContainerInPod("", podid)
    50  		session.WaitWithDefaultTimeout()
    51  		Expect(session).Should(Exit(0))
    52  
    53  		result := podmanTest.Podman([]string{"pod", "ps"})
    54  		result.WaitWithDefaultTimeout()
    55  		Expect(result).Should(Exit(0))
    56  		Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
    57  	})
    58  
    59  	It("podman pod ps quiet flag", func() {
    60  		_, ec, podid := podmanTest.CreatePod(nil)
    61  		Expect(ec).To(Equal(0))
    62  
    63  		_, ec, _ = podmanTest.RunLsContainerInPod("", podid)
    64  		Expect(ec).To(Equal(0))
    65  
    66  		result := podmanTest.Podman([]string{"pod", "ps", "-q"})
    67  		result.WaitWithDefaultTimeout()
    68  		Expect(result).To(Exit(0))
    69  		Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
    70  		Expect(podid).To(ContainSubstring(result.OutputToStringArray()[0]))
    71  	})
    72  
    73  	It("podman pod ps no-trunc", func() {
    74  		_, ec, podid := podmanTest.CreatePod(nil)
    75  		Expect(ec).To(Equal(0))
    76  
    77  		_, ec2, _ := podmanTest.RunLsContainerInPod("", podid)
    78  		Expect(ec2).To(Equal(0))
    79  
    80  		result := podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc"})
    81  		result.WaitWithDefaultTimeout()
    82  		Expect(result).Should(Exit(0))
    83  		Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
    84  		Expect(podid).To(Equal(result.OutputToStringArray()[0]))
    85  	})
    86  
    87  	It("podman pod ps latest", func() {
    88  		SkipIfRemote("--latest flag n/a")
    89  		_, ec, podid1 := podmanTest.CreatePod(nil)
    90  		Expect(ec).To(Equal(0))
    91  
    92  		_, ec2, podid2 := podmanTest.CreatePod(nil)
    93  		Expect(ec2).To(Equal(0))
    94  
    95  		result := podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--latest"})
    96  		result.WaitWithDefaultTimeout()
    97  		Expect(result).Should(Exit(0))
    98  		Expect(result.OutputToString()).To(ContainSubstring(podid2))
    99  		Expect(result.OutputToString()).To(Not(ContainSubstring(podid1)))
   100  	})
   101  
   102  	It("podman pod ps id filter flag", func() {
   103  		_, ec, podid := podmanTest.CreatePod(nil)
   104  		Expect(ec).To(Equal(0))
   105  
   106  		result := podmanTest.Podman([]string{"pod", "ps", "--filter", fmt.Sprintf("id=%s", podid)})
   107  		result.WaitWithDefaultTimeout()
   108  		Expect(result).Should(Exit(0))
   109  	})
   110  
   111  	It("podman pod ps --filter until", func() {
   112  		name := "mypod"
   113  		_, ec, _ := podmanTest.CreatePod(map[string][]string{"--name": {name}})
   114  		Expect(ec).To(Equal(0))
   115  
   116  		result := podmanTest.Podman([]string{"pod", "ps", "--filter", "until=50"})
   117  		result.WaitWithDefaultTimeout()
   118  		Expect(result).Should(Exit(0))
   119  		Expect(result.OutputToString()).To(Not(ContainSubstring(name)))
   120  
   121  		result = podmanTest.Podman([]string{"pod", "ps", "--filter", "until=5000000000"})
   122  		result.WaitWithDefaultTimeout()
   123  		Expect(result).Should(Exit(0))
   124  		Expect(result.OutputToString()).To(ContainSubstring(name))
   125  	})
   126  
   127  	It("podman pod ps filter name regexp", func() {
   128  		_, ec, podid := podmanTest.CreatePod(map[string][]string{"--name": {"mypod"}})
   129  		Expect(ec).To(Equal(0))
   130  		_, ec2, _ := podmanTest.CreatePod(map[string][]string{"--name": {"mypod1"}})
   131  		Expect(ec2).To(Equal(0))
   132  
   133  		result := podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "name=mypod"})
   134  		result.WaitWithDefaultTimeout()
   135  		Expect(result).Should(Exit(0))
   136  
   137  		output := result.OutputToStringArray()
   138  		Expect(len(output)).To(Equal(2))
   139  
   140  		result = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "name=mypod$"})
   141  		result.WaitWithDefaultTimeout()
   142  		Expect(result).Should(Exit(0))
   143  
   144  		output = result.OutputToStringArray()
   145  		Expect(len(output)).To(Equal(1))
   146  		Expect(output[0]).To(Equal(podid))
   147  	})
   148  
   149  	It("podman pod ps mutually exclusive flags", func() {
   150  		session := podmanTest.Podman([]string{"pod", "ps", "-q", "--format", "{{.ID}}"})
   151  		session.WaitWithDefaultTimeout()
   152  		Expect(session).To(ExitWithError())
   153  
   154  	})
   155  
   156  	It("podman pod ps --sort by name", func() {
   157  		_, ec, _ := podmanTest.CreatePod(nil)
   158  		Expect(ec).To(Equal(0))
   159  
   160  		_, ec2, _ := podmanTest.CreatePod(nil)
   161  		Expect(ec2).To(Equal(0))
   162  
   163  		_, ec3, _ := podmanTest.CreatePod(nil)
   164  		Expect(ec3).To(Equal(0))
   165  
   166  		session := podmanTest.Podman([]string{"pod", "ps", "--sort=name", "--format", "{{.Name}}"})
   167  
   168  		session.WaitWithDefaultTimeout()
   169  		Expect(session).Should(Exit(0))
   170  
   171  		sortedArr := session.OutputToStringArray()
   172  
   173  		Expect(sort.SliceIsSorted(sortedArr, func(i, j int) bool { return sortedArr[i] < sortedArr[j] })).To(BeTrue())
   174  	})
   175  
   176  	It("podman pod ps --ctr-names", func() {
   177  		SkipIfRootlessCgroupsV1("Not supported for rootless + CGroupsV1")
   178  		_, ec, podid := podmanTest.CreatePod(nil)
   179  		Expect(ec).To(Equal(0))
   180  
   181  		session := podmanTest.RunTopContainerInPod("test1", podid)
   182  		session.WaitWithDefaultTimeout()
   183  		Expect(session).Should(Exit(0))
   184  
   185  		_, ec, _ = podmanTest.RunLsContainerInPod("test2", podid)
   186  		Expect(ec).To(Equal(0))
   187  
   188  		session = podmanTest.Podman([]string{"pod", "ps", "--format={{.ContainerNames}}", "--ctr-names"})
   189  		session.WaitWithDefaultTimeout()
   190  		Expect(session).Should(Exit(0))
   191  		Expect(session.OutputToString()).To(ContainSubstring("test1"))
   192  		Expect(session.OutputToString()).To(ContainSubstring("test2"))
   193  	})
   194  
   195  	It("podman pod ps filter ctr attributes", func() {
   196  		_, ec, podid1 := podmanTest.CreatePod(nil)
   197  		Expect(ec).To(Equal(0))
   198  
   199  		session := podmanTest.RunTopContainerInPod("test1", podid1)
   200  		session.WaitWithDefaultTimeout()
   201  		Expect(session).Should(Exit(0))
   202  
   203  		_, ec2, podid2 := podmanTest.CreatePod(nil)
   204  		Expect(ec2).To(Equal(0))
   205  
   206  		_, ec3, cid := podmanTest.RunLsContainerInPod("test2", podid2)
   207  		Expect(ec3).To(Equal(0))
   208  
   209  		session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-names=test1"})
   210  		session.WaitWithDefaultTimeout()
   211  		Expect(session).Should(Exit(0))
   212  		Expect(session.OutputToString()).To(ContainSubstring(podid1))
   213  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid2)))
   214  
   215  		session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-names=test", "--filter", "ctr-status=running"})
   216  		session.WaitWithDefaultTimeout()
   217  		Expect(session).Should(Exit(0))
   218  		Expect(session.OutputToString()).To(ContainSubstring(podid1))
   219  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid2)))
   220  
   221  		session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", fmt.Sprintf("ctr-ids=%s", cid)})
   222  		session.WaitWithDefaultTimeout()
   223  		Expect(session).Should(Exit(0))
   224  		Expect(session.OutputToString()).To(ContainSubstring(podid2))
   225  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid1)))
   226  
   227  		session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-ids=" + cid[:40], "--filter", "ctr-ids=" + cid + "$"})
   228  		session.WaitWithDefaultTimeout()
   229  		Expect(session).Should(Exit(0))
   230  		Expect(session.OutputToString()).To(ContainSubstring(podid2))
   231  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid1)))
   232  
   233  		_, ec3, podid3 := podmanTest.CreatePod(nil)
   234  		Expect(ec3).To(Equal(0))
   235  
   236  		session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-number=1"})
   237  		session.WaitWithDefaultTimeout()
   238  		Expect(session).Should(Exit(0))
   239  		Expect(session.OutputToString()).To(ContainSubstring(podid1))
   240  		Expect(session.OutputToString()).To(ContainSubstring(podid2))
   241  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid3)))
   242  
   243  		session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-number=1", "--filter", "ctr-number=0"})
   244  		session.WaitWithDefaultTimeout()
   245  		Expect(session).Should(Exit(0))
   246  		Expect(session.OutputToString()).To(ContainSubstring(podid1))
   247  		Expect(session.OutputToString()).To(ContainSubstring(podid2))
   248  		Expect(session.OutputToString()).To(ContainSubstring(podid3))
   249  
   250  		session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-status=running"})
   251  		session.WaitWithDefaultTimeout()
   252  		Expect(session).Should(Exit(0))
   253  		Expect(session.OutputToString()).To(ContainSubstring(podid1))
   254  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid2)))
   255  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid3)))
   256  
   257  		session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-status=exited"})
   258  		session.WaitWithDefaultTimeout()
   259  		Expect(session).Should(Exit(0))
   260  		Expect(session.OutputToString()).To(ContainSubstring(podid2))
   261  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid1)))
   262  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid3)))
   263  
   264  		session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-status=exited", "--filter", "ctr-status=running"})
   265  		session.WaitWithDefaultTimeout()
   266  		Expect(session).Should(Exit(0))
   267  		Expect(session.OutputToString()).To(ContainSubstring(podid1))
   268  		Expect(session.OutputToString()).To(ContainSubstring(podid2))
   269  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid3)))
   270  
   271  		session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-status=created"})
   272  		session.WaitWithDefaultTimeout()
   273  		Expect(session).Should(Exit(0))
   274  		Expect(session.OutputToString()).To(BeEmpty())
   275  	})
   276  
   277  	It("podman pod ps filter labels", func() {
   278  		s, _, podid1 := podmanTest.CreatePod(nil)
   279  		Expect(s).To(Exit(0))
   280  
   281  		s, _, podid2 := podmanTest.CreatePod(map[string][]string{
   282  			"--label": {"app=myapp", "io.podman.test.key=irrelevant-value"},
   283  		})
   284  		Expect(s).To(Exit(0))
   285  
   286  		s, _, podid3 := podmanTest.CreatePod(map[string][]string{"--label": {"app=test"}})
   287  		Expect(s).To(Exit(0))
   288  
   289  		session := podmanTest.Podman([]string{"pod", "ps", "--no-trunc", "--filter", "label=app", "--filter", "label=app=myapp"})
   290  		session.WaitWithDefaultTimeout()
   291  		Expect(session).To(Exit(0))
   292  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid1)))
   293  		Expect(session.OutputToString()).To(ContainSubstring(podid2))
   294  		Expect(session.OutputToString()).To(Not(ContainSubstring(podid3)))
   295  	})
   296  
   297  	It("podman pod ps filter network", func() {
   298  		net := stringid.GenerateNonCryptoID()
   299  		session := podmanTest.Podman([]string{"network", "create", net})
   300  		session.WaitWithDefaultTimeout()
   301  		Expect(session).Should(Exit(0))
   302  		defer podmanTest.removeCNINetwork(net)
   303  
   304  		session = podmanTest.Podman([]string{"pod", "create", "--network", net})
   305  		session.WaitWithDefaultTimeout()
   306  		Expect(session).Should(Exit(0))
   307  		podWithNet := session.OutputToString()
   308  
   309  		session = podmanTest.Podman([]string{"pod", "create"})
   310  		session.WaitWithDefaultTimeout()
   311  		Expect(session).Should(Exit(0))
   312  		podWithoutNet := session.OutputToString()
   313  
   314  		session = podmanTest.Podman([]string{"pod", "ps", "--no-trunc", "--filter", "network=" + net})
   315  		session.WaitWithDefaultTimeout()
   316  		Expect(session).Should(Exit(0))
   317  		Expect(session.OutputToString()).To(ContainSubstring(podWithNet))
   318  		Expect(session.OutputToString()).To(Not(ContainSubstring(podWithoutNet)))
   319  	})
   320  
   321  	It("podman pod ps --format networks", func() {
   322  		session := podmanTest.Podman([]string{"pod", "create"})
   323  		session.WaitWithDefaultTimeout()
   324  		Expect(session).Should(Exit(0))
   325  
   326  		session = podmanTest.Podman([]string{"pod", "ps", "--format", "{{ .Networks }}"})
   327  		session.WaitWithDefaultTimeout()
   328  		Expect(session).Should(Exit(0))
   329  		if isRootless() {
   330  			// rootless container don't have a network by default
   331  			Expect(session.OutputToString()).To(Equal(""))
   332  		} else {
   333  			// default network name is podman
   334  			Expect(session.OutputToString()).To(Equal("podman"))
   335  		}
   336  
   337  		net1 := stringid.GenerateNonCryptoID()
   338  		session = podmanTest.Podman([]string{"network", "create", net1})
   339  		session.WaitWithDefaultTimeout()
   340  		Expect(session).Should(Exit(0))
   341  		defer podmanTest.removeCNINetwork(net1)
   342  		net2 := stringid.GenerateNonCryptoID()
   343  		session = podmanTest.Podman([]string{"network", "create", net2})
   344  		session.WaitWithDefaultTimeout()
   345  		Expect(session).Should(Exit(0))
   346  		defer podmanTest.removeCNINetwork(net2)
   347  
   348  		session = podmanTest.Podman([]string{"pod", "create", "--network", net1 + "," + net2})
   349  		session.WaitWithDefaultTimeout()
   350  		Expect(session).Should(Exit(0))
   351  		pid := session.OutputToString()
   352  
   353  		session = podmanTest.Podman([]string{"pod", "ps", "--format", "{{ .Networks }}", "--filter", "id=" + pid})
   354  		session.WaitWithDefaultTimeout()
   355  		Expect(session).Should(Exit(0))
   356  		// the output is not deterministic so check both possible orders
   357  		Expect(session.OutputToString()).To(Or(Equal(net1+","+net2), Equal(net2+","+net1)))
   358  	})
   359  
   360  	It("pod no infra should ps", func() {
   361  		session := podmanTest.Podman([]string{"pod", "create", "--infra=false"})
   362  		session.WaitWithDefaultTimeout()
   363  		Expect(session).Should(Exit(0))
   364  
   365  		ps := podmanTest.Podman([]string{"pod", "ps"})
   366  		ps.WaitWithDefaultTimeout()
   367  		Expect(ps).Should(Exit(0))
   368  
   369  		infra := podmanTest.Podman([]string{"pod", "ps", "--format", "{{.InfraId}}"})
   370  		infra.WaitWithDefaultTimeout()
   371  		Expect(len(infra.OutputToString())).To(BeZero())
   372  	})
   373  
   374  	It("podman pod ps format with labels", func() {
   375  		_, ec, _ := podmanTest.CreatePod(nil)
   376  		Expect(ec).To(Equal(0))
   377  
   378  		_, ec1, _ := podmanTest.CreatePod(map[string][]string{"--label": {
   379  			"io.podman.test.label=value1",
   380  			"io.podman.test.key=irrelevant-value",
   381  		}})
   382  		Expect(ec1).To(Equal(0))
   383  
   384  		session := podmanTest.Podman([]string{"pod", "ps", "--format", "{{.Labels}}"})
   385  		session.WaitWithDefaultTimeout()
   386  		Expect(session).Should(Exit(0))
   387  		Expect(session.OutputToString()).To(ContainSubstring("value1"))
   388  	})
   389  
   390  	It("podman pod ps headers", func() {
   391  		session := podmanTest.Podman([]string{"pod", "ps", "--ctr-ids", "--ctr-names", "--ctr-status", "--ns"})
   392  		session.WaitWithDefaultTimeout()
   393  		Expect(session).Should(Exit(0))
   394  		Expect(session.OutputToString()).To(MatchRegexp(`^POD ID\s+NAME\s+STATUS\s+CREATED\s+INFRA ID\s+IDS\s+NAMES\s+STATUS\s+CGROUP\s+NAMESPACES$`))
   395  	})
   396  
   397  })