runtime: Add contexts to calls in unit tests

Modify calls in unit tests to use context since many functions were
updated to accept local context to fix trace span ordering.

Fixes #1355

Signed-off-by: Chelsea Mafrica <chelsea.e.mafrica@intel.com>
This commit is contained in:
Chelsea Mafrica 2021-03-05 12:36:07 -08:00
parent 9e4932a6e2
commit 4bf84b4b2f
20 changed files with 162 additions and 143 deletions

View File

@ -77,7 +77,7 @@ func TestAcrnCapabilities(t *testing.T) {
arch: &acrnArchBase{}, arch: &acrnArchBase{},
} }
caps := a.capabilities() caps := a.capabilities(a.ctx)
assert.True(caps.IsBlockDeviceSupported()) assert.True(caps.IsBlockDeviceSupported())
assert.True(caps.IsBlockDeviceHotplugSupported()) assert.True(caps.IsBlockDeviceHotplugSupported())
} }
@ -144,7 +144,7 @@ func TestAcrnHotplugUnsupportedDeviceType(t *testing.T) {
config: acrnConfig, config: acrnConfig,
} }
_, err := a.hotplugAddDevice(&memoryDevice{0, 128, uint64(0), false}, fsDev) _, err := a.hotplugAddDevice(a.ctx, &memoryDevice{0, 128, uint64(0), false}, fsDev)
assert.Error(err) assert.Error(err)
} }
@ -205,7 +205,7 @@ func TestAcrnGetSandboxConsole(t *testing.T) {
sandboxID := "testSandboxID" sandboxID := "testSandboxID"
expected := filepath.Join(a.store.RunVMStoragePath(), sandboxID, consoleSocket) expected := filepath.Join(a.store.RunVMStoragePath(), sandboxID, consoleSocket)
proto, result, err := a.getSandboxConsole(sandboxID) proto, result, err := a.getSandboxConsole(a.ctx, sandboxID)
assert.NoError(err) assert.NoError(err)
assert.Equal(result, expected) assert.Equal(result, expected)
assert.Equal(proto, consoleProtoUnix) assert.Equal(proto, consoleProtoUnix)

View File

@ -258,7 +258,7 @@ func createAndStartSandbox(ctx context.Context, config SandboxConfig) (sandbox V
} }
// Start sandbox // Start sandbox
err = sandbox.Start() err = sandbox.Start(ctx)
if err != nil { if err != nil {
return nil, "", err return nil, "", err
} }
@ -276,7 +276,7 @@ func TestReleaseSandbox(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.NotNil(t, s) assert.NotNil(t, s)
err = s.Release() err = s.Release(ctx)
assert.Nil(t, err, "sandbox release failed: %v", err) assert.Nil(t, err, "sandbox release failed: %v", err)
} }
@ -295,7 +295,7 @@ func TestCleanupContainer(t *testing.T) {
for _, contID := range contIDs { for _, contID := range contIDs {
contConfig := newTestContainerConfigNoop(contID) contConfig := newTestContainerConfigNoop(contID)
c, err := s.CreateContainer(context.Background(), contConfig) c, err := p.CreateContainer(ctx, contConfig)
if c == nil || err != nil { if c == nil || err != nil {
t.Fatal(err) t.Fatal(err)
} }

View File

@ -6,6 +6,7 @@
package virtcontainers package virtcontainers
import ( import (
"context"
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
@ -133,13 +134,15 @@ func TestUpdateCgroups(t *testing.T) {
config: &SandboxConfig{SandboxCgroupOnly: false}, config: &SandboxConfig{SandboxCgroupOnly: false},
} }
ctx := context.Background()
// empty path // empty path
err := s.cgroupsUpdate() err := s.cgroupsUpdate(ctx)
assert.NoError(err) assert.NoError(err)
// path doesn't exist // path doesn't exist
s.state.CgroupPath = "/abc/123/rgb" s.state.CgroupPath = "/abc/123/rgb"
err = s.cgroupsUpdate() err = s.cgroupsUpdate(ctx)
assert.Error(err) assert.Error(err)
if os.Getuid() != 0 { if os.Getuid() != 0 {
@ -153,7 +156,7 @@ func TestUpdateCgroups(t *testing.T) {
s.hypervisor = &mockHypervisor{mockPid: 0} s.hypervisor = &mockHypervisor{mockPid: 0}
// bad pid // bad pid
err = s.cgroupsUpdate() err = s.cgroupsUpdate(ctx)
assert.Error(err) assert.Error(err)
// fake workload // fake workload
@ -162,7 +165,7 @@ func TestUpdateCgroups(t *testing.T) {
s.hypervisor = &mockHypervisor{mockPid: cmd.Process.Pid} s.hypervisor = &mockHypervisor{mockPid: cmd.Process.Pid}
// no containers // no containers
err = s.cgroupsUpdate() err = s.cgroupsUpdate(ctx)
assert.NoError(err) assert.NoError(err)
s.config = &SandboxConfig{} s.config = &SandboxConfig{}
@ -189,7 +192,7 @@ func TestUpdateCgroups(t *testing.T) {
}, },
} }
err = s.cgroupsUpdate() err = s.cgroupsUpdate(context.Background())
assert.NoError(err) assert.NoError(err)
// cleanup // cleanup

View File

@ -97,7 +97,7 @@ func TestContainerRemoveDrive(t *testing.T) {
} }
container.state.Fstype = "" container.state.Fstype = ""
err := container.removeDrive() err := container.removeDrive(sandbox.ctx)
// hotplugRemoveDevice for hypervisor should not be called. // hotplugRemoveDevice for hypervisor should not be called.
// test should pass without a hypervisor created for the container's sandbox. // test should pass without a hypervisor created for the container's sandbox.
@ -116,12 +116,12 @@ func TestContainerRemoveDrive(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
_, ok := device.(*drivers.BlockDevice) _, ok := device.(*drivers.BlockDevice)
assert.True(t, ok) assert.True(t, ok)
err = device.Attach(devReceiver) err = device.Attach(sandbox.ctx, devReceiver)
assert.Nil(t, err) assert.Nil(t, err)
container.state.Fstype = "xfs" container.state.Fstype = "xfs"
container.state.BlockDeviceID = device.DeviceID() container.state.BlockDeviceID = device.DeviceID()
err = container.removeDrive() err = container.removeDrive(sandbox.ctx)
assert.Nil(t, err, "remove drive should succeed") assert.Nil(t, err, "remove drive should succeed")
} }
@ -187,7 +187,7 @@ func TestUnmountHostMountsRemoveBindHostPath(t *testing.T) {
} }
defer syscall.Unmount(devPath, 0) defer syscall.Unmount(devPath, 0)
err := c.unmountHostMounts() err := c.unmountHostMounts(c.ctx)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -341,7 +341,7 @@ func TestContainerAddDriveDir(t *testing.T) {
container.state.Fstype = "" container.state.Fstype = ""
err = container.hotplugDrive() err = container.hotplugDrive(sandbox.ctx)
assert.NoError(err) assert.NoError(err)
assert.NotEmpty(container.state.Fstype) assert.NotEmpty(container.state.Fstype)
@ -380,14 +380,14 @@ func TestContainerRootfsPath(t *testing.T) {
rootfsSuffix: "rootfs", rootfsSuffix: "rootfs",
} }
container.hotplugDrive() container.hotplugDrive(sandbox.ctx)
assert.Empty(t, container.rootfsSuffix) assert.Empty(t, container.rootfsSuffix)
// Reset the value to test the other case // Reset the value to test the other case
container.rootFs = RootFs{Target: fakeRootfs + "/rootfs", Mounted: true} container.rootFs = RootFs{Target: fakeRootfs + "/rootfs", Mounted: true}
container.rootfsSuffix = "rootfs" container.rootfsSuffix = "rootfs"
container.hotplugDrive() container.hotplugDrive(sandbox.ctx)
assert.Equal(t, container.rootfsSuffix, "rootfs") assert.Equal(t, container.rootfsSuffix, "rootfs")
} }
@ -428,18 +428,20 @@ func TestContainerEnterErrorsOnContainerStates(t *testing.T) {
} }
cmd := types.Cmd{} cmd := types.Cmd{}
ctx := context.Background()
// Container state undefined // Container state undefined
_, err := c.enter(cmd) _, err := c.enter(ctx, cmd)
assert.Error(err) assert.Error(err)
// Container paused // Container paused
c.state.State = types.StatePaused c.state.State = types.StatePaused
_, err = c.enter(cmd) _, err = c.enter(ctx, cmd)
assert.Error(err) assert.Error(err)
// Container stopped // Container stopped
c.state.State = types.StateStopped c.state.State = types.StateStopped
_, err = c.enter(cmd) _, err = c.enter(ctx, cmd)
assert.Error(err) assert.Error(err)
} }
@ -454,18 +456,20 @@ func TestContainerWaitErrorState(t *testing.T) {
} }
processID := "foobar" processID := "foobar"
ctx := context.Background()
// Container state undefined // Container state undefined
_, err := c.wait(processID) _, err := c.wait(ctx, processID)
assert.Error(err) assert.Error(err)
// Container paused // Container paused
c.state.State = types.StatePaused c.state.State = types.StatePaused
_, err = c.wait(processID) _, err = c.wait(ctx, processID)
assert.Error(err) assert.Error(err)
// Container stopped // Container stopped
c.state.State = types.StateStopped c.state.State = types.StateStopped
_, err = c.wait(processID) _, err = c.wait(ctx, processID)
assert.Error(err) assert.Error(err)
} }
@ -478,13 +482,16 @@ func TestKillContainerErrorState(t *testing.T) {
}, },
}, },
} }
ctx := context.Background()
// Container state undefined // Container state undefined
err := c.kill(syscall.SIGKILL, true) err := c.kill(ctx, syscall.SIGKILL, true)
assert.Error(err) assert.Error(err)
// Container stopped // Container stopped
c.state.State = types.StateStopped c.state.State = types.StateStopped
err = c.kill(syscall.SIGKILL, true) err = c.kill(ctx, syscall.SIGKILL, true)
assert.Error(err) assert.Error(err)
} }
@ -499,18 +506,20 @@ func TestWinsizeProcessErrorState(t *testing.T) {
} }
processID := "foobar" processID := "foobar"
ctx := context.Background()
// Container state undefined // Container state undefined
err := c.winsizeProcess(processID, 100, 200) err := c.winsizeProcess(ctx, processID, 100, 200)
assert.Error(err) assert.Error(err)
// Container paused // Container paused
c.state.State = types.StatePaused c.state.State = types.StatePaused
err = c.winsizeProcess(processID, 100, 200) err = c.winsizeProcess(ctx, processID, 100, 200)
assert.Error(err) assert.Error(err)
// Container stopped // Container stopped
c.state.State = types.StateStopped c.state.State = types.StateStopped
err = c.winsizeProcess(processID, 100, 200) err = c.winsizeProcess(ctx, processID, 100, 200)
assert.Error(err) assert.Error(err)
} }

