This repository has been archived by the owner on Sep 21, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommon_test.go
71 lines (64 loc) · 1.96 KB
/
common_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
67
68
69
70
71
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
package fs
import (
"os"
"path/filepath"
"strings"
"testing"
"github.com/otiai10/copy"
)
func tempDir(t *testing.T) string {
t.Helper()
dir, err := os.MkdirTemp("", "kivik-fsdb-")
if err != nil {
t.Fatal(err)
}
return dir
}
func rmdir(t *testing.T, dir string) {
t.Helper()
if err := os.RemoveAll(dir); err != nil {
t.Fatal(err)
}
}
// copyDir recursively copies the contents of path to a new temporary dir, whose
// path is returned. The depth argument controls how deeply path is placed into
// the temp dir. Examples:
//
// copyDir(t, "/foo/bar/baz", 0) // copies /foo/bar/baz/* to /tmp-XXX/*
// copyDir(t, "/foo/bar/baz", 1) // copies /foo/bar/baz/* to /tmp-XXX/baz/*
// copyDir(t, "/foo/bar/baz", 3) // copies /foo/bar/baz/* to /tmp-XXX/foo/bar/baz/*
func copyDir(t *testing.T, source string, depth int) string { // nolint: unparam
t.Helper()
tmpdir := tempDir(t)
target := tmpdir
if depth > 0 {
parts := strings.Split(source, string(filepath.Separator))
if len(parts) < depth {
t.Fatalf("Depth of %d specified, but path only has %d parts", depth, len(parts))
}
target = filepath.Join(append([]string{tmpdir}, parts[len(parts)-depth:]...)...)
if err := os.MkdirAll(target, 0o777); err != nil {
t.Fatal(err)
}
}
if err := copy.Copy(source, target); err != nil {
t.Fatal(err)
}
return tmpdir
}
func cleanTmpdir(path string) func() error {
return func() error {
return os.RemoveAll(path)
}
}