Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b5602a5

Browse files
fergusstrangeNathan Franke
and
Nathan Franke
authored
Remove archiver xz dependencies (fergusstrange#50)
* Remove extra debug log * Try removing dependencies on chunky decompression libs * Try removing dependencies on chunky decompression libs * Move around error messaging * Resolve some of the broken tests * Resolve last batch of failing tests * Improve coverage and clean up decompression code * Move to using a non default port for validating create default test database * Try rolling back all changes to see if issues are around new decompression code. * Put back code without timeout on tests now * Fix param to go 1.13 standard * Add a little more coverage and strategy to improve * Add further decompression tests Co-authored-by: Nathan Franke <[email protected]>
1 parent 9654f19 commit b5602a5

13 files changed

+281
-170
lines changed

.github/workflows/build.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.42.1
4545
/home/runner/go/bin/golangci-lint run
4646
- name: Test
47-
run: go test -v -race -cover -covermode=atomic -coverprofile=coverage.out ./...
47+
run: go test -v -test.timeout 0 -race -cover -covermode=atomic -coverprofile=coverage.out ./...
4848
- name: Test Examples
4949
run: |
5050
pushd examples && \

decompression.go

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package embeddedpostgres
2+
3+
import (
4+
"archive/tar"
5+
"fmt"
6+
"io"
7+
"os"
8+
"path/filepath"
9+
10+
"github.com/xi2/xz"
11+
)
12+
13+
func defaultTarReader(xzReader *xz.Reader) (func() (*tar.Header, error), func() io.Reader) {
14+
tarReader := tar.NewReader(xzReader)
15+
16+
return func() (*tar.Header, error) {
17+
return tarReader.Next()
18+
}, func() io.Reader {
19+
return tarReader
20+
}
21+
}
22+
23+
func decompressTarXz(tarReader func(*xz.Reader) (func() (*tar.Header, error), func() io.Reader), path, extractPath string) error {
24+
tarFile, err := os.Open(path)
25+
if err != nil {
26+
return errorUnableToExtract(path, extractPath)
27+
}
28+
29+
defer func() {
30+
if err := tarFile.Close(); err != nil {
31+
panic(err)
32+
}
33+
}()
34+
35+
xzReader, err := xz.NewReader(tarFile, 0)
36+
if err != nil {
37+
return errorUnableToExtract(path, extractPath)
38+
}
39+
40+
readNext, reader := tarReader(xzReader)
41+
42+
for {
43+
header, err := readNext()
44+
45+
if err == io.EOF {
46+
return nil
47+
}
48+
49+
if err != nil {
50+
return errorExtractingPostgres(err)
51+
}
52+
53+
targetPath := filepath.Join(extractPath, header.Name)
54+
55+
if err := os.MkdirAll(filepath.Dir(targetPath), 0755); err != nil {
56+
return errorExtractingPostgres(err)
57+
}
58+
59+
switch header.Typeflag {
60+
case tar.TypeReg:
61+
outFile, err := os.OpenFile(targetPath, os.O_CREATE|os.O_RDWR, os.FileMode(header.Mode))
62+
if err != nil {
63+
return errorExtractingPostgres(err)
64+
}
65+
66+
if _, err := io.Copy(outFile, reader()); err != nil {
67+
return errorExtractingPostgres(err)
68+
}
69+
70+
if err := outFile.Close(); err != nil {
71+
return errorExtractingPostgres(err)
72+
}
73+
case tar.TypeSymlink:
74+
if err := os.RemoveAll(targetPath); err != nil {
75+
return errorExtractingPostgres(err)
76+
}
77+
78+
if err := os.Symlink(header.Linkname, targetPath); err != nil {
79+
return errorExtractingPostgres(err)
80+
}
81+
}
82+
}
83+
}
84+
85+
func errorUnableToExtract(cacheLocation, binariesPath string) error {
86+
return fmt.Errorf("unable to extract postgres archive %s to %s, if running parallel tests, configure RuntimePath to isolate testing directories", cacheLocation, binariesPath)
87+
}

decompression_test.go

+134
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
package embeddedpostgres
2+
3+
import (
4+
"archive/tar"
5+
"errors"
6+
"io"
7+
"io/ioutil"
8+
"os"
9+
"path/filepath"
10+
"testing"
11+
12+
"github.com/stretchr/testify/assert"
13+
"github.com/xi2/xz"
14+
)
15+
16+
func Test_decompressTarXz(t *testing.T) {
17+
tempDir, err := ioutil.TempDir("", "temp_tar_test")
18+
if err != nil {
19+
panic(err)
20+
}
21+
22+
archive, cleanUp := createTempXzArchive()
23+
defer cleanUp()
24+
25+
err = decompressTarXz(defaultTarReader, archive, tempDir)
26+
27+
assert.NoError(t, err)
28+
29+
expectedExtractedFileLocation := filepath.Join(tempDir, "dir1", "dir2", "some_content")
30+
assert.FileExists(t, expectedExtractedFileLocation)
31+
32+
fileContentBytes, err := ioutil.ReadFile(expectedExtractedFileLocation)
33+
assert.NoError(t, err)
34+
35+
assert.Equal(t, "b33r is g00d", string(fileContentBytes))
36+
}
37+
38+
func Test_decompressTarXz_ErrorWhenFileNotExists(t *testing.T) {
39+
err := decompressTarXz(defaultTarReader, "/does-not-exist", "/also-fake")
40+
41+
assert.EqualError(t, err, "unable to extract postgres archive /does-not-exist to /also-fake, if running parallel tests, configure RuntimePath to isolate testing directories")
42+
}
43+
44+
func Test_decompressTarXz_ErrorWhenErrorDuringRead(t *testing.T) {
45+
tempDir, err := ioutil.TempDir("", "temp_tar_test")
46+
if err != nil {
47+
panic(err)
48+
}
49+
50+
archive, cleanUp := createTempXzArchive()
51+
defer cleanUp()
52+
53+
err = decompressTarXz(func(reader *xz.Reader) (func() (*tar.Header, error), func() io.Reader) {
54+
return func() (*tar.Header, error) {
55+
return nil, errors.New("oh noes")
56+
}, nil
57+
}, archive, tempDir)
58+
59+
assert.EqualError(t, err, "unable to extract postgres archive: oh noes")
60+
}
61+
62+
func Test_decompressTarXz_ErrorWhenFailedToReadFileToCopy(t *testing.T) {
63+
tempDir, err := ioutil.TempDir("", "temp_tar_test")
64+
if err != nil {
65+
panic(err)
66+
}
67+
68+
archive, cleanUp := createTempXzArchive()
69+
defer cleanUp()
70+
71+
blockingFile := filepath.Join(tempDir, "blocking")
72+
73+
if err = ioutil.WriteFile(blockingFile, []byte("wazz"), 0000); err != nil {
74+
panic(err)
75+
}
76+
77+
fileBlockingExtractTarReader := func(reader *xz.Reader) (func() (*tar.Header, error), func() io.Reader) {
78+
shouldReadFile := true
79+
80+
return func() (*tar.Header, error) {
81+
if shouldReadFile {
82+
shouldReadFile = false
83+
84+
return &tar.Header{
85+
Typeflag: tar.TypeReg,
86+
Name: "blocking",
87+
}, nil
88+
}
89+
90+
return nil, io.EOF
91+
}, func() io.Reader {
92+
open, _ := os.Open("file_not_exists")
93+
return open
94+
}
95+
}
96+
97+
err = decompressTarXz(fileBlockingExtractTarReader, archive, tempDir)
98+
99+
assert.Regexp(t, "^unable to extract postgres archive:.+$", err)
100+
}
101+
102+
func Test_decompressTarXz_ErrorWhenFileToCopyToNotExists(t *testing.T) {
103+
tempDir, err := ioutil.TempDir("", "temp_tar_test")
104+
if err != nil {
105+
panic(err)
106+
}
107+
108+
archive, cleanUp := createTempXzArchive()
109+
defer cleanUp()
110+
111+
fileBlockingExtractTarReader := func(reader *xz.Reader) (func() (*tar.Header, error), func() io.Reader) {
112+
shouldReadFile := true
113+
114+
return func() (*tar.Header, error) {
115+
if shouldReadFile {
116+
shouldReadFile = false
117+
118+
return &tar.Header{
119+
Typeflag: tar.TypeReg,
120+
Name: "some_dir/wazz/dazz/fazz",
121+
}, nil
122+
}
123+
124+
return nil, io.EOF
125+
}, func() io.Reader {
126+
open, _ := os.Open("file_not_exists")
127+
return open
128+
}
129+
}
130+
131+
err = decompressTarXz(fileBlockingExtractTarReader, archive, tempDir)
132+
133+
assert.Regexp(t, "^unable to extract postgres archive:.+$", err)
134+
}

embedded_postgres.go

+2-5
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import (
1010
"path/filepath"
1111
"runtime"
1212
"strings"
13-
14-
"github.com/mholt/archiver/v3"
1513
)
1614

1715
// EmbeddedPostgres maintains all configuration and runtime functions for maintaining the lifecycle of one Postgres process.
@@ -102,9 +100,8 @@ func (ep *EmbeddedPostgres) Start() error {
102100
}
103101
}
104102

