Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
202 changes: 202 additions & 0 deletions test/e2e/macProvider_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
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() {
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(0))
})

AfterEach(func() {
report := CurrentSpecReport()
labels := report.Labels()
stopCmd := "stop --provider libkrun"
rmCmd := "rm --provider libkrun -f"
for _, l := range labels {
if l == "name" {
stopCmd = "stop --provider libkrun myVM"
rmCmd = "rm --provider libkrun myVM -f"
break
}
}

// stop the CentOS VM
session := macadamTest.Macadam(strings.Fields(stopCmd))
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.WaitWithDefaultTimeout()
Expect(session).Should(gexec.Exit(0))

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

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

})
2 changes: 1 addition & 1 deletion test/e2e/setup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ var _ = AfterSuite(func() {
os.RemoveAll(tempDir)
})

var _ = Describe("Macadam init setup test", Label("init"), func() {
var _ = Describe("Macadam init setup test", Label("init","linux","darwin"), func() {
BeforeEach(func() {
session := macadamTest.Macadam([]string{"list", "--format", "json"})
session.WaitWithDefaultTimeout()
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/start_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"})
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/vm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
var machineResponses []ListReporter
session := macadamTest.Macadam([]string{"list", "--format", "json"})
Expand Down
Loading