From 38450db74abdddfb3e366516f46e0e9c291002b1 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sun, 7 Jun 2026 21:12:15 +0900 Subject: internal/rosa: access backing storage through fs This is more versatile than hardcoding the os.Root implementation. Signed-off-by: Ophestra --- internal/rosa/mirror_test.go | 77 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 internal/rosa/mirror_test.go (limited to 'internal/rosa/mirror_test.go') diff --git a/internal/rosa/mirror_test.go b/internal/rosa/mirror_test.go new file mode 100644 index 00000000..a671cd31 --- /dev/null +++ b/internal/rosa/mirror_test.go @@ -0,0 +1,77 @@ +package rosa_test + +import ( + "crypto/ed25519" + "io/fs" + "log" + "net/http/httptest" + "os" + "testing" + "testing/fstest" + "unique" + + "hakurei.app/check" + "hakurei.app/fhs" + "hakurei.app/internal/pkg" + "hakurei.app/internal/rosa" + "hakurei.app/message" +) + +func TestMirror(t *testing.T) { + t.Parallel() + + pub, priv, err := ed25519.GenerateKey(nil) + if err != nil { + t.Fatal(err) + } + + base := check.MustAbs(t.TempDir()) + msg := message.New(log.New(os.Stderr, "mirror: ", 0)) + msg.SwapVerbose(testing.Verbose()) + + var c *pkg.Cache + c, err = pkg.Open(t.Context(), msg, 0, 0, 0, base) + if err != nil { + t.Fatal(err) + } + t.Cleanup(c.Close) + + a := pkg.NewExec( + "", "", + nil, 0, false, false, + fhs.AbsRoot, nil, fhs.AbsRoot, nil, + ) + id := c.Ident(a) + ids := pkg.Encode(id.Value()) + + var wantChecksum pkg.Checksum + if err = pkg.SumFS(&wantChecksum, fstest.MapFS{ + ".": {Mode: os.ModeDir | 0500}, + }, "."); err != nil { + t.Fatal(err) + } + wantChecksums := pkg.Encode(wantChecksum) + + server := httptest.NewServer(rosa.NewMirror(msg, fstest.MapFS{ + "identifier/" + ids: {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + wantChecksums)}, + "checksum/" + wantChecksums: {Mode: os.ModeDir | 0500}, + }, priv)) + t.Cleanup(server.Close) + + var extern pkg.External + extern, err = rosa.NewRemote("http://example.com:80", pub, server.Client()) + if err != nil { + t.Fatal(err) + } + c.SetExternal(extern) + + var got unique.Handle[pkg.Checksum] + if _, got, err = c.Cure(a); err != nil { + t.Fatal(err) + } else if got.Value() != wantChecksum { + t.Logf( + "Cure: checksum = %s, want %s", + pkg.Encode(got.Value()), pkg.Encode(wantChecksum), + ) + } +} -- cgit v1.3.1