38450db74a
Test / Create distribution (push) Successful in 52s
Test / Sandbox (push) Successful in 2m44s
Test / Hakurei (push) Successful in 3m52s
Test / ShareFS (push) Successful in 3m53s
Test / Sandbox (race detector) (push) Successful in 5m32s
Test / Hakurei (race detector) (push) Successful in 6m30s
Test / Flake checks (push) Successful in 1m7s
This is more versatile than hardcoding the os.Root implementation. Signed-off-by: Ophestra <cat@gensokyo.uk>
78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
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),
|
|
)
|
|
}
|
|
}
|