aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-01-11 00:30:32 +0900
committerOphestra <cat@gensokyo.uk>2026-01-11 00:30:32 +0900
commitda3848b92f22259d97b1d3851e17d1a8c6ffeb3d (patch)
treed73b0fad074b4964d09b78c11442b58fbf498cad /internal
parent34cb4ebd3bc1d7aaa263929c7ae27ac46298b285 (diff)
internal/pkg: compare interfaces for host net
An upcoming improvement in the container init makes the current host net check return the same result for both cases. This change Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal')
-rw-r--r--internal/pkg/exec_test.go23
-rw-r--r--internal/pkg/testdata/main.go59
2 files changed, 66 insertions, 16 deletions
diff --git a/internal/pkg/exec_test.go b/internal/pkg/exec_test.go
index e6928582..ef293b68 100644
--- a/internal/pkg/exec_test.go
+++ b/internal/pkg/exec_test.go
@@ -4,7 +4,9 @@ package pkg_test
import (
_ "embed"
+ "encoding/gob"
"errors"
+ "net"
"os"
"os/exec"
"slices"
@@ -263,6 +265,27 @@ func newTesttool() (
); err != nil {
return err
}
+
+ if ift, err := net.Interfaces(); err != nil {
+ return err
+ } else {
+ var f *os.File
+ if f, err = os.Create(t.GetWorkDir().Append(
+ "ift",
+ ).String()); err != nil {
+ return err
+ } else {
+ err = gob.NewEncoder(f).Encode(ift)
+ closeErr := f.Close()
+ if err != nil {
+ return err
+ }
+ if closeErr != nil {
+ return closeErr
+ }
+ }
+ }
+
return os.WriteFile(t.GetWorkDir().Append(
"bin",
"testtool",
diff --git a/internal/pkg/testdata/main.go b/internal/pkg/testdata/main.go
index f883aec7..a49fb375 100644
--- a/internal/pkg/testdata/main.go
+++ b/internal/pkg/testdata/main.go
@@ -3,14 +3,14 @@
package main
import (
- "errors"
+ "encoding/gob"
"log"
"net"
"os"
"path"
+ "reflect"
"slices"
"strings"
- "syscall"
"hakurei.app/container/check"
"hakurei.app/container/fhs"
@@ -60,16 +60,21 @@ func main() {
wantExec = "/opt/bin/testtool"
wantExecWork = "/work/bin/testtool"
)
+ var iftPath string
if got, err := os.Executable(); err != nil {
log.Fatalf("Executable: error = %v", err)
- } else if got != wantExec {
- switch got {
- case wantExecWork:
- overlayWork = true
- log.SetPrefix("testtool(overlay work): ")
+ } else {
+ iftPath = path.Join(path.Dir(path.Dir(got)), "ift")
- default:
- log.Fatalf("Executable: %q, want %q", got, wantExec)
+ if got != wantExec {
+ switch got {
+ case wantExecWork:
+ overlayWork = true
+ log.SetPrefix("testtool(overlay work): ")
+
+ default:
+ log.Fatalf("Executable: %q, want %q", got, wantExec)
+ }
}
}
@@ -98,15 +103,37 @@ func main() {
}
}
- if _, err := net.Dial("tcp", "127.0.0.1:0"); err == nil {
- log.Fatal("Dial unexpectedly succeeded")
- } else if hostNet {
- if !errors.Is(err, syscall.ECONNREFUSED) {
- log.Fatalf("Dial: error = %v", err)
+ if ift, err := net.Interfaces(); err != nil {
+ log.Fatal(err)
+ } else if !hostNet {
+ if len(ift) != 1 || ift[0].Name != "lo" {
+ log.Fatalln("got interfaces", strings.Join(slices.Collect(func(yield func(ifn string) bool) {
+ for _, ifi := range ift {
+ if !yield(ifi.Name) {
+ break
+ }
+ }
+ }), ", "))
}
} else {
- if !errors.Is(err, syscall.ENETUNREACH) {
- log.Fatalf("Dial: error = %v", err)
+ var iftParent []net.Interface
+
+ var r *os.File
+ if r, err = os.Open(iftPath); err != nil {
+ log.Fatal(err)
+ } else {
+ err = gob.NewDecoder(r).Decode(&iftParent)
+ closeErr := r.Close()
+ if err != nil {
+ log.Fatal(err)
+ }
+ if closeErr != nil {
+ log.Fatal(closeErr)
+ }
+ }
+
+ if !reflect.DeepEqual(ift, iftParent) {
+ log.Fatalf("Interfaces: %#v, want %#v", ift, iftParent)
}
}