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

     1  package integration
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  	"path/filepath"
     8  	"strings"
     9  
    10  	. "github.com/containers/podman/v3/test/utils"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  	. "github.com/onsi/gomega/gexec"
    14  )
    15  
    16  var _ = Describe("Podman pause", func() {
    17  	var (
    18  		tempdir    string
    19  		err        error
    20  		podmanTest *PodmanTestIntegration
    21  	)
    22  
    23  	pausedState := "paused"
    24  	createdState := "created"
    25  
    26  	BeforeEach(func() {
    27  		SkipIfRootlessCgroupsV1("Pause is not supported in cgroups v1")
    28  		tempdir, err = CreateTempDirInTempDir()
    29  		if err != nil {
    30  			os.Exit(1)
    31  		}
    32  
    33  		if CGROUPSV2 {
    34  			b, err := ioutil.ReadFile("/proc/self/cgroup")
    35  			if err != nil {
    36  				Skip("cannot read self cgroup")
    37  			}
    38  
    39  			path := filepath.Join("/sys/fs/cgroup", strings.TrimSuffix(strings.Replace(string(b), "0::", "", 1), "\n"), "cgroup.freeze")
    40  			_, err = os.Stat(path)
    41  			if err != nil {
    42  				Skip("freezer controller not available on the current kernel")
    43  			}
    44  		}
    45  
    46  		podmanTest = PodmanTestCreate(tempdir)
    47  		podmanTest.Setup()
    48  		podmanTest.SeedImages()
    49  	})
    50  
    51  	AfterEach(func() {
    52  		podmanTest.Cleanup()
    53  		f := CurrentGinkgoTestDescription()
    54  		processTestResult(f)
    55  
    56  	})
    57  
    58  	It("podman pause bogus container", func() {
    59  		session := podmanTest.Podman([]string{"pause", "foobar"})
    60  		session.WaitWithDefaultTimeout()
    61  		Expect(session).To(ExitWithError())
    62  	})
    63  
    64  	It("podman unpause bogus container", func() {
    65  		session := podmanTest.Podman([]string{"unpause", "foobar"})
    66  		session.WaitWithDefaultTimeout()
    67  		Expect(session).To(ExitWithError())
    68  	})
    69  
    70  	It("podman pause a created container by id", func() {
    71  		session := podmanTest.Podman([]string{"create", ALPINE, "ls"})
    72  		session.WaitWithDefaultTimeout()
    73  		Expect(session).Should(Exit(0))
    74  		cid := session.OutputToString()
    75  
    76  		result := podmanTest.Podman([]string{"pause", cid})
    77  		result.WaitWithDefaultTimeout()
    78  
    79  		Expect(result).To(ExitWithError())
    80  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
    81  		Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(createdState))
    82  
    83  		// check we can read stats for a paused container
    84  		result = podmanTest.Podman([]string{"stats", "--no-stream", cid})
    85  		result.WaitWithDefaultTimeout()
    86  		Expect(result).To(ExitWithError())
    87  	})
    88  
    89  	It("podman pause a running container by id", func() {
    90  		session := podmanTest.RunTopContainer("")
    91  		session.WaitWithDefaultTimeout()
    92  		Expect(session).Should(Exit(0))
    93  		cid := session.OutputToString()
    94  		result := podmanTest.Podman([]string{"pause", cid})
    95  		result.WaitWithDefaultTimeout()
    96  
    97  		Expect(result).Should(Exit(0))
    98  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
    99  		Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState))
   100  
   101  		result = podmanTest.Podman([]string{"unpause", cid})
   102  		result.WaitWithDefaultTimeout()
   103  	})
   104  
   105  	It("podman container pause a running container by id", func() {
   106  		session := podmanTest.RunTopContainer("")
   107  		session.WaitWithDefaultTimeout()
   108  		Expect(session).Should(Exit(0))
   109  		cid := session.OutputToString()
   110  
   111  		result := podmanTest.Podman([]string{"container", "pause", cid})
   112  		result.WaitWithDefaultTimeout()
   113  
   114  		Expect(result).Should(Exit(0))
   115  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   116  		Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState))
   117  
   118  		result = podmanTest.Podman([]string{"container", "unpause", cid})
   119  		result.WaitWithDefaultTimeout()
   120  	})
   121  
   122  	It("podman unpause a running container by id", func() {
   123  		session := podmanTest.RunTopContainer("")
   124  		session.WaitWithDefaultTimeout()
   125  		Expect(session).Should(Exit(0))
   126  		cid := session.OutputToString()
   127  
   128  		result := podmanTest.Podman([]string{"unpause", cid})
   129  		result.WaitWithDefaultTimeout()
   130  
   131  		Expect(result).Should(Exit(125))
   132  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
   133  
   134  	})
   135  
   136  	It("podman remove a paused container by id without force", func() {
   137  		session := podmanTest.RunTopContainer("")
   138  		session.WaitWithDefaultTimeout()
   139  		Expect(session).Should(Exit(0))
   140  		cid := session.OutputToString()
   141  
   142  		result := podmanTest.Podman([]string{"pause", cid})
   143  		result.WaitWithDefaultTimeout()
   144  
   145  		Expect(result).Should(Exit(0))
   146  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   147  		Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState))
   148  
   149  		result = podmanTest.Podman([]string{"rm", cid})
   150  		result.WaitWithDefaultTimeout()
   151  
   152  		Expect(result).Should(Exit(2))
   153  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   154  		Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState))
   155  
   156  	})
   157  
   158  	It("podman remove a paused container by id with force", func() {
   159  		session := podmanTest.RunTopContainer("")
   160  		session.WaitWithDefaultTimeout()
   161  		Expect(session).Should(Exit(0))
   162  		cid := session.OutputToString()
   163  
   164  		result := podmanTest.Podman([]string{"pause", cid})
   165  		result.WaitWithDefaultTimeout()
   166  
   167  		Expect(result).Should(Exit(0))
   168  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   169  		Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState))
   170  
   171  		result = podmanTest.Podman([]string{"rm", "--force", cid})
   172  		result.WaitWithDefaultTimeout()
   173  
   174  		Expect(result).Should(Exit(0))
   175  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   176  	})
   177  
   178  	It("podman stop a paused container by id", func() {
   179  		session := podmanTest.RunTopContainer("")
   180  		session.WaitWithDefaultTimeout()
   181  		Expect(session).Should(Exit(0))
   182  		cid := session.OutputToString()
   183  
   184  		result := podmanTest.Podman([]string{"pause", cid})
   185  		result.WaitWithDefaultTimeout()
   186  
   187  		Expect(result).Should(Exit(0))
   188  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   189  		Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState))
   190  
   191  		result = podmanTest.Podman([]string{"stop", cid})
   192  		result.WaitWithDefaultTimeout()
   193  
   194  		Expect(result).Should(Exit(125))
   195  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   196  		Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(ContainSubstring(pausedState))
   197  
   198  		result = podmanTest.Podman([]string{"unpause", cid})
   199  		result.WaitWithDefaultTimeout()
   200  		Expect(result).Should(Exit(0))
   201  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
   202  
   203  		result = podmanTest.Podman([]string{"rm", cid})
   204  		result.WaitWithDefaultTimeout()
   205  		Expect(result).Should(Exit(2))
   206  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
   207  
   208  		result = podmanTest.Podman([]string{"rm", "-f", cid})
   209  		result.WaitWithDefaultTimeout()
   210  		Expect(result).Should(Exit(0))
   211  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   212  
   213  	})
   214  
   215  	It("podman pause a running container by name", func() {
   216  		session := podmanTest.RunTopContainer("test1")
   217  		session.WaitWithDefaultTimeout()
   218  		Expect(session).Should(Exit(0))
   219  
   220  		result := podmanTest.Podman([]string{"pause", "test1"})
   221  		result.WaitWithDefaultTimeout()
   222  
   223  		Expect(result).Should(Exit(0))
   224  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   225  		Expect(strings.ToLower(podmanTest.GetContainerStatus())).To(Equal(pausedState))
   226  
   227  		result = podmanTest.Podman([]string{"unpause", "test1"})
   228  		result.WaitWithDefaultTimeout()
   229  	})
   230  
   231  	It("podman pause a running container by id and another by name", func() {
   232  		session1 := podmanTest.RunTopContainer("test1")
   233  		session1.WaitWithDefaultTimeout()
   234  		Expect(session1).Should(Exit(0))
   235  
   236  		session2 := podmanTest.RunTopContainer("")
   237  		session2.WaitWithDefaultTimeout()
   238  		Expect(session2).Should(Exit(0))
   239  		cid2 := session2.OutputToString()
   240  
   241  		result := podmanTest.Podman([]string{"pause", cid2})
   242  		result.WaitWithDefaultTimeout()
   243  
   244  		Expect(result).Should(Exit(0))
   245  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
   246  
   247  		result = podmanTest.Podman([]string{"pause", "test1"})
   248  		result.WaitWithDefaultTimeout()
   249  
   250  		Expect(result).Should(Exit(0))
   251  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   252  
   253  		result = podmanTest.Podman([]string{"unpause", "test1"})
   254  		result.WaitWithDefaultTimeout()
   255  		result = podmanTest.Podman([]string{"unpause", cid2})
   256  		result.WaitWithDefaultTimeout()
   257  	})
   258  
   259  	It("Pause all containers (no containers exist)", func() {
   260  		result := podmanTest.Podman([]string{"pause", "--all"})
   261  		result.WaitWithDefaultTimeout()
   262  		Expect(result).Should(Exit(0))
   263  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   264  
   265  	})
   266  
   267  	It("Unpause all containers (no paused containers exist)", func() {
   268  		result := podmanTest.Podman([]string{"unpause", "--all"})
   269  		result.WaitWithDefaultTimeout()
   270  		Expect(result).Should(Exit(0))
   271  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   272  	})
   273  
   274  	It("Pause a bunch of running containers", func() {
   275  		for i := 0; i < 3; i++ {
   276  			name := fmt.Sprintf("test%d", i)
   277  			run := podmanTest.Podman([]string{"run", "-dt", "--name", name, nginx})
   278  			run.WaitWithDefaultTimeout()
   279  			Expect(run).Should(Exit(0))
   280  
   281  		}
   282  		running := podmanTest.Podman([]string{"ps", "-q"})
   283  		running.WaitWithDefaultTimeout()
   284  		Expect(running).Should(Exit(0))
   285  		Expect(len(running.OutputToStringArray())).To(Equal(3))
   286  
   287  		pause := podmanTest.Podman([]string{"pause", "--all"})
   288  		pause.WaitWithDefaultTimeout()
   289  		Expect(pause).Should(Exit(0))
   290  
   291  		running = podmanTest.Podman([]string{"ps", "-q"})
   292  		running.WaitWithDefaultTimeout()
   293  		Expect(running).Should(Exit(0))
   294  		Expect(len(running.OutputToStringArray())).To(Equal(0))
   295  
   296  		unpause := podmanTest.Podman([]string{"unpause", "--all"})
   297  		unpause.WaitWithDefaultTimeout()
   298  		Expect(unpause).Should(Exit(0))
   299  	})
   300  
   301  	It("Unpause a bunch of running containers", func() {
   302  		for i := 0; i < 3; i++ {
   303  			name := fmt.Sprintf("test%d", i)
   304  			run := podmanTest.Podman([]string{"run", "-dt", "--name", name, nginx})
   305  			run.WaitWithDefaultTimeout()
   306  			Expect(run).Should(Exit(0))
   307  
   308  		}
   309  		pause := podmanTest.Podman([]string{"pause", "--all"})
   310  		pause.WaitWithDefaultTimeout()
   311  		Expect(pause).Should(Exit(0))
   312  
   313  		unpause := podmanTest.Podman([]string{"unpause", "--all"})
   314  		unpause.WaitWithDefaultTimeout()
   315  		Expect(unpause).Should(Exit(0))
   316  
   317  		running := podmanTest.Podman([]string{"ps", "-q"})
   318  		running.WaitWithDefaultTimeout()
   319  		Expect(running).Should(Exit(0))
   320  		Expect(len(running.OutputToStringArray())).To(Equal(3))
   321  	})
   322  
   323  })