diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-07-23 17:10:22 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-07-23 17:10:22 +0900 |
| commit | e0eec632d0a7cca2fb09e026997fa9a39dcd7504 (patch) | |
| tree | 705ecc285e4fe05c3bba126a276c2e9e28ae9ec8 /internal/pkg/file_test.go | |
| parent | 67dbb68818026f3d7a64e9519cf1aac36468b7c9 (diff) | |
internal/pkg: optional executable files
This enables a FileArtifact implementation to specify whether its resulting file should be executable. This change also implements shebang and ELF magic checks in the file artifact.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pkg/file_test.go')
| -rw-r--r-- | internal/pkg/file_test.go | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/internal/pkg/file_test.go b/internal/pkg/file_test.go index 0111faa8..f6fcc96f 100644 --- a/internal/pkg/file_test.go +++ b/internal/pkg/file_test.go @@ -12,22 +12,41 @@ func TestFile(t *testing.T) { t.Parallel() want := expectsFile{0} + const ident = "N7M6W8-e55Wky_1q1a6qRKFVDw1S5XtPdB4HE2YZObG8OFum8HittyJgZUG5Ru2u" + wantShebang := expectsFile("#!/bin/sh\n") + const identShebang = "oKTGZb_TRtJf5G1iGGj4SOx1WUbI6YhmsUeEsCNvmK9tZYRwdwQf-DLFUxRPx5qm" + wantELF := expectsFile("\x7fELF\xde\xad\xbe\xef") + const identELF = "LjeHmIJgD1SiXIH8ewpGRed2_LU84NLapstnOAa_0hxLd8YY7x4KM0aApsj-RwCh" checkWithCache(t, []cacheTestCase{ {"file", pkg.CValidateKnown, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) { cureMany(t, c, []cureStep{ - {"short", pkg.NewFile("null", []byte{0}), base.Append( + {"short", pkg.NewFile("null", want), base.Append( "identifier", - "J3quqJoHNQID_k-amRdanjl0nXynlU7wzVJUx25BNvL229wxPyQ9s2Td9VbnRP6s", + ident, ), want, pkg.WNew, nil}, + + {"shebang", pkg.NewFile("shebang", wantShebang), base.Append( + "identifier", + identShebang, + ), wantShebang, pkg.WNew, nil}, + + {"elf", pkg.NewFile("ELF", wantELF), base.Append( + "identifier", + identELF, + ), wantELF, pkg.WNew, nil}, }) }, expectsFS{ ".": {Mode: fs.ModeDir | 0700}, - "checksum": {Mode: fs.ModeDir | 0700}, - "checksum/" + pkg.Encode(want.hash()): {Mode: 0400, Data: []byte{0}}, + "checksum": {Mode: fs.ModeDir | 0700}, + "checksum/" + pkg.Encode(want.hash()): {Mode: 0400, Data: want}, + "checksum/" + pkg.Encode(wantShebang.hash()): {Mode: 0500, Data: wantShebang}, + "checksum/" + pkg.Encode(wantELF.hash()): {Mode: 0500, Data: wantELF}, - "identifier": {Mode: fs.ModeDir | 0700}, - "identifier/J3quqJoHNQID_k-amRdanjl0nXynlU7wzVJUx25BNvL229wxPyQ9s2Td9VbnRP6s": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/vsAhtPNo4waRNOASwrQwcIPTqb3SBuJOXw2G4T1mNmVZM-wrQTRllmgXqcIIoRcX")}, + "identifier": {Mode: fs.ModeDir | 0700}, + "identifier/" + ident: {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + pkg.Encode(want.hash()))}, + "identifier/" + identShebang: {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + pkg.Encode(wantShebang.hash()))}, + "identifier/" + identELF: {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + pkg.Encode(wantELF.hash()))}, "substitute": {Mode: fs.ModeDir | 0700}, |
