internal/pkg: compare interfaces for host net
All checks were successful
Test / Create distribution (push) Successful in 46s
Test / Sandbox (push) Successful in 2m59s
Test / ShareFS (push) Successful in 4m45s
Test / Hpkg (push) Successful in 5m4s
Test / Hakurei (push) Successful in 5m22s
Test / Sandbox (race detector) (push) Successful in 5m21s
Test / Hakurei (race detector) (push) Successful in 7m31s
Test / Flake checks (push) Successful in 1m40s

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>
This commit is contained in:
2026-01-11 00:30:32 +09:00
parent 34cb4ebd3b
commit da3848b92f
2 changed files with 66 additions and 16 deletions

View File

@@ -4,7 +4,9 @@ package pkg_test
import ( import (
_ "embed" _ "embed"
"encoding/gob"
"errors" "errors"
"net"
"os" "os"
"os/exec" "os/exec"
"slices" "slices"
@@ -263,6 +265,27 @@ func newTesttool() (
); err != nil { ); err != nil {
return err 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( return os.WriteFile(t.GetWorkDir().Append(
"bin", "bin",
"testtool", "testtool",

View File

@@ -3,14 +3,14 @@
package main package main
import ( import (
"errors" "encoding/gob"
"log" "log"
"net" "net"
"os" "os"
"path" "path"
"reflect"
"slices" "slices"
"strings" "strings"
"syscall"
"hakurei.app/container/check" "hakurei.app/container/check"
"hakurei.app/container/fhs" "hakurei.app/container/fhs"
@@ -60,16 +60,21 @@ func main() {
wantExec = "/opt/bin/testtool" wantExec = "/opt/bin/testtool"
wantExecWork = "/work/bin/testtool" wantExecWork = "/work/bin/testtool"
) )
var iftPath string
if got, err := os.Executable(); err != nil { if got, err := os.Executable(); err != nil {
log.Fatalf("Executable: error = %v", err) log.Fatalf("Executable: error = %v", err)
} else if got != wantExec { } else {
switch got { iftPath = path.Join(path.Dir(path.Dir(got)), "ift")
case wantExecWork:
overlayWork = true
log.SetPrefix("testtool(overlay work): ")
default: if got != wantExec {
log.Fatalf("Executable: %q, want %q", 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 { if ift, err := net.Interfaces(); err != nil {
log.Fatal("Dial unexpectedly succeeded") log.Fatal(err)
} else if hostNet { } else if !hostNet {
if !errors.Is(err, syscall.ECONNREFUSED) { if len(ift) != 1 || ift[0].Name != "lo" {
log.Fatalf("Dial: error = %v", err) log.Fatalln("got interfaces", strings.Join(slices.Collect(func(yield func(ifn string) bool) {
for _, ifi := range ift {
if !yield(ifi.Name) {
break
}
}
}), ", "))
} }
} else { } else {
if !errors.Is(err, syscall.ENETUNREACH) { var iftParent []net.Interface
log.Fatalf("Dial: error = %v", err)
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)
} }
} }