aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-01-02 16:08:43 +0900
committerOphestra <cat@gensokyo.uk>2026-01-02 16:08:43 +0900
commitd15d2ec2bdd9b28393abb57c3cdc4c57a97648c5 (patch)
tree628b33b520c1297ab33e41b2aa0dea0826088ba8
parent3078c41ce74d7c04a7db3e47cdc00a5d49496887 (diff)
internal/pkg: relocate cache test helper
This is useful for other tests that need a cache instance. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--internal/pkg/pkg_test.go114
1 files changed, 61 insertions, 53 deletions
diff --git a/internal/pkg/pkg_test.go b/internal/pkg/pkg_test.go
index bd2096d9..f564572a 100644
--- a/internal/pkg/pkg_test.go
+++ b/internal/pkg/pkg_test.go
@@ -17,6 +17,64 @@ import (
"hakurei.app/internal/pkg"
)
+// cacheTestCase is a test case passed to checkWithCache where a new instance
+// of [pkg.Cache] is prepared for the test case, and is validated and removed
+// on test completion.
+type cacheTestCase struct {
+ name string
+ early func(t *testing.T, base *check.Absolute)
+ f func(t *testing.T, base *check.Absolute, c *pkg.Cache)
+ want pkg.Checksum
+}
+
+// checkWithCache runs a slice of cacheTestCase.
+func checkWithCache(t *testing.T, testCases []cacheTestCase) {
+ t.Helper()
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ t.Parallel()
+
+ base := check.MustAbs(t.TempDir())
+ if err := os.Chmod(base.String(), 0700); err != nil {
+ t.Fatal(err)
+ }
+ t.Cleanup(func() {
+ if err := filepath.WalkDir(base.String(), func(path string, d fs.DirEntry, err error) error {
+ if err != nil {
+ t.Error(err)
+ return nil
+ }
+ if !d.IsDir() {
+ return nil
+ }
+ return os.Chmod(path, 0700)
+ }); err != nil {
+ t.Fatal(err)
+ }
+ })
+
+ if c, err := pkg.New(base); err != nil {
+ t.Fatalf("New: error = %v", err)
+ } else {
+ if tc.early != nil {
+ tc.early(t, base)
+ }
+ tc.f(t, base, c)
+ }
+
+ if checksum, err := pkg.HashDir(base); err != nil {
+ t.Fatalf("HashDir: error = %v", err)
+ } else if checksum != tc.want {
+ t.Fatalf("HashDir: %v", &pkg.ChecksumMismatchError{
+ Got: checksum,
+ Want: tc.want,
+ })
+ }
+ })
+ }
+}
+
func TestCache(t *testing.T) {
t.Parallel()
@@ -35,12 +93,7 @@ func TestCache(t *testing.T) {
testdataChecksumString := base64.URLEncoding.EncodeToString(testdataChecksum[:])
- testCases := []struct {
- name string
- early func(t *testing.T, base *check.Absolute)
- f func(t *testing.T, base *check.Absolute, c *pkg.Cache)
- check func(t *testing.T, base *check.Absolute)
- }{
+ testCases := []cacheTestCase{
{"file", nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
wantErrNonexistent := &os.PathError{
Op: "open",
@@ -209,54 +262,9 @@ func TestCache(t *testing.T) {
if _, _, err := c.LoadFile(zeroIdent); !reflect.DeepEqual(err, wantErrNonexistentZero) {
t.Fatalf("LoadFile: error = %#v, want %#v", err, wantErrNonexistentZero)
}
- }, func(t *testing.T, base *check.Absolute) {
- wantChecksum := pkg.MustDecode(
- "ZNSQH-mjhtIbFvi51lQ0UjatjoS8_5ILrBPNWlO2LWTq9P6MJEnekYzP0esUJnVr",
- )
- if checksum, err := pkg.HashDir(base); err != nil {
- t.Fatalf("HashDir: error = %v", err)
- } else if checksum != wantChecksum {
- t.Fatalf("HashDir: %v", &pkg.ChecksumMismatchError{
- Got: checksum,
- Want: wantChecksum,
- })
- }
- }},
- }
- for _, tc := range testCases {
- t.Run(tc.name, func(t *testing.T) {
- t.Parallel()
-
- base := check.MustAbs(t.TempDir())
- if err := os.Chmod(base.String(), 0700); err != nil {
- t.Fatal(err)
- }
- t.Cleanup(func() {
- if err := filepath.WalkDir(base.String(), func(path string, d fs.DirEntry, err error) error {
- if err != nil {
- t.Error(err)
- return nil
- }
- if !d.IsDir() {
- return nil
- }
- return os.Chmod(path, 0700)
- }); err != nil {
- t.Fatal(err)
- }
- })
-
- if c, err := pkg.New(base); err != nil {
- t.Fatalf("New: error = %v", err)
- } else {
- if tc.early != nil {
- tc.early(t, base)
- }
- tc.f(t, base, c)
- tc.check(t, base)
- }
- })
+ }, pkg.MustDecode("ZNSQH-mjhtIbFvi51lQ0UjatjoS8_5ILrBPNWlO2LWTq9P6MJEnekYzP0esUJnVr")},
}
+ checkWithCache(t, testCases)
}
func TestErrors(t *testing.T) {