diff --git a/Makefile b/Makefile index 39ee46c5..5c56073b 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ test: @go test -tags "$(BUILDTAGS)" -v ./pkg/... e2e: - @go test -tags "$(BUILDTAGS)" -v ./test/e2e/... + @go test -tags "$(BUILDTAGS)" -v ./test/e2e/... --ginkgo.label-filter=$(DEFAULT_GOOS) clean: @rm -rf bin diff --git a/test/e2e/common_test.go b/test/e2e/common_test.go index 892e11a9..2df77342 100644 --- a/test/e2e/common_test.go +++ b/test/e2e/common_test.go @@ -2,6 +2,7 @@ package e2e import ( "encoding/json" + "fmt" "os" "os/exec" "path/filepath" @@ -31,8 +32,16 @@ func TestSuite(t *testing.T) { RunSpecs(t, "Macadam suite") } -func noVMcheck() { - session := macadamTest.Macadam([]string{"list", "--format", "json"}) +func noVMcheck(opts ...string) { + var listCMD string + if len(opts) > 0 { + provider := opts[0] + listCMD = fmt.Sprintf("list --provider %s --format json", provider) + } else { + listCMD = "list --format json" + } + + session := macadamTest.Macadam(strings.Fields(listCMD)) session.WaitWithDefaultTimeout() Expect(session).Should(gexec.Exit(0)) err := json.Unmarshal(session.Out.Contents(), &machineResponses) @@ -40,30 +49,44 @@ func noVMcheck() { Expect(len(machineResponses)).Should(Equal(0)) } -func removeAllVM() { - session := macadamTest.Macadam([]string{"list", "--format", "json"}) +func removeAllVM(opts ...string) { + var listCMD string + var stopCMD string + var rmCMD string + if len(opts) > 0 { + provider := opts[0] + listCMD = fmt.Sprintf("list --provider %s --format json", provider) + stopCMD = fmt.Sprintf("stop --provider %s ", provider) + rmCMD = fmt.Sprintf("rm -f --provider %s ", provider) + } else { + listCMD = "list --format json" + stopCMD = "stop " + rmCMD = "rm -f " + } + + session := macadamTest.Macadam(strings.Fields(listCMD)) session.WaitWithDefaultTimeout() Expect(session).Should(gexec.Exit(0)) err = json.Unmarshal(session.Out.Contents(), &machineResponses) Expect(err).NotTo(HaveOccurred()) for _, m := range machineResponses { - stopCmd := "stop " + string(m.Name) - rmCmd := "rm -f " + string(m.Name) + stopVM := stopCMD + string(m.Name) + rmVM := rmCMD + string(m.Name) // stop the CentOS VM - session = macadamTest.Macadam(strings.Fields(stopCmd)) + session = macadamTest.Macadam(strings.Fields(stopVM)) session.WaitWithDefaultTimeout() Expect(session).Should(gexec.Exit(0)) Expect(session.OutputToString()).Should(ContainSubstring("stopped successfully")) // rm the CentOS VM and verify that "list" does not return any vm - session = macadamTest.Macadam(strings.Fields(rmCmd)) + session = macadamTest.Macadam(strings.Fields(rmVM)) session.WaitWithDefaultTimeout() Expect(session).Should(gexec.Exit(0)) } - session = macadamTest.Macadam([]string{"list", "--format", "json"}) + session = macadamTest.Macadam(strings.Fields(listCMD)) session.WaitWithDefaultTimeout() Expect(session).Should(gexec.Exit(0)) err = json.Unmarshal(session.Out.Contents(), &machineResponses) diff --git a/test/e2e/macProvider_test.go b/test/e2e/macProvider_test.go new file mode 100644 index 00000000..4072abed --- /dev/null +++ b/test/e2e/macProvider_test.go @@ -0,0 +1,169 @@ +package e2e + +import ( + "encoding/json" + "fmt" + "strings" + "time" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/onsi/gomega/gexec" +) + + +var _ = Describe("provider libkrun test", Label("libkrun", "darwin"), func() { + BeforeEach(func() { + noVMcheck("libkrun") + }) + + AfterEach(func() { + removeAllVM("libkrun") + }) + + It("init CentOS VM with cpu, disk and memory setup", Label("cpu"), func() { + // init a CentOS VM with cpu and disk-size setup + session := macadamTest.Macadam([]string{"init", "--provider", "libkrun", "--cpus", "3", "--disk-size", "30", "--memory", "2048", image}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + + // check the list command returns one item + session = macadamTest.Macadam([]string{"list", "--provider", "libkrun", "--format", "json"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + err = json.Unmarshal(session.Out.Contents(), &machineResponses) + Expect(err).NotTo(HaveOccurred()) + Expect(len(machineResponses)).Should(Equal(1)) + + // start the CentOS VM + session = macadamTest.Macadam([]string{"start", "--provider", "libkrun"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + Expect(session.OutputToString()).Should(ContainSubstring("started successfully")) + + // ssh into the VM and prints user + session = macadamTest.Macadam([]string{"ssh", "--provider", "libkrun", "nproc"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + Expect(strings.TrimSpace(session.OutputToString())).Should(Equal("3")) + + session = macadamTest.Macadam([]string{"ssh", "--provider", "libkrun", "lsblk"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + Expect(session.OutputToString()).Should(ContainSubstring("30G")) + + session = macadamTest.Macadam([]string{"ssh", "--provider", "libkrun", "free", "-h"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + // Verify memory is close to 2048MB (allow for system overhead) + output := session.OutputToString() + Expect(output).Should(Or(ContainSubstring("1.7G"), ContainSubstring("1.8G"), ContainSubstring("1.9G"), ContainSubstring("2.0G"))) + }) + + It("init CentOS VM with username and sshkey setup", Label("sshkey"), func() { + // init a CentOS VM with cpu and disk-size setup + session := macadamTest.Macadam([]string{"init", "--provider", "libkrun", "--username", "test", "--ssh-identity-path", keypath, image}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + + // check the list command returns one item + session = macadamTest.Macadam([]string{"list", "--provider", "libkrun", "--format", "json"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + err = json.Unmarshal(session.Out.Contents(), &machineResponses) + Expect(err).NotTo(HaveOccurred()) + Expect(len(machineResponses)).Should(Equal(1)) + + // start the CentOS VM + session = macadamTest.Macadam([]string{"start", "--provider", "libkrun"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + Expect(session.OutputToString()).Should(ContainSubstring("started successfully")) + + // ssh into the VM and prints user + session = macadamTest.Macadam([]string{"ssh", "--provider", "libkrun", "--username", "test", "whoami"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + Expect(strings.TrimSpace(session.OutputToString())).Should(Equal("test")) + }) + + It("init CentOS VM with cloud-init setup", Label("cloudinit"), func() { + // init a CentOS VM with cpu and disk-size setup + session := macadamTest.Macadam([]string{"init", "--provider", "libkrun", "--cloud-init", cloudinitPath, "--username", "macadamtest", "--ssh-identity-path", keypath, image}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + + // check the list command returns one item + session = macadamTest.Macadam([]string{"list", "--provider", "libkrun", "--format", "json"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + err = json.Unmarshal(session.Out.Contents(), &machineResponses) + Expect(err).NotTo(HaveOccurred()) + Expect(len(machineResponses)).Should(Equal(1)) + + // start the CentOS VM + session = macadamTest.Macadam([]string{"start", "--provider", "libkrun"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + Expect(session.OutputToString()).Should(ContainSubstring("started successfully")) + + // ssh into the VM and prints user + session = macadamTest.Macadam([]string{"ssh", "--provider", "libkrun", "whoami"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + Expect(strings.TrimSpace(session.OutputToString())).Should(Equal("macadamtest")) + + + // wait until cloud-init finish + Eventually(func() string { + session = macadamTest.Macadam([]string{"ssh", "--provider", "libkrun", "systemctl", "status", "cloud-final"}) + session.WaitWithDefaultTimeout() + + if session.ExitCode() != 0 { + return "" + } + return session.OutputToString() + }, 20*time.Minute, 30*time.Second).Should(ContainSubstring("Active: active (exited)")) + + fmt.Println("cloud-init has finished") + + // ssh into the VM and check installed app + session = macadamTest.Macadam([]string{"ssh", "--provider", "libkrun", "git", "--version"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + Expect(session.OutputToString()).Should(ContainSubstring("git version")) + + // ssh into the VM and check file created + session = macadamTest.Macadam([]string{"ssh", "--provider", "libkrun", "ls", "/home/macadamtest/hello.txt"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + }) + + It("init CentOS VM with name", Label("name"), func() { + // init a CentOS VM with name setup + session := macadamTest.Macadam([]string{"init", "--provider", "libkrun", "--name", "myVM", image}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + + // check the list command returns one item + session = macadamTest.Macadam([]string{"list", "--provider", "libkrun", "--format", "json"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + err = json.Unmarshal(session.Out.Contents(), &machineResponses) + Expect(err).NotTo(HaveOccurred()) + Expect(len(machineResponses)).Should(Equal(1)) + + // start the CentOS VM with set name + session = macadamTest.Macadam([]string{"start", "--provider", "libkrun", "myVM"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + Expect(session.OutputToString()).Should(ContainSubstring("started successfully")) + + // ssh into the VM and prints user + session = macadamTest.Macadam([]string{"ssh", "--provider", "libkrun", "myVM", "whoami"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(gexec.Exit(0)) + Expect(strings.TrimSpace(session.OutputToString())).Should(Equal("core")) + }) + +}) diff --git a/test/e2e/multipleVM_test.go b/test/e2e/multipleVM_test.go index bf130f64..70e93690 100644 --- a/test/e2e/multipleVM_test.go +++ b/test/e2e/multipleVM_test.go @@ -8,7 +8,7 @@ import ( "github.com/onsi/gomega/gexec" ) -var _ = Describe("Macadam init setup test", Label("multiple"), func() { +var _ = Describe("Macadam init setup test", Label("multiple","linux","darwin"), func() { BeforeEach(func() { noVMcheck() }) diff --git a/test/e2e/setup_test.go b/test/e2e/setup_test.go index 5ca408fd..28ebdde4 100644 --- a/test/e2e/setup_test.go +++ b/test/e2e/setup_test.go @@ -13,7 +13,7 @@ import ( -var _ = Describe("Macadam init setup test", Label("init"), func() { +var _ = Describe("Macadam init setup test", Label("init","linux","darwin"), func() { BeforeEach(func() { noVMcheck() }) diff --git a/test/e2e/start_test.go b/test/e2e/start_test.go index 442ddb86..af4d26fa 100644 --- a/test/e2e/start_test.go +++ b/test/e2e/start_test.go @@ -6,7 +6,7 @@ import ( "github.com/onsi/gomega/gexec" ) -var _ = Describe("Macadam starts", func() { +var _ = Describe("Macadam starts",Label("windows","linux","darwin"), func() { It("non-existing VM", func() { session := macadamTest.Macadam([]string{"start", "123"}) diff --git a/test/e2e/vm_test.go b/test/e2e/vm_test.go index 51b8593a..afb3c77f 100644 --- a/test/e2e/vm_test.go +++ b/test/e2e/vm_test.go @@ -39,7 +39,7 @@ var _ = Describe("Macadam", func() { os.RemoveAll(tempDir) }) - It("creates a new CentOS VM, starts it, ssh in and cleans", func() { + It("creates a new CentOS VM, starts it, ssh in and cleans",Label("linux","darwin"), func() { // verify there is no vm noVMcheck()