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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
//go:build test
package crawl
import (
"github.com/stretchr/testify/assert"
"os"
"path/filepath"
"strings"
"testing"
)
func TestParentDir(t *testing.T) {
input := "/var/lib"
parent := ParentDir(input)
assert.Equal(t, parent, "/var/")
}
func TestParentDir_TrailingSlash(t *testing.T) {
input := "/var/lib/"
parent := ParentDir(input)
assert.Equal(t, parent, "/var/")
}
func TestParentDir_ToRoot(t *testing.T) {
input := "/var/"
parent := ParentDir(input)
assert.Equal(t, parent, "/")
}
func TestParentDir_ToRoot_NoTrailingSlash(t *testing.T) {
input := "/var"
parent := ParentDir(input)
assert.Equal(t, parent, "/")
}
func TestParentDir_WithoutParent(t *testing.T) {
input := "/"
parent := ParentDir(input)
assert.Equal(t, parent, "/")
}
func TestLocations(t *testing.T) {
input := "/var/lib/uwu/asdf"
locs := Locations(input)
assert.Equal(t, locs, []string{"/var/lib/uwu/asdf", "/var/lib/uwu/", "/var/lib/", "/var/", "/"})
}
func TestLocations_WithDotPath(t *testing.T) {
input := "/root/./second/asdf/../third"
locs := Locations(input)
assert.Equal(t, locs, []string{"/root/second/third", "/root/second/", "/root/", "/"})
}
func TestLocations_HighestFirst(t *testing.T) {
input := "/one/two/three"
locs := Locations(input)
assert.Equal(t, locs[0], "/one/two/three")
}
func TestRichLocations(t *testing.T) {
dir := t.TempDir()
targetPath := filepath.Join(dir, "target")
linkPath := filepath.Join(dir, "link")
innerPath := filepath.Join(targetPath, "inner")
innerLinkPath := filepath.Join(linkPath, "inner")
err := os.Mkdir(targetPath, 0777)
assert.NoError(t, err)
err = os.Symlink(targetPath, linkPath)
assert.NoError(t, err)
err = os.Mkdir(innerPath, 0777)
result := RichLocations(innerLinkPath)
assert.NotNil(t, result)
var hasLink, hasTarget = false, false
for _, e := range result {
if strings.HasSuffix(e, "target/inner") {
hasTarget = true
continue
}
if strings.HasSuffix(e, "link/inner") {
hasLink = true
continue
}
}
if !hasLink {
t.Fatal("evaluated link subdirectories were not included")
}
if !hasTarget {
t.Fatal("original target subdirectories were not included")
}
}
|