aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/compress_test.go
blob: 7ce00edfd312f9ddac91341aea708b944d5b5b65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package pkg_test

import (
	"bytes"
	"compress/gzip"
	"crypto/sha512"
	"io/fs"
	"net/http"
	"testing"
	"testing/fstest"

	"hakurei.app/check"
	"hakurei.app/internal/pkg"
)

func TestDecompress(t *testing.T) {
	t.Parallel()

	var buf bytes.Buffer
	gw := gzip.NewWriter(&buf)
	if _, err := gw.Write([]byte{0}); err != nil {
		t.Fatal(err)
	} else if err = gw.Close(); err != nil {
		t.Fatal(err)
	}
	testdata := buf.String()

	var transport http.Transport
	client := http.Client{Transport: &transport}
	transport.RegisterProtocol("file", http.NewFileTransportFS(fstest.MapFS{
		"testdata": {Data: []byte(testdata), Mode: 0400},
	}))
	testdataChecksum := func() pkg.Checksum {
		h := sha512.New384()
		h.Write([]byte(testdata))
		return (pkg.Checksum)(h.Sum(nil))
	}()

	gh := pkg.NewDecompress(pkg.NewHTTPGet(
		&client,
		"file:///testdata",
		testdataChecksum,
	), pkg.Gzip)

	checkWithCache(t, []cacheTestCase{
		{"decompress", 0, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
			cureMany(t, c, []cureStep{
				{"close", pkg.NewDecompress(pkg.NewHTTPGet(
					&client,
					"file:///testdata",
					pkg.Checksum{0xfd},
				), pkg.Gzip), nil, nil, pkg.WNew, &pkg.ChecksumMismatchError{
					Got:  testdataChecksum,
					Want: pkg.Checksum{0xfd},
				}},

				{"gzip", gh, ignorePathname, expectsChecksum(sha512.Sum384([]byte{0})), pkg.WNew, nil},
			})
		}, expectsFS{
			".": {Mode: fs.ModeDir | 0700},

			"checksum": {Mode: fs.ModeDir | 0700},
			"checksum/" + pkg.Encode(sha512.Sum384([]byte{0})): {Mode: 0400, Data: []byte{0}},

			"identifier": {Mode: fs.ModeDir | 0700},
			"identifier/" + pkg.Encode(pkg.NewIR().Ident(gh).Value()): {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/vsAhtPNo4waRNOASwrQwcIPTqb3SBuJOXw2G4T1mNmVZM-wrQTRllmgXqcIIoRcX")},

			"substitute": {Mode: fs.ModeDir | 0700},
			"work":       {Mode: fs.ModeDir | 0700},
		}},
	})
}