wasi: Implements wasi_snapshot_preview1.poll_oneoff for relative clock events (#629)
This implements wasi_snapshot_preview1.poll_oneoff for relative clock events, and in doing so stubs `Nanosleep` which defaults to noop, but can be configured to `time.Sleep`. Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
@@ -325,6 +325,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
nil, // nanosleep
|
||||
nil, // openedFiles
|
||||
),
|
||||
},
|
||||
@@ -341,7 +342,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
|
||||
nil, // nanosleep
|
||||
nil, // openedFiles
|
||||
),
|
||||
},
|
||||
@@ -358,7 +359,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
|
||||
nil, // nanosleep
|
||||
nil, // openedFiles
|
||||
),
|
||||
},
|
||||
@@ -375,7 +376,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
|
||||
nil, // nanosleep
|
||||
nil, // openedFiles
|
||||
),
|
||||
},
|
||||
@@ -392,7 +393,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
|
||||
nil, // nanosleep
|
||||
nil, // openedFiles
|
||||
),
|
||||
},
|
||||
@@ -409,6 +410,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
nil, // nanosleep
|
||||
nil, // openedFiles
|
||||
),
|
||||
},
|
||||
@@ -425,7 +427,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
|
||||
nil, // nanosleep
|
||||
nil, // openedFiles
|
||||
),
|
||||
},
|
||||
@@ -442,7 +444,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
|
||||
nil, // nanosleep
|
||||
nil, // openedFiles
|
||||
),
|
||||
},
|
||||
@@ -459,7 +461,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
|
||||
nil, // nanosleep
|
||||
nil, // openedFiles
|
||||
),
|
||||
},
|
||||
@@ -476,7 +478,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
|
||||
nil, // nanosleep
|
||||
map[uint32]*internalsys.FileEntry{ // openedFiles
|
||||
3: {Path: "/", FS: testFS},
|
||||
4: {Path: ".", FS: testFS},
|
||||
@@ -496,6 +498,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
nil, // nanosleep
|
||||
map[uint32]*internalsys.FileEntry{ // openedFiles
|
||||
3: {Path: "/", FS: testFS2},
|
||||
4: {Path: ".", FS: testFS2},
|
||||
@@ -515,6 +518,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
nil, // nanosleep
|
||||
map[uint32]*internalsys.FileEntry{ // openedFiles
|
||||
3: {Path: ".", FS: testFS},
|
||||
},
|
||||
@@ -533,6 +537,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
nil, // nanosleep
|
||||
map[uint32]*internalsys.FileEntry{ // openedFiles
|
||||
3: {Path: "/", FS: testFS},
|
||||
4: {Path: ".", FS: testFS2},
|
||||
@@ -552,6 +557,7 @@ func TestModuleConfig_toSysContext(t *testing.T) {
|
||||
nil, // randSource
|
||||
&wt, 1, // walltime, walltimeResolution
|
||||
&nt, 1, // nanotime, nanotimeResolution
|
||||
nil, // nanosleep
|
||||
map[uint32]*internalsys.FileEntry{ // openedFiles
|
||||
3: {Path: ".", FS: testFS},
|
||||
4: {Path: "/", FS: testFS2},
|
||||
@@ -715,6 +721,18 @@ func TestModuleConfig_toSysContext_WithNanotime(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
// TestModuleConfig_toSysContext_WithNanosleep has to test differently because
|
||||
// we can't compare function pointers when functions are passed by value.
|
||||
func TestModuleConfig_toSysContext_WithNanosleep(t *testing.T) {
|
||||
sysCtx, err := NewModuleConfig().
|
||||
WithNanosleep(func(ctx context.Context, ns int64) {
|
||||
require.Equal(t, testCtx, ctx)
|
||||
}).(*moduleConfig).toSysContext()
|
||||
require.NoError(t, err)
|
||||
// If below pass, the context was correct!
|
||||
sysCtx.Nanosleep(testCtx, 2)
|
||||
}
|
||||
|
||||
func TestModuleConfig_toSysContext_Errors(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
@@ -820,6 +838,7 @@ func requireSysContext(
|
||||
randSource io.Reader,
|
||||
walltime *sys.Walltime, walltimeResolution sys.ClockResolution,
|
||||
nanotime *sys.Nanotime, nanotimeResolution sys.ClockResolution,
|
||||
nanosleep *sys.Nanosleep,
|
||||
openedFiles map[uint32]*internalsys.FileEntry,
|
||||
) *internalsys.Context {
|
||||
sysCtx, err := internalsys.NewContext(
|
||||
@@ -832,6 +851,7 @@ func requireSysContext(
|
||||
randSource,
|
||||
walltime, walltimeResolution,
|
||||
nanotime, nanotimeResolution,
|
||||
nanosleep,
|
||||
openedFiles,
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
Reference in New Issue
Block a user