github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/test/e2e/pod_stats_test.go (about)

     1  // +build !remoteclient
     2  
     3  package integration
     4  
     5  import (
     6  	"os"
     7  
     8  	"github.com/containers/libpod/pkg/cgroups"
     9  	. "github.com/containers/libpod/test/utils"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  )
    13  
    14  var _ = Describe("Podman pod stats", func() {
    15  	var (
    16  		tempdir    string
    17  		podmanTest *PodmanTestIntegration
    18  	)
    19  
    20  	BeforeEach(func() {
    21  		cgroupsv2, err := cgroups.IsCgroup2UnifiedMode()
    22  		Expect(err).To(BeNil())
    23  
    24  		if os.Geteuid() != 0 && !cgroupsv2 {
    25  			Skip("This function is not enabled for rootless podman not running on cgroups v2")
    26  		}
    27  
    28  		tempdir, err = CreateTempDirInTempDir()
    29  		if err != nil {
    30  			os.Exit(1)
    31  		}
    32  		podmanTest = PodmanTestCreate(tempdir)
    33  		podmanTest.Setup()
    34  		podmanTest.SeedImages()
    35  	})
    36  
    37  	AfterEach(func() {
    38  		podmanTest.CleanupPod()
    39  		f := CurrentGinkgoTestDescription()
    40  		processTestResult(f)
    41  
    42  	})
    43  	It("podman stats should run with no pods", func() {
    44  		session := podmanTest.Podman([]string{"pod", "stats", "--no-stream"})
    45  		session.WaitWithDefaultTimeout()
    46  		Expect(session.ExitCode()).To(Equal(0))
    47  	})
    48  
    49  	It("podman stats with a bogus pod", func() {
    50  		session := podmanTest.Podman([]string{"pod", "stats", "foobar"})
    51  		session.WaitWithDefaultTimeout()
    52  		Expect(session.ExitCode()).To(Equal(125))
    53  	})
    54  
    55  	It("podman stats on a specific running pod", func() {
    56  		_, ec, podid := podmanTest.CreatePod("")
    57  		Expect(ec).To(Equal(0))
    58  
    59  		session := podmanTest.RunTopContainerInPod("", podid)
    60  		session.WaitWithDefaultTimeout()
    61  		Expect(session.ExitCode()).To(Equal(0))
    62  
    63  		session = podmanTest.RunTopContainerInPod("", podid)
    64  		session.WaitWithDefaultTimeout()
    65  		Expect(session.ExitCode()).To(Equal(0))
    66  
    67  		stats := podmanTest.Podman([]string{"pod", "stats", "--no-stream", podid})
    68  		stats.WaitWithDefaultTimeout()
    69  		Expect(stats.ExitCode()).To(Equal(0))
    70  	})
    71  
    72  	It("podman stats on a specific running pod with shortID", func() {
    73  		_, ec, podid := podmanTest.CreatePod("")
    74  		Expect(ec).To(Equal(0))
    75  
    76  		session := podmanTest.RunTopContainerInPod("", podid)
    77  		session.WaitWithDefaultTimeout()
    78  		Expect(session.ExitCode()).To(Equal(0))
    79  
    80  		session = podmanTest.RunTopContainerInPod("", podid)
    81  		session.WaitWithDefaultTimeout()
    82  		Expect(session.ExitCode()).To(Equal(0))
    83  
    84  		stats := podmanTest.Podman([]string{"pod", "stats", "--no-stream", podid[:5]})
    85  		stats.WaitWithDefaultTimeout()
    86  		Expect(stats.ExitCode()).To(Equal(0))
    87  	})
    88  
    89  	It("podman stats on a specific running pod with name", func() {
    90  		_, ec, podid := podmanTest.CreatePod("test")
    91  		Expect(ec).To(Equal(0))
    92  
    93  		session := podmanTest.RunTopContainerInPod("", podid)
    94  		session.WaitWithDefaultTimeout()
    95  		Expect(session.ExitCode()).To(Equal(0))
    96  
    97  		session = podmanTest.RunTopContainerInPod("", podid)
    98  		session.WaitWithDefaultTimeout()
    99  		Expect(session.ExitCode()).To(Equal(0))
   100  
   101  		stats := podmanTest.Podman([]string{"pod", "stats", "--no-stream", "test"})
   102  		stats.WaitWithDefaultTimeout()
   103  		Expect(stats.ExitCode()).To(Equal(0))
   104  	})
   105  
   106  	It("podman stats on running pods", func() {
   107  		_, ec, podid := podmanTest.CreatePod("")
   108  		Expect(ec).To(Equal(0))
   109  
   110  		session := podmanTest.RunTopContainerInPod("", podid)
   111  		session.WaitWithDefaultTimeout()
   112  		Expect(session.ExitCode()).To(Equal(0))
   113  
   114  		session = podmanTest.RunTopContainerInPod("", podid)
   115  		session.WaitWithDefaultTimeout()
   116  		Expect(session.ExitCode()).To(Equal(0))
   117  
   118  		stats := podmanTest.Podman([]string{"pod", "stats", "--no-stream"})
   119  		stats.WaitWithDefaultTimeout()
   120  		Expect(stats.ExitCode()).To(Equal(0))
   121  	})
   122  
   123  	It("podman stats on all pods", func() {
   124  		_, ec, podid := podmanTest.CreatePod("")
   125  		Expect(ec).To(Equal(0))
   126  
   127  		session := podmanTest.RunTopContainerInPod("", podid)
   128  		session.WaitWithDefaultTimeout()
   129  		Expect(session.ExitCode()).To(Equal(0))
   130  
   131  		session = podmanTest.RunTopContainerInPod("", podid)
   132  		session.WaitWithDefaultTimeout()
   133  		Expect(session.ExitCode()).To(Equal(0))
   134  
   135  		stats := podmanTest.Podman([]string{"pod", "stats", "--no-stream", "-a"})
   136  		stats.WaitWithDefaultTimeout()
   137  		Expect(stats.ExitCode()).To(Equal(0))
   138  	})
   139  
   140  	It("podman stats with json output", func() {
   141  		_, ec, podid := podmanTest.CreatePod("")
   142  		Expect(ec).To(Equal(0))
   143  
   144  		session := podmanTest.RunTopContainerInPod("", podid)
   145  		session.WaitWithDefaultTimeout()
   146  		Expect(session.ExitCode()).To(Equal(0))
   147  
   148  		session = podmanTest.RunTopContainerInPod("", podid)
   149  		session.WaitWithDefaultTimeout()
   150  		Expect(session.ExitCode()).To(Equal(0))
   151  
   152  		stats := podmanTest.Podman([]string{"pod", "stats", "--format", "json", "--no-stream", "-a"})
   153  		stats.WaitWithDefaultTimeout()
   154  		Expect(stats.ExitCode()).To(Equal(0))
   155  		Expect(stats.IsJSONOutputValid()).To(BeTrue())
   156  	})
   157  	It("podman stats with GO template", func() {
   158  		_, ec, podid := podmanTest.CreatePod("")
   159  		Expect(ec).To(Equal(0))
   160  
   161  		session := podmanTest.RunTopContainerInPod("", podid)
   162  		session.WaitWithDefaultTimeout()
   163  		Expect(session.ExitCode()).To(Equal(0))
   164  		stats := podmanTest.Podman([]string{"pod", "stats", "-a", "--no-reset", "--no-stream", "--format", "\"table {{.CID}} {{.Pod}} {{.Mem}} {{.MemUsage}} {{.CPU}} {{.NetIO}} {{.BlockIO}} {{.PIDS}} {{.Pod}}\""})
   165  		stats.WaitWithDefaultTimeout()
   166  		Expect(stats.ExitCode()).To(Equal(0))
   167  	})
   168  
   169  	It("podman stats with invalid GO template", func() {
   170  		_, ec, podid := podmanTest.CreatePod("")
   171  		Expect(ec).To(Equal(0))
   172  
   173  		session := podmanTest.RunTopContainerInPod("", podid)
   174  		session.WaitWithDefaultTimeout()
   175  		Expect(session.ExitCode()).To(Equal(0))
   176  		stats := podmanTest.Podman([]string{"pod", "stats", "-a", "--no-reset", "--no-stream", "--format", "\"table {{.ID}} \""})
   177  		stats.WaitWithDefaultTimeout()
   178  		Expect(stats).To(ExitWithError())
   179  	})
   180  
   181  })