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

     1  package integration
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"regexp"
     7  	"sort"
     8  	"strings"
     9  
    10  	. "github.com/containers/podman/v2/test/utils"
    11  	"github.com/docker/go-units"
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  	. "github.com/onsi/gomega/gexec"
    15  )
    16  
    17  var _ = Describe("Podman ps", func() {
    18  	var (
    19  		tempdir    string
    20  		err        error
    21  		podmanTest *PodmanTestIntegration
    22  	)
    23  
    24  	BeforeEach(func() {
    25  		tempdir, err = CreateTempDirInTempDir()
    26  		if err != nil {
    27  			os.Exit(1)
    28  		}
    29  		podmanTest = PodmanTestCreate(tempdir)
    30  		podmanTest.Setup()
    31  		podmanTest.SeedImages()
    32  	})
    33  
    34  	AfterEach(func() {
    35  		podmanTest.Cleanup()
    36  		f := CurrentGinkgoTestDescription()
    37  		processTestResult(f)
    38  
    39  	})
    40  
    41  	It("podman ps no containers", func() {
    42  		session := podmanTest.Podman([]string{"ps"})
    43  		session.WaitWithDefaultTimeout()
    44  		Expect(session.ExitCode()).To(Equal(0))
    45  	})
    46  
    47  	It("podman container ps no containers", func() {
    48  		session := podmanTest.Podman([]string{"container", "ps"})
    49  		session.WaitWithDefaultTimeout()
    50  		Expect(session.ExitCode()).To(Equal(0))
    51  	})
    52  
    53  	It("podman ps default", func() {
    54  		session := podmanTest.RunTopContainer("")
    55  		session.WaitWithDefaultTimeout()
    56  		Expect(session.ExitCode()).To(Equal(0))
    57  
    58  		result := podmanTest.Podman([]string{"ps"})
    59  		result.WaitWithDefaultTimeout()
    60  		Expect(result.ExitCode()).To(Equal(0))
    61  		Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
    62  	})
    63  
    64  	It("podman ps all", func() {
    65  		_, ec, _ := podmanTest.RunLsContainer("")
    66  		Expect(ec).To(Equal(0))
    67  
    68  		result := podmanTest.Podman([]string{"ps", "-a"})
    69  		result.WaitWithDefaultTimeout()
    70  		Expect(result.ExitCode()).To(Equal(0))
    71  		Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
    72  	})
    73  
    74  	It("podman container list all", func() {
    75  		_, ec, _ := podmanTest.RunLsContainer("")
    76  		Expect(ec).To(Equal(0))
    77  
    78  		result := podmanTest.Podman([]string{"container", "list", "-a"})
    79  		result.WaitWithDefaultTimeout()
    80  		Expect(result.ExitCode()).To(Equal(0))
    81  		Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
    82  
    83  		result = podmanTest.Podman([]string{"container", "ls", "-a"})
    84  		result.WaitWithDefaultTimeout()
    85  		Expect(result.ExitCode()).To(Equal(0))
    86  		Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
    87  	})
    88  
    89  	It("podman ps size flag", func() {
    90  		_, ec, _ := podmanTest.RunLsContainer("")
    91  		Expect(ec).To(Equal(0))
    92  
    93  		result := podmanTest.Podman([]string{"ps", "-a", "--size"})
    94  		result.WaitWithDefaultTimeout()
    95  		Expect(result.ExitCode()).To(Equal(0))
    96  		Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
    97  	})
    98  
    99  	It("podman ps quiet flag", func() {
   100  		_, ec, fullCid := podmanTest.RunLsContainer("")
   101  		Expect(ec).To(Equal(0))
   102  
   103  		result := podmanTest.Podman([]string{"ps", "-a", "-q"})
   104  		result.WaitWithDefaultTimeout()
   105  		Expect(result.ExitCode()).To(Equal(0))
   106  		Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
   107  		Expect(fullCid).To(ContainSubstring(result.OutputToStringArray()[0]))
   108  	})
   109  
   110  	It("podman ps latest flag", func() {
   111  		SkipIfRemote("--latest is not supported on podman-remote")
   112  		_, ec, _ := podmanTest.RunLsContainer("")
   113  		Expect(ec).To(Equal(0))
   114  		_, ec, _ = podmanTest.RunLsContainer("")
   115  		Expect(ec).To(Equal(0))
   116  
   117  		result := podmanTest.Podman([]string{"ps", "-q", "--latest"})
   118  		result.WaitWithDefaultTimeout()
   119  		Expect(result.ExitCode()).To(Equal(0))
   120  		Expect(len(result.OutputToStringArray())).Should(Equal(1))
   121  	})
   122  
   123  	It("podman ps last flag", func() {
   124  		Skip("--last flag nonfunctional and disabled")
   125  
   126  		// Make sure that non-running containers are being counted as
   127  		// well.
   128  		session := podmanTest.Podman([]string{"create", "alpine", "top"})
   129  		session.WaitWithDefaultTimeout()
   130  		Expect(session.ExitCode()).To(Equal(0))
   131  
   132  		result := podmanTest.Podman([]string{"ps", "--last", "2"})
   133  		result.WaitWithDefaultTimeout()
   134  		Expect(result.ExitCode()).To(Equal(0))
   135  		Expect(len(result.OutputToStringArray())).Should(Equal(2)) // 1 container
   136  
   137  		_, ec, _ := podmanTest.RunLsContainer("test1")
   138  		Expect(ec).To(Equal(0))
   139  
   140  		_, ec, _ = podmanTest.RunLsContainer("test2")
   141  		Expect(ec).To(Equal(0))
   142  
   143  		_, ec, _ = podmanTest.RunLsContainer("test3")
   144  		Expect(ec).To(Equal(0))
   145  
   146  		result = podmanTest.Podman([]string{"ps", "--last", "2"})
   147  		result.WaitWithDefaultTimeout()
   148  		Expect(result.ExitCode()).To(Equal(0))
   149  		Expect(len(result.OutputToStringArray())).Should(Equal(3)) // 2 containers
   150  
   151  		result = podmanTest.Podman([]string{"ps", "--last", "3"})
   152  		result.WaitWithDefaultTimeout()
   153  		Expect(result.ExitCode()).To(Equal(0))
   154  		Expect(len(result.OutputToStringArray())).Should(Equal(4)) // 3 containers
   155  
   156  		result = podmanTest.Podman([]string{"ps", "--last", "100"})
   157  		result.WaitWithDefaultTimeout()
   158  		Expect(result.ExitCode()).To(Equal(0))
   159  		Expect(len(result.OutputToStringArray())).Should(Equal(5)) // 4 containers (3 running + 1 created)
   160  	})
   161  
   162  	It("podman ps no-trunc", func() {
   163  		_, ec, fullCid := podmanTest.RunLsContainer("")
   164  		Expect(ec).To(Equal(0))
   165  
   166  		result := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc"})
   167  		result.WaitWithDefaultTimeout()
   168  		Expect(result.ExitCode()).To(Equal(0))
   169  		Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
   170  		Expect(fullCid).To(Equal(result.OutputToStringArray()[0]))
   171  	})
   172  
   173  	It("podman ps namespace flag", func() {
   174  		_, ec, _ := podmanTest.RunLsContainer("")
   175  		Expect(ec).To(Equal(0))
   176  
   177  		result := podmanTest.Podman([]string{"ps", "-a", "--namespace"})
   178  		result.WaitWithDefaultTimeout()
   179  		Expect(result.ExitCode()).To(Equal(0))
   180  		Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
   181  	})
   182  
   183  	It("podman ps namespace flag even for remote", func() {
   184  		session := podmanTest.RunTopContainer("test1")
   185  		session.WaitWithDefaultTimeout()
   186  
   187  		result := podmanTest.Podman([]string{"ps", "-a", "--namespace", "--format",
   188  			"{{with .Namespaces}}{{.Cgroup}}:{{.IPC}}:{{.MNT}}:{{.NET}}:{{.PIDNS}}:{{.User}}:{{.UTS}}{{end}}"})
   189  		result.WaitWithDefaultTimeout()
   190  		Expect(result.ExitCode()).To(Equal(0))
   191  		// it must contains `::` when some ns is null. If it works normally, it should be "$num1:$num2:$num3"
   192  		Expect(result.OutputToString()).To(Not(ContainSubstring(`::`)))
   193  	})
   194  
   195  	It("podman ps with no containers is valid json format", func() {
   196  		result := podmanTest.Podman([]string{"ps", "--format", "json"})
   197  		result.WaitWithDefaultTimeout()
   198  		Expect(result.ExitCode()).To(Equal(0))
   199  		Expect(result.IsJSONOutputValid()).To(BeTrue())
   200  	})
   201  
   202  	It("podman ps namespace flag with json format", func() {
   203  		_, ec, _ := podmanTest.RunLsContainer("test1")
   204  		Expect(ec).To(Equal(0))
   205  
   206  		result := podmanTest.Podman([]string{"ps", "-a", "--ns", "--format", "json"})
   207  		result.WaitWithDefaultTimeout()
   208  		Expect(result.ExitCode()).To(Equal(0))
   209  		Expect(result.IsJSONOutputValid()).To(BeTrue())
   210  	})
   211  
   212  	It("podman ps print a human-readable `Status` with json format", func() {
   213  		_, ec, _ := podmanTest.RunLsContainer("test1")
   214  		Expect(ec).To(Equal(0))
   215  
   216  		result := podmanTest.Podman([]string{"ps", "-a", "--format", "json"})
   217  		result.WaitWithDefaultTimeout()
   218  		Expect(result.ExitCode()).To(Equal(0))
   219  		Expect(result.IsJSONOutputValid()).To(BeTrue())
   220  		// must contain "Status"
   221  		match, StatusLine := result.GrepString(`Status`)
   222  		Expect(match).To(BeTrue())
   223  		// container is running or exit, so it must contain `ago`
   224  		Expect(StatusLine[0]).To(ContainSubstring("ago"))
   225  	})
   226  
   227  	It("podman ps namespace flag with go template format", func() {
   228  		_, ec, _ := podmanTest.RunLsContainer("test1")
   229  		Expect(ec).To(Equal(0))
   230  
   231  		result := podmanTest.Podman([]string{"ps", "-a", "--format", "table {{.ID}} {{.Image}} {{.ImageID}} {{.Labels}}"})
   232  		result.WaitWithDefaultTimeout()
   233  
   234  		Expect(result.OutputToStringArray()[0]).ToNot(ContainSubstring("table"))
   235  		Expect(result.OutputToStringArray()[0]).ToNot(ContainSubstring("ImageID"))
   236  		Expect(result.OutputToStringArray()[0]).To(ContainSubstring("alpine:latest"))
   237  		Expect(result).Should(Exit(0))
   238  	})
   239  
   240  	It("podman ps ancestor filter flag", func() {
   241  		_, ec, cid := podmanTest.RunLsContainer("test1")
   242  		Expect(ec).To(Equal(0))
   243  
   244  		result := podmanTest.Podman([]string{"ps", "-q", "--no-trunc", "-a", "--filter", "ancestor=quay.io/libpod/alpine:latest"})
   245  		result.WaitWithDefaultTimeout()
   246  		Expect(result.ExitCode()).To(Equal(0))
   247  		Expect(result.OutputToString()).To(Equal(cid))
   248  
   249  		// Query just by image name, without :latest tag
   250  		result = podmanTest.Podman([]string{"ps", "-q", "--no-trunc", "-a", "--filter", "ancestor=quay.io/libpod/alpine"})
   251  		result.WaitWithDefaultTimeout()
   252  		Expect(result.ExitCode()).To(Equal(0))
   253  		Expect(result.OutputToString()).To(Equal(cid))
   254  	})
   255  
   256  	It("podman ps id filter flag", func() {
   257  		_, ec, fullCid := podmanTest.RunLsContainer("")
   258  		Expect(ec).To(Equal(0))
   259  
   260  		result := podmanTest.Podman([]string{"ps", "-a", "--filter", fmt.Sprintf("id=%s", fullCid)})
   261  		result.WaitWithDefaultTimeout()
   262  		Expect(result.ExitCode()).To(Equal(0))
   263  	})
   264  
   265  	It("podman ps id filter flag", func() {
   266  		session := podmanTest.RunTopContainer("")
   267  		session.WaitWithDefaultTimeout()
   268  		Expect(session.ExitCode()).To(Equal(0))
   269  		fullCid := session.OutputToString()
   270  
   271  		result := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc", "--filter", "status=running"})
   272  		result.WaitWithDefaultTimeout()
   273  		Expect(result.ExitCode()).To(Equal(0))
   274  		Expect(result.OutputToStringArray()[0]).To(Equal(fullCid))
   275  	})
   276  
   277  	It("podman ps multiple filters", func() {
   278  		session := podmanTest.Podman([]string{"run", "-d", "--name", "test1", "--label", "key1=value1", ALPINE, "top"})
   279  		session.WaitWithDefaultTimeout()
   280  		Expect(session.ExitCode()).To(Equal(0))
   281  		fullCid := session.OutputToString()
   282  
   283  		session2 := podmanTest.Podman([]string{"run", "-d", "--name", "test2", "--label", "key1=value1", ALPINE, "top"})
   284  		session2.WaitWithDefaultTimeout()
   285  		Expect(session2.ExitCode()).To(Equal(0))
   286  
   287  		result := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc", "--filter", "name=test1", "--filter", "label=key1=value1"})
   288  		result.WaitWithDefaultTimeout()
   289  		Expect(result.ExitCode()).To(Equal(0))
   290  
   291  		output := result.OutputToStringArray()
   292  		Expect(len(output)).To(Equal(1))
   293  		Expect(output[0]).To(Equal(fullCid))
   294  	})
   295  
   296  	It("podman ps filter by exited does not need all", func() {
   297  		ctr := podmanTest.Podman([]string{"run", "-t", "-i", ALPINE, "ls", "/"})
   298  		ctr.WaitWithDefaultTimeout()
   299  		Expect(ctr.ExitCode()).To(Equal(0))
   300  
   301  		psAll := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc"})
   302  		psAll.WaitWithDefaultTimeout()
   303  		Expect(psAll.ExitCode()).To(Equal(0))
   304  
   305  		psFilter := podmanTest.Podman([]string{"ps", "--no-trunc", "--quiet", "--filter", "status=exited"})
   306  		psFilter.WaitWithDefaultTimeout()
   307  		Expect(psFilter.ExitCode()).To(Equal(0))
   308  
   309  		Expect(psAll.OutputToString()).To(Equal(psFilter.OutputToString()))
   310  	})
   311  
   312  	It("podman filter without status does not find non-running", func() {
   313  		ctrName := "aContainerName"
   314  		ctr := podmanTest.Podman([]string{"create", "--name", ctrName, "-t", "-i", ALPINE, "ls", "/"})
   315  		ctr.WaitWithDefaultTimeout()
   316  		Expect(ctr.ExitCode()).To(Equal(0))
   317  
   318  		psFilter := podmanTest.Podman([]string{"ps", "--no-trunc", "--quiet", "--format", "{{.Names}}", "--filter", fmt.Sprintf("name=%s", ctrName)})
   319  		psFilter.WaitWithDefaultTimeout()
   320  		Expect(psFilter.ExitCode()).To(Equal(0))
   321  
   322  		Expect(strings.Contains(psFilter.OutputToString(), ctrName)).To(BeFalse())
   323  	})
   324  
   325  	It("podman ps mutually exclusive flags", func() {
   326  		session := podmanTest.Podman([]string{"ps", "-aqs"})
   327  		session.WaitWithDefaultTimeout()
   328  		Expect(session).To(ExitWithError())
   329  
   330  		session = podmanTest.Podman([]string{"ps", "-a", "--ns", "-s"})
   331  		session.WaitWithDefaultTimeout()
   332  		Expect(session).To(ExitWithError())
   333  	})
   334  
   335  	It("podman --sort by size", func() {
   336  		session := podmanTest.Podman([]string{"create", "busybox", "ls"})
   337  		session.WaitWithDefaultTimeout()
   338  		Expect(session.ExitCode()).To(Equal(0))
   339  
   340  		session = podmanTest.Podman([]string{"create", "-t", ALPINE, "top"})
   341  		session.WaitWithDefaultTimeout()
   342  		Expect(session.ExitCode()).To(Equal(0))
   343  
   344  		session = podmanTest.Podman([]string{"ps", "-a", "-s", "--sort=size", "--format", "{{.Size}}"})
   345  		session.WaitWithDefaultTimeout()
   346  		Expect(session.ExitCode()).To(Equal(0))
   347  
   348  		sortedArr := session.OutputToStringArray()
   349  
   350  		// TODO: This may be broken - the test was running without the
   351  		// ability to perform any sorting for months and succeeded
   352  		// without error.
   353  		Expect(sort.SliceIsSorted(sortedArr, func(i, j int) bool {
   354  			r := regexp.MustCompile(`^\S+\s+\(virtual (\S+)\)`)
   355  			matches1 := r.FindStringSubmatch(sortedArr[i])
   356  			matches2 := r.FindStringSubmatch(sortedArr[j])
   357  
   358  			// sanity check in case an oddly formatted size appears
   359  			if len(matches1) < 2 || len(matches2) < 2 {
   360  				return sortedArr[i] < sortedArr[j]
   361  			} else {
   362  				size1, _ := units.FromHumanSize(matches1[1])
   363  				size2, _ := units.FromHumanSize(matches2[1])
   364  				return size1 < size2
   365  			}
   366  		})).To(BeTrue())
   367  
   368  	})
   369  
   370  	It("podman --sort by command", func() {
   371  		session := podmanTest.RunTopContainer("")
   372  		session.WaitWithDefaultTimeout()
   373  		Expect(session.ExitCode()).To(Equal(0))
   374  
   375  		session = podmanTest.Podman([]string{"run", "-d", ALPINE, "pwd"})
   376  		session.WaitWithDefaultTimeout()
   377  		Expect(session.ExitCode()).To(Equal(0))
   378  
   379  		session = podmanTest.Podman([]string{"ps", "-a", "--sort=command", "--format", "{{.Command}}"})
   380  
   381  		session.WaitWithDefaultTimeout()
   382  		Expect(session.ExitCode()).To(Equal(0))
   383  
   384  		sortedArr := session.OutputToStringArray()
   385  
   386  		Expect(sort.SliceIsSorted(sortedArr, func(i, j int) bool { return sortedArr[i] < sortedArr[j] })).To(BeTrue())
   387  
   388  	})
   389  
   390  	It("podman --pod", func() {
   391  		_, ec, podid := podmanTest.CreatePod("")
   392  		Expect(ec).To(Equal(0))
   393  
   394  		session := podmanTest.RunTopContainerInPod("", podid)
   395  		session.WaitWithDefaultTimeout()
   396  		Expect(session.ExitCode()).To(Equal(0))
   397  
   398  		session = podmanTest.Podman([]string{"ps", "--pod", "--no-trunc"})
   399  
   400  		session.WaitWithDefaultTimeout()
   401  		Expect(session.ExitCode()).To(Equal(0))
   402  
   403  		Expect(session.OutputToString()).To(ContainSubstring(podid))
   404  	})
   405  
   406  	It("podman --pod with a non-empty pod name", func() {
   407  		podName := "testPodName"
   408  		_, ec, podid := podmanTest.CreatePod(podName)
   409  		Expect(ec).To(Equal(0))
   410  
   411  		session := podmanTest.RunTopContainerInPod("", podName)
   412  		session.WaitWithDefaultTimeout()
   413  		Expect(session.ExitCode()).To(Equal(0))
   414  
   415  		// "--no-trunc" must be given. If not it will trunc the pod ID
   416  		// in the output and you will have to trunc it in the test too.
   417  		session = podmanTest.Podman([]string{"ps", "--pod", "--no-trunc"})
   418  
   419  		session.WaitWithDefaultTimeout()
   420  		Expect(session.ExitCode()).To(Equal(0))
   421  
   422  		output := session.OutputToString()
   423  		Expect(output).To(ContainSubstring(podid))
   424  		Expect(output).To(ContainSubstring(podName))
   425  	})
   426  
   427  	It("podman ps test with single port range", func() {
   428  		session := podmanTest.Podman([]string{"run", "-dt", "-p", "2000-2006:2000-2006", ALPINE, "top"})
   429  		session.WaitWithDefaultTimeout()
   430  		Expect(session.ExitCode()).To(Equal(0))
   431  
   432  		session = podmanTest.Podman([]string{"ps", "--format", "{{.Ports}}"})
   433  		session.WaitWithDefaultTimeout()
   434  		Expect(session.OutputToString()).To(ContainSubstring("0.0.0.0:2000-2006"))
   435  	})
   436  
   437  	It("podman ps test with invalid port range", func() {
   438  		session := podmanTest.Podman([]string{
   439  			"run", "-p", "1000-2000:2000-3000", "-p", "1999-2999:3001-4001", ALPINE,
   440  		})
   441  		session.WaitWithDefaultTimeout()
   442  		Expect(session.ExitCode()).To(Equal(125))
   443  		Expect(session.ErrorToString()).To(ContainSubstring("conflicting port mappings for host port 1999"))
   444  	})
   445  
   446  	It("podman ps test with multiple port range", func() {
   447  		session := podmanTest.Podman([]string{
   448  			"run", "-dt",
   449  			"-p", "3000-3001:3000-3001",
   450  			"-p", "3100-3102:4000-4002",
   451  			"-p", "30080:30080",
   452  			"-p", "30443:30443",
   453  			"-p", "8000:8080",
   454  			ALPINE, "top"},
   455  		)
   456  		session.WaitWithDefaultTimeout()
   457  		Expect(session.ExitCode()).To(Equal(0))
   458  
   459  		session = podmanTest.Podman([]string{"ps", "--format", "{{.Ports}}"})
   460  		session.WaitWithDefaultTimeout()
   461  		Expect(session.OutputToString()).To(ContainSubstring(
   462  			"0.0.0.0:3000-3001->3000-3001/tcp, 0.0.0.0:3100-3102->4000-4002/tcp, 0.0.0.0:8000->8080/tcp, 0.0.0.0:30080->30080/tcp, 0.0.0.0:30443->30443/tcp",
   463  		))
   464  	})
   465  
   466  	It("podman ps sync flag", func() {
   467  		session := podmanTest.RunTopContainer("")
   468  		session.WaitWithDefaultTimeout()
   469  		Expect(session.ExitCode()).To(Equal(0))
   470  		fullCid := session.OutputToString()
   471  
   472  		result := podmanTest.Podman([]string{"ps", "-q", "--no-trunc", "--sync"})
   473  		result.WaitWithDefaultTimeout()
   474  		Expect(result.ExitCode()).To(Equal(0))
   475  		Expect(result.OutputToStringArray()[0]).To(Equal(fullCid))
   476  	})
   477  
   478  	It("podman ps filter name regexp", func() {
   479  		session := podmanTest.Podman([]string{"run", "-d", "--name", "test1", ALPINE, "top"})
   480  		session.WaitWithDefaultTimeout()
   481  		Expect(session.ExitCode()).To(Equal(0))
   482  		fullCid := session.OutputToString()
   483  
   484  		session2 := podmanTest.Podman([]string{"run", "-d", "--name", "test11", ALPINE, "top"})
   485  		session2.WaitWithDefaultTimeout()
   486  		Expect(session2.ExitCode()).To(Equal(0))
   487  
   488  		result := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc", "--filter", "name=test1"})
   489  		result.WaitWithDefaultTimeout()
   490  		Expect(result.ExitCode()).To(Equal(0))
   491  
   492  		output := result.OutputToStringArray()
   493  		Expect(len(output)).To(Equal(2))
   494  
   495  		result = podmanTest.Podman([]string{"ps", "-aq", "--no-trunc", "--filter", "name=test1$"})
   496  		result.WaitWithDefaultTimeout()
   497  		Expect(result.ExitCode()).To(Equal(0))
   498  
   499  		output = result.OutputToStringArray()
   500  		Expect(len(output)).To(Equal(1))
   501  		Expect(output[0]).To(Equal(fullCid))
   502  	})
   503  
   504  	It("podman ps quiet template", func() {
   505  		ctrName := "testCtr"
   506  		session := podmanTest.Podman([]string{"run", "-d", "--name", ctrName, ALPINE, "top"})
   507  		session.WaitWithDefaultTimeout()
   508  		Expect(session.ExitCode()).To(Equal(0))
   509  
   510  		result := podmanTest.Podman([]string{"ps", "-q", "-a", "--format", "{{ .Names }}"})
   511  		result.WaitWithDefaultTimeout()
   512  		Expect(result.ExitCode()).To(Equal(0))
   513  
   514  		output := result.OutputToStringArray()
   515  		Expect(len(output)).To(Equal(1))
   516  		Expect(output[0]).To(Equal(ctrName))
   517  	})
   518  
   519  	It("podman ps test with port shared with pod", func() {
   520  		podName := "testPod"
   521  		pod := podmanTest.Podman([]string{"pod", "create", "-p", "8080:80", "--name", podName})
   522  		pod.WaitWithDefaultTimeout()
   523  		Expect(pod.ExitCode()).To(Equal(0))
   524  
   525  		ctrName := "testCtr"
   526  		session := podmanTest.Podman([]string{"run", "--name", ctrName, "-dt", "--pod", podName, ALPINE, "top"})
   527  		session.WaitWithDefaultTimeout()
   528  		Expect(session.ExitCode()).To(Equal(0))
   529  
   530  		ps := podmanTest.Podman([]string{"ps", "--filter", fmt.Sprintf("name=%s", ctrName), "--format", "{{.Ports}}"})
   531  		ps.WaitWithDefaultTimeout()
   532  		Expect(ps.ExitCode()).To(Equal(0))
   533  		Expect(ps.OutputToString()).To(ContainSubstring("0.0.0.0:8080->80/tcp"))
   534  	})
   535  
   536  	It("podman ps truncate long create command", func() {
   537  		session := podmanTest.Podman([]string{"run", ALPINE, "echo", "very", "long", "create", "command"})
   538  		session.WaitWithDefaultTimeout()
   539  		Expect(session.ExitCode()).To(Equal(0))
   540  
   541  		session = podmanTest.Podman([]string{"ps", "-a"})
   542  		session.WaitWithDefaultTimeout()
   543  		Expect(session.OutputToString()).To(ContainSubstring("echo very long cr..."))
   544  	})
   545  	It("podman ps --format {{RunningFor}}", func() {
   546  		_, ec, _ := podmanTest.RunLsContainer("")
   547  		Expect(ec).To(Equal(0))
   548  
   549  		result := podmanTest.Podman([]string{"ps", "-a", "--format", "{{.RunningFor}}"})
   550  		result.WaitWithDefaultTimeout()
   551  		Expect(result.ExitCode()).To(Equal(0))
   552  		Expect(result.OutputToString()).To(ContainSubstring("ago"))
   553  	})
   554  
   555  	It("podman ps filter test", func() {
   556  		session := podmanTest.Podman([]string{"run", "-d", "--name", "test1", "--label", "foo=1",
   557  			"--label", "bar=2", "--volume", "volume1:/test", ALPINE, "top"})
   558  		session.WaitWithDefaultTimeout()
   559  		Expect(session.ExitCode()).To(Equal(0))
   560  		cid1 := session.OutputToString()
   561  
   562  		session = podmanTest.Podman([]string{"run", "--name", "test2", "--label", "foo=1",
   563  			ALPINE, "ls", "/fail"})
   564  		session.WaitWithDefaultTimeout()
   565  		Expect(session.ExitCode()).To(Equal(1))
   566  
   567  		session = podmanTest.Podman([]string{"create", "--name", "test3", ALPINE, cid1})
   568  		session.WaitWithDefaultTimeout()
   569  		Expect(session.ExitCode()).To(Equal(0))
   570  
   571  		session = podmanTest.Podman([]string{"run", "--name", "test4", "--volume", "volume1:/test1",
   572  			"--volume", "/:/test2", ALPINE, "ls"})
   573  		session.WaitWithDefaultTimeout()
   574  		Expect(session.ExitCode()).To(Equal(0))
   575  
   576  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "name=test"})
   577  		session.WaitWithDefaultTimeout()
   578  		Expect(session.ExitCode()).To(Equal(0))
   579  		Expect(len(session.OutputToStringArray())).To(Equal(5))
   580  		Expect(session.LineInOutputContains("test1")).To(BeTrue())
   581  		Expect(session.LineInOutputContains("test2")).To(BeTrue())
   582  		Expect(session.LineInOutputContains("test3")).To(BeTrue())
   583  		Expect(session.LineInOutputContains("test4")).To(BeTrue())
   584  
   585  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "name=test1", "--filter", "name=test2"})
   586  		session.WaitWithDefaultTimeout()
   587  		Expect(session.ExitCode()).To(Equal(0))
   588  		Expect(len(session.OutputToStringArray())).To(Equal(3))
   589  		Expect(session.LineInOutputContains("test1")).To(BeTrue())
   590  		Expect(session.LineInOutputContains("test2")).To(BeTrue())
   591  
   592  		// check container id matches with regex
   593  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "id=" + cid1[:40], "--filter", "id=" + cid1 + "$"})
   594  		session.WaitWithDefaultTimeout()
   595  		Expect(session.ExitCode()).To(Equal(0))
   596  		Expect(len(session.OutputToStringArray())).To(Equal(2))
   597  		Expect(session.LineInOutputContains("test1")).To(BeTrue())
   598  
   599  		session = podmanTest.Podman([]string{"ps", "--filter", "status=created"})
   600  		session.WaitWithDefaultTimeout()
   601  		Expect(session.ExitCode()).To(Equal(0))
   602  		Expect(len(session.OutputToStringArray())).To(Equal(2))
   603  		Expect(session.LineInOutputContains("test3")).To(BeTrue())
   604  
   605  		session = podmanTest.Podman([]string{"ps", "--filter", "status=created", "--filter", "status=exited"})
   606  		session.WaitWithDefaultTimeout()
   607  		Expect(session.ExitCode()).To(Equal(0))
   608  		Expect(len(session.OutputToStringArray())).To(Equal(4))
   609  		Expect(session.LineInOutputContains("test2")).To(BeTrue())
   610  		Expect(session.LineInOutputContains("test3")).To(BeTrue())
   611  		Expect(session.LineInOutputContains("test4")).To(BeTrue())
   612  
   613  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "label=foo=1"})
   614  		session.WaitWithDefaultTimeout()
   615  		Expect(session.ExitCode()).To(Equal(0))
   616  		Expect(len(session.OutputToStringArray())).To(Equal(3))
   617  		Expect(session.LineInOutputContains("test1")).To(BeTrue())
   618  		Expect(session.LineInOutputContains("test2")).To(BeTrue())
   619  
   620  		session = podmanTest.Podman([]string{"ps", "--filter", "label=foo=1", "--filter", "status=exited"})
   621  		session.WaitWithDefaultTimeout()
   622  		Expect(session.ExitCode()).To(Equal(0))
   623  		Expect(len(session.OutputToStringArray())).To(Equal(2))
   624  		Expect(session.LineInOutputContains("test2")).To(BeTrue())
   625  
   626  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "label=foo=1", "--filter", "label=non=1"})
   627  		session.WaitWithDefaultTimeout()
   628  		Expect(session.ExitCode()).To(Equal(0))
   629  		Expect(len(session.OutputToStringArray())).To(Equal(1))
   630  
   631  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "label=foo=1", "--filter", "label=bar=2"})
   632  		session.WaitWithDefaultTimeout()
   633  		Expect(session.ExitCode()).To(Equal(0))
   634  		Expect(len(session.OutputToStringArray())).To(Equal(2))
   635  		Expect(session.LineInOutputContains("test1")).To(BeTrue())
   636  
   637  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "exited=1"})
   638  		session.WaitWithDefaultTimeout()
   639  		Expect(session.ExitCode()).To(Equal(0))
   640  		Expect(len(session.OutputToStringArray())).To(Equal(2))
   641  		Expect(session.LineInOutputContains("test2")).To(BeTrue())
   642  
   643  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "exited=1", "--filter", "exited=0"})
   644  		session.WaitWithDefaultTimeout()
   645  		Expect(session.ExitCode()).To(Equal(0))
   646  		Expect(len(session.OutputToStringArray())).To(Equal(3))
   647  		Expect(session.LineInOutputContains("test2")).To(BeTrue())
   648  		Expect(session.LineInOutputContains("test4")).To(BeTrue())
   649  
   650  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "volume=volume1"})
   651  		session.WaitWithDefaultTimeout()
   652  		Expect(session.ExitCode()).To(Equal(0))
   653  		Expect(len(session.OutputToStringArray())).To(Equal(3))
   654  		Expect(session.LineInOutputContains("test1")).To(BeTrue())
   655  		Expect(session.LineInOutputContains("test4")).To(BeTrue())
   656  
   657  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "volume=/:/test2"})
   658  		session.WaitWithDefaultTimeout()
   659  		Expect(session.ExitCode()).To(Equal(0))
   660  		Expect(len(session.OutputToStringArray())).To(Equal(2))
   661  		Expect(session.LineInOutputContains("test4")).To(BeTrue())
   662  
   663  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "before=test2"})
   664  		session.WaitWithDefaultTimeout()
   665  		Expect(session.ExitCode()).To(Equal(0))
   666  		Expect(len(session.OutputToStringArray())).To(Equal(2))
   667  		Expect(session.LineInOutputContains("test1")).To(BeTrue())
   668  
   669  		session = podmanTest.Podman([]string{"ps", "--all", "--filter", "since=test2"})
   670  		session.WaitWithDefaultTimeout()
   671  		Expect(session.ExitCode()).To(Equal(0))
   672  		Expect(len(session.OutputToStringArray())).To(Equal(3))
   673  		Expect(session.LineInOutputContains("test3")).To(BeTrue())
   674  		Expect(session.LineInOutputContains("test4")).To(BeTrue())
   675  	})
   676  })