All checks were successful
Test / Create distribution (push) Successful in 1m1s
Test / Sandbox (push) Successful in 2m45s
Test / Hakurei (push) Successful in 3m41s
Test / ShareFS (push) Successful in 3m43s
Test / Sandbox (race detector) (push) Successful in 5m5s
Test / Hakurei (race detector) (push) Successful in 6m11s
Test / Flake checks (push) Successful in 1m22s
This package is not container specific, and widely used across the project. Signed-off-by: Ophestra <cat@gensokyo.uk>
115 lines
3.0 KiB
Go
115 lines
3.0 KiB
Go
package pkg_test
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"hakurei.app/check"
|
|
"hakurei.app/internal/pkg"
|
|
)
|
|
|
|
func TestIRRoundtrip(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
testCases := []struct {
|
|
name string
|
|
a pkg.Artifact
|
|
}{
|
|
{"http get aligned", pkg.NewHTTPGet(
|
|
nil, "file:///testdata",
|
|
pkg.Checksum(bytes.Repeat([]byte{0xfd}, len(pkg.Checksum{}))),
|
|
)},
|
|
{"http get unaligned", pkg.NewHTTPGet(
|
|
nil, "https://hakurei.app",
|
|
pkg.Checksum(bytes.Repeat([]byte{0xfc}, len(pkg.Checksum{}))),
|
|
)},
|
|
|
|
{"http get tar", pkg.NewHTTPGetTar(
|
|
nil, "file:///testdata",
|
|
pkg.Checksum(bytes.Repeat([]byte{0xff}, len(pkg.Checksum{}))),
|
|
pkg.TarBzip2,
|
|
)},
|
|
{"http get tar unaligned", pkg.NewHTTPGetTar(
|
|
nil, "https://hakurei.app",
|
|
pkg.Checksum(bytes.Repeat([]byte{0xfe}, len(pkg.Checksum{}))),
|
|
pkg.TarUncompressed,
|
|
)},
|
|
|
|
{"exec offline", pkg.NewExec(
|
|
"exec-offline", nil, 0, false,
|
|
pkg.AbsWork,
|
|
[]string{"HAKUREI_TEST=1"},
|
|
check.MustAbs("/opt/bin/testtool"),
|
|
[]string{"testtool"},
|
|
|
|
pkg.MustPath("/file", false, pkg.NewFile("file", []byte(
|
|
"stub file",
|
|
))), pkg.MustPath("/.hakurei", false, pkg.NewHTTPGetTar(
|
|
nil, "file:///hakurei.tar",
|
|
pkg.Checksum(bytes.Repeat([]byte{0xfc}, len(pkg.Checksum{}))),
|
|
pkg.TarUncompressed,
|
|
)), pkg.MustPath("/opt", false, pkg.NewHTTPGetTar(
|
|
nil, "file:///testtool.tar.gz",
|
|
pkg.Checksum(bytes.Repeat([]byte{0xfc}, len(pkg.Checksum{}))),
|
|
pkg.TarGzip,
|
|
)),
|
|
)},
|
|
|
|
{"exec net", pkg.NewExec(
|
|
"exec-net",
|
|
(*pkg.Checksum)(bytes.Repeat([]byte{0xfc}, len(pkg.Checksum{}))),
|
|
0, false,
|
|
pkg.AbsWork,
|
|
[]string{"HAKUREI_TEST=1"},
|
|
check.MustAbs("/opt/bin/testtool"),
|
|
[]string{"testtool", "net"},
|
|
|
|
pkg.MustPath("/file", false, pkg.NewFile("file", []byte(
|
|
"stub file",
|
|
))), pkg.MustPath("/.hakurei", false, pkg.NewHTTPGetTar(
|
|
nil, "file:///hakurei.tar",
|
|
pkg.Checksum(bytes.Repeat([]byte{0xfc}, len(pkg.Checksum{}))),
|
|
pkg.TarUncompressed,
|
|
)), pkg.MustPath("/opt", false, pkg.NewHTTPGetTar(
|
|
nil, "file:///testtool.tar.gz",
|
|
pkg.Checksum(bytes.Repeat([]byte{0xfc}, len(pkg.Checksum{}))),
|
|
pkg.TarGzip,
|
|
)),
|
|
)},
|
|
|
|
{"file anonymous", pkg.NewFile("", []byte{0})},
|
|
{"file", pkg.NewFile("stub", []byte("stub"))},
|
|
}
|
|
testCasesCache := make([]cacheTestCase, len(testCases))
|
|
for i, tc := range testCases {
|
|
want := tc.a
|
|
testCasesCache[i] = cacheTestCase{tc.name, nil,
|
|
func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
|
|
r, w := io.Pipe()
|
|
|
|
done := make(chan error, 1)
|
|
go func() {
|
|
t.Helper()
|
|
done <- c.EncodeAll(w, want)
|
|
_ = w.Close()
|
|
}()
|
|
|
|
if got, err := c.NewDecoder(r).Decode(); err != nil {
|
|
t.Fatalf("Decode: error = %v", err)
|
|
} else if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("Decode: %#v, want %#v", got, want)
|
|
}
|
|
|
|
if err := <-done; err != nil {
|
|
t.Fatalf("EncodeAll: error = %v", err)
|
|
}
|
|
}, pkg.MustDecode(
|
|
"E4vEZKhCcL2gPZ2Tt59FS3lDng-d_2SKa2i5G_RbDfwGn6EemptFaGLPUDiOa94C",
|
|
),
|
|
}
|
|
}
|
|
checkWithCache(t, testCasesCache)
|
|
}
|