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

     1  // +build !remoteclient
     2  
     3  package integration
     4  
     5  import (
     6  	"fmt"
     7  	"os"
     8  
     9  	"github.com/containers/libpod/pkg/cgroups"
    10  	. "github.com/containers/libpod/test/utils"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  // TODO: we need to check the output. Currently, we only check the exit codes
    16  // which is not enough.
    17  var _ = Describe("Podman stats", func() {
    18  	var (
    19  		tempdir    string
    20  		podmanTest *PodmanTestIntegration
    21  	)
    22  
    23  	BeforeEach(func() {
    24  		cgroupsv2, err := cgroups.IsCgroup2UnifiedMode()
    25  		Expect(err).To(BeNil())
    26  
    27  		if os.Geteuid() != 0 && !cgroupsv2 {
    28  			Skip("This function is not enabled for rootless podman not running on cgroups v2")
    29  		}
    30  		tempdir, err = CreateTempDirInTempDir()
    31  		if err != nil {
    32  			os.Exit(1)
    33  		}
    34  		podmanTest = PodmanTestCreate(tempdir)
    35  		podmanTest.Setup()
    36  		podmanTest.SeedImages()
    37  	})
    38  
    39  	AfterEach(func() {
    40  		podmanTest.Cleanup()
    41  		f := CurrentGinkgoTestDescription()
    42  		processTestResult(f)
    43  
    44  	})
    45  
    46  	It("podman stats with bogus container", func() {
    47  		session := podmanTest.Podman([]string{"stats", "--no-stream", "123"})
    48  		session.WaitWithDefaultTimeout()
    49  		Expect(session.ExitCode()).To(Equal(125))
    50  	})
    51  
    52  	It("podman stats on a running container", func() {
    53  		session := podmanTest.RunTopContainer("")
    54  		session.WaitWithDefaultTimeout()
    55  		Expect(session.ExitCode()).To(Equal(0))
    56  		cid := session.OutputToString()
    57  		session = podmanTest.Podman([]string{"stats", "--no-stream", cid})
    58  		session.WaitWithDefaultTimeout()
    59  		Expect(session.ExitCode()).To(Equal(0))
    60  	})
    61  
    62  	It("podman stats on all containers", func() {
    63  		session := podmanTest.RunTopContainer("")
    64  		session.WaitWithDefaultTimeout()
    65  		Expect(session.ExitCode()).To(Equal(0))
    66  		session = podmanTest.Podman([]string{"stats", "--no-stream", "-a"})
    67  		session.WaitWithDefaultTimeout()
    68  		Expect(session.ExitCode()).To(Equal(0))
    69  	})
    70  
    71  	It("podman stats on all running containers", func() {
    72  		session := podmanTest.RunTopContainer("")
    73  		session.WaitWithDefaultTimeout()
    74  		Expect(session.ExitCode()).To(Equal(0))
    75  		session = podmanTest.Podman([]string{"stats", "--no-stream"})
    76  		session.WaitWithDefaultTimeout()
    77  		Expect(session.ExitCode()).To(Equal(0))
    78  	})
    79  
    80  	It("podman stats only output cids", func() {
    81  		session := podmanTest.RunTopContainer("")
    82  		session.WaitWithDefaultTimeout()
    83  		Expect(session.ExitCode()).To(Equal(0))
    84  		session = podmanTest.Podman([]string{"stats", "--all", "--no-stream", "--format", "\"{{.ID}}\""})
    85  		session.WaitWithDefaultTimeout()
    86  		Expect(session.ExitCode()).To(Equal(0))
    87  	})
    88  
    89  	It("podman stats with json output", func() {
    90  		session := podmanTest.RunTopContainer("")
    91  		session.WaitWithDefaultTimeout()
    92  		Expect(session.ExitCode()).To(Equal(0))
    93  		session = podmanTest.Podman([]string{"stats", "--all", "--no-stream", "--format", "json"})
    94  		session.WaitWithDefaultTimeout()
    95  		Expect(session.ExitCode()).To(Equal(0))
    96  		Expect(session.IsJSONOutputValid()).To(BeTrue())
    97  	})
    98  
    99  	It("podman stats on a container with no net ns", func() {
   100  		session := podmanTest.Podman([]string{"run", "-d", "--net", "none", ALPINE, "top"})
   101  		session.WaitWithDefaultTimeout()
   102  		Expect(session.ExitCode()).To(Equal(0))
   103  		session = podmanTest.Podman([]string{"stats", "--no-stream", "-a"})
   104  		session.WaitWithDefaultTimeout()
   105  		Expect(session.ExitCode()).To(Equal(0))
   106  	})
   107  
   108  	It("podman stats on a container that joined another's net ns", func() {
   109  		session := podmanTest.RunTopContainer("")
   110  		session.WaitWithDefaultTimeout()
   111  		Expect(session.ExitCode()).To(Equal(0))
   112  		cid := session.OutputToString()
   113  
   114  		session = podmanTest.Podman([]string{"run", "-d", "--net", fmt.Sprintf("container:%s", cid), ALPINE, "top"})
   115  		session.WaitWithDefaultTimeout()
   116  		Expect(session.ExitCode()).To(Equal(0))
   117  
   118  		session = podmanTest.Podman([]string{"stats", "--no-stream", "-a"})
   119  		session.WaitWithDefaultTimeout()
   120  		Expect(session.ExitCode()).To(Equal(0))
   121  	})
   122  })