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

     1  package integration
     2  
     3  import (
     4  	"os"
     5  	"time"
     6  
     7  	. "github.com/containers/libpod/test/utils"
     8  	. "github.com/onsi/ginkgo"
     9  	. "github.com/onsi/gomega"
    10  )
    11  
    12  var _ = Describe("Podman restart", func() {
    13  	var (
    14  		tempdir    string
    15  		err        error
    16  		podmanTest *PodmanTestIntegration
    17  	)
    18  
    19  	BeforeEach(func() {
    20  		tempdir, err = CreateTempDirInTempDir()
    21  		if err != nil {
    22  			os.Exit(1)
    23  		}
    24  		podmanTest = PodmanTestCreate(tempdir)
    25  		podmanTest.Setup()
    26  		podmanTest.SeedImages()
    27  	})
    28  
    29  	AfterEach(func() {
    30  		podmanTest.Cleanup()
    31  		f := CurrentGinkgoTestDescription()
    32  		processTestResult(f)
    33  
    34  	})
    35  
    36  	It("Podman restart bogus container", func() {
    37  		session := podmanTest.Podman([]string{"start", "123"})
    38  		session.WaitWithDefaultTimeout()
    39  		Expect(session.ExitCode()).To(Equal(125))
    40  	})
    41  
    42  	It("Podman restart stopped container by name", func() {
    43  		_, exitCode, _ := podmanTest.RunLsContainer("test1")
    44  		Expect(exitCode).To(Equal(0))
    45  		startTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1"})
    46  		startTime.WaitWithDefaultTimeout()
    47  
    48  		session := podmanTest.Podman([]string{"restart", "test1"})
    49  		session.WaitWithDefaultTimeout()
    50  		Expect(session.ExitCode()).To(Equal(0))
    51  		restartTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1"})
    52  		restartTime.WaitWithDefaultTimeout()
    53  		Expect(restartTime.OutputToString()).To(Not(Equal(startTime.OutputToString())))
    54  	})
    55  
    56  	It("Podman restart stopped container by ID", func() {
    57  		session := podmanTest.Podman([]string{"create", "-d", ALPINE, "ls"})
    58  		session.WaitWithDefaultTimeout()
    59  		Expect(session.ExitCode()).To(Equal(0))
    60  		cid := session.OutputToString()
    61  		startTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", cid})
    62  		startTime.WaitWithDefaultTimeout()
    63  
    64  		startSession := podmanTest.Podman([]string{"start", cid})
    65  		startSession.WaitWithDefaultTimeout()
    66  		Expect(startSession.ExitCode()).To(Equal(0))
    67  
    68  		session2 := podmanTest.Podman([]string{"restart", cid})
    69  		session2.WaitWithDefaultTimeout()
    70  		Expect(session2.ExitCode()).To(Equal(0))
    71  		restartTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", cid})
    72  		restartTime.WaitWithDefaultTimeout()
    73  		Expect(restartTime.OutputToString()).To(Not(Equal(startTime.OutputToString())))
    74  	})
    75  
    76  	It("Podman restart running container", func() {
    77  		_ = podmanTest.RunTopContainer("test1")
    78  		ok := WaitForContainer(podmanTest)
    79  		Expect(ok).To(BeTrue())
    80  		startTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1"})
    81  		startTime.WaitWithDefaultTimeout()
    82  
    83  		session := podmanTest.Podman([]string{"restart", "test1"})
    84  		session.WaitWithDefaultTimeout()
    85  		Expect(session.ExitCode()).To(Equal(0))
    86  		restartTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1"})
    87  		restartTime.WaitWithDefaultTimeout()
    88  		Expect(restartTime.OutputToString()).To(Not(Equal(startTime.OutputToString())))
    89  	})
    90  
    91  	It("Podman container restart running container", func() {
    92  		_ = podmanTest.RunTopContainer("test1")
    93  		ok := WaitForContainer(podmanTest)
    94  		Expect(ok).To(BeTrue())
    95  		startTime := podmanTest.Podman([]string{"container", "inspect", "--format='{{.State.StartedAt}}'", "test1"})
    96  		startTime.WaitWithDefaultTimeout()
    97  
    98  		session := podmanTest.Podman([]string{"container", "restart", "test1"})
    99  		session.WaitWithDefaultTimeout()
   100  		Expect(session.ExitCode()).To(Equal(0))
   101  		restartTime := podmanTest.Podman([]string{"container", "inspect", "--format='{{.State.StartedAt}}'", "test1"})
   102  		restartTime.WaitWithDefaultTimeout()
   103  		Expect(restartTime.OutputToString()).To(Not(Equal(startTime.OutputToString())))
   104  	})
   105  
   106  	It("Podman restart multiple containers", func() {
   107  		_, exitCode, _ := podmanTest.RunLsContainer("test1")
   108  		Expect(exitCode).To(Equal(0))
   109  
   110  		_, exitCode, _ = podmanTest.RunLsContainer("test2")
   111  		Expect(exitCode).To(Equal(0))
   112  		startTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1", "test2"})
   113  		startTime.WaitWithDefaultTimeout()
   114  
   115  		session := podmanTest.Podman([]string{"restart", "test1", "test2"})
   116  		session.WaitWithDefaultTimeout()
   117  		Expect(session.ExitCode()).To(Equal(0))
   118  		restartTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1", "test2"})
   119  		restartTime.WaitWithDefaultTimeout()
   120  		Expect(restartTime.OutputToStringArray()[0]).To(Not(Equal(startTime.OutputToStringArray()[0])))
   121  		Expect(restartTime.OutputToStringArray()[1]).To(Not(Equal(startTime.OutputToStringArray()[1])))
   122  	})
   123  
   124  	It("Podman restart the latest container", func() {
   125  		_, exitCode, _ := podmanTest.RunLsContainer("test1")
   126  		Expect(exitCode).To(Equal(0))
   127  
   128  		_, exitCode, _ = podmanTest.RunLsContainer("test2")
   129  		Expect(exitCode).To(Equal(0))
   130  
   131  		startTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1", "test2"})
   132  		startTime.WaitWithDefaultTimeout()
   133  
   134  		session := podmanTest.Podman([]string{"restart", "-l"})
   135  		session.WaitWithDefaultTimeout()
   136  		Expect(session.ExitCode()).To(Equal(0))
   137  		restartTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1", "test2"})
   138  		restartTime.WaitWithDefaultTimeout()
   139  		Expect(restartTime.OutputToStringArray()[0]).To(Equal(startTime.OutputToStringArray()[0]))
   140  		Expect(restartTime.OutputToStringArray()[1]).To(Not(Equal(startTime.OutputToStringArray()[1])))
   141  	})
   142  
   143  	It("Podman restart non-stop container with short timeout", func() {
   144  		session := podmanTest.Podman([]string{"run", "-d", "--name", "test1", "--env", "STOPSIGNAL=SIGKILL", ALPINE, "sleep", "999"})
   145  		session.WaitWithDefaultTimeout()
   146  		Expect(session.ExitCode()).To(Equal(0))
   147  		startTime := time.Now()
   148  		session = podmanTest.Podman([]string{"restart", "-t", "2", "test1"})
   149  		session.WaitWithDefaultTimeout()
   150  		Expect(session.ExitCode()).To(Equal(0))
   151  		timeSince := time.Since(startTime)
   152  		Expect(timeSince < 10*time.Second).To(BeTrue())
   153  		Expect(timeSince > 2*time.Second).To(BeTrue())
   154  	})
   155  
   156  	It("Podman restart --all", func() {
   157  		_, exitCode, _ := podmanTest.RunLsContainer("test1")
   158  		Expect(exitCode).To(Equal(0))
   159  
   160  		test2 := podmanTest.RunTopContainer("test2")
   161  		test2.WaitWithDefaultTimeout()
   162  		Expect(test2.ExitCode()).To(Equal(0))
   163  
   164  		startTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1", "test2"})
   165  		startTime.WaitWithDefaultTimeout()
   166  
   167  		session := podmanTest.Podman([]string{"restart", "--all"})
   168  		session.WaitWithDefaultTimeout()
   169  		Expect(session.ExitCode()).To(Equal(0))
   170  		restartTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1", "test2"})
   171  		restartTime.WaitWithDefaultTimeout()
   172  		Expect(restartTime.OutputToStringArray()[0]).To(Not(Equal(startTime.OutputToStringArray()[0])))
   173  		Expect(restartTime.OutputToStringArray()[1]).To(Not(Equal(startTime.OutputToStringArray()[1])))
   174  	})
   175  
   176  	It("Podman restart --all --running", func() {
   177  		_, exitCode, _ := podmanTest.RunLsContainer("test1")
   178  		Expect(exitCode).To(Equal(0))
   179  
   180  		test2 := podmanTest.RunTopContainer("test2")
   181  		test2.WaitWithDefaultTimeout()
   182  		Expect(test2.ExitCode()).To(Equal(0))
   183  
   184  		startTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1", "test2"})
   185  		startTime.WaitWithDefaultTimeout()
   186  
   187  		session := podmanTest.Podman([]string{"restart", "-a", "--running"})
   188  		session.WaitWithDefaultTimeout()
   189  		Expect(session.ExitCode()).To(Equal(0))
   190  		restartTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1", "test2"})
   191  		restartTime.WaitWithDefaultTimeout()
   192  		Expect(restartTime.OutputToStringArray()[0]).To(Equal(startTime.OutputToStringArray()[0]))
   193  		Expect(restartTime.OutputToStringArray()[1]).To(Not(Equal(startTime.OutputToStringArray()[1])))
   194  	})
   195  })