-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathzip_test.go
66 lines (58 loc) · 1.44 KB
/
zip_test.go
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
package xtractr_test
import (
"archive/zip"
_ "embed"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golift.io/xtractr"
)
func TestZip(t *testing.T) {
t.Parallel()
const (
testDataSize = 21
testFileCount = 5
testArchiveCount = 1
)
testFiles := []string{
"README.txt",
"subdir/",
"subdir/subdirfile.txt",
"subdir/level2/",
"subdir/level2/level2file.txt",
}
name, err := os.MkdirTemp(".", "xtractr_test_*_data")
require.NoError(t, err, "creating temp directory failed")
defer os.RemoveAll(name)
zipFile, err := os.Create(filepath.Join(name, "archive.zip"))
require.NoError(t, err)
zipWriter := zip.NewWriter(zipFile)
for _, file := range testFiles {
if file[len(file)-1] == '/' {
_, err = zipWriter.Create(file)
require.NoError(t, err)
} else {
f, err := zipWriter.Create(file)
require.NoError(t, err)
_, err = f.Write([]byte("content"))
require.NoError(t, err)
}
}
err = zipWriter.Close()
require.NoError(t, err)
err = zipFile.Close()
require.NoError(t, err)
zipTestFile := filepath.Join(name, "archive.zip")
size, files, archives, err := xtractr.ExtractFile(&xtractr.XFile{
FilePath: zipTestFile,
OutputDir: filepath.Clean(name),
FileMode: 0o600,
DirMode: 0o700,
})
require.NoError(t, err)
assert.Equal(t, int64(testDataSize), size)
assert.Len(t, files, testFileCount)
assert.Len(t, archives, testArchiveCount)
}