1package getter
2
3import (
4	"os"
5	"path/filepath"
6	"runtime"
7	"testing"
8)
9
10func TestZipDecompressor(t *testing.T) {
11	cases := []TestDecompressCase{
12		{
13			"empty.zip",
14			false,
15			true,
16			nil,
17			"",
18			nil,
19		},
20
21		{
22			"single.zip",
23			false,
24			false,
25			nil,
26			"d3b07384d113edec49eaa6238ad5ff00",
27			nil,
28		},
29
30		{
31			"single.zip",
32			true,
33			false,
34			[]string{"file"},
35			"",
36			nil,
37		},
38
39		{
40			"multiple.zip",
41			true,
42			false,
43			[]string{"file1", "file2"},
44			"",
45			nil,
46		},
47
48		{
49			"multiple.zip",
50			false,
51			true,
52			nil,
53			"",
54			nil,
55		},
56
57		{
58			"subdir.zip",
59			true,
60			false,
61			[]string{"file1", "subdir/", "subdir/child"},
62			"",
63			nil,
64		},
65
66		{
67			"subdir_empty.zip",
68			true,
69			false,
70			[]string{"file1", "subdir/"},
71			"",
72			nil,
73		},
74
75		{
76			"subdir_missing_dir.zip",
77			true,
78			false,
79			[]string{"file1", "subdir/", "subdir/child"},
80			"",
81			nil,
82		},
83
84		// Tests that a zip can't contain references with "..".
85		{
86			"outside_parent.zip",
87			true,
88			true,
89			nil,
90			"",
91			nil,
92		},
93	}
94
95	for i, tc := range cases {
96		cases[i].Input = filepath.Join("./testdata", "decompress-zip", tc.Input)
97	}
98
99	TestDecompressor(t, new(ZipDecompressor), cases)
100}
101
102func TestDecompressZipPermissions(t *testing.T) {
103	d := new(ZipDecompressor)
104	input := "./test-fixtures/decompress-zip/permissions.zip"
105
106	var expected map[string]int
107	var masked int
108
109	if runtime.GOOS == "windows" {
110		expected = map[string]int{
111			"directory/public":  0666,
112			"directory/private": 0666,
113			"directory/exec":    0666,
114			"directory/setuid":  0666,
115		}
116		masked = 0666
117	} else {
118		expected = map[string]int{
119			"directory/public":  0666,
120			"directory/private": 0600,
121			"directory/exec":    0755,
122			"directory/setuid":  040000755,
123		}
124		masked = 0755
125	}
126
127	testDecompressorPermissions(t, d, input, expected, os.FileMode(0))
128
129	expected["directory/setuid"] = masked
130	testDecompressorPermissions(t, d, input, expected, os.FileMode(060000000))
131}
132