internal/outcome/shim: EOF as exit request fallback
All checks were successful
Test / Create distribution (push) Successful in 35s
Test / Sandbox (push) Successful in 55s
Test / Sandbox (race detector) (push) Successful in 53s
Test / Hpkg (push) Successful in 53s
Test / Hakurei (race detector) (push) Successful in 1m1s
Test / Hakurei (push) Successful in 1m3s
Test / Flake checks (push) Successful in 1m34s
All checks were successful
Test / Create distribution (push) Successful in 35s
Test / Sandbox (push) Successful in 55s
Test / Sandbox (race detector) (push) Successful in 53s
Test / Hpkg (push) Successful in 53s
Test / Hakurei (race detector) (push) Successful in 1m1s
Test / Hakurei (push) Successful in 1m3s
Test / Flake checks (push) Successful in 1m34s
In some cases the signal might be delivered before the signal handler is installed, and synchronising against such a case is too expensive. Instead, use the pipe being closed as a fallback to the regular exit request. This change also moves installation of the signal handler early. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -32,6 +32,8 @@ type syscallDispatcher interface {
|
|||||||
// just synchronising access is not enough, as this is for test instrumentation.
|
// just synchronising access is not enough, as this is for test instrumentation.
|
||||||
new(f func(k syscallDispatcher, msg message.Msg))
|
new(f func(k syscallDispatcher, msg message.Msg))
|
||||||
|
|
||||||
|
// getppid provides [os.Getppid].
|
||||||
|
getppid() int
|
||||||
// getpid provides [os.Getpid].
|
// getpid provides [os.Getpid].
|
||||||
getpid() int
|
getpid() int
|
||||||
// getuid provides [os.Getuid].
|
// getuid provides [os.Getuid].
|
||||||
@@ -108,6 +110,7 @@ type direct struct{ msg message.Msg }
|
|||||||
|
|
||||||
func (k direct) new(f func(k syscallDispatcher, msg message.Msg)) { go f(k, k.msg) }
|
func (k direct) new(f func(k syscallDispatcher, msg message.Msg)) { go f(k, k.msg) }
|
||||||
|
|
||||||
|
func (direct) getppid() int { return os.Getppid() }
|
||||||
func (direct) getpid() int { return os.Getpid() }
|
func (direct) getpid() int { return os.Getpid() }
|
||||||
func (direct) getuid() int { return os.Getuid() }
|
func (direct) getuid() int { return os.Getuid() }
|
||||||
func (direct) getgid() int { return os.Getgid() }
|
func (direct) getgid() int { return os.Getgid() }
|
||||||
|
|||||||
@@ -331,9 +331,10 @@ func (k *kstub) new(f func(k syscallDispatcher, msg message.Msg)) {
|
|||||||
k.New(func(k syscallDispatcher) { f(k, k.(*kstub)) })
|
k.New(func(k syscallDispatcher) { f(k, k.(*kstub)) })
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *kstub) getpid() int { k.Helper(); return k.Expects("getpid").Ret.(int) }
|
func (k *kstub) getppid() int { k.Helper(); return k.Expects("getppid").Ret.(int) }
|
||||||
func (k *kstub) getuid() int { k.Helper(); return k.Expects("getuid").Ret.(int) }
|
func (k *kstub) getpid() int { k.Helper(); return k.Expects("getpid").Ret.(int) }
|
||||||
func (k *kstub) getgid() int { k.Helper(); return k.Expects("getgid").Ret.(int) }
|
func (k *kstub) getuid() int { k.Helper(); return k.Expects("getuid").Ret.(int) }
|
||||||
|
func (k *kstub) getgid() int { k.Helper(); return k.Expects("getgid").Ret.(int) }
|
||||||
func (k *kstub) lookupEnv(key string) (string, bool) {
|
func (k *kstub) lookupEnv(key string) (string, bool) {
|
||||||
k.Helper()
|
k.Helper()
|
||||||
expect := k.Expects("lookupEnv")
|
expect := k.Expects("lookupEnv")
|
||||||
|
|||||||
@@ -700,9 +700,10 @@ type stubNixOS struct {
|
|||||||
panicDispatcher
|
panicDispatcher
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *stubNixOS) getpid() int { return 0xdeadbeef }
|
func (k *stubNixOS) getppid() int { return 0xbad }
|
||||||
func (k *stubNixOS) getuid() int { return 1971 }
|
func (k *stubNixOS) getpid() int { return 0xdeadbeef }
|
||||||
func (k *stubNixOS) getgid() int { return 100 }
|
func (k *stubNixOS) getuid() int { return 1971 }
|
||||||
|
func (k *stubNixOS) getgid() int { return 100 }
|
||||||
|
|
||||||
func (k *stubNixOS) lookupEnv(key string) (string, bool) {
|
func (k *stubNixOS) lookupEnv(key string) (string, bool) {
|
||||||
switch key {
|
switch key {
|
||||||
|
|||||||
@@ -96,11 +96,37 @@ func shimEntrypoint(k syscallDispatcher) {
|
|||||||
k.fatalf("cannot set SUID_DUMP_DISABLE: %v", err)
|
k.fatalf("cannot set SUID_DUMP_DISABLE: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// the Go runtime does not expose siginfo_t so SIGCONT is handled in C to check si_pid
|
||||||
|
ppid := k.getppid()
|
||||||
|
var signalPipe io.ReadCloser
|
||||||
|
if r, wKeepAlive, err := k.setupContSignal(ppid); err != nil {
|
||||||
|
switch {
|
||||||
|
case errors.As(err, new(*os.SyscallError)): // returned by os.Pipe
|
||||||
|
k.fatal(err.Error())
|
||||||
|
return
|
||||||
|
|
||||||
|
case errors.As(err, new(syscall.Errno)): // returned by hakurei_shim_setup_cont_signal
|
||||||
|
k.fatalf("cannot install SIGCONT handler: %v", err)
|
||||||
|
return
|
||||||
|
|
||||||
|
default: // unreachable
|
||||||
|
k.fatalf("cannot set up exit request: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
defer wKeepAlive()
|
||||||
|
signalPipe = r
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
state outcomeState
|
state outcomeState
|
||||||
closeSetup func() error
|
closeSetup func() error
|
||||||
)
|
)
|
||||||
if f, err := k.receive(shimEnv, &state, nil); err != nil {
|
if f, err := k.receive(shimEnv, &state, nil); err != nil {
|
||||||
|
if errors.Is(err, io.EOF) {
|
||||||
|
// fallback exit request: signal handler not yet installed
|
||||||
|
k.exit(hst.ExitRequest)
|
||||||
|
}
|
||||||
if errors.Is(err, syscall.EBADF) {
|
if errors.Is(err, syscall.EBADF) {
|
||||||
k.fatal("invalid config descriptor")
|
k.fatal("invalid config descriptor")
|
||||||
}
|
}
|
||||||
@@ -119,25 +145,8 @@ func shimEntrypoint(k syscallDispatcher) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// the Go runtime does not expose siginfo_t so SIGCONT is handled in C to check si_pid
|
if state.Shim.PrivPID != ppid {
|
||||||
var signalPipe io.ReadCloser
|
k.fatalf("unexpectedly reparented from %d to %d", state.Shim.PrivPID, ppid)
|
||||||
if r, wKeepAlive, err := k.setupContSignal(state.Shim.PrivPID); err != nil {
|
|
||||||
switch {
|
|
||||||
case errors.As(err, new(*os.SyscallError)): // returned by os.Pipe
|
|
||||||
k.fatal(err.Error())
|
|
||||||
return
|
|
||||||
|
|
||||||
case errors.As(err, new(syscall.Errno)): // returned by hakurei_shim_setup_cont_signal
|
|
||||||
k.fatalf("cannot install SIGCONT handler: %v", err)
|
|
||||||
return
|
|
||||||
|
|
||||||
default: // unreachable
|
|
||||||
k.fatalf("cannot set up exit request: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
defer wKeepAlive()
|
|
||||||
signalPipe = r
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// pdeath_signal delivery is checked as if the dying process called kill(2), see kernel/exit.c
|
// pdeath_signal delivery is checked as if the dying process called kill(2), see kernel/exit.c
|
||||||
|
|||||||
@@ -142,30 +142,47 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", outcomeState{}, nil}, nil, syscall.EBADF),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", outcomeState{}, nil}, nil, syscall.EBADF),
|
||||||
call("fatal", stub.ExpectArgs{[]any{"invalid config descriptor"}}, nil, nil),
|
call("fatal", stub.ExpectArgs{[]any{"invalid config descriptor"}}, nil, nil),
|
||||||
|
|
||||||
|
// deferred
|
||||||
|
call("wKeepAlive", stub.ExpectArgs{}, nil, nil),
|
||||||
}}, nil},
|
}}, nil},
|
||||||
|
|
||||||
{"receive env", func(k *kstub) error { shimEntrypoint(k); return nil }, stub.Expect{Calls: []stub.Call{
|
{"receive env", 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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", outcomeState{}, nil}, nil, container.ErrReceiveEnv),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", outcomeState{}, nil}, nil, container.ErrReceiveEnv),
|
||||||
call("fatal", stub.ExpectArgs{[]any{"HAKUREI_SHIM not set"}}, nil, nil),
|
call("fatal", stub.ExpectArgs{[]any{"HAKUREI_SHIM not set"}}, nil, nil),
|
||||||
|
|
||||||
|
// deferred
|
||||||
|
call("wKeepAlive", stub.ExpectArgs{}, nil, nil),
|
||||||
}}, nil},
|
}}, nil},
|
||||||
|
|
||||||
{"receive strange", func(k *kstub) error { shimEntrypoint(k); return nil }, stub.Expect{Calls: []stub.Call{
|
{"receive strange", 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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", outcomeState{}, nil}, nil, stub.UniqueError(10)),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", outcomeState{}, nil}, nil, stub.UniqueError(10)),
|
||||||
call("fatalf", stub.ExpectArgs{"cannot receive shim setup params: %v", []any{stub.UniqueError(10)}}, nil, nil),
|
call("fatalf", stub.ExpectArgs{"cannot receive shim setup params: %v", []any{stub.UniqueError(10)}}, nil, nil),
|
||||||
|
|
||||||
|
// deferred
|
||||||
|
call("wKeepAlive", stub.ExpectArgs{}, nil, nil),
|
||||||
}}, nil},
|
}}, nil},
|
||||||
|
|
||||||
{"invalid state", func(k *kstub) error { shimEntrypoint(k); return nil }, stub.Expect{Calls: []stub.Call{
|
{"invalid state", 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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", func() outcomeState {
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", func() outcomeState {
|
||||||
state := templateState
|
state := templateState
|
||||||
state.Shim = newShimParams()
|
state.Shim = newShimParams()
|
||||||
@@ -174,15 +191,16 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
}(), nil}, nil, nil),
|
}(), nil}, nil, nil),
|
||||||
call("swapVerbose", stub.ExpectArgs{true}, false, nil),
|
call("swapVerbose", stub.ExpectArgs{true}, false, nil),
|
||||||
call("fatal", stub.ExpectArgs{[]any{"impossible outcome state reached\n"}}, nil, nil),
|
call("fatal", stub.ExpectArgs{[]any{"impossible outcome state reached\n"}}, nil, nil),
|
||||||
|
|
||||||
|
// deferred
|
||||||
|
call("wKeepAlive", stub.ExpectArgs{}, nil, nil),
|
||||||
}}, nil},
|
}}, nil},
|
||||||
|
|
||||||
{"sigaction pipe", func(k *kstub) error { shimEntrypoint(k); return nil }, stub.Expect{Calls: []stub.Call{
|
{"sigaction pipe", 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", templateState, nil}, nil, nil),
|
call("getppid", stub.ExpectArgs{}, 0xbad, 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("setupContSignal", stub.ExpectArgs{0xbad}, 0, &os.SyscallError{Syscall: "pipe2", Err: stub.UniqueError(9)}),
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, &os.SyscallError{Syscall: "pipe2", Err: stub.UniqueError(9)}),
|
||||||
call("fatal", stub.ExpectArgs{[]any{"pipe2: unique error 9 injected by the test suite"}}, nil, nil),
|
call("fatal", stub.ExpectArgs{[]any{"pipe2: unique error 9 injected by the test suite"}}, nil, nil),
|
||||||
}}, nil},
|
}}, nil},
|
||||||
@@ -191,9 +209,7 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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", templateState, nil}, nil, nil),
|
call("getppid", stub.ExpectArgs{}, 0xbad, 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("setupContSignal", stub.ExpectArgs{0xbad}, 0, syscall.ENOTRECOVERABLE),
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, syscall.ENOTRECOVERABLE),
|
||||||
call("fatalf", stub.ExpectArgs{"cannot install SIGCONT handler: %v", []any{syscall.ENOTRECOVERABLE}}, nil, nil),
|
call("fatalf", stub.ExpectArgs{"cannot install SIGCONT handler: %v", []any{syscall.ENOTRECOVERABLE}}, nil, nil),
|
||||||
}}, nil},
|
}}, nil},
|
||||||
@@ -202,9 +218,7 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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", templateState, nil}, nil, nil),
|
call("getppid", stub.ExpectArgs{}, 0xbad, 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("setupContSignal", stub.ExpectArgs{0xbad}, 0, stub.UniqueError(8)),
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, stub.UniqueError(8)),
|
||||||
call("fatalf", stub.ExpectArgs{"cannot set up exit request: %v", []any{stub.UniqueError(8)}}, nil, nil),
|
call("fatalf", stub.ExpectArgs{"cannot set up exit request: %v", []any{stub.UniqueError(8)}}, nil, nil),
|
||||||
}}, nil},
|
}}, nil},
|
||||||
@@ -213,10 +227,11 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, stub.UniqueError(7)),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, stub.UniqueError(7)),
|
||||||
call("fatalf", stub.ExpectArgs{"cannot set parent-death signal: %v", []any{stub.UniqueError(7)}}, nil, nil),
|
call("fatalf", stub.ExpectArgs{"cannot set parent-death signal: %v", []any{stub.UniqueError(7)}}, nil, nil),
|
||||||
|
|
||||||
@@ -228,6 +243,8 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", func() outcomeState {
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", func() outcomeState {
|
||||||
state := templateState
|
state := templateState
|
||||||
state.Shim = newShimParams()
|
state.Shim = newShimParams()
|
||||||
@@ -236,7 +253,6 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
}(), nil}, nil, nil),
|
}(), 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
||||||
call("fatal", stub.ExpectArgs{[]any{"cannot create container state: unique error 6 injected by the test suite\n"}}, nil, nil),
|
call("fatal", stub.ExpectArgs{[]any{"cannot create container state: unique error 6 injected by the test suite\n"}}, nil, nil),
|
||||||
|
|
||||||
@@ -248,6 +264,8 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", func() outcomeState {
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", func() outcomeState {
|
||||||
state := templateState
|
state := templateState
|
||||||
state.Shim = newShimParams()
|
state.Shim = newShimParams()
|
||||||
@@ -256,7 +274,6 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
}(), nil}, nil, nil),
|
}(), 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
||||||
call("fatal", stub.ExpectArgs{[]any{"invalid container state"}}, nil, nil),
|
call("fatal", stub.ExpectArgs{[]any{"invalid container state"}}, nil, nil),
|
||||||
|
|
||||||
@@ -268,10 +285,11 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
||||||
call("New", stub.ExpectArgs{}, nil, nil),
|
call("New", stub.ExpectArgs{}, nil, nil),
|
||||||
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
||||||
@@ -291,10 +309,11 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
||||||
call("New", stub.ExpectArgs{}, nil, nil),
|
call("New", stub.ExpectArgs{}, nil, nil),
|
||||||
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
||||||
@@ -314,10 +333,11 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
||||||
call("New", stub.ExpectArgs{}, nil, nil),
|
call("New", stub.ExpectArgs{}, nil, nil),
|
||||||
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
||||||
@@ -336,10 +356,11 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
||||||
call("New", stub.ExpectArgs{}, nil, nil),
|
call("New", stub.ExpectArgs{}, nil, nil),
|
||||||
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
||||||
@@ -359,10 +380,11 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
||||||
call("New", stub.ExpectArgs{}, nil, nil),
|
call("New", stub.ExpectArgs{}, nil, nil),
|
||||||
call("closeReceive", stub.ExpectArgs{}, nil, stub.UniqueError(1)),
|
call("closeReceive", stub.ExpectArgs{}, nil, stub.UniqueError(1)),
|
||||||
@@ -385,10 +407,11 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
||||||
call("New", stub.ExpectArgs{}, nil, nil),
|
call("New", stub.ExpectArgs{}, nil, nil),
|
||||||
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
||||||
@@ -411,10 +434,11 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
||||||
call("New", stub.ExpectArgs{}, nil, nil),
|
call("New", stub.ExpectArgs{}, nil, nil),
|
||||||
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
||||||
@@ -436,10 +460,11 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
||||||
call("New", stub.ExpectArgs{}, nil, nil),
|
call("New", stub.ExpectArgs{}, nil, nil),
|
||||||
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
||||||
@@ -462,10 +487,11 @@ func TestShimEntrypoint(t *testing.T) {
|
|||||||
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("getppid", stub.ExpectArgs{}, 0xbad, nil),
|
||||||
|
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),
|
||||||
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
|
call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, 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("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
call("prctl", stub.ExpectArgs{uintptr(syscall.PR_SET_PDEATHSIG), uintptr(syscall.SIGCONT), uintptr(0)}, nil, nil),
|
||||||
call("New", stub.ExpectArgs{}, nil, nil),
|
call("New", stub.ExpectArgs{}, nil, nil),
|
||||||
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
call("closeReceive", stub.ExpectArgs{}, nil, nil),
|
||||||
|
|||||||
Reference in New Issue
Block a user