aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/file_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-07-23 17:10:22 +0900
committerOphestra <cat@gensokyo.uk>2026-07-23 17:10:22 +0900
commite0eec632d0a7cca2fb09e026997fa9a39dcd7504 (patch)
tree705ecc285e4fe05c3bba126a276c2e9e28ae9ec8 /internal/pkg/file_test.go
parent67dbb68818026f3d7a64e9519cf1aac36468b7c9 (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.go31
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},