View File

@ -176,7 +176,7 @@ func TestAttachGenericDevice(t *testing.T) {
assert.True(t, ok) assert.True(t, ok)
devReceiver := &api.MockDeviceReceiver{} devReceiver := &api.MockDeviceReceiver{}
err = device.Attach(devReceiver) err = device.Attach(context.Background(), devReceiver)
assert.Nil(t, err) assert.Nil(t, err)
err = device.Detach(context.Background(), devReceiver) err = device.Detach(context.Background(), devReceiver)
@ -211,7 +211,7 @@ func TestAttachBlockDevice(t *testing.T) {
dm.blockDriver = VirtioSCSI dm.blockDriver = VirtioSCSI
device, err = dm.NewDevice(deviceInfo) device, err = dm.NewDevice(deviceInfo)
assert.Nil(t, err) assert.Nil(t, err)
err = device.Attach(devReceiver) err = device.Attach(context.Background(), devReceiver)
assert.Nil(t, err) assert.Nil(t, err)
err = device.Detach(context.Background(), devReceiver) err = device.Detach(context.Background(), devReceiver)

View File

@ -71,7 +71,7 @@ func Example_createAndStartSandbox() {
} }
// Start the sandbox // Start the sandbox
err = s.Start() err = s.Start(context.Background())
if err != nil { if err != nil {
fmt.Printf("Could not start sandbox: %s", err) fmt.Printf("Could not start sandbox: %s", err)
} }

View File

@ -43,7 +43,7 @@ func TestTemplateFactory(t *testing.T) {
vm, err := f.GetBaseVM(ctx, vmConfig) vm, err := f.GetBaseVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
// CloseFactory // CloseFactory

View File

@ -42,7 +42,7 @@ func TestTemplateFactory(t *testing.T) {
vm, err := f.GetBaseVM(ctx, vmConfig) vm, err := f.GetBaseVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
// CloseFactory // CloseFactory

View File

@ -184,7 +184,7 @@ func TestFactoryGetVM(t *testing.T) {
vm, err := f.GetVM(ctx, vmConfig) vm, err := f.GetVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
f.CloseFactory(ctx) f.CloseFactory(ctx)
@ -196,7 +196,7 @@ func TestFactoryGetVM(t *testing.T) {
vm, err = f.GetVM(ctx, vmConfig) vm, err = f.GetVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
f.CloseFactory(ctx) f.CloseFactory(ctx)
@ -211,7 +211,7 @@ func TestFactoryGetVM(t *testing.T) {
vm, err = f.GetVM(ctx, vmConfig) vm, err = f.GetVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
f.CloseFactory(ctx) f.CloseFactory(ctx)
@ -223,7 +223,7 @@ func TestFactoryGetVM(t *testing.T) {
vm, err = f.GetVM(ctx, vmConfig) vm, err = f.GetVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
f.CloseFactory(ctx) f.CloseFactory(ctx)
@ -235,7 +235,7 @@ func TestFactoryGetVM(t *testing.T) {
vm, err = f.GetVM(ctx, vmConfig) vm, err = f.GetVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
// CPU hotplug // CPU hotplug
@ -243,7 +243,7 @@ func TestFactoryGetVM(t *testing.T) {
vm, err = f.GetVM(ctx, vmConfig) vm, err = f.GetVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
// Memory hotplug // Memory hotplug
@ -251,7 +251,7 @@ func TestFactoryGetVM(t *testing.T) {
vm, err = f.GetVM(ctx, vmConfig) vm, err = f.GetVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
// checkConfig fall back // checkConfig fall back
@ -259,7 +259,7 @@ func TestFactoryGetVM(t *testing.T) {
vm, err = f.GetVM(ctx, vmConfig) vm, err = f.GetVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
f.CloseFactory(ctx) f.CloseFactory(ctx)

View File

@ -63,7 +63,7 @@ func TestTemplateFactory(t *testing.T) {
vm, err := f.GetBaseVM(ctx, vmConfig) vm, err := f.GetBaseVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
// Fetch // Fetch
@ -93,13 +93,13 @@ func TestTemplateFactory(t *testing.T) {
vm, err = tt.GetBaseVM(ctx, vmConfig) vm, err = tt.GetBaseVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
vm, err = f.GetBaseVM(ctx, vmConfig) vm, err = f.GetBaseVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
err = tt.createTemplateVM(ctx) err = tt.createTemplateVM(ctx)
@ -108,13 +108,13 @@ func TestTemplateFactory(t *testing.T) {
vm, err = tt.GetBaseVM(ctx, vmConfig) vm, err = tt.GetBaseVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
vm, err = f.GetBaseVM(ctx, vmConfig) vm, err = f.GetBaseVM(ctx, vmConfig)
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(ctx)
assert.Nil(err) assert.Nil(err)
// CloseFactory // CloseFactory

View File

@ -63,7 +63,7 @@ func TestKataAgentConnect(t *testing.T) {
}, },
} }
err = k.connect() err = k.connect(context.Background())
assert.NoError(err) assert.NoError(err)
assert.NotNil(k.client) assert.NotNil(k.client)
} }
@ -86,8 +86,8 @@ func TestKataAgentDisconnect(t *testing.T) {
}, },
} }
assert.NoError(k.connect()) assert.NoError(k.connect(context.Background()))
assert.NoError(k.disconnect()) assert.NoError(k.disconnect(context.Background()))
assert.Nil(k.client) assert.Nil(k.client)
} }
@ -123,8 +123,10 @@ func TestKataAgentSendReq(t *testing.T) {
}, },
} }
ctx := context.Background()
for _, req := range reqList { for _, req := range reqList {
_, err = k.sendReq(req) _, err = k.sendReq(ctx, req)
assert.Nil(err) assert.Nil(err)
} }
@ -132,52 +134,52 @@ func TestKataAgentSendReq(t *testing.T) {
container := &Container{} container := &Container{}
execid := "processFooBar" execid := "processFooBar"
err = k.startContainer(sandbox, container) err = k.startContainer(ctx, sandbox, container)
assert.Nil(err) assert.Nil(err)
err = k.signalProcess(container, execid, syscall.SIGKILL, true) err = k.signalProcess(ctx, container, execid, syscall.SIGKILL, true)
assert.Nil(err) assert.Nil(err)
err = k.winsizeProcess(container, execid, 100, 200) err = k.winsizeProcess(ctx, container, execid, 100, 200)
assert.Nil(err) assert.Nil(err)
_, err = k.processListContainer(sandbox, Container{}, ProcessListOptions{}) _, err = k.processListContainer(ctx, sandbox, Container{}, ProcessListOptions{})
assert.Nil(err) assert.Nil(err)
err = k.updateContainer(sandbox, Container{}, specs.LinuxResources{}) err = k.updateContainer(ctx, sandbox, Container{}, specs.LinuxResources{})
assert.Nil(err) assert.Nil(err)
err = k.pauseContainer(sandbox, Container{}) err = k.pauseContainer(ctx, sandbox, Container{})
assert.Nil(err) assert.Nil(err)
err = k.resumeContainer(sandbox, Container{}) err = k.resumeContainer(ctx, sandbox, Container{})
assert.Nil(err) assert.Nil(err)
err = k.onlineCPUMem(1, true) err = k.onlineCPUMem(ctx, 1, true)
assert.Nil(err) assert.Nil(err)
_, err = k.statsContainer(sandbox, Container{}) _, err = k.statsContainer(ctx, sandbox, Container{})
assert.Nil(err) assert.Nil(err)
err = k.check() err = k.check(ctx)
assert.Nil(err) assert.Nil(err)
_, err = k.waitProcess(container, execid) _, err = k.waitProcess(ctx, container, execid)
assert.Nil(err) assert.Nil(err)
_, err = k.writeProcessStdin(container, execid, []byte{'c'}) _, err = k.writeProcessStdin(ctx, container, execid, []byte{'c'})
assert.Nil(err) assert.Nil(err)
err = k.closeProcessStdin(container, execid) err = k.closeProcessStdin(ctx, container, execid)
assert.Nil(err) assert.Nil(err)
_, err = k.readProcessStdout(container, execid, []byte{}) _, err = k.readProcessStdout(ctx, container, execid, []byte{})
assert.Nil(err) assert.Nil(err)
_, err = k.readProcessStderr(container, execid, []byte{}) _, err = k.readProcessStderr(ctx, container, execid, []byte{})
assert.Nil(err) assert.Nil(err)
_, err = k.getOOMEvent() _, err = k.getOOMEvent(ctx)
assert.Nil(err) assert.Nil(err)
} }
@ -753,15 +755,16 @@ func TestAgentConfigure(t *testing.T) {
h := &mockHypervisor{} h := &mockHypervisor{}
c := KataAgentConfig{} c := KataAgentConfig{}
id := "foobar" id := "foobar"
ctx := context.Background()
err = k.configure(h, id, dir, c) err = k.configure(ctx, h, id, dir, c)
assert.Nil(err) assert.Nil(err)
err = k.configure(h, id, dir, c) err = k.configure(ctx, h, id, dir, c)
assert.Nil(err) assert.Nil(err)
assert.Empty(k.state.URL) assert.Empty(k.state.URL)
err = k.configure(h, id, dir, c) err = k.configure(ctx, h, id, dir, c)
assert.Nil(err) assert.Nil(err)
} }
@ -864,11 +867,11 @@ func TestAgentCreateContainer(t *testing.T) {
assert.Nil(err) assert.Nil(err)
defer os.RemoveAll(dir) defer os.RemoveAll(dir)
err = k.configure(&mockHypervisor{}, sandbox.id, dir, KataAgentConfig{}) err = k.configure(context.Background(), &mockHypervisor{}, sandbox.id, dir, KataAgentConfig{})
assert.Nil(err) assert.Nil(err)
// We'll fail on container metadata file creation, but it helps increasing coverage... // We'll fail on container metadata file creation, but it helps increasing coverage...
_, err = k.createContainer(sandbox, container) _, err = k.createContainer(context.Background(), sandbox, container)
assert.Error(err) assert.Error(err)
} }
@ -890,16 +893,16 @@ func TestAgentNetworkOperation(t *testing.T) {
}, },
} }
_, err = k.updateInterface(nil) _, err = k.updateInterface(k.ctx, nil)
assert.Nil(err) assert.Nil(err)
_, err = k.listInterfaces() _, err = k.listInterfaces(k.ctx)
assert.Nil(err) assert.Nil(err)
_, err = k.updateRoutes([]*pbTypes.Route{}) _, err = k.updateRoutes(k.ctx, []*pbTypes.Route{})
assert.Nil(err) assert.Nil(err)
_, err = k.listRoutes() _, err = k.listRoutes(k.ctx)
assert.Nil(err) assert.Nil(err)
} }
@ -938,7 +941,7 @@ func TestKataCopyFile(t *testing.T) {
}, },
} }
err = k.copyFile("/abc/xyz/123", "/tmp") err = k.copyFile(context.Background(), "/abc/xyz/123", "/tmp")
assert.Error(err) assert.Error(err)
src, err := ioutil.TempFile("", "src") src, err := ioutil.TempFile("", "src")
@ -961,7 +964,7 @@ func TestKataCopyFile(t *testing.T) {
grpcMaxDataSize = orgGrpcMaxDataSize grpcMaxDataSize = orgGrpcMaxDataSize
}() }()
err = k.copyFile(src.Name(), dst.Name()) err = k.copyFile(context.Background(), src.Name(), dst.Name())
assert.NoError(err) assert.NoError(err)
} }
@ -987,7 +990,7 @@ func TestKataCleanupSandbox(t *testing.T) {
assert.Nil(err) assert.Nil(err)
k := &kataAgent{ctx: context.Background()} k := &kataAgent{ctx: context.Background()}
k.cleanup(&s) k.cleanup(context.Background(), &s)
_, err = os.Stat(dir) _, err = os.Stat(dir)
assert.False(os.IsExist(err)) assert.False(os.IsExist(err))

View File

@ -53,7 +53,7 @@ func TestMockHypervisorStartSandbox(t *testing.T) {
func TestMockHypervisorStopSandbox(t *testing.T) { func TestMockHypervisorStopSandbox(t *testing.T) {
var m *mockHypervisor var m *mockHypervisor
assert.NoError(t, m.stopSandbox()) assert.NoError(t, m.stopSandbox(context.Background()))
} }
func TestMockHypervisorAddDevice(t *testing.T) { func TestMockHypervisorAddDevice(t *testing.T) {
@ -67,7 +67,7 @@ func TestMockHypervisorGetSandboxConsole(t *testing.T) {
expected := "" expected := ""
expectedProto := "" expectedProto := ""
proto, result, err := m.getSandboxConsole("testSandboxID") proto, result, err := m.getSandboxConsole(context.Background(), "testSandboxID")
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, result, expected) assert.Equal(t, result, expected)
assert.Equal(t, proto, expectedProto) assert.Equal(t, proto, expectedProto)
@ -82,7 +82,7 @@ func TestMockHypervisorSaveSandbox(t *testing.T) {
func TestMockHypervisorDisconnect(t *testing.T) { func TestMockHypervisorDisconnect(t *testing.T) {
var m *mockHypervisor var m *mockHypervisor
m.disconnect() m.disconnect(context.Background())
} }
func TestMockHypervisorCheck(t *testing.T) { func TestMockHypervisorCheck(t *testing.T) {

View File

@ -6,6 +6,7 @@
package virtcontainers package virtcontainers
import ( import (
"context"
"errors" "errors"
"testing" "testing"
@ -25,11 +26,11 @@ func TestMonitorSuccess(t *testing.T) {
m := newMonitor(s) m := newMonitor(s)
ch, err := m.newWatcher() ch, err := m.newWatcher(context.Background())
assert.Nil(err, "newWatcher failed: %v", err) assert.Nil(err, "newWatcher failed: %v", err)
fakeErr := errors.New("foobar error") fakeErr := errors.New("foobar error")
m.notify(fakeErr) m.notify(context.Background(), fakeErr)
resultErr := <-ch resultErr := <-ch
assert.True(resultErr == fakeErr, "monitor notification mismatch %v vs. %v", resultErr, fakeErr) assert.True(resultErr == fakeErr, "monitor notification mismatch %v vs. %v", resultErr, fakeErr)
@ -49,12 +50,12 @@ func TestMonitorClosedChannel(t *testing.T) {
m := newMonitor(s) m := newMonitor(s)
ch, err := m.newWatcher() ch, err := m.newWatcher(context.Background())
assert.Nil(err, "newWatcher failed: %v", err) assert.Nil(err, "newWatcher failed: %v", err)
close(ch) close(ch)
fakeErr := errors.New("foobar error") fakeErr := errors.New("foobar error")
m.notify(fakeErr) m.notify(context.Background(), fakeErr)
m.stop() m.stop()
} }

View File

@ -6,6 +6,7 @@
package virtcontainers package virtcontainers
import ( import (
"context"
"net" "net"
"testing" "testing"

View File

@ -6,6 +6,7 @@
package vcmock package vcmock
import ( import (
"context"
"fmt" "fmt"
"io" "io"
"syscall" "syscall"

View File

@ -6,6 +6,7 @@
package virtcontainers package virtcontainers
import ( import (
"context"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net" "net"
@ -146,12 +147,12 @@ func TestQemuAddDeviceToBridge(t *testing.T) {
q.bridges(1) q.bridges(1)
for i := uint32(1); i <= types.PCIBridgeMaxCapacity; i++ { for i := uint32(1); i <= types.PCIBridgeMaxCapacity; i++ {
_, _, err := q.addDeviceToBridge(fmt.Sprintf("qemu-bridge-%d", i), types.PCI) _, _, err := q.addDeviceToBridge(context.Background(), fmt.Sprintf("qemu-bridge-%d", i), types.PCI)
assert.Nil(err) assert.Nil(err)
} }
// fail to add device to bridge cause no more available bridge slot // fail to add device to bridge cause no more available bridge slot
_, _, err := q.addDeviceToBridge("qemu-bridge-31", types.PCI) _, _, err := q.addDeviceToBridge(context.Background(), "qemu-bridge-31", types.PCI)
exceptErr := errors.New("no more bridge slots available") exceptErr := errors.New("no more bridge slots available")
assert.Equal(exceptErr.Error(), err.Error()) assert.Equal(exceptErr.Error(), err.Error())
@ -159,7 +160,7 @@ func TestQemuAddDeviceToBridge(t *testing.T) {
q = newQemuArchBase() q = newQemuArchBase()
q.qemuMachine.Type = QemuPCLite q.qemuMachine.Type = QemuPCLite
q.bridges(0) q.bridges(0)
_, _, err = q.addDeviceToBridge("qemu-bridge", types.PCI) _, _, err = q.addDeviceToBridge(context.Background(), "qemu-bridge", types.PCI)
if assert.Error(err) { if assert.Error(err) {
exceptErr = errors.New("failed to get available address from bridges") exceptErr = errors.New("failed to get available address from bridges")
assert.Equal(exceptErr.Error(), err.Error()) assert.Equal(exceptErr.Error(), err.Error())

View File

@ -333,7 +333,7 @@ func TestQemuGetSandboxConsole(t *testing.T) {
sandboxID := "testSandboxID" sandboxID := "testSandboxID"
expected := filepath.Join(q.store.RunVMStoragePath(), sandboxID, consoleSocket) expected := filepath.Join(q.store.RunVMStoragePath(), sandboxID, consoleSocket)
proto, result, err := q.getSandboxConsole(sandboxID) proto, result, err := q.getSandboxConsole(q.ctx, sandboxID)
assert.NoError(err) assert.NoError(err)
assert.Equal(result, expected) assert.Equal(result, expected)
assert.Equal(proto, consoleProtoUnix) assert.Equal(proto, consoleProtoUnix)
@ -346,7 +346,7 @@ func TestQemuCapabilities(t *testing.T) {
arch: &qemuArchBase{}, arch: &qemuArchBase{},
} }
caps := q.capabilities() caps := q.capabilities(q.ctx)
assert.True(caps.IsBlockDeviceHotplugSupported()) assert.True(caps.IsBlockDeviceHotplugSupported())
} }
@ -431,7 +431,7 @@ func TestQemuCleanup(t *testing.T) {
config: newQemuConfig(), config: newQemuConfig(),
} }
err := q.cleanup() err := q.cleanup(q.ctx)
assert.Nil(err) assert.Nil(err)
} }
@ -444,7 +444,7 @@ func TestQemuGrpc(t *testing.T) {
config: config, config: config,
} }
json, err := q.toGrpc() json, err := q.toGrpc(context.Background())
assert.Nil(err) assert.Nil(err)
var q2 qemu var q2 qemu

View File

@ -68,11 +68,11 @@ func testCreateSandbox(t *testing.T, id string,
return nil, fmt.Errorf("Could not create sandbox: %s", err) return nil, fmt.Errorf("Could not create sandbox: %s", err)
} }
if err := sandbox.agent.startSandbox(sandbox); err != nil { if err := sandbox.agent.startSandbox(context.Background(), sandbox); err != nil {
return nil, err return nil, err
} }
if err := sandbox.createContainers(); err != nil { if err := sandbox.createContainers(context.Background()); err != nil {
return nil, err return nil, err
} }
@ -365,7 +365,7 @@ func TestSandboxSetSandboxAndContainerState(t *testing.T) {
assert.NoError(err) assert.NoError(err)
// clean up // clean up
err = p.Delete() err = p.Delete(context.Background())
assert.NoError(err) assert.NoError(err)
} }
@ -465,7 +465,7 @@ func TestSandboxGetContainer(t *testing.T) {
contID := "999" contID := "999"
contConfig := newTestContainerConfigNoop(contID) contConfig := newTestContainerConfigNoop(contID)
nc, err := newContainer(p, &contConfig) nc, err := newContainer(context.Background(), p, &contConfig)
assert.NoError(err) assert.NoError(err)
err = p.addContainer(nc) err = p.addContainer(nc)
@ -578,10 +578,10 @@ func TestSandboxAttachDevicesVFIO(t *testing.T) {
containers[c.id].sandbox = &sandbox containers[c.id].sandbox = &sandbox
err = containers[c.id].attachDevices(c.devices) err = containers[c.id].attachDevices(context.Background(), c.devices)
assert.Nil(t, err, "Error while attaching devices %s", err) assert.Nil(t, err, "Error while attaching devices %s", err)
err = containers[c.id].detachDevices() err = containers[c.id].detachDevices(context.Background())
assert.Nil(t, err, "Error while detaching devices %s", err) assert.Nil(t, err, "Error while detaching devices %s", err)
} }
@ -673,10 +673,10 @@ func TestSandboxAttachDevicesVhostUserBlk(t *testing.T) {
containers[c.id].sandbox = &sandbox containers[c.id].sandbox = &sandbox
err = containers[c.id].attachDevices(c.devices) err = containers[c.id].attachDevices(context.Background(), c.devices)
assert.Nil(t, err, "Error while attaching vhost-user-blk devices %s", err) assert.Nil(t, err, "Error while attaching vhost-user-blk devices %s", err)
err = containers[c.id].detachDevices() err = containers[c.id].detachDevices(context.Background())
assert.Nil(t, err, "Error while detaching vhost-user-blk devices %s", err) assert.Nil(t, err, "Error while detaching vhost-user-blk devices %s", err)
} }
@ -892,14 +892,14 @@ func TestDeleteContainer(t *testing.T) {
defer cleanUp() defer cleanUp()
contID := "999" contID := "999"
_, err = s.DeleteContainer(contID) _, err = s.DeleteContainer(context.Background(), contID)
assert.NotNil(t, err, "Deletng non-existing container should fail") assert.NotNil(t, err, "Deletng non-existing container should fail")
contConfig := newTestContainerConfigNoop(contID) contConfig := newTestContainerConfigNoop(contID)
_, err = s.CreateContainer(context.Background(), contConfig) _, err = s.CreateContainer(context.Background(), contConfig)
assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err) assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err)
_, err = s.DeleteContainer(contID) _, err = s.DeleteContainer(context.Background(), contID)
assert.Nil(t, err, "Failed to delete container %s in sandbox %s: %v", contID, s.ID(), err) assert.Nil(t, err, "Failed to delete container %s in sandbox %s: %v", contID, s.ID(), err)
} }
@ -912,7 +912,7 @@ func TestStartContainer(t *testing.T) {
_, err = s.StartContainer(context.Background(), contID) _, err = s.StartContainer(context.Background(), contID)
assert.NotNil(t, err, "Starting non-existing container should fail") assert.NotNil(t, err, "Starting non-existing container should fail")
err = s.Start() err = s.Start(context.Background())
assert.Nil(t, err, "Failed to start sandbox: %v", err) assert.Nil(t, err, "Failed to start sandbox: %v", err)
contConfig := newTestContainerConfigNoop(contID) contConfig := newTestContainerConfigNoop(contID)
@ -939,7 +939,7 @@ func TestStatusContainer(t *testing.T) {
_, err = s.StatusContainer(contID) _, err = s.StatusContainer(contID)
assert.Nil(t, err, "Status container failed: %v", err) assert.Nil(t, err, "Status container failed: %v", err)
_, err = s.DeleteContainer(contID) _, err = s.DeleteContainer(context.Background(), contID)
assert.Nil(t, err, "Failed to delete container %s in sandbox %s: %v", contID, s.ID(), err) assert.Nil(t, err, "Failed to delete container %s in sandbox %s: %v", contID, s.ID(), err)
} }
@ -958,20 +958,20 @@ func TestEnterContainer(t *testing.T) {
contID := "999" contID := "999"
cmd := types.Cmd{} cmd := types.Cmd{}
_, _, err = s.EnterContainer(contID, cmd) _, _, err = s.EnterContainer(context.Background(), contID, cmd)
assert.NotNil(t, err, "Entering non-existing container should fail") assert.NotNil(t, err, "Entering non-existing container should fail")
contConfig := newTestContainerConfigNoop(contID) contConfig := newTestContainerConfigNoop(contID)
_, err = s.CreateContainer(context.Background(), contConfig) _, err = s.CreateContainer(context.Background(), contConfig)
assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err) assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err)
_, _, err = s.EnterContainer(contID, cmd) _, _, err = s.EnterContainer(context.Background(), contID, cmd)
assert.NotNil(t, err, "Entering non-running container should fail") assert.NotNil(t, err, "Entering non-running container should fail")
err = s.Start() err = s.Start(context.Background())
assert.Nil(t, err, "Failed to start sandbox: %v", err) assert.Nil(t, err, "Failed to start sandbox: %v", err)
_, _, err = s.EnterContainer(contID, cmd) _, _, err = s.EnterContainer(context.Background(), contID, cmd)
assert.Nil(t, err, "Enter container failed: %v", err) assert.Nil(t, err, "Enter container failed: %v", err)
} }
@ -1007,7 +1007,7 @@ func TestDeleteStoreWhenNewContainerFail(t *testing.T) {
DevType: "", DevType: "",
}, },
} }
_, err = newContainer(p, &contConfig) _, err = newContainer(context.Background(), p, &contConfig)
assert.NotNil(t, err, "New container with invalid device info should fail") assert.NotNil(t, err, "New container with invalid device info should fail")
storePath := filepath.Join(p.newStore.RunStoragePath(), testSandboxID, contID) storePath := filepath.Join(p.newStore.RunStoragePath(), testSandboxID, contID)
_, err = os.Stat(storePath) _, err = os.Stat(storePath)
@ -1019,16 +1019,16 @@ func TestMonitor(t *testing.T) {
assert.Nil(t, err, "VirtContainers should not allow empty sandboxes") assert.Nil(t, err, "VirtContainers should not allow empty sandboxes")
defer cleanUp() defer cleanUp()
_, err = s.Monitor() _, err = s.Monitor(context.Background())
assert.NotNil(t, err, "Monitoring non-running container should fail") assert.NotNil(t, err, "Monitoring non-running container should fail")
err = s.Start() err = s.Start(context.Background())
assert.Nil(t, err, "Failed to start sandbox: %v", err) assert.Nil(t, err, "Failed to start sandbox: %v", err)
_, err = s.Monitor() _, err = s.Monitor(context.Background())
assert.Nil(t, err, "Monitor sandbox failed: %v", err) assert.Nil(t, err, "Monitor sandbox failed: %v", err)
_, err = s.Monitor() _, err = s.Monitor(context.Background())
assert.Nil(t, err, "Monitor sandbox again failed: %v", err) assert.Nil(t, err, "Monitor sandbox again failed: %v", err)
s.monitor.stop() s.monitor.stop()
@ -1041,26 +1041,26 @@ func TestWaitProcess(t *testing.T) {
contID := "foo" contID := "foo"
execID := "bar" execID := "bar"
_, err = s.WaitProcess(contID, execID) _, err = s.WaitProcess(context.Background(), contID, execID)
assert.NotNil(t, err, "Wait process in stopped sandbox should fail") assert.NotNil(t, err, "Wait process in stopped sandbox should fail")
err = s.Start() err = s.Start(context.Background())
assert.Nil(t, err, "Failed to start sandbox: %v", err) assert.Nil(t, err, "Failed to start sandbox: %v", err)
_, err = s.WaitProcess(contID, execID) _, err = s.WaitProcess(context.Background(), contID, execID)
assert.NotNil(t, err, "Wait process in non-existing container should fail") assert.NotNil(t, err, "Wait process in non-existing container should fail")
contConfig := newTestContainerConfigNoop(contID) contConfig := newTestContainerConfigNoop(contID)
_, err = s.CreateContainer(context.Background(), contConfig) _, err = s.CreateContainer(context.Background(), contConfig)
assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err) assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err)
_, err = s.WaitProcess(contID, execID) _, err = s.WaitProcess(context.Background(), contID, execID)
assert.Nil(t, err, "Wait process in ready container failed: %v", err) assert.Nil(t, err, "Wait process in ready container failed: %v", err)
_, err = s.StartContainer(context.Background(), contID) _, err = s.StartContainer(context.Background(), contID)
assert.Nil(t, err, "Start container failed: %v", err) assert.Nil(t, err, "Start container failed: %v", err)
_, err = s.WaitProcess(contID, execID) _, err = s.WaitProcess(context.Background(), contID, execID)
assert.Nil(t, err, "Wait process failed: %v", err) assert.Nil(t, err, "Wait process failed: %v", err)
} }
@ -1071,26 +1071,26 @@ func TestSignalProcess(t *testing.T) {
contID := "foo" contID := "foo"
execID := "bar" execID := "bar"
err = s.SignalProcess(contID, execID, syscall.SIGKILL, true) err = s.SignalProcess(context.Background(), contID, execID, syscall.SIGKILL, true)
assert.NotNil(t, err, "Wait process in stopped sandbox should fail") assert.NotNil(t, err, "Wait process in stopped sandbox should fail")
err = s.Start() err = s.Start(context.Background())
assert.Nil(t, err, "Failed to start sandbox: %v", err) assert.Nil(t, err, "Failed to start sandbox: %v", err)
err = s.SignalProcess(contID, execID, syscall.SIGKILL, false) err = s.SignalProcess(context.Background(), contID, execID, syscall.SIGKILL, false)
assert.NotNil(t, err, "Wait process in non-existing container should fail") assert.NotNil(t, err, "Wait process in non-existing container should fail")
contConfig := newTestContainerConfigNoop(contID) contConfig := newTestContainerConfigNoop(contID)
_, err = s.CreateContainer(context.Background(), contConfig) _, err = s.CreateContainer(context.Background(), contConfig)
assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err) assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err)
err = s.SignalProcess(contID, execID, syscall.SIGKILL, true) err = s.SignalProcess(context.Background(), contID, execID, syscall.SIGKILL, true)
assert.Nil(t, err, "Wait process in ready container failed: %v", err) assert.Nil(t, err, "Wait process in ready container failed: %v", err)
_, err = s.StartContainer(context.Background(), contID) _, err = s.StartContainer(context.Background(), contID)
assert.Nil(t, err, "Start container failed: %v", err) assert.Nil(t, err, "Start container failed: %v", err)
err = s.SignalProcess(contID, execID, syscall.SIGKILL, false) err = s.SignalProcess(context.Background(), contID, execID, syscall.SIGKILL, false)
assert.Nil(t, err, "Wait process failed: %v", err) assert.Nil(t, err, "Wait process failed: %v", err)
} }
@ -1101,26 +1101,26 @@ func TestWinsizeProcess(t *testing.T) {
contID := "foo" contID := "foo"
execID := "bar" execID := "bar"
err = s.WinsizeProcess(contID, execID, 100, 200) err = s.WinsizeProcess(context.Background(), contID, execID, 100, 200)
assert.NotNil(t, err, "Winsize process in stopped sandbox should fail") assert.NotNil(t, err, "Winsize process in stopped sandbox should fail")
err = s.Start() err = s.Start(context.Background())
assert.Nil(t, err, "Failed to start sandbox: %v", err) assert.Nil(t, err, "Failed to start sandbox: %v", err)
err = s.WinsizeProcess(contID, execID, 100, 200) err = s.WinsizeProcess(context.Background(), contID, execID, 100, 200)
assert.NotNil(t, err, "Winsize process in non-existing container should fail") assert.NotNil(t, err, "Winsize process in non-existing container should fail")
contConfig := newTestContainerConfigNoop(contID) contConfig := newTestContainerConfigNoop(contID)
_, err = s.CreateContainer(context.Background(), contConfig) _, err = s.CreateContainer(context.Background(), contConfig)
assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err) assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err)
err = s.WinsizeProcess(contID, execID, 100, 200) err = s.WinsizeProcess(context.Background(), contID, execID, 100, 200)
assert.Nil(t, err, "Winsize process in ready container failed: %v", err) assert.Nil(t, err, "Winsize process in ready container failed: %v", err)
_, err = s.StartContainer(context.Background(), contID) _, err = s.StartContainer(context.Background(), contID)
assert.Nil(t, err, "Start container failed: %v", err) assert.Nil(t, err, "Start container failed: %v", err)
err = s.WinsizeProcess(contID, execID, 100, 200) err = s.WinsizeProcess(context.Background(), contID, execID, 100, 200)
assert.Nil(t, err, "Winsize process failed: %v", err) assert.Nil(t, err, "Winsize process failed: %v", err)
} }
@ -1134,7 +1134,7 @@ func TestContainerProcessIOStream(t *testing.T) {
_, _, _, err = s.IOStream(contID, execID) _, _, _, err = s.IOStream(contID, execID)
assert.NotNil(t, err, "Winsize process in stopped sandbox should fail") assert.NotNil(t, err, "Winsize process in stopped sandbox should fail")
err = s.Start() err = s.Start(context.Background())
assert.Nil(t, err, "Failed to start sandbox: %v", err) assert.Nil(t, err, "Failed to start sandbox: %v", err)
_, _, _, err = s.IOStream(contID, execID) _, _, _, err = s.IOStream(contID, execID)
@ -1297,7 +1297,7 @@ func TestPreAddDevice(t *testing.T) {
}, },
} }
mounts, ignoreMounts, err := container.mountSharedDirMounts("", "", "") mounts, ignoreMounts, err := container.mountSharedDirMounts(context.Background(), "", "", "")
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, len(mounts), 0, assert.Equal(t, len(mounts), 0,
"mounts should contain nothing because it only contains a block device") "mounts should contain nothing because it only contains a block device")
@ -1344,7 +1344,7 @@ func TestStartNetworkMonitor(t *testing.T) {
ctx: context.Background(), ctx: context.Background(),
} }
err = s.startNetworkMonitor() err = s.startNetworkMonitor(context.Background())
assert.Nil(t, err) assert.Nil(t, err)
} }
@ -1353,7 +1353,7 @@ func TestSandboxStopStopped(t *testing.T) {
ctx: context.Background(), ctx: context.Background(),
state: types.SandboxState{State: types.StateStopped}, state: types.SandboxState{State: types.StateStopped},
} }
err := s.Stop(false) err := s.Stop(context.Background(), false)
assert.Nil(t, err) assert.Nil(t, err)
} }

