465fc29db9
This is an implementation where findFiles will follow symlinks and keep track of paths already followed. No paths will be evaluated more than once, therefore preventing recursive link evaluation. Commit includes test cases and test data
90 lines
2.6 KiB
Go
90 lines
2.6 KiB
Go
package bindata
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestSafeFunctionName(t *testing.T) {
|
|
var knownFuncs = make(map[string]int)
|
|
name1 := safeFunctionName("foo/bar", knownFuncs)
|
|
name2 := safeFunctionName("foo_bar", knownFuncs)
|
|
if name1 == name2 {
|
|
t.Errorf("name collision")
|
|
}
|
|
}
|
|
|
|
func TestFindFiles(t *testing.T) {
|
|
var toc []Asset
|
|
var knownFuncs = make(map[string]int)
|
|
var visitedPaths = make(map[string]bool)
|
|
err := findFiles("testdata/dupname", "testdata/dupname", true, &toc, []*regexp.Regexp{}, knownFuncs, visitedPaths)
|
|
if err != nil {
|
|
t.Errorf("expected to be no error: %+v", err)
|
|
}
|
|
if toc[0].Func == toc[1].Func {
|
|
t.Errorf("name collision")
|
|
}
|
|
}
|
|
|
|
func TestFindFilesWithSymlinks(t *testing.T) {
|
|
var tocSrc []Asset
|
|
var tocTarget []Asset
|
|
|
|
var knownFuncs = make(map[string]int)
|
|
var visitedPaths = make(map[string]bool)
|
|
err := findFiles("testdata/symlinkSrc", "testdata/symlinkSrc", true, &tocSrc, []*regexp.Regexp{}, knownFuncs, visitedPaths)
|
|
if err != nil {
|
|
t.Errorf("expected to be no error: %+v", err)
|
|
}
|
|
|
|
knownFuncs = make(map[string]int)
|
|
visitedPaths = make(map[string]bool)
|
|
err = findFiles("testdata/symlinkParent", "testdata/symlinkParent", true, &tocTarget, []*regexp.Regexp{}, knownFuncs, visitedPaths)
|
|
if err != nil {
|
|
t.Errorf("expected to be no error: %+v", err)
|
|
}
|
|
|
|
if len(tocSrc) != len(tocTarget) {
|
|
t.Errorf("Symlink source and target should have the same number of assets. Expected %d got %d", len(tocTarget), len(tocSrc))
|
|
} else {
|
|
for i, _ := range tocSrc {
|
|
targetFunc := strings.TrimPrefix(tocTarget[i].Func, "symlinktarget_")
|
|
if tocSrc[i].Func != targetFunc {
|
|
t.Errorf("Symlink source and target produced different function lists. Expected %s to be %s", targetFunc, tocSrc[i].Func)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFindFilesWithRecursiveSymlinks(t *testing.T) {
|
|
var toc []Asset
|
|
|
|
var knownFuncs = make(map[string]int)
|
|
var visitedPaths = make(map[string]bool)
|
|
err := findFiles("testdata/symlinkRecursiveParent", "testdata/symlinkRecursiveParent", true, &toc, []*regexp.Regexp{}, knownFuncs, visitedPaths)
|
|
if err != nil {
|
|
t.Errorf("expected to be no error: %+v", err)
|
|
}
|
|
|
|
if len(toc) != 1 {
|
|
t.Errorf("Only one asset should have been found. Got %d: %v", len(toc), toc)
|
|
}
|
|
}
|
|
|
|
func TestFindFilesWithSymlinkedFile(t *testing.T) {
|
|
var toc []Asset
|
|
|
|
var knownFuncs = make(map[string]int)
|
|
var visitedPaths = make(map[string]bool)
|
|
err := findFiles("testdata/symlinkFile", "testdata/symlinkFile", true, &toc, []*regexp.Regexp{}, knownFuncs, visitedPaths)
|
|
if err != nil {
|
|
t.Errorf("expected to be no error: %+v", err)
|
|
}
|
|
|
|
if len(toc) != 1 {
|
|
t.Errorf("Only one asset should have been found. Got %d: %v", len(toc), toc)
|
|
}
|
|
}
|