summaryrefslogtreecommitdiff
path: root/crawl/crawl_test.go
blob: 27fc0e8c6a7ae2fe71eb2d269f60ef6bdd298cf8 (plain)
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")
	}
}