From 141a18999f36d3e6211d99b24a355d8ea908f32a Mon Sep 17 00:00:00 2001 From: Ophestra Date: Fri, 22 Aug 2025 22:07:19 +0900 Subject: [PATCH] container: move integration test helpers With the new instrumentation it is now possible to run init code outside integration tests. Signed-off-by: Ophestra --- container/container_test.go | 62 +++++++++++++++++++++++++++++++ container/init_test.go | 73 ------------------------------------- 2 files changed, 62 insertions(+), 73 deletions(-) delete mode 100644 container/init_test.go diff --git a/container/container_test.go b/container/container_test.go index 036d06e..5dd510e 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 9e6832d..0000000 --- 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...) -}