github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/test/e2e/pod_start_test.go (about)

     1  package integration
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  	"strconv"
     8  	"strings"
     9  
    10  	. "github.com/hanks177/podman/v4/test/utils"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  	. "github.com/onsi/gomega/gexec"
    14  )
    15  
    16  var _ = Describe("Podman pod start", func() {
    17  	var (
    18  		tempdir    string
    19  		err        error
    20  		podmanTest *PodmanTestIntegration
    21  	)
    22  
    23  	BeforeEach(func() {
    24  		tempdir, err = CreateTempDirInTempDir()
    25  		if err != nil {
    26  			os.Exit(1)
    27  		}
    28  		podmanTest = PodmanTestCreate(tempdir)
    29  		podmanTest.Setup()
    30  	})
    31  
    32  	AfterEach(func() {
    33  		podmanTest.Cleanup()
    34  		f := CurrentGinkgoTestDescription()
    35  		processTestResult(f)
    36  
    37  	})
    38  
    39  	It("podman pod start bogus pod", func() {
    40  		session := podmanTest.Podman([]string{"pod", "start", "123"})
    41  		session.WaitWithDefaultTimeout()
    42  		Expect(session).Should(Exit(125))
    43  	})
    44  
    45  	It("podman pod start single empty pod", func() {
    46  		_, ec, podid := podmanTest.CreatePod(nil)
    47  		Expect(ec).To(Equal(0))
    48  
    49  		session := podmanTest.Podman([]string{"pod", "start", podid})
    50  		session.WaitWithDefaultTimeout()
    51  		Expect(session).Should(Exit(125))
    52  	})
    53  
    54  	It("podman pod start single pod by name", func() {
    55  		_, ec, _ := podmanTest.CreatePod(map[string][]string{"--name": {"foobar99"}})
    56  		Expect(ec).To(Equal(0))
    57  
    58  		session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "ls"})
    59  		session.WaitWithDefaultTimeout()
    60  		Expect(session).Should(Exit(0))
    61  
    62  		session = podmanTest.Podman([]string{"pod", "start", "foobar99"})
    63  		session.WaitWithDefaultTimeout()
    64  		Expect(session).Should(Exit(0))
    65  	})
    66  
    67  	It("podman pod start multiple pods", func() {
    68  		_, ec, podid1 := podmanTest.CreatePod(map[string][]string{"--name": {"foobar99"}})
    69  		Expect(ec).To(Equal(0))
    70  
    71  		session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
    72  		session.WaitWithDefaultTimeout()
    73  		Expect(session).Should(Exit(0))
    74  
    75  		_, ec2, podid2 := podmanTest.CreatePod(map[string][]string{"--name": {"foobar100"}})
    76  		Expect(ec2).To(Equal(0))
    77  
    78  		session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
    79  		session.WaitWithDefaultTimeout()
    80  		Expect(session).Should(Exit(0))
    81  
    82  		session = podmanTest.Podman([]string{"pod", "start", podid1, podid2})
    83  		session.WaitWithDefaultTimeout()
    84  		Expect(session).Should(Exit(0))
    85  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2))
    86  	})
    87  
    88  	It("multiple pods in conflict", func() {
    89  		podName := []string{"Pod_" + RandomString(10), "Pod_" + RandomString(10)}
    90  
    91  		pod, _, podid1 := podmanTest.CreatePod(map[string][]string{
    92  			"--infra":   {"true"},
    93  			"--name":    {podName[0]},
    94  			"--publish": {"127.0.0.1:8083:80"},
    95  		})
    96  		Expect(pod).To(Exit(0))
    97  
    98  		session := podmanTest.Podman([]string{"create", "--pod", podName[0], ALPINE, "top"})
    99  		session.WaitWithDefaultTimeout()
   100  		Expect(session).To(Exit(0))
   101  
   102  		pod, _, podid2 := podmanTest.CreatePod(map[string][]string{
   103  			"--infra":   {"true"},
   104  			"--name":    {podName[1]},
   105  			"--publish": {"127.0.0.1:8083:80"},
   106  		})
   107  		Expect(pod).To(Exit(0))
   108  
   109  		session = podmanTest.Podman([]string{"create", "--pod", podName[1], ALPINE, "top"})
   110  		session.WaitWithDefaultTimeout()
   111  		Expect(session).To(Exit(0))
   112  
   113  		session = podmanTest.Podman([]string{"pod", "start", podid1, podid2})
   114  		session.WaitWithDefaultTimeout()
   115  		Expect(session).To(Exit(125))
   116  	})
   117  
   118  	It("podman pod start all pods", func() {
   119  		_, ec, _ := podmanTest.CreatePod(map[string][]string{"--name": {"foobar99"}})
   120  		Expect(ec).To(Equal(0))
   121  
   122  		session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
   123  		session.WaitWithDefaultTimeout()
   124  		Expect(session).Should(Exit(0))
   125  
   126  		_, ec, _ = podmanTest.CreatePod(map[string][]string{"--name": {"foobar100"}})
   127  		Expect(ec).To(Equal(0))
   128  
   129  		session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
   130  		session.WaitWithDefaultTimeout()
   131  		Expect(session).Should(Exit(0))
   132  
   133  		session = podmanTest.Podman([]string{"pod", "start", "--all"})
   134  		session.WaitWithDefaultTimeout()
   135  		Expect(session).Should(Exit(0))
   136  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2))
   137  	})
   138  
   139  	It("podman pod start latest pod", func() {
   140  		_, ec, _ := podmanTest.CreatePod(map[string][]string{"--name": {"foobar99"}})
   141  		Expect(ec).To(Equal(0))
   142  
   143  		session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
   144  		session.WaitWithDefaultTimeout()
   145  		Expect(session).Should(Exit(0))
   146  
   147  		_, ec, _ = podmanTest.CreatePod(map[string][]string{"--name": {"foobar100"}})
   148  		Expect(ec).To(Equal(0))
   149  
   150  		session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
   151  		session.WaitWithDefaultTimeout()
   152  		Expect(session).Should(Exit(0))
   153  
   154  		podid := "--latest"
   155  		if IsRemote() {
   156  			podid = "foobar100"
   157  		}
   158  		session = podmanTest.Podman([]string{"pod", "start", podid})
   159  		session.WaitWithDefaultTimeout()
   160  		Expect(session).Should(Exit(0))
   161  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
   162  	})
   163  
   164  	It("podman pod start multiple pods with bogus", func() {
   165  		_, ec, podid := podmanTest.CreatePod(map[string][]string{"--name": {"foobar99"}})
   166  		Expect(ec).To(Equal(0))
   167  
   168  		session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
   169  		session.WaitWithDefaultTimeout()
   170  		Expect(session).Should(Exit(0))
   171  
   172  		session = podmanTest.Podman([]string{"pod", "start", podid, "doesnotexist"})
   173  		session.WaitWithDefaultTimeout()
   174  		Expect(session).Should(Exit(125))
   175  	})
   176  
   177  	It("podman pod start single pod via --pod-id-file", func() {
   178  		tmpDir, err := ioutil.TempDir("", "")
   179  		Expect(err).To(BeNil())
   180  		tmpFile := tmpDir + "podID"
   181  		defer os.RemoveAll(tmpDir)
   182  
   183  		podName := "rudolph"
   184  
   185  		// Create a pod with --pod-id-file.
   186  		session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--pod-id-file", tmpFile})
   187  		session.WaitWithDefaultTimeout()
   188  		Expect(session).Should(Exit(0))
   189  
   190  		// Create container inside the pod.
   191  		session = podmanTest.Podman([]string{"create", "--pod", podName, ALPINE, "top"})
   192  		session.WaitWithDefaultTimeout()
   193  		Expect(session).Should(Exit(0))
   194  
   195  		session = podmanTest.Podman([]string{"pod", "start", "--pod-id-file", tmpFile})
   196  		session.WaitWithDefaultTimeout()
   197  		Expect(session).Should(Exit(0))
   198  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2)) // infra+top
   199  	})
   200  
   201  	It("podman pod start multiple pods via --pod-id-file", func() {
   202  		tmpDir, err := ioutil.TempDir("", "")
   203  		Expect(err).To(BeNil())
   204  		defer os.RemoveAll(tmpDir)
   205  
   206  		podIDFiles := []string{}
   207  		for _, i := range "0123456789" {
   208  			tmpFile := tmpDir + "cid" + string(i)
   209  			podName := "rudolph" + string(i)
   210  			// Create a pod with --pod-id-file.
   211  			session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--pod-id-file", tmpFile})
   212  			session.WaitWithDefaultTimeout()
   213  			Expect(session).Should(Exit(0))
   214  
   215  			// Create container inside the pod.
   216  			session = podmanTest.Podman([]string{"create", "--pod", podName, ALPINE, "top"})
   217  			session.WaitWithDefaultTimeout()
   218  			Expect(session).Should(Exit(0))
   219  
   220  			// Append the id files along with the command.
   221  			podIDFiles = append(podIDFiles, "--pod-id-file")
   222  			podIDFiles = append(podIDFiles, tmpFile)
   223  		}
   224  
   225  		cmd := []string{"pod", "start"}
   226  		cmd = append(cmd, podIDFiles...)
   227  		session := podmanTest.Podman(cmd)
   228  		session.WaitWithDefaultTimeout()
   229  		Expect(session).Should(Exit(0))
   230  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(20)) // 10*(infra+top)
   231  	})
   232  
   233  	It("podman pod create --infra-conmon-pod create + start", func() {
   234  		tmpDir, err := ioutil.TempDir("", "")
   235  		Expect(err).To(BeNil())
   236  		tmpFile := tmpDir + "podID"
   237  		defer os.RemoveAll(tmpDir)
   238  
   239  		podName := "rudolph"
   240  		// Create a pod with --infra-conmon-pid.
   241  		session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--infra-conmon-pidfile", tmpFile})
   242  		session.WaitWithDefaultTimeout()
   243  		Expect(session).Should(Exit(0))
   244  
   245  		session = podmanTest.Podman([]string{"pod", "start", podName})
   246  		session.WaitWithDefaultTimeout()
   247  		Expect(session).Should(Exit(0))
   248  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) // infra
   249  
   250  		readFirstLine := func(path string) string {
   251  			content, err := ioutil.ReadFile(path)
   252  			Expect(err).To(BeNil())
   253  			return strings.Split(string(content), "\n")[0]
   254  		}
   255  
   256  		// Read the infra-conmon-pidfile and perform some sanity checks
   257  		// on the pid.
   258  		infraConmonPID := readFirstLine(tmpFile)
   259  		_, err = strconv.Atoi(infraConmonPID) // Make sure it's a proper integer
   260  		Expect(err).To(BeNil())
   261  
   262  		cmdline := readFirstLine(fmt.Sprintf("/proc/%s/cmdline", infraConmonPID))
   263  		Expect(cmdline).To(ContainSubstring("/conmon"))
   264  	})
   265  
   266  })