105-
if err := archiver.NewTarXz().Unarchive(cacheLocation, ep.config.binariesPath); err != nil {
106-
return fmt.Errorf(`unable to extract postgres archive %s to %s
107-
if running parallel tests, configure RuntimePath to isolate testing directories`, cacheLocation, ep.config.binariesPath)
103+
if err := decompressTarXz(defaultTarReader, cacheLocation, ep.config.binariesPath); err != nil {
104+
return err
108105
}
109106
}
110107

embedded_postgres_test.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
"testing"
1616
"time"
1717

18-
"github.com/mholt/archiver/v3"
1918
"github.com/stretchr/testify/assert"
2019
)
2120

@@ -99,8 +98,7 @@ func Test_ErrorWhenUnableToUnArchiveFile_WrongFormat(t *testing.T) {
9998
}
10099
}
101100

102-
assert.EqualError(t, err, fmt.Sprintf(`unable to extract postgres archive %s to %s
103-
if running parallel tests, configure RuntimePath to isolate testing directories`, jarFile, filepath.Join(filepath.Dir(jarFile), "extracted")))
101+
assert.EqualError(t, err, fmt.Sprintf(`unable to extract postgres archive %s to %s, if running parallel tests, configure RuntimePath to isolate testing directories`, jarFile, filepath.Join(filepath.Dir(jarFile), "extracted")))
104102
}
105103

