internal/outcome/shim: params check early
All checks were successful
Test / Create distribution (push) Successful in 35s
Test / Sandbox (push) Successful in 2m16s
Test / Hakurei (push) Successful in 3m18s
Test / Hpkg (push) Successful in 4m0s
Test / Hakurei (race detector) (push) Successful in 4m56s
Test / Sandbox (race detector) (push) Successful in 4m11s
Test / Flake checks (push) Successful in 1m29s
All checks were successful
Test / Create distribution (push) Successful in 35s
Test / Sandbox (push) Successful in 2m16s
Test / Hakurei (push) Successful in 3m18s
Test / Hpkg (push) Successful in 4m0s
Test / Hakurei (race detector) (push) Successful in 4m56s
Test / Sandbox (race detector) (push) Successful in 4m11s
Test / Flake checks (push) Successful in 1m29s
This is unreachable, but keeping it here as a failsafe until more test cases are added. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -147,6 +147,9 @@ func shimEntrypoint(k syscallDispatcher) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if stateParams.params.Ops == nil { // unreachable
|
||||||
|
k.fatal("invalid container params")
|
||||||
|
}
|
||||||
|
|
||||||
// shim exit outcomes
|
// shim exit outcomes
|
||||||
var cancelContainer atomic.Pointer[context.CancelFunc]
|
var cancelContainer atomic.Pointer[context.CancelFunc]
|
||||||
@@ -187,10 +190,6 @@ func shimEntrypoint(k syscallDispatcher) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
if stateParams.params.Ops == nil {
|
|
||||||
k.fatal("invalid container params")
|
|
||||||
}
|
|
||||||
|
|
||||||
// close setup socket
|
// close setup socket
|
||||||
if err := closeSetup(); err != nil {
|
if err := closeSetup(); err != nil {
|
||||||
msg.Verbosef("cannot close setup pipe: %v", err)
|
msg.Verbosef("cannot close setup pipe: %v", err)
|
||||||
|
|||||||
@@ -106,31 +106,33 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
Remount(fhs.AbsRoot, syscall.MS_RDONLY),
|
Remount(fhs.AbsRoot, syscall.MS_RDONLY),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
templateState := outcomeState{
|
||||||
|
Shim: &shimParams{PrivPID: 0xbad, WaitDelay: 0xf, Verbose: true, Ops: []outcomeOp{
|
||||||
|
&spParamsOp{"xterm-256color", true},
|
||||||
|
&spRuntimeOp{sessionTypeWayland},
|
||||||
|
spTmpdirOp{},
|
||||||
|
spAccountOp{},
|
||||||
|
&spWaylandOp{},
|
||||||
|
&spPulseOp{(*[pulseCookieSizeMax]byte)(bytes.Repeat([]byte{0}, pulseCookieSizeMax)), pulseCookieSizeMax},
|
||||||
|
&spDBusOp{true},
|
||||||
|
&spFilesystemOp{},
|
||||||
|
}},
|
||||||
|
|
||||||
|
ID: &checkExpectInstanceId,
|
||||||
|
Identity: hst.IdentityMax,
|
||||||
|
UserID: 10,
|
||||||
|
Container: hst.Template().Container,
|
||||||
|
Mapuid: 1000,
|
||||||
|
Mapgid: 100,
|
||||||
|
Paths: &env.Paths{TempDir: fhs.AbsTmp, RuntimePath: fhs.AbsRunUser.Append("1000")},
|
||||||
|
}
|
||||||
|
|
||||||
checkSimple(t, "shimEntrypoint", []simpleTestCase{
|
checkSimple(t, "shimEntrypoint", []simpleTestCase{
|
||||||
{"success", func(k *kstub) error { shimEntrypoint(k); return nil }, stub.Expect{Calls: []stub.Call{
|
{"success", func(k *kstub) error { shimEntrypoint(k); return nil }, stub.Expect{Calls: []stub.Call{
|
||||||
call("getMsg", stub.ExpectArgs{}, nil, nil),
|
call("getMsg", stub.ExpectArgs{}, nil, nil),
|
||||||
call("getLogger", stub.ExpectArgs{}, (*log.Logger)(nil), nil),
|
call("getLogger", stub.ExpectArgs{}, (*log.Logger)(nil), nil),
|
||||||
call("setDumpable", stub.ExpectArgs{uintptr(container.SUID_DUMP_DISABLE)}, nil, nil),
|
call("setDumpable", stub.ExpectArgs{uintptr(container.SUID_DUMP_DISABLE)}, nil, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", outcomeState{
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
|
||||||
Shim: &shimParams{PrivPID: 0xbad, WaitDelay: 0xf, Verbose: true, Ops: []outcomeOp{
|
|
||||||
&spParamsOp{"xterm-256color", true},
|
|
||||||
&spRuntimeOp{sessionTypeWayland},
|
|
||||||
spTmpdirOp{},
|
|
||||||
spAccountOp{},
|
|
||||||
&spWaylandOp{},
|
|
||||||
&spPulseOp{(*[pulseCookieSizeMax]byte)(bytes.Repeat([]byte{0}, pulseCookieSizeMax)), pulseCookieSizeMax},
|
|
||||||
&spDBusOp{true},
|
|
||||||
&spFilesystemOp{},
|
|
||||||
}},
|
|
||||||
|
|
||||||
ID: &checkExpectInstanceId,
|
|
||||||
Identity: hst.IdentityMax,
|
|
||||||
UserID: 10,
|
|
||||||
Container: hst.Template().Container,
|
|
||||||
Mapuid: 1000,
|
|
||||||
Mapgid: 100,
|
|
||||||
Paths: &env.Paths{TempDir: fhs.AbsTmp, RuntimePath: fhs.AbsRunUser.Append("1000")},
|
|
||||||
}, nil}, nil, nil),
|
|
||||||
call("swapVerbose", stub.ExpectArgs{true}, false, nil),
|
call("swapVerbose", stub.ExpectArgs{true}, false, nil),
|
||||||
call("verbosef", stub.ExpectArgs{"process share directory at %q, runtime directory at %q", []any{m("/tmp/hakurei.10"), m("/run/user/1000/hakurei")}}, nil, nil),
|
call("verbosef", stub.ExpectArgs{"process share directory at %q, runtime directory at %q", []any{m("/tmp/hakurei.10"), m("/run/user/1000/hakurei")}}, nil, nil),
|
||||||
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
|
|||||||
Reference in New Issue
Block a user