aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-08-22 22:07:19 +0900
committerOphestra <cat@gensokyo.uk>2025-08-22 22:07:19 +0900
commit141a18999f36d3e6211d99b24a355d8ea908f32a (patch)
tree44a5826bd0bbde7fd09897b2ac327896300e12df
parentafe23600d286cf0879717cb8b55c52ef432fce7a (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.go62
-rw-r--r--container/init_test.go73
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...)
-}