Skip to content

Commit cdebca4

Browse files
authored
Merge pull request #435 from kzys/oom-4
Test `/tasks/oom`
2 parents 8e3c098 + ac2ff02 commit cdebca4

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

runtime/service_integ_test.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,6 +1789,80 @@ func findProcWithName(name string) func(context.Context, *process.Process) (bool
17891789
}
17901790
}
17911791

1792+
func TestOOM_Isolated(t *testing.T) {
1793+
prepareIntegTest(t)
1794+
1795+
client, err := containerd.New(containerdSockPath, containerd.WithDefaultRuntime(firecrackerRuntime))
1796+
require.NoError(t, err, "unable to create client to containerd service at %s, is containerd running?", containerdSockPath)
1797+
defer client.Close()
1798+
1799+
ctx := namespaces.WithNamespace(context.Background(), "default")
1800+
1801+
// If we don't have enough events within 30 seconds, the context will be cancelled and the loop below will be interrupted
1802+
subscribeCtx, subscribeCancel := context.WithTimeout(ctx, 30*time.Second)
1803+
defer subscribeCancel()
1804+
eventCh, errCh := client.Subscribe(subscribeCtx, "topic")
1805+
1806+
image, err := alpineImage(ctx, client, defaultSnapshotterName)
1807+
require.NoError(t, err, "failed to get alpine image")
1808+
1809+
pluginClient, err := ttrpcutil.NewClient(containerdSockPath + ".ttrpc")
1810+
require.NoError(t, err, "failed to create ttrpc client")
1811+
1812+
vmID := testNameToVMID(t.Name())
1813+
1814+
fcClient := fccontrol.NewFirecrackerClient(pluginClient.Client())
1815+
_, err = fcClient.CreateVM(ctx, &proto.CreateVMRequest{VMID: vmID})
1816+
require.NoError(t, err)
1817+
1818+
c, err := client.NewContainer(ctx,
1819+
"container-"+vmID,
1820+
containerd.WithSnapshotter(defaultSnapshotterName),
1821+
containerd.WithNewSnapshot("snapshot-"+vmID, image),
1822+
containerd.WithNewSpec(
1823+
oci.WithProcessArgs("/bin/dd", "if=/dev/zero", "ibs=10M"),
1824+
firecrackeroci.WithVMID(vmID),
1825+
oci.WithMemoryLimit(2*1024*1024),
1826+
),
1827+
)
1828+
require.NoError(t, err)
1829+
1830+
task, err := c.NewTask(ctx, cio.NewCreator(cio.WithStreams(nil, os.Stdout, os.Stderr)))
1831+
require.NoError(t, err, "failed to create task for container %s", c.ID())
1832+
1833+
err = task.Start(ctx)
1834+
require.NoError(t, err, "failed to create task for container %s", c.ID())
1835+
1836+
_, err = task.Wait(ctx)
1837+
require.NoError(t, err)
1838+
1839+
expected := []string{
1840+
"/snapshot/prepare",
1841+
"/snapshot/commit",
1842+
"/firecracker-vm/start",
1843+
"/snapshot/prepare",
1844+
"/containers/create",
1845+
"/tasks/create",
1846+
"/tasks/start",
1847+
"/tasks/oom",
1848+
"/tasks/exit",
1849+
}
1850+
var actual []string
1851+
1852+
loop:
1853+
for len(actual) < len(expected) {
1854+
select {
1855+
case event := <-eventCh:
1856+
actual = append(actual, event.Topic)
1857+
case err := <-errCh:
1858+
t.Logf("events = %v", actual)
1859+
assert.NoError(t, err)
1860+
break loop
1861+
}
1862+
}
1863+
require.Equal(t, expected, actual)
1864+
}
1865+
17921866
func TestCreateVM_Isolated(t *testing.T) {
17931867
prepareIntegTest(t)
17941868

0 commit comments

Comments
 (0)