provider-kairos/tests/tests_suite_test.go

128 lines
2.5 KiB
Go
Raw Normal View History

// nolint
package mos_test
import (
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
"path/filepath"
"testing"
"github.com/kairos-io/kairos/pkg/utils"
"github.com/kairos-io/kairos/tests/machine"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
func TestSuite(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "kairos Test Suite")
}
var tempDir string
var sshPort string
var machineID string = os.Getenv("MACHINE_ID")
var _ = AfterSuite(func() {
if os.Getenv("CREATE_VM") == "true" {
machine.Delete()
if machine.SUT != nil {
m := &machine.QEMU{}
m.Stop(machine.SUT)
m.Clean(machine.SUT)
}
}
})
var _ = BeforeSuite(func() {
if os.Getenv("CLOUD_INIT") == "" || !filepath.IsAbs(os.Getenv("CLOUD_INIT")) {
Fail("CLOUD_INIT must be set and must be pointing to a file as an absolute path")
}
if machineID == "" {
machineID = "testvm"
}
if os.Getenv("ISO") == "" && os.Getenv("CREATE_VM") == "true" {
fmt.Println("ISO missing")
os.Exit(1)
}
if os.Getenv("CREATE_VM") == "true" {
t, err := ioutil.TempDir("", "")
Expect(err).ToNot(HaveOccurred())
tempDir = t
machine.ID = machineID
machine.TempDir = t
sshPort = "2222"
if os.Getenv("SSH_PORT") != "" {
sshPort = os.Getenv("SSH_PORT")
}
prepareVM()
}
})
func download(s string) {
f2, err := ioutil.TempFile("", "fff")
Expect(err).ToNot(HaveOccurred())
defer os.RemoveAll(f2.Name())
resp, err := http.Get(s)
Expect(err).ToNot(HaveOccurred())
defer resp.Body.Close()
_, err = io.Copy(f2, resp.Body)
Expect(err).ToNot(HaveOccurred())
out, err := utils.SH("tar xvf " + f2.Name())
fmt.Println(out)
Expect(err).ToNot(HaveOccurred(), out)
}
func prepareVM() {
if os.Getenv("CREATE_VM") == "true" {
machine.Delete()
machine.Create(sshPort)
}
}
func gatherLogs() {
machine.Sudo("k3s kubectl get pods -A -o json > /run/pods.json")
machine.Sudo("k3s kubectl get events -A -o json > /run/events.json")
machine.Sudo("cat /proc/cmdline > /run/cmdline")
machine.Sudo("chmod 777 /run/events.json")
machine.Sudo("df -h > /run/disk")
machine.Sudo("mount > /run/mounts")
machine.Sudo("blkid > /run/blkid")
machine.GatherAllLogs(
[]string{
"edgevpn@kairos",
"kairos-agent",
"cos-setup-boot",
"cos-setup-network",
"kairos",
"k3s",
},
[]string{
"/var/log/edgevpn.log",
"/var/log/kairos-agent.log",
"/var/log/kairos/agent.log",
"/run/pods.json",
"/run/disk",
"/run/mounts",
"/run/blkid",
"/run/events.json",
"/run/cmdline",
})
}