106104
func Test_ErrorWhenUnableToInitDatabase(t *testing.T) {
@@ -549,7 +547,7 @@ func Test_PrefetchedBinaries(t *testing.T) {
549547
}
550548

551549
cacheLocation, _ := database.cacheLocator()
552-
if err := archiver.NewTarXz().Unarchive(cacheLocation, binTempDir); err != nil {
550+
if err := decompressTarXz(defaultTarReader, cacheLocation, binTempDir); err != nil {
553551
panic(err)
554552
}
555553

examples/go.sum

-21
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,13 @@
1-
github.com/andybalholm/brotli v1.0.0 h1:7UCwP93aiSfvWpapti8g88vVVGp2qqtGyePsSuDafo4=
2-
github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
31
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
42
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
53
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
64
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
75
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
8-
github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q=
9-
github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo=
10-
github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY=
116
github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk=
127
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
138
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
14-
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
15-
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
169
github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
1710
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
18-
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
19-
github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I=
20-
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
21-
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
22-
github.com/klauspost/pgzip v1.2.4 h1:TQ7CNpYKovDOmqzRHKxJh0BeaBI7UdQZYc6p7pMQh1A=
23-
github.com/klauspost/pgzip v1.2.4/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
2411
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
2512
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
2613
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -31,12 +18,6 @@ github.com/lib/pq v1.8.0 h1:9xohqzkUwzR4Ga4ivdTcawVS89YSDVxXMa3xJX3cGzg=
3118
github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
3219
github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4=
3320
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
34-
github.com/mholt/archiver/v3 v3.5.0 h1:nE8gZIrw66cu4osS/U7UW7YDuGMHssxKutU8IfWxwWE=
35-
github.com/mholt/archiver/v3 v3.5.0/go.mod h1:qqTTPUK/HZPFgFQ/TJ3BzvTpF/dPtFVJXdQbCmeMxwc=
36-
github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ=
37-
github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
38-
github.com/pierrec/lz4/v4 v4.0.3 h1:vNQKSVZNYUEAvRY9FaUXAF1XPbSOHJtDTiP41kzDz2E=
39-
github.com/pierrec/lz4/v4 v4.0.3/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
4021
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
4122
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
4223
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -49,8 +30,6 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
4930
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
5031
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
5132
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
52-
github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ=
53-
github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
5433
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
5534
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
5635
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=

go.mod

+1-4
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@ module github.com/fergusstrange/embedded-postgres
22

33
go 1.13
44

5-
// To avoid CVE CVE-2021-29482
6-
replace github.com/ulikunitz/xz => github.com/ulikunitz/xz v0.5.8
7-
85
require (
96
github.com/lib/pq v1.8.0
10-
github.com/mholt/archiver/v3 v3.5.0
117
github.com/stretchr/testify v1.6.1
8+
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8
129
)

go.sum

-21
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,12 @@
1-
github.com/andybalholm/brotli v1.0.0 h1:7UCwP93aiSfvWpapti8g88vVVGp2qqtGyePsSuDafo4=
2-
github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
31
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
42
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5-
github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q=
6-
github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo=
7-
github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY=
8-
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
9-
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
10-
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
11-
github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I=
12-
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
13-
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
14-
github.com/klauspost/pgzip v1.2.4 h1:TQ7CNpYKovDOmqzRHKxJh0BeaBI7UdQZYc6p7pMQh1A=
15-
github.com/klauspost/pgzip v1.2.4/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
163
github.com/lib/pq v1.8.0 h1:9xohqzkUwzR4Ga4ivdTcawVS89YSDVxXMa3xJX3cGzg=
174
github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
18-
github.com/mholt/archiver/v3 v3.5.0 h1:nE8gZIrw66cu4osS/U7UW7YDuGMHssxKutU8IfWxwWE=
19-
github.com/mholt/archiver/v3 v3.5.0/go.mod h1:qqTTPUK/HZPFgFQ/TJ3BzvTpF/dPtFVJXdQbCmeMxwc=
20-
github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ=
21-
github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
22-
github.com/pierrec/lz4/v4 v4.0.3 h1:vNQKSVZNYUEAvRY9FaUXAF1XPbSOHJtDTiP41kzDz2E=
23-
github.com/pierrec/lz4/v4 v4.0.3/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
245
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
256
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
267
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
278
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
289
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
29-
github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ=
30-
github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
3110
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
3211
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
3312
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=

0 commit comments

Comments
 (0)