diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-08-22 22:07:19 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-08-22 22:07:19 +0900 |
| commit | 141a18999f36d3e6211d99b24a355d8ea908f32a (patch) | |
| tree | 44a5826bd0bbde7fd09897b2ac327896300e12df | |
| parent | afe23600d286cf0879717cb8b55c52ef432fce7a (diff) | |
container: move integration test helpers
With the new instrumentation it is now possible to run init code outside integration tests.
Signed-off-by: Ophestra <cat@gensokyo.uk>
| -rw-r--r-- | container/container_test.go | 62 | ||||
| -rw-r--r-- | container/init_test.go | 73 |
2 files changed, 62 insertions, 73 deletions
diff --git a/container/container_test.go b/container/container_test.go index 036d06ec..5dd510e6 100644 --- a/container/container_test.go +++ b/container/container_test.go @@ -14,12 +14,16 @@ import ( "strings" "syscall" "testing" + "time" "hakurei.app/command" "hakurei.app/container" "hakurei.app/container/seccomp" "hakurei.app/container/vfs" "hakurei.app/hst" + "hakurei.app/internal" + "hakurei.app/internal/hlog" + "hakurei.app/ldd" ) const ( @@ -510,3 +514,61 @@ func init() { }) }) } + +const ( + envDoCheck = "HAKUREI_TEST_DO_CHECK" + + helperDefaultTimeout = 5 * time.Second + helperInnerPath = "/usr/bin/helper" +) + +var ( + absHelperInnerPath = container.MustAbs(helperInnerPath) +) + +var helperCommands []func(c command.Command) + +func TestMain(m *testing.M) { + container.TryArgv0(hlog.Output{}, hlog.Prepare, internal.InstallOutput) + + if os.Getenv(envDoCheck) == "1" { + c := command.New(os.Stderr, log.Printf, "helper", func(args []string) error { + log.SetFlags(0) + log.SetPrefix("helper: ") + return nil + }) + for _, f := range helperCommands { + f(c) + } + c.MustParse(os.Args[1:], func(err error) { + if err != nil { + log.Fatal(err.Error()) + } + }) + return + } + + os.Exit(m.Run()) +} + +func helperNewContainerLibPaths(ctx context.Context, libPaths *[]*container.Absolute, args ...string) (c *container.Container) { + c = container.NewCommand(ctx, absHelperInnerPath, "helper", args...) + c.Env = append(c.Env, envDoCheck+"=1") + c.Bind(container.MustAbs(os.Args[0]), absHelperInnerPath, 0) + + // in case test has cgo enabled + if entries, err := ldd.Exec(ctx, os.Args[0]); err != nil { + log.Fatalf("ldd: %v", err) + } else { + *libPaths = ldd.Path(entries) + } + for _, name := range *libPaths { + c.Bind(name, name, 0) + } + + return +} + +func helperNewContainer(ctx context.Context, args ...string) (c *container.Container) { + return helperNewContainerLibPaths(ctx, new([]*container.Absolute), args...) +} diff --git a/container/init_test.go b/container/init_test.go deleted file mode 100644 index 9e6832d1..00000000 --- a/container/init_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package container_test - -import ( - "context" - "log" - "os" - "testing" - "time" - - "hakurei.app/command" - "hakurei.app/container" - "hakurei.app/internal" - "hakurei.app/internal/hlog" - "hakurei.app/ldd" -) - -const ( - envDoCheck = "HAKUREI_TEST_DO_CHECK" - - helperDefaultTimeout = 5 * time.Second - helperInnerPath = "/usr/bin/helper" -) - -var ( - absHelperInnerPath = container.MustAbs(helperInnerPath) -) - -var helperCommands []func(c command.Command) - -func TestMain(m *testing.M) { - container.TryArgv0(hlog.Output{}, hlog.Prepare, internal.InstallOutput) - - if os.Getenv(envDoCheck) == "1" { - c := command.New(os.Stderr, log.Printf, "helper", func(args []string) error { - log.SetFlags(0) - log.SetPrefix("helper: ") - return nil - }) - for _, f := range helperCommands { - f(c) - } - c.MustParse(os.Args[1:], func(err error) { - if err != nil { - log.Fatal(err.Error()) - } - }) - return - } - - os.Exit(m.Run()) -} - -func helperNewContainerLibPaths(ctx context.Context, libPaths *[]*container.Absolute, args ...string) (c *container.Container) { - c = container.NewCommand(ctx, absHelperInnerPath, "helper", args...) - c.Env = append(c.Env, envDoCheck+"=1") - c.Bind(container.MustAbs(os.Args[0]), absHelperInnerPath, 0) - - // in case test has cgo enabled - if entries, err := ldd.Exec(ctx, os.Args[0]); err != nil { - log.Fatalf("ldd: %v", err) - } else { - *libPaths = ldd.Path(entries) - } - for _, name := range *libPaths { - c.Bind(name, name, 0) - } - - return -} - -func helperNewContainer(ctx context.Context, args ...string) (c *container.Container) { - return helperNewContainerLibPaths(ctx, new([]*container.Absolute), args...) -} |
