github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/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/containers/podman/v2/test/utils"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Podman pod 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 pod start bogus pod", func() {
    40  		session := podmanTest.Podman([]string{"pod", "start", "123"})
    41  		session.WaitWithDefaultTimeout()
    42  		Expect(session.ExitCode()).To(Equal(125))
    43  	})
    44  
    45  	It("podman pod start single empty pod", func() {
    46  		_, ec, podid := podmanTest.CreatePod("")
    47  		Expect(ec).To(Equal(0))
    48  
    49  		session := podmanTest.Podman([]string{"pod", "start", podid})
    50  		session.WaitWithDefaultTimeout()
    51  		Expect(session.ExitCode()).To(Equal(125))
    52  	})
    53  
    54  	It("podman pod start single pod by name", func() {
    55  		_, ec, _ := podmanTest.CreatePod("foobar99")
    56  		Expect(ec).To(Equal(0))
    57  
    58  		session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "ls"})
    59  		session.WaitWithDefaultTimeout()
    60  		Expect(session.ExitCode()).To(Equal(0))
    61  
    62  		session = podmanTest.Podman([]string{"pod", "start", "foobar99"})
    63  		session.WaitWithDefaultTimeout()
    64  		Expect(session.ExitCode()).To(Equal(0))
    65  	})
    66  
    67  	It("podman pod start multiple pods", func() {
    68  		_, ec, podid1 := podmanTest.CreatePod("foobar99")
    69  		Expect(ec).To(Equal(0))
    70  
    71  		session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
    72  		session.WaitWithDefaultTimeout()
    73  		Expect(session.ExitCode()).To(Equal(0))
    74  
    75  		_, ec2, podid2 := podmanTest.CreatePod("foobar100")
    76  		Expect(ec2).To(Equal(0))
    77  
    78  		session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
    79  		session.WaitWithDefaultTimeout()
    80  		Expect(session.ExitCode()).To(Equal(0))
    81  
    82  		session = podmanTest.Podman([]string{"pod", "start", podid1, podid2})
    83  		session.WaitWithDefaultTimeout()
    84  		Expect(session.ExitCode()).To(Equal(0))
    85  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2))
    86  	})
    87  
    88  	It("podman pod start all pods", func() {
    89  		_, ec, _ := podmanTest.CreatePod("foobar99")
    90  		Expect(ec).To(Equal(0))
    91  
    92  		session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
    93  		session.WaitWithDefaultTimeout()
    94  		Expect(session.ExitCode()).To(Equal(0))
    95  
    96  		_, ec, _ = podmanTest.CreatePod("foobar100")
    97  		Expect(ec).To(Equal(0))
    98  
    99  		session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
   100  		session.WaitWithDefaultTimeout()
   101  		Expect(session.ExitCode()).To(Equal(0))
   102  
   103  		session = podmanTest.Podman([]string{"pod", "start", "--all"})
   104  		session.WaitWithDefaultTimeout()
   105  		Expect(session.ExitCode()).To(Equal(0))
   106  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2))
   107  	})
   108  
   109  	It("podman pod start latest pod", func() {
   110  		_, ec, _ := podmanTest.CreatePod("foobar99")
   111  		Expect(ec).To(Equal(0))
   112  
   113  		session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
   114  		session.WaitWithDefaultTimeout()
   115  		Expect(session.ExitCode()).To(Equal(0))
   116  
   117  		_, ec, _ = podmanTest.CreatePod("foobar100")
   118  		Expect(ec).To(Equal(0))
   119  
   120  		session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
   121  		session.WaitWithDefaultTimeout()
   122  		Expect(session.ExitCode()).To(Equal(0))
   123  
   124  		podid := "--latest"
   125  		if IsRemote() {
   126  			podid = "foobar100"
   127  		}
   128  		session = podmanTest.Podman([]string{"pod", "start", podid})
   129  		session.WaitWithDefaultTimeout()
   130  		Expect(session.ExitCode()).To(Equal(0))
   131  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
   132  	})
   133  
   134  	It("podman pod start multiple pods with bogus", func() {
   135  		_, ec, podid := podmanTest.CreatePod("foobar99")
   136  		Expect(ec).To(Equal(0))
   137  
   138  		session := podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
   139  		session.WaitWithDefaultTimeout()
   140  		Expect(session.ExitCode()).To(Equal(0))
   141  
   142  		session = podmanTest.Podman([]string{"pod", "start", podid, "doesnotexist"})
   143  		session.WaitWithDefaultTimeout()
   144  		Expect(session.ExitCode()).To(Equal(125))
   145  	})
   146  
   147  	It("podman pod start single pod via --pod-id-file", func() {
   148  		tmpDir, err := ioutil.TempDir("", "")
   149  		Expect(err).To(BeNil())
   150  		tmpFile := tmpDir + "podID"
   151  		defer os.RemoveAll(tmpDir)
   152  
   153  		podName := "rudolph"
   154  
   155  		// Create a pod with --pod-id-file.
   156  		session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--pod-id-file", tmpFile})
   157  		session.WaitWithDefaultTimeout()
   158  		Expect(session.ExitCode()).To(Equal(0))
   159  
   160  		// Create container inside the pod.
   161  		session = podmanTest.Podman([]string{"create", "--pod", podName, ALPINE, "top"})
   162  		session.WaitWithDefaultTimeout()
   163  		Expect(session.ExitCode()).To(Equal(0))
   164  
   165  		session = podmanTest.Podman([]string{"pod", "start", "--pod-id-file", tmpFile})
   166  		session.WaitWithDefaultTimeout()
   167  		Expect(session.ExitCode()).To(Equal(0))
   168  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2)) // infra+top
   169  	})
   170  
   171  	It("podman pod start multiple pods via --pod-id-file", func() {
   172  		tmpDir, err := ioutil.TempDir("", "")
   173  		Expect(err).To(BeNil())
   174  		defer os.RemoveAll(tmpDir)
   175  
   176  		podIDFiles := []string{}
   177  		for _, i := range "0123456789" {
   178  			tmpFile := tmpDir + "cid" + string(i)
   179  			podName := "rudolph" + string(i)
   180  			// Create a pod with --pod-id-file.
   181  			session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--pod-id-file", tmpFile})
   182  			session.WaitWithDefaultTimeout()
   183  			Expect(session.ExitCode()).To(Equal(0))
   184  
   185  			// Create container inside the pod.
   186  			session = podmanTest.Podman([]string{"create", "--pod", podName, ALPINE, "top"})
   187  			session.WaitWithDefaultTimeout()
   188  			Expect(session.ExitCode()).To(Equal(0))
   189  
   190  			// Append the id files along with the command.
   191  			podIDFiles = append(podIDFiles, "--pod-id-file")
   192  			podIDFiles = append(podIDFiles, tmpFile)
   193  		}
   194  
   195  		cmd := []string{"pod", "start"}
   196  		cmd = append(cmd, podIDFiles...)
   197  		session := podmanTest.Podman(cmd)
   198  		session.WaitWithDefaultTimeout()
   199  		Expect(session.ExitCode()).To(Equal(0))
   200  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(20)) // 10*(infra+top)
   201  	})
   202  
   203  	It("podman pod create --infra-conmon-pod create + start", func() {
   204  		tmpDir, err := ioutil.TempDir("", "")
   205  		Expect(err).To(BeNil())
   206  		tmpFile := tmpDir + "podID"
   207  		defer os.RemoveAll(tmpDir)
   208  
   209  		podName := "rudolph"
   210  		// Create a pod with --infra-conmon-pid.
   211  		session := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--infra-conmon-pidfile", tmpFile})
   212  		session.WaitWithDefaultTimeout()
   213  		Expect(session.ExitCode()).To(Equal(0))
   214  
   215  		session = podmanTest.Podman([]string{"pod", "start", podName})
   216  		session.WaitWithDefaultTimeout()
   217  		Expect(session.ExitCode()).To(Equal(0))
   218  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1)) // infra
   219  
   220  		readFirstLine := func(path string) string {
   221  			content, err := ioutil.ReadFile(path)
   222  			Expect(err).To(BeNil())
   223  			return strings.Split(string(content), "\n")[0]
   224  		}
   225  
   226  		// Read the infra-conmon-pidfile and perform some sanity checks
   227  		// on the pid.
   228  		infraConmonPID := readFirstLine(tmpFile)
   229  		_, err = strconv.Atoi(infraConmonPID) // Make sure it's a proper integer
   230  		Expect(err).To(BeNil())
   231  
   232  		cmdline := readFirstLine(fmt.Sprintf("/proc/%s/cmdline", infraConmonPID))
   233  		Expect(cmdline).To(ContainSubstring("/conmon"))
   234  	})
   235  
   236  })