Skip to content
This repository was archived by the owner on Feb 11, 2025. It is now read-only.

Commit 452a24d

Browse files
committed
add absolute path mode for gzip
1 parent cd9bbfa commit 452a24d

File tree

2 files changed

+90
-17
lines changed

2 files changed

+90
-17
lines changed

archive/gzip/gzip_test.go

+90-13
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"io/ioutil"
88
"os"
99
"path/filepath"
10+
"strings"
1011
"testing"
1112

1213
"github.com/go-kit/kit/log"
@@ -19,12 +20,21 @@ var (
1920
testRoot = "testdata"
2021
testRootMounted = "testdata/mounted"
2122
testRootExtracted = "testdata/extracted"
23+
testAbsPattern = "testdata_absolute"
2224
)
2325

2426
func TestCreate(t *testing.T) {
2527
test.Ok(t, os.MkdirAll(testRootMounted, 0755))
2628
test.Ok(t, os.MkdirAll(testRootExtracted, 0755))
27-
t.Cleanup(func() { os.RemoveAll(testRoot) })
29+
30+
testAbs, err := ioutil.TempDir("", testAbsPattern)
31+
test.Ok(t, err)
32+
test.Equals(t, filepath.IsAbs(testAbs), true)
33+
34+
t.Cleanup(func() {
35+
os.RemoveAll(testRoot)
36+
os.RemoveAll(testAbs)
37+
})
2838

2939
for _, tc := range []struct {
3040
name string
@@ -44,7 +54,7 @@ func TestCreate(t *testing.T) {
4454
name: "non-existing mount paths",
4555
tgz: New(log.NewNopLogger(), testRootMounted, true, flate.DefaultCompression),
4656
srcs: []string{
47-
"iamnotexists",
57+
"idonotexist",
4858
"metoo",
4959
},
5060
written: 0,
@@ -53,7 +63,7 @@ func TestCreate(t *testing.T) {
5363
{
5464
name: "existing mount paths",
5565
tgz: New(log.NewNopLogger(), testRootMounted, true, flate.DefaultCompression),
56-
srcs: exampleFileTree(t, "gzip_create"),
66+
srcs: exampleFileTree(t, "gzip_create", testRootMounted),
5767
written: 43, // 3 x tmpfile in dir, 1 tmpfile
5868
err: nil,
5969
},
@@ -71,12 +81,30 @@ func TestCreate(t *testing.T) {
7181
written: 43,
7282
err: nil,
7383
},
84+
{
85+
name: "absolute mount paths",
86+
tgz: New(log.NewNopLogger(), testRootMounted, true, flate.DefaultCompression),
87+
srcs: exampleFileTree(t, "tar_create", testAbs),
88+
written: 43,
89+
err: nil,
90+
},
7491
} {
75-
tc := tc // NOTE: https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables
92+
tc := tc // NOTICE: https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables
7693
t.Run(tc.name, func(t *testing.T) {
7794
t.Parallel()
7895

7996
// Setup
97+
var absSrcs []string
98+
var relativeSrcs []string
99+
100+
for _, src := range tc.srcs {
101+
if strings.HasPrefix(src, "/") {
102+
absSrcs = append(absSrcs, src)
103+
} else {
104+
relativeSrcs = append(relativeSrcs, src)
105+
}
106+
}
107+
80108
dstDir, dstDirClean := test.CreateTempDir(t, "gzip_create_archives", testRootMounted)
81109
t.Cleanup(dstDirClean)
82110

@@ -91,30 +119,47 @@ func TestCreate(t *testing.T) {
91119
return
92120
}
93121

122+
// Test
123+
for _, src := range absSrcs {
124+
test.Ok(t, os.RemoveAll(src))
125+
}
126+
94127
test.Exists(t, archivePath)
95128
test.Assert(t, written == tc.written, "case %q: written bytes got %d want %v", tc.name, written, tc.written)
96129

97130
_, err = extract(tc.tgz, archivePath, extDir)
98131
test.Ok(t, err)
99-
test.EqualDirs(t, extDir, testRootMounted, tc.srcs)
132+
test.EqualDirs(t, extDir, testRootMounted, relativeSrcs)
133+
134+
for _, src := range absSrcs {
135+
test.Exists(t, src)
136+
}
100137
})
101138
}
102139
}
103140

104141
func TestExtract(t *testing.T) {
105142
test.Ok(t, os.MkdirAll(testRootMounted, 0755))
106143
test.Ok(t, os.MkdirAll(testRootExtracted, 0755))
107-
t.Cleanup(func() { os.RemoveAll(testRoot) })
144+
145+
testAbs, err := ioutil.TempDir("", testAbsPattern)
146+
test.Ok(t, err)
147+
test.Equals(t, filepath.IsAbs(testAbs), true)
148+
149+
t.Cleanup(func() {
150+
os.RemoveAll(testRoot)
151+
os.RemoveAll(testAbs)
152+
})
108153

109154
// Setup
110155
tgz := New(log.NewNopLogger(), testRootMounted, false, flate.DefaultCompression)
111156

112157
arcDir, arcDirClean := test.CreateTempDir(t, "gzip_extract_archive")
113158
t.Cleanup(arcDirClean)
114159

115-
files := exampleFileTree(t, "gzip_extract")
160+
files := exampleFileTree(t, "gzip_extract", testRootMounted)
116161
archivePath := filepath.Join(arcDir, "test.tar.gz")
117-
_, err := create(tgz, files, archivePath)
162+
_, err = create(tgz, files, archivePath)
118163
test.Ok(t, err)
119164

120165
nestedFiles := exampleNestedFileTree(t, "gzip_extract_nested")
@@ -134,6 +179,11 @@ func TestExtract(t *testing.T) {
134179
badArchivePath := filepath.Join(arcDir, "bad_test.tar.gz")
135180
test.Ok(t, ioutil.WriteFile(badArchivePath, []byte("hello\ndrone\n"), 0644))
136181

182+
filesAbs := exampleFileTree(t, ".gzip_extract_absolute", testAbs)
183+
archiveAbsPath := filepath.Join(arcDir, "test_absolute.tar.gz")
184+
_, err = create(tgz, filesAbs, archiveAbsPath)
185+
test.Ok(t, err)
186+
137187
for _, tc := range []struct {
138188
name string
139189
tgz *Archive
@@ -198,22 +248,49 @@ func TestExtract(t *testing.T) {
198248
written: 43,
199249
err: nil,
200250
},
251+
{
252+
name: "absolute mount paths",
253+
tgz: New(log.NewNopLogger(), testRootMounted, true, flate.DefaultCompression),
254+
archivePath: archiveAbsPath,
255+
srcs: filesAbs,
256+
written: 43,
257+
err: nil,
258+
},
201259
} {
202260
tc := tc // NOTE: https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables
203261
t.Run(tc.name, func(t *testing.T) {
204262
t.Parallel()
205263

264+
// Setup
265+
var absSrcs []string
266+
var relativeSrcs []string
267+
268+
for _, src := range tc.srcs {
269+
if strings.HasPrefix(src, "/") {
270+
absSrcs = append(absSrcs, src)
271+
} else {
272+
relativeSrcs = append(relativeSrcs, src)
273+
}
274+
}
275+
206276
dstDir, dstDirClean := test.CreateTempDir(t, "gzip_extract_"+tc.name, testRootExtracted)
207277
t.Cleanup(dstDirClean)
208-
278+
// Run
279+
for _, src := range absSrcs {
280+
test.Ok(t, os.RemoveAll(src))
281+
}
209282
written, err := extract(tc.tgz, tc.archivePath, dstDir)
210283
if err != nil {
211284
test.Expected(t, err, tc.err)
212285
return
213286
}
214287

288+
// Test
215289
test.Assert(t, written == tc.written, "case %q: written bytes got %d want %v", tc.name, written, tc.written)
216-
test.EqualDirs(t, dstDir, testRootMounted, tc.srcs)
290+
for _, src := range absSrcs {
291+
test.Exists(t, src)
292+
}
293+
test.EqualDirs(t, dstDir, testRootMounted, relativeSrcs)
217294
})
218295
}
219296
}
@@ -272,11 +349,11 @@ func extract(a *Archive, src string, dst string) (int64, error) {
272349

273350
// Fixtures
274351

275-
func exampleFileTree(t *testing.T, name string) []string {
276-
file, fileClean := test.CreateTempFile(t, name, []byte("hello\ndrone!\n"), testRootMounted) // 13 bytes
352+
func exampleFileTree(t *testing.T, name string, in string) []string {
353+
file, fileClean := test.CreateTempFile(t, name, []byte("hello\ndrone!\n"), in) // 13 bytes
277354
t.Cleanup(fileClean)
278355

279-
dir, dirClean := test.CreateTempFilesInDir(t, name, []byte("hello\ngo!\n"), testRootMounted) // 10 bytes
356+
dir, dirClean := test.CreateTempFilesInDir(t, name, []byte("hello\ngo!\n"), in) // 10 bytes
280357
t.Cleanup(dirClean)
281358

282359
return []string{file, dir}

archive/tar/tar_test.go

-4
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@ func TestCreate(t *testing.T) {
126126

127127
_, err = extract(tc.ta, archivePath, extDir)
128128
test.Ok(t, err)
129-
130129
test.EqualDirs(t, extDir, testRootMounted, relativeSrcs)
131130

132131
for _, src := range absSrcs {
@@ -299,13 +298,10 @@ func TestExtract(t *testing.T) {
299298

300299
// Test
301300
test.Assert(t, written == tc.written, "case %q: written bytes got %d want %v", tc.name, written, tc.written)
302-
303301
for _, src := range absSrcs {
304302
test.Exists(t, src)
305303
}
306-
307304
test.EqualDirs(t, dstDir, testRootMounted, relativeSrcs)
308-
309305
})
310306
}
311307
}

0 commit comments

Comments
 (0)