From e4355279a1624833e36455a1a85788dbe091464e Mon Sep 17 00:00:00 2001 From: Ophestra Date: Tue, 7 Apr 2026 15:18:28 +0900 Subject: all: optionally forbid degrading in tests This enables transparently degradable tests to be forced on in environments known to support them. Signed-off-by: Ophestra --- internal/acl/acl_test.go | 12 ++++++++++-- internal/info/optional_skip.go | 7 +++++++ internal/info/optional_strict.go | 5 +++++ internal/pkg/pkg_test.go | 14 +++++++++----- 4 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 internal/info/optional_skip.go create mode 100644 internal/info/optional_strict.go (limited to 'internal') diff --git a/internal/acl/acl_test.go b/internal/acl/acl_test.go index 5f5447ba..60c4b702 100644 --- a/internal/acl/acl_test.go +++ b/internal/acl/acl_test.go @@ -11,9 +11,11 @@ import ( "path/filepath" "reflect" "strconv" + "syscall" "testing" "hakurei.app/internal/acl" + "hakurei.app/internal/info" ) const testFileName = "acl.test" @@ -24,8 +26,14 @@ var ( ) func TestUpdate(t *testing.T) { - if os.Getenv("HAKUREI_TEST_SKIP_ACL") == "1" { - t.Skip("acl test skipped") + if info.CanDegrade { + name := filepath.Join(t.TempDir(), "check-degrade") + if err := os.WriteFile(name, nil, 0); err != nil { + t.Fatal(err) + } + if err := acl.Update(name, os.Geteuid()); errors.Is(err, syscall.ENOTSUP) { + t.Skip(err) + } } testFilePath := filepath.Join(t.TempDir(), testFileName) diff --git a/internal/info/optional_skip.go b/internal/info/optional_skip.go new file mode 100644 index 00000000..c09a698f --- /dev/null +++ b/internal/info/optional_skip.go @@ -0,0 +1,7 @@ +//go:build !noskip + +package info + +// CanDegrade is whether tests are allowed to transparently degrade or skip due +// to required system features being denied or unavailable. +const CanDegrade = true diff --git a/internal/info/optional_strict.go b/internal/info/optional_strict.go new file mode 100644 index 00000000..f288b78e --- /dev/null +++ b/internal/info/optional_strict.go @@ -0,0 +1,5 @@ +//go:build noskip + +package info + +const CanDegrade = false diff --git a/internal/pkg/pkg_test.go b/internal/pkg/pkg_test.go index 4fce4b1e..e1deaf3d 100644 --- a/internal/pkg/pkg_test.go +++ b/internal/pkg/pkg_test.go @@ -24,6 +24,7 @@ import ( "hakurei.app/check" "hakurei.app/container" "hakurei.app/fhs" + "hakurei.app/internal/info" "hakurei.app/internal/pkg" "hakurei.app/internal/stub" "hakurei.app/message" @@ -290,12 +291,15 @@ func checkWithCache(t *testing.T, testCases []cacheTestCase) { msg.SwapVerbose(testing.Verbose()) flags := tc.flags - if _, err := container.LandlockGetABI(); err != nil { - if !errors.Is(err, syscall.ENOSYS) { - t.Fatalf("LandlockGetABI: error = %v", err) + + if info.CanDegrade { + if _, err := container.LandlockGetABI(); err != nil { + if !errors.Is(err, syscall.ENOSYS) { + t.Fatalf("LandlockGetABI: error = %v", err) + } + flags |= pkg.CHostAbstract + t.Log("Landlock LSM is unavailable, setting CHostAbstract") } - flags |= pkg.CHostAbstract - t.Log("Landlock LSM is unavailable, setting CHostAbstract") } var scrubFunc func() error // scrub after hashing -- cgit v1.3.1