Skip to content

Commit dede50f

Browse files
committed
Added an integration test for the PauseVM and ResumeVM calls
Signed-off-by: Dmitrii Ustiugov <[email protected]>
1 parent 33d0dc0 commit dede50f

File tree

2 files changed

+92
-4
lines changed

2 files changed

+92
-4
lines changed

runtime/cni_integ_test.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,20 @@ import (
2424
"testing"
2525
"time"
2626

27-
args "github.com/awslabs/tc-redirect-tap/cmd/tc-redirect-tap/args"
2827
"github.com/containerd/containerd"
2928
"github.com/containerd/containerd/namespaces"
3029
"github.com/containerd/containerd/oci"
3130
"github.com/containerd/containerd/pkg/ttrpcutil"
31+
args "github.com/awslabs/tc-redirect-tap/cmd/tc-redirect-tap/args"
32+
"github.com/shirou/gopsutil/cpu"
33+
"github.com/stretchr/testify/assert"
34+
"github.com/stretchr/testify/require"
35+
3236
"github.com/firecracker-microvm/firecracker-containerd/config"
3337
"github.com/firecracker-microvm/firecracker-containerd/internal"
3438
"github.com/firecracker-microvm/firecracker-containerd/proto"
3539
fccontrol "github.com/firecracker-microvm/firecracker-containerd/proto/service/fccontrol/ttrpc"
3640
"github.com/firecracker-microvm/firecracker-containerd/runtime/firecrackeroci"
37-
"github.com/shirou/gopsutil/cpu"
38-
"github.com/stretchr/testify/assert"
39-
"github.com/stretchr/testify/require"
4041
)
4142

4243
func TestCNISupport_Isolated(t *testing.T) {

runtime/service_integ_test.go

+87
Original file line numberDiff line numberDiff line change
@@ -2032,6 +2032,93 @@ func TestCreateVM_Isolated(t *testing.T) {
20322032
}
20332033
}
20342034

2035+
func TestPauseResumeVM_Isolated(t *testing.T) {
2036+
prepareIntegTest(t)
2037+
client, err := containerd.New(containerdSockPath, containerd.WithDefaultRuntime(firecrackerRuntime))
2038+
require.NoError(t, err, "unable to create client to containerd service at %s, is containerd running?", containerdSockPath)
2039+
defer client.Close()
2040+
2041+
ctx := namespaces.WithNamespace(context.Background(), "default")
2042+
2043+
pluginClient, err := ttrpcutil.NewClient(containerdSockPath + ".ttrpc")
2044+
require.NoError(t, err, "failed to create ttrpc client")
2045+
2046+
fcClient := fccontrol.NewFirecrackerClient(pluginClient.Client())
2047+
2048+
type subtest struct {
2049+
name string
2050+
request proto.CreateVMRequest
2051+
validate func(*testing.T, error)
2052+
stopVM bool
2053+
}
2054+
2055+
subtests := []subtest{
2056+
{
2057+
name: "Happy Case",
2058+
request: proto.CreateVMRequest{},
2059+
validate: func(t *testing.T, err error) {
2060+
require.NoError(t, err)
2061+
},
2062+
stopVM: true,
2063+
},
2064+
}
2065+
2066+
runTest := func(t *testing.T, request proto.CreateVMRequest, s subtest) {
2067+
vmID := testNameToVMID(t.Name())
2068+
2069+
tempDir, err := ioutil.TempDir("", vmID)
2070+
require.NoError(t, err)
2071+
defer os.RemoveAll(tempDir)
2072+
2073+
logFile := filepath.Join(tempDir, "log.fifo")
2074+
metricsFile := filepath.Join(tempDir, "metrics.fifo")
2075+
2076+
request.VMID = vmID
2077+
request.LogFifoPath = logFile
2078+
request.MetricsFifoPath = metricsFile
2079+
2080+
resp, createVMErr := fcClient.CreateVM(ctx, &request)
2081+
2082+
// Even CreateVM fails, the log file and the metrics file must have some data.
2083+
requireNonEmptyFifo(t, logFile)
2084+
requireNonEmptyFifo(t, metricsFile)
2085+
2086+
// Some test cases are expected to have an error, some are not.
2087+
s.validate(t, createVMErr)
2088+
2089+
_, errPause := fcClient.PauseVM(ctx, &proto.PauseVMRequest{VMID: request.VMID})
2090+
require.NoError(t, errPause)
2091+
2092+
_, errResume := fcClient.ResumeVM(ctx, &proto.ResumeVMRequest{VMID: request.VMID})
2093+
require.NoError(t, errResume)
2094+
2095+
if createVMErr == nil && s.stopVM {
2096+
// Ensure the response fields are populated correctly
2097+
assert.Equal(t, request.VMID, resp.VMID)
2098+
2099+
_, err = fcClient.StopVM(ctx, &proto.StopVMRequest{VMID: request.VMID})
2100+
require.Equal(t, status.Code(err), codes.OK)
2101+
}
2102+
}
2103+
2104+
for _, _s := range subtests {
2105+
s := _s
2106+
request := s.request
2107+
t.Run(s.name, func(t *testing.T) {
2108+
runTest(t, request, s)
2109+
})
2110+
2111+
requestWithJailer := s.request
2112+
requestWithJailer.JailerConfig = &proto.JailerConfig{
2113+
UID: 30000,
2114+
GID: 30000,
2115+
}
2116+
t.Run(s.name+"/Jailer", func(t *testing.T) {
2117+
runTest(t, requestWithJailer, s)
2118+
})
2119+
}
2120+
}
2121+
20352122
func TestAttach_Isolated(t *testing.T) {
20362123
prepareIntegTest(t)
20372124

0 commit comments

Comments
 (0)