mirror of
https://github.com/aljazceru/kata-containers.git
synced 2026-01-02 22:14:27 +01:00
Currently EnableMockTesting() takes no arguments and will always place the mock storage in the fixed location /tmp/vc/mockfs. This means that one test run can interfere with the next one if anything isn't cleaned up (and there are other bugs which means that happens). If if those were fixed this would allow developers testing on the same machine to interfere with each other. So, allow the mockfs to be placed at an arbitrary place given as a parameter to EnableMockTesting(). In TestMain() we place it under our existing temporary directory, so we don't need any additional cleanup just for the mockfs. fixes #4140 Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
175 lines
4.5 KiB
Go
175 lines
4.5 KiB
Go
// Copyright (c) 2017 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package virtcontainers
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"syscall"
|
|
"testing"
|
|
|
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/fs"
|
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
const testSandboxID = "7f49d00d-1995-4156-8c79-5f5ab24ce138"
|
|
const testContainerID = "containerID"
|
|
const testKernel = "kernel"
|
|
const testInitrd = "initrd"
|
|
const testImage = "image"
|
|
const testHypervisor = "hypervisor"
|
|
const testJailer = "jailer"
|
|
const testFirmware = "firmware"
|
|
const testVirtiofsd = "virtiofsd"
|
|
const testHypervisorCtl = "hypervisorctl"
|
|
const testBundle = "bundle"
|
|
|
|
const testDisabledAsNonRoot = "Test disabled as requires root privileges"
|
|
|
|
// package variables set in TestMain
|
|
var testDir = ""
|
|
var sandboxDirState = ""
|
|
var testQemuKernelPath = ""
|
|
var testQemuInitrdPath = ""
|
|
var testQemuImagePath = ""
|
|
var testQemuPath = ""
|
|
var testClhKernelPath = ""
|
|
var testClhImagePath = ""
|
|
var testClhInitrdPath = ""
|
|
var testClhPath = ""
|
|
var testAcrnKernelPath = ""
|
|
var testAcrnImagePath = ""
|
|
var testAcrnPath = ""
|
|
var testAcrnCtlPath = ""
|
|
var testVirtiofsdPath = ""
|
|
|
|
var testHyperstartCtlSocket = ""
|
|
var testHyperstartTtySocket = ""
|
|
|
|
// cleanUp Removes any stale sandbox/container state that can affect
|
|
// the next test to run.
|
|
func cleanUp() {
|
|
syscall.Unmount(GetSharePath(testSandboxID), syscall.MNT_DETACH|UmountNoFollow)
|
|
os.RemoveAll(testDir)
|
|
os.MkdirAll(testDir, DirMode)
|
|
|
|
setup()
|
|
}
|
|
|
|
func setup() {
|
|
os.Mkdir(filepath.Join(testDir, testBundle), DirMode)
|
|
|
|
for _, filename := range []string{testQemuKernelPath, testQemuInitrdPath, testQemuImagePath, testQemuPath} {
|
|
_, err := os.Create(filename)
|
|
if err != nil {
|
|
fmt.Printf("Could not recreate %s:%v", filename, err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
}
|
|
|
|
func setupAcrn() {
|
|
os.Mkdir(filepath.Join(testDir, testBundle), DirMode)
|
|
|
|
for _, filename := range []string{testAcrnKernelPath, testAcrnImagePath, testAcrnPath, testAcrnCtlPath} {
|
|
_, err := os.Create(filename)
|
|
if err != nil {
|
|
fmt.Printf("Could not recreate %s:%v", filename, err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
}
|
|
|
|
func setupClh() {
|
|
os.Mkdir(filepath.Join(testDir, testBundle), DirMode)
|
|
|
|
for _, filename := range []string{testClhKernelPath, testClhImagePath, testClhPath, testVirtiofsdPath} {
|
|
_, err := os.Create(filename)
|
|
if err != nil {
|
|
fmt.Printf("Could not recreate %s:%v", filename, err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestMain is the common main function used by ALL the test functions
|
|
// for this package.
|
|
func TestMain(m *testing.M) {
|
|
var err error
|
|
|
|
flag.Parse()
|
|
|
|
logger := logrus.NewEntry(logrus.New())
|
|
logger.Logger.Level = logrus.ErrorLevel
|
|
for _, arg := range flag.Args() {
|
|
if arg == "debug-logs" {
|
|
logger.Logger.Level = logrus.DebugLevel
|
|
}
|
|
}
|
|
SetLogger(context.Background(), logger)
|
|
|
|
testDir, err = os.MkdirTemp("", "vc-tmp-")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fs.EnableMockTesting(filepath.Join(testDir, "mockfs"))
|
|
|
|
fmt.Printf("INFO: Creating virtcontainers test directory %s\n", testDir)
|
|
err = os.MkdirAll(testDir, DirMode)
|
|
if err != nil {
|
|
fmt.Println("Could not create test directories:", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
utils.StartCmd = func(c *exec.Cmd) error {
|
|
//StartVM will Check if the hypervisor is alive and
|
|
// checks for the PID is running, lets fake it using our
|
|
// own PID
|
|
c.Process = &os.Process{Pid: os.Getpid()}
|
|
return nil
|
|
}
|
|
|
|
testQemuKernelPath = filepath.Join(testDir, testKernel)
|
|
testQemuInitrdPath = filepath.Join(testDir, testInitrd)
|
|
testQemuImagePath = filepath.Join(testDir, testImage)
|
|
testQemuPath = filepath.Join(testDir, testHypervisor)
|
|
|
|
setup()
|
|
|
|
testAcrnKernelPath = filepath.Join(testDir, testKernel)
|
|
testAcrnImagePath = filepath.Join(testDir, testImage)
|
|
testAcrnPath = filepath.Join(testDir, testHypervisor)
|
|
testAcrnCtlPath = filepath.Join(testDir, testHypervisorCtl)
|
|
|
|
setupAcrn()
|
|
|
|
testVirtiofsdPath = filepath.Join(testDir, testBundle, testVirtiofsd)
|
|
testClhKernelPath = filepath.Join(testDir, testBundle, testKernel)
|
|
testClhImagePath = filepath.Join(testDir, testBundle, testImage)
|
|
testClhInitrdPath = filepath.Join(testDir, testBundle, testInitrd)
|
|
testClhPath = filepath.Join(testDir, testBundle, testHypervisor)
|
|
|
|
setupClh()
|
|
|
|
// set now that configStoragePath has been overridden.
|
|
sandboxDirState = filepath.Join(fs.MockRunStoragePath(), testSandboxID)
|
|
|
|
testHyperstartCtlSocket = filepath.Join(testDir, "test_hyper.sock")
|
|
testHyperstartTtySocket = filepath.Join(testDir, "test_tty.sock")
|
|
|
|
ret := m.Run()
|
|
|
|
os.RemoveAll(testDir)
|
|
|
|
os.Exit(ret)
|
|
}
|