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 })