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

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