diff --git a/mantle/kola/registry/registry.go b/mantle/kola/registry/registry.go index afc0cb9557acadb5ad81be0e8fe2cca10184d7cf..c1742e41300bf1c4491c3676d1f86705c765033a 100644 --- a/mantle/kola/registry/registry.go +++ b/mantle/kola/registry/registry.go @@ -11,6 +11,7 @@ import ( _ "github.com/coreos/mantle/kola/tests/misc" _ "github.com/coreos/mantle/kola/tests/ostree" _ "github.com/coreos/mantle/kola/tests/podman" + _ "github.com/coreos/mantle/kola/tests/isula" _ "github.com/coreos/mantle/kola/tests/rhcos" _ "github.com/coreos/mantle/kola/tests/rpmostree" _ "github.com/coreos/mantle/kola/tests/upgrade" diff --git a/mantle/kola/tests/isula/isula.go b/mantle/kola/tests/isula/isula.go new file mode 100644 index 0000000000000000000000000000000000000000..6849859d4930f4ff678be7a2c9b40e5c7425e7c7 --- /dev/null +++ b/mantle/kola/tests/isula/isula.go @@ -0,0 +1,102 @@ +package isula + +import ( + "fmt" + "strings" + "github.com/coreos/mantle/kola/register" + "github.com/coreos/mantle/kola/cluster" + "github.com/coreos/mantle/platform" + tutil "github.com/coreos/mantle/kola/tests/util" +) + +func init(){ + register.RegisterTest(®ister.Test{ + Run: isulaBaseTest, + ClusterSize: 1, + Name: `isula.base`, + }) +} + +func isulaBaseTest(c cluster.TestCluster) { + c.Run("info", isulaInfo) + c.Run("resources", isulaResources) +} + +// Test: Verify basic isula info information +func isulaInfo(c cluster.TestCluster) { + m := c.Machines()[0] + _, err := c.SSH(m, `sudo systemctl start isulad.service`) + if err != nil { + c.Fatal(err) + } + err = getIsulaInfo(c, m) + if err != nil { + c.Fatal(err) + } +} + +// Returns the result of isula info as a simplifiedIsulaInfo +func getIsulaInfo(c cluster.TestCluster, m platform.Machine) (error) { + + result, err := c.SSH(m, `sudo isula info`) + if err != nil { + return fmt.Errorf("Could not get info: %v", err) + } + + for _, line := range strings.Split(string(result), "\n") { + if strings.Contains(line, "Storage Driver") { + if strings.Contains(line, "overlay") { + continue + } else{ + c.Errorf("Unexpected Storage Driver") + } + } + if strings.Contains(line, "Operating System") { + if strings.Contains(line, "NestOS") { + continue + } else{ + c.Errorf("Unexpected Operating System") + } + } + } + return nil +} + +// Test: Run isula with various options +func isulaResources(c cluster.TestCluster) { + m := c.Machines()[0] + + _, err := c.SSH(m, `sudo systemctl start isula-build.service`) + if err != nil { + c.Fatal(err) + } + + tutil.GenIsulaScratchContainer(c, m, "echo", []string{"echo"}) + + isulaFmt := "sudo isula run --net=none --rm %s echo1 echo 1" + + pCmd := func(arg string) string { + return fmt.Sprintf(isulaFmt, arg) + } + + for _, isulaCmd := range []string{ + // must set memory when setting memory-swap + // See https://github.com/opencontainers/runc/issues/1980 for + // why we use 128m for memory + pCmd("--memory=128m --memory-swap=128m"), + pCmd("--memory-reservation=10m"), + pCmd("--cpu-shares=100"), + pCmd("--cpu-period=1000"), + pCmd("--cpuset-cpus=0"), + pCmd("--cpuset-mems=0"), + pCmd("--cpu-quota=1000"), + pCmd("--memory=128m"), + pCmd("--shm-size=1m"), + } { + cmd := isulaCmd + output, err := c.SSH(m, cmd) + if err != nil { + c.Fatalf("Failed to run %q: output: %q status: %q", cmd, output, err) + } + } +} \ No newline at end of file diff --git a/mantle/kola/tests/util/containers.go b/mantle/kola/tests/util/containers.go index 70e3e77044d98079866dc2e8530a5a8081b7c9eb..29142dacedcdb43eacc90a3734e510e3c810c6af 100644 --- a/mantle/kola/tests/util/containers.go +++ b/mantle/kola/tests/util/containers.go @@ -29,3 +29,12 @@ func GenPodmanScratchContainer(c cluster.TestCluster, m platform.Machine, name s sudo podman build --network host --layers=false -t localhost/%s .` c.RunCmdSyncf(m, cmd, strings.Join(binnames, " "), name) } + +// GenIsulaScratchContainer creates a podman scratch container out of binaries from the host +func GenIsulaScratchContainer(c cluster.TestCluster, m platform.Machine, name string, binnames []string) { + cmd := `tmpdir=$(mktemp -d); cd $tmpdir; echo -e "FROM scratch\nCOPY . /" > Dockerfile; + b=$(which %s); libs=$(sudo ldd $b | grep -o /lib'[^ ]*' | sort -u); + sudo rsync -av --relative --copy-links $b $libs ./; + sudo isula-build ctr-img build -f Dockerfile -o isulad:echo1:latest .` + c.RunCmdSyncf(m, cmd, strings.Join(binnames, " ")) +} \ No newline at end of file