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