View File

@ -284,6 +284,6 @@ func (v *virtiofsdMock) Start(ctx context.Context) (int, error) {
return 9999999, nil return 9999999, nil
} }
func (v *virtiofsdMock) Stop() error { func (v *virtiofsdMock) Stop(ctx context.Context) error {
return nil return nil
} }

View File

@ -41,25 +41,25 @@ func TestNewVM(t *testing.T) {
assert.Nil(err) assert.Nil(err)
// VM operations // VM operations
err = vm.Pause() err = vm.Pause(context.Background())
assert.Nil(err) assert.Nil(err)
err = vm.Resume() err = vm.Resume(context.Background())
assert.Nil(err) assert.Nil(err)
err = vm.Start() err = vm.Start(context.Background())
assert.Nil(err) assert.Nil(err)
err = vm.Disconnect() err = vm.Disconnect(context.Background())
assert.Nil(err) assert.Nil(err)
err = vm.Save() err = vm.Save()
assert.Nil(err) assert.Nil(err)
err = vm.Stop() err = vm.Stop(context.Background())
assert.Nil(err) assert.Nil(err)
err = vm.AddCPUs(2) err = vm.AddCPUs(context.Background(), 2)
assert.Nil(err) assert.Nil(err)
err = vm.AddMemory(128) err = vm.AddMemory(context.Background(), 128)
assert.Nil(err) assert.Nil(err)
err = vm.OnlineCPUMemory() err = vm.OnlineCPUMemory(context.Background())
assert.Nil(err) assert.Nil(err)
err = vm.ReseedRNG() err = vm.ReseedRNG(context.Background())
assert.Nil(err) assert.Nil(err)
// template VM // template VM