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
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:
@@ -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",
|
||||||
|
|||||||
59
internal/pkg/testdata/main.go
vendored
59
internal/pkg/testdata/main.go
vendored
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user