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

     1  package integration
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"strconv"
     7  	"strings"
     8  
     9  	. "github.com/containers/podman/v3/test/utils"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  	. "github.com/onsi/gomega/gexec"
    13  )
    14  
    15  var _ = Describe("Podman start", func() {
    16  	var (
    17  		tempdir    string
    18  		err        error
    19  		podmanTest *PodmanTestIntegration
    20  	)
    21  
    22  	BeforeEach(func() {
    23  		tempdir, err = CreateTempDirInTempDir()
    24  		if err != nil {
    25  			os.Exit(1)
    26  		}
    27  		podmanTest = PodmanTestCreate(tempdir)
    28  		podmanTest.Setup()
    29  		podmanTest.SeedImages()
    30  	})
    31  
    32  	AfterEach(func() {
    33  		podmanTest.Cleanup()
    34  		f := CurrentGinkgoTestDescription()
    35  		processTestResult(f)
    36  
    37  	})
    38  
    39  	It("podman start bogus container", func() {
    40  		session := podmanTest.Podman([]string{"start", "123"})
    41  		session.WaitWithDefaultTimeout()
    42  		Expect(session).Should(Exit(125))
    43  	})
    44  
    45  	It("podman start single container by id", func() {
    46  		session := podmanTest.Podman([]string{"create", ALPINE, "ls"})
    47  		session.WaitWithDefaultTimeout()
    48  		Expect(session).Should(Exit(0))
    49  		cid := session.OutputToString()
    50  		session = podmanTest.Podman([]string{"start", cid})
    51  		session.WaitWithDefaultTimeout()
    52  		Expect(session).Should(Exit(0))
    53  	})
    54  
    55  	It("podman start --rm removed on failure", func() {
    56  		session := podmanTest.Podman([]string{"create", "--name=test", "--rm", ALPINE, "foo"})
    57  		session.WaitWithDefaultTimeout()
    58  		Expect(session).Should(Exit(0))
    59  		session = podmanTest.Podman([]string{"start", "test"})
    60  		session.WaitWithDefaultTimeout()
    61  		Expect(session).Should(Exit(125))
    62  		session = podmanTest.Podman([]string{"container", "exists", "test"})
    63  		session.WaitWithDefaultTimeout()
    64  		Expect(session).To(ExitWithError())
    65  	})
    66  
    67  	It("podman start --rm --attach removed on failure", func() {
    68  		session := podmanTest.Podman([]string{"create", "--rm", ALPINE, "foo"})
    69  		session.WaitWithDefaultTimeout()
    70  		Expect(session).Should(Exit(0))
    71  		cid := session.OutputToString()
    72  		session = podmanTest.Podman([]string{"start", "--attach", cid})
    73  		session.WaitWithDefaultTimeout()
    74  		Expect(session).Should(Exit(125))
    75  		session = podmanTest.Podman([]string{"container", "exists", cid})
    76  		session.WaitWithDefaultTimeout()
    77  		Expect(session).To(ExitWithError())
    78  	})
    79  
    80  	It("podman container start single container by id", func() {
    81  		session := podmanTest.Podman([]string{"container", "create", ALPINE, "ls"})
    82  		session.WaitWithDefaultTimeout()
    83  		Expect(session).Should(Exit(0))
    84  		cid := session.OutputToString()
    85  		session = podmanTest.Podman([]string{"container", "start", cid})
    86  		session.WaitWithDefaultTimeout()
    87  		Expect(session).Should(Exit(0))
    88  		Expect(session.OutputToString()).To(Equal(cid))
    89  	})
    90  
    91  	It("podman container start single container by short id", func() {
    92  		session := podmanTest.Podman([]string{"container", "create", ALPINE, "ls"})
    93  		session.WaitWithDefaultTimeout()
    94  		Expect(session).Should(Exit(0))
    95  		cid := session.OutputToString()
    96  		shortID := cid[0:10]
    97  		session = podmanTest.Podman([]string{"container", "start", shortID})
    98  		session.WaitWithDefaultTimeout()
    99  		Expect(session).Should(Exit(0))
   100  		Expect(session.OutputToString()).To(Equal(shortID))
   101  	})
   102  
   103  	It("podman container start single container by short id", func() {
   104  		session := podmanTest.Podman([]string{"container", "create", ALPINE, "ls"})
   105  		session.WaitWithDefaultTimeout()
   106  		Expect(session).Should(Exit(0))
   107  		cid := session.OutputToString()
   108  		shortID := cid[0:10]
   109  		session = podmanTest.Podman([]string{"container", "start", shortID})
   110  		session.WaitWithDefaultTimeout()
   111  		Expect(session).Should(Exit(0))
   112  		Expect(session.OutputToString()).To(Equal(shortID))
   113  
   114  		session = podmanTest.Podman([]string{"stop", shortID})
   115  		session.WaitWithDefaultTimeout()
   116  		Expect(session).Should(Exit(0))
   117  		Expect(session.OutputToString()).To(Equal(shortID))
   118  	})
   119  
   120  	It("podman start single container by name", func() {
   121  		name := "foobar99"
   122  		session := podmanTest.Podman([]string{"create", "--name", name, ALPINE, "ls"})
   123  		session.WaitWithDefaultTimeout()
   124  		Expect(session).Should(Exit(0))
   125  		session = podmanTest.Podman([]string{"start", name})
   126  		session.WaitWithDefaultTimeout()
   127  		Expect(session).Should(Exit(0))
   128  		if podmanTest.RemoteTest {
   129  			Skip("Container-start name check doesn't work on remote client. It always returns the full ID.")
   130  		}
   131  		Expect(session.OutputToString()).To(Equal(name))
   132  	})
   133  
   134  	It("podman start single container with attach and test the signal", func() {
   135  		session := podmanTest.Podman([]string{"create", "--entrypoint", "sh", ALPINE, "-c", "exit 1"})
   136  		session.WaitWithDefaultTimeout()
   137  		Expect(session).Should(Exit(0))
   138  		cid := session.OutputToString()
   139  		session = podmanTest.Podman([]string{"start", "--attach", cid})
   140  		session.WaitWithDefaultTimeout()
   141  		// It should forward the signal
   142  		Expect(session).Should(Exit(1))
   143  	})
   144  
   145  	It("podman start multiple containers", func() {
   146  		session := podmanTest.Podman([]string{"create", "--name", "foobar99", ALPINE, "ls"})
   147  		session.WaitWithDefaultTimeout()
   148  		cid1 := session.OutputToString()
   149  		session2 := podmanTest.Podman([]string{"create", "--name", "foobar100", ALPINE, "ls"})
   150  		session2.WaitWithDefaultTimeout()
   151  		cid2 := session2.OutputToString()
   152  		session = podmanTest.Podman([]string{"start", cid1, cid2})
   153  		session.WaitWithDefaultTimeout()
   154  		Expect(session).Should(Exit(0))
   155  	})
   156  
   157  	It("podman start multiple containers with bogus", func() {
   158  		session := podmanTest.Podman([]string{"create", "--name", "foobar99", ALPINE, "ls"})
   159  		session.WaitWithDefaultTimeout()
   160  		cid1 := session.OutputToString()
   161  		session = podmanTest.Podman([]string{"start", cid1, "doesnotexist"})
   162  		session.WaitWithDefaultTimeout()
   163  		Expect(session).Should(Exit(125))
   164  	})
   165  
   166  	It("podman multiple containers -- attach should fail", func() {
   167  		session := podmanTest.Podman([]string{"create", "--name", "foobar1", ALPINE, "ls"})
   168  		session.WaitWithDefaultTimeout()
   169  		Expect(session).Should(Exit(0))
   170  		session = podmanTest.Podman([]string{"create", "--name", "foobar2", ALPINE, "ls"})
   171  		session.WaitWithDefaultTimeout()
   172  		Expect(session).Should(Exit(0))
   173  		session = podmanTest.Podman([]string{"start", "-a", "foobar1", "foobar2"})
   174  		session.WaitWithDefaultTimeout()
   175  		Expect(session).Should(Exit(125))
   176  	})
   177  
   178  	It("podman failed to start with --rm should delete the container", func() {
   179  		session := podmanTest.Podman([]string{"create", "--name", "test1", "-it", "--rm", ALPINE, "foo"})
   180  		session.WaitWithDefaultTimeout()
   181  		Expect(session).Should(Exit(0))
   182  
   183  		start := podmanTest.Podman([]string{"start", "test1"})
   184  		start.WaitWithDefaultTimeout()
   185  
   186  		wait := podmanTest.Podman([]string{"wait", "test1"})
   187  		wait.WaitWithDefaultTimeout()
   188  		Expect(wait).To(ExitWithError())
   189  
   190  		Eventually(podmanTest.NumberOfContainers(), defaultWaitTimeout, 3.0).Should(BeZero())
   191  	})
   192  
   193  	It("podman failed to start without --rm should NOT delete the container", func() {
   194  		session := podmanTest.Podman([]string{"create", "-it", ALPINE, "foo"})
   195  		session.WaitWithDefaultTimeout()
   196  		Expect(session).Should(Exit(0))
   197  
   198  		start := podmanTest.Podman([]string{"start", session.OutputToString()})
   199  		start.WaitWithDefaultTimeout()
   200  		Expect(start).To(ExitWithError())
   201  
   202  		Eventually(podmanTest.NumberOfContainers(), defaultWaitTimeout, 3.0).Should(Equal(1))
   203  	})
   204  
   205  	It("podman start --sig-proxy should not work without --attach", func() {
   206  		session := podmanTest.Podman([]string{"create", ALPINE, "ls"})
   207  		session.WaitWithDefaultTimeout()
   208  		Expect(session).Should(Exit(0))
   209  
   210  		session = podmanTest.Podman([]string{"start", "-l", "--sig-proxy"})
   211  		session.WaitWithDefaultTimeout()
   212  		Expect(session).Should(Exit(125))
   213  	})
   214  
   215  	It("podman start container with special pidfile", func() {
   216  		SkipIfRemote("pidfile not handled by remote")
   217  		pidfile := tempdir + "pidfile"
   218  		session := podmanTest.Podman([]string{"create", "--pidfile", pidfile, ALPINE, "ls"})
   219  		session.WaitWithDefaultTimeout()
   220  		Expect(session).Should(Exit(0))
   221  		cid := session.OutputToString()
   222  
   223  		session = podmanTest.Podman([]string{"start", cid})
   224  		session.WaitWithDefaultTimeout()
   225  		Expect(session).Should(Exit(0))
   226  		readFirstLine := func(path string) string {
   227  			content, err := ioutil.ReadFile(path)
   228  			Expect(err).To(BeNil())
   229  			return strings.Split(string(content), "\n")[0]
   230  		}
   231  		containerPID := readFirstLine(pidfile)
   232  		_, err = strconv.Atoi(containerPID) // Make sure it's a proper integer
   233  		Expect(err).To(BeNil())
   234  	})
   235  })