github.com/containers/podman/v4@v4.9.4/pkg/machine/e2e/start_test.go (about)

     1  package e2e_test
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/containers/podman/v4/pkg/machine"
     7  	. "github.com/onsi/ginkgo/v2"
     8  	. "github.com/onsi/gomega"
     9  	. "github.com/onsi/gomega/gexec"
    10  )
    11  
    12  var _ = Describe("podman machine start", func() {
    13  	var (
    14  		mb      *machineTestBuilder
    15  		testDir string
    16  	)
    17  	BeforeEach(func() {
    18  		testDir, mb = setup()
    19  	})
    20  	AfterEach(func() {
    21  		teardown(originalHomeDir, testDir, mb)
    22  	})
    23  
    24  	It("start simple machine", func() {
    25  		i := new(initMachine)
    26  		session, err := mb.setCmd(i.withImagePath(mb.imagePath)).run()
    27  		Expect(err).ToNot(HaveOccurred())
    28  		Expect(session).To(Exit(0))
    29  		s := new(startMachine)
    30  		startSession, err := mb.setCmd(s).run()
    31  		Expect(err).ToNot(HaveOccurred())
    32  		Expect(startSession).To(Exit(0))
    33  
    34  		info, ec, err := mb.toQemuInspectInfo()
    35  		Expect(err).ToNot(HaveOccurred())
    36  		Expect(ec).To(BeZero())
    37  		Expect(info[0].State).To(Equal(machine.Running))
    38  
    39  		stop := new(stopMachine)
    40  		stopSession, err := mb.setCmd(stop).run()
    41  		Expect(err).ToNot(HaveOccurred())
    42  		Expect(stopSession).To(Exit(0))
    43  
    44  		// suppress output
    45  		startSession, err = mb.setCmd(s.withNoInfo()).run()
    46  		Expect(err).ToNot(HaveOccurred())
    47  		Expect(startSession).To(Exit(0))
    48  		Expect(startSession.outputToString()).ToNot(ContainSubstring("API forwarding"))
    49  
    50  		stopSession, err = mb.setCmd(stop).run()
    51  		Expect(err).ToNot(HaveOccurred())
    52  		Expect(stopSession).To(Exit(0))
    53  
    54  		startSession, err = mb.setCmd(s.withQuiet()).run()
    55  		Expect(err).ToNot(HaveOccurred())
    56  		Expect(startSession).To(Exit(0))
    57  		Expect(startSession.outputToStringSlice()).To(HaveLen(1))
    58  	})
    59  
    60  	It("bad start name", func() {
    61  		i := startMachine{}
    62  		reallyLongName := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    63  		session, err := mb.setName(reallyLongName).setCmd(&i).run()
    64  		Expect(err).ToNot(HaveOccurred())
    65  		Expect(session).To(Exit(125))
    66  		Expect(session.errorToString()).To(ContainSubstring("VM does not exist"))
    67  	})
    68  
    69  	It("start machine already started", func() {
    70  		i := new(initMachine)
    71  		session, err := mb.setCmd(i.withImagePath(mb.imagePath)).run()
    72  		Expect(err).ToNot(HaveOccurred())
    73  		Expect(session).To(Exit(0))
    74  		s := new(startMachine)
    75  		startSession, err := mb.setCmd(s).run()
    76  		Expect(err).ToNot(HaveOccurred())
    77  		Expect(startSession).To(Exit(0))
    78  
    79  		info, ec, err := mb.toQemuInspectInfo()
    80  		Expect(err).ToNot(HaveOccurred())
    81  		Expect(ec).To(BeZero())
    82  		Expect(info[0].State).To(Equal(machine.Running))
    83  
    84  		startSession, err = mb.setCmd(s).run()
    85  		Expect(err).ToNot(HaveOccurred())
    86  		Expect(startSession).To(Exit(125))
    87  		Expect(startSession.errorToString()).To(ContainSubstring("VM already running or starting"))
    88  	})
    89  	It("start only starts specified machine", func() {
    90  		i := initMachine{}
    91  		startme := randomString()
    92  		session, err := mb.setName(startme).setCmd(i.withImagePath(mb.imagePath)).run()
    93  		Expect(err).ToNot(HaveOccurred())
    94  		Expect(session).To(Exit(0))
    95  
    96  		j := initMachine{}
    97  		dontstartme := randomString()
    98  		session2, err := mb.setName(dontstartme).setCmd(j.withImagePath(mb.imagePath)).run()
    99  		Expect(err).ToNot(HaveOccurred())
   100  		Expect(session2).To(Exit(0))
   101  
   102  		s := startMachine{}
   103  		session3, err := mb.setName(startme).setCmd(s).setTimeout(time.Minute * 10).run()
   104  		Expect(err).ToNot(HaveOccurred())
   105  		Expect(session3).Should(Exit(0))
   106  
   107  		inspect := new(inspectMachine)
   108  		inspect = inspect.withFormat("{{.State}}")
   109  		inspectSession, err := mb.setName(startme).setCmd(inspect).run()
   110  		Expect(err).ToNot(HaveOccurred())
   111  		Expect(inspectSession).To(Exit(0))
   112  		Expect(inspectSession.outputToString()).To(Equal(machine.Running))
   113  
   114  		inspect2 := new(inspectMachine)
   115  		inspect2 = inspect2.withFormat("{{.State}}")
   116  		inspectSession2, err := mb.setName(dontstartme).setCmd(inspect2).run()
   117  		Expect(err).ToNot(HaveOccurred())
   118  		Expect(inspectSession2).To(Exit(0))
   119  		Expect(inspectSession2.outputToString()).To(Not(Equal(machine.Running)))
   120  	})
   121  })