aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/exec_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/pkg/exec_test.go')
-rw-r--r--internal/pkg/exec_test.go95
1 files changed, 86 insertions, 9 deletions
diff --git a/internal/pkg/exec_test.go b/internal/pkg/exec_test.go
index 5d2905d4..73249a56 100644
--- a/internal/pkg/exec_test.go
+++ b/internal/pkg/exec_test.go
@@ -8,12 +8,15 @@ import (
"net"
"os"
"os/exec"
+ "path/filepath"
"slices"
"testing"
"unique"
"hakurei.app/check"
+ "hakurei.app/container"
"hakurei.app/hst"
+ "hakurei.app/internal/info"
"hakurei.app/internal/pkg"
"hakurei.app/internal/stub"
@@ -27,6 +30,17 @@ import (
//go:embed internal/testtool/testtool
var testtoolBin []byte
+func init() {
+ pathname, err := filepath.Abs("internal/testtool/testtool")
+ if err != nil {
+ panic(err)
+ }
+ pkg.RegisterArch("cafe", container.BinfmtEntry{
+ Magic: expected.Magic,
+ Interpreter: check.MustAbs(pathname),
+ })
+}
+
func TestExec(t *testing.T) {
t.Parallel()
@@ -43,7 +57,7 @@ func TestExec(t *testing.T) {
cureMany(t, c, []cureStep{
{"container", pkg.NewExec(
- "exec-offline", nil, 0, false,
+ "exec-offline", "", nil, 0, false,
pkg.AbsWork,
[]string{"HAKUREI_TEST=1"},
check.MustAbs("/opt/bin/testtool"),
@@ -66,7 +80,7 @@ func TestExec(t *testing.T) {
), ignorePathname, wantOffline, nil},
{"error passthrough", pkg.NewExec(
- "", nil, 0, true,
+ "", "", nil, 0, true,
pkg.AbsWork,
[]string{"HAKUREI_TEST=1"},
check.MustAbs("/opt/bin/testtool"),
@@ -89,7 +103,7 @@ func TestExec(t *testing.T) {
}},
{"invalid paths", pkg.NewExec(
- "", nil, 0, false,
+ "", "", nil, 0, false,
pkg.AbsWork,
[]string{"HAKUREI_TEST=1"},
check.MustAbs("/opt/bin/testtool"),
@@ -102,7 +116,7 @@ func TestExec(t *testing.T) {
// check init failure passthrough
var exitError *exec.ExitError
if _, _, err := c.Cure(pkg.NewExec(
- "", nil, 0, false,
+ "", "", nil, 0, false,
pkg.AbsWork,
nil,
check.MustAbs("/opt/bin/testtool"),
@@ -141,7 +155,7 @@ func TestExec(t *testing.T) {
}
cureMany(t, c, []cureStep{
{"container", pkg.NewExec(
- "exec-net", new(wantNet.hash()), 0, false,
+ "exec-net", "", new(wantNet.hash()), 0, false,
pkg.AbsWork,
[]string{"HAKUREI_TEST=1"},
check.MustAbs("/opt/bin/testtool"),
@@ -188,7 +202,7 @@ func TestExec(t *testing.T) {
cureMany(t, c, []cureStep{
{"container", pkg.NewExec(
- "exec-overlay-root", nil, 0, false,
+ "exec-overlay-root", "", nil, 0, false,
pkg.AbsWork,
[]string{"HAKUREI_TEST=1", "HAKUREI_ROOT=1"},
check.MustAbs("/opt/bin/testtool"),
@@ -227,7 +241,7 @@ func TestExec(t *testing.T) {
cureMany(t, c, []cureStep{
{"container", pkg.NewExec(
- "exec-overlay-work", nil, 0, false,
+ "exec-overlay-work", "", nil, 0, false,
pkg.AbsWork,
[]string{"HAKUREI_TEST=1", "HAKUREI_ROOT=1"},
check.MustAbs("/work/bin/testtool"),
@@ -271,7 +285,7 @@ func TestExec(t *testing.T) {
cureMany(t, c, []cureStep{
{"container", pkg.NewExec(
- "exec-multiple-layers", nil, 0, false,
+ "exec-multiple-layers", "", nil, 0, false,
pkg.AbsWork,
[]string{"HAKUREI_TEST=1", "HAKUREI_ROOT=1"},
check.MustAbs("/opt/bin/testtool"),
@@ -342,7 +356,7 @@ func TestExec(t *testing.T) {
cureMany(t, c, []cureStep{
{"container", pkg.NewExec(
- "exec-layer-promotion", nil, 0, true,
+ "exec-layer-promotion", "", nil, 0, true,
pkg.AbsWork,
[]string{"HAKUREI_TEST=1", "HAKUREI_ROOT=1"},
check.MustAbs("/opt/bin/testtool"),
@@ -382,6 +396,69 @@ func TestExec(t *testing.T) {
"temp": {Mode: fs.ModeDir | 0700},
"work": {Mode: fs.ModeDir | 0700},
}},
+
+ {"binfmt", pkg.CValidateKnown, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
+ if info.CanDegrade && os.Getenv("ROSA_SKIP_BINFMT") != "" {
+ t.Skip("binfmt_misc test explicitly skipped")
+ }
+
+ cureMany(t, c, []cureStep{
+ {"container", pkg.NewExec(
+ "exec-binfmt", "cafe", nil, 0, true,
+ pkg.AbsWork,
+ []string{"HAKUREI_TEST=1", "HAKUREI_BINFMT=1"},
+ check.MustAbs("/opt/bin/sample"),
+ []string{"sample"},
+
+ pkg.MustPath("/", true, &stubArtifact{
+ kind: pkg.KindTar,
+ params: []byte("empty directory"),
+ cure: func(t *pkg.TContext) error {
+ return os.MkdirAll(t.GetWorkDir().String(), 0700)
+ },
+ }),
+ pkg.MustPath("/opt", false, overrideIdent{pkg.ID{0xfe, 0xff}, &stubArtifact{
+ kind: pkg.KindTar,
+ cure: func(t *pkg.TContext) error {
+ work := t.GetWorkDir()
+ if err := os.MkdirAll(
+ work.Append("bin").String(),
+ 0700,
+ ); err != nil {
+ return err
+ }
+
+ return os.WriteFile(t.GetWorkDir().Append(
+ "bin",
+ "sample",
+ ).String(), []byte(expected.Full), 0500)
+ },
+ }}),
+ ), ignorePathname, expectsFS{
+ ".": {Mode: fs.ModeDir | 0500},
+
+ "check": {Mode: 0400, Data: []byte("binfmt")},
+ }, nil},
+ })
+ }, expectsFS{
+ ".": {Mode: fs.ModeDir | 0700},
+
+ "checksum": {Mode: fs.ModeDir | 0700},
+ "checksum/5aevg3YpDxjqQZ-pdvXK7YqgkL5JKqcoStYQxeD96kuYar6K2mRQWMHib6NQRnpV": {Mode: fs.ModeDir | 0500},
+ "checksum/5aevg3YpDxjqQZ-pdvXK7YqgkL5JKqcoStYQxeD96kuYar6K2mRQWMHib6NQRnpV/bin": {Mode: fs.ModeDir | 0700},
+ "checksum/5aevg3YpDxjqQZ-pdvXK7YqgkL5JKqcoStYQxeD96kuYar6K2mRQWMHib6NQRnpV/bin/sample": {Mode: 0500, Data: []byte("\xca\xfe\xba\xbe\xfd\xfd:3")},
+ "checksum/MGWmEfjut2QE2xPJwTsmUzpff4BN_FEnQ7T0j7gvUCCiugJQNwqt9m151fm9D1yU": {Mode: fs.ModeDir | 0500},
+ "checksum/UnDo4B5KneEUY5b4vRUk_y9MWgkWuw2N8f8a2XayO686xXur-aZmX2-7n_8tKMe3": {Mode: fs.ModeDir | 0500},
+ "checksum/UnDo4B5KneEUY5b4vRUk_y9MWgkWuw2N8f8a2XayO686xXur-aZmX2-7n_8tKMe3/check": {Mode: 0400, Data: []byte("binfmt")},
+
+ "identifier": {Mode: fs.ModeDir | 0700},
+ "identifier/6VQTJ1lI5BmVuI1YFYJ8ClO3MRORvTTrcWFDcUU-l5Ga8EofxCxGlSTYN-u8dKj_": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/UnDo4B5KneEUY5b4vRUk_y9MWgkWuw2N8f8a2XayO686xXur-aZmX2-7n_8tKMe3")},
+ "identifier/_v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/5aevg3YpDxjqQZ-pdvXK7YqgkL5JKqcoStYQxeD96kuYar6K2mRQWMHib6NQRnpV")},
+ "identifier/vjz1MHPcGBKV7sjcs8jQP3cqxJ1hgPTiQBMCEHP9BGXjGxd-tJmEmXKaStObo5gK": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/MGWmEfjut2QE2xPJwTsmUzpff4BN_FEnQ7T0j7gvUCCiugJQNwqt9m151fm9D1yU")},
+
+ "temp": {Mode: fs.ModeDir | 0700},
+ "work": {Mode: fs.ModeDir | 0700},
+ }},
})
}