91 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
package globpath
 | 
						|
 | 
						|
import (
 | 
						|
	"os"
 | 
						|
	"runtime"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
)
 | 
						|
 | 
						|
func TestCompileAndMatch(t *testing.T) {
 | 
						|
	dir := getTestdataDir()
 | 
						|
	// test super asterisk
 | 
						|
	g1, err := Compile(dir + "/**")
 | 
						|
	require.NoError(t, err)
 | 
						|
	// test single asterisk
 | 
						|
	g2, err := Compile(dir + "/*.log")
 | 
						|
	require.NoError(t, err)
 | 
						|
	// test no meta characters (file exists)
 | 
						|
	g3, err := Compile(dir + "/log1.log")
 | 
						|
	require.NoError(t, err)
 | 
						|
	// test file that doesn't exist
 | 
						|
	g4, err := Compile(dir + "/i_dont_exist.log")
 | 
						|
	require.NoError(t, err)
 | 
						|
	// test super asterisk that doesn't exist
 | 
						|
	g5, err := Compile(dir + "/dir_doesnt_exist/**")
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	matches := g1.Match()
 | 
						|
	assert.Len(t, matches, 6)
 | 
						|
	matches = g2.Match()
 | 
						|
	assert.Len(t, matches, 2)
 | 
						|
	matches = g3.Match()
 | 
						|
	assert.Len(t, matches, 1)
 | 
						|
	matches = g4.Match()
 | 
						|
	assert.Len(t, matches, 0)
 | 
						|
	matches = g5.Match()
 | 
						|
	assert.Len(t, matches, 0)
 | 
						|
}
 | 
						|
 | 
						|
func TestFindRootDir(t *testing.T) {
 | 
						|
	tests := []struct {
 | 
						|
		input  string
 | 
						|
		output string
 | 
						|
	}{
 | 
						|
		{"/var/log/telegraf.conf", "/var/log"},
 | 
						|
		{"/home/**", "/home"},
 | 
						|
		{"/home/*/**", "/home"},
 | 
						|
		{"/lib/share/*/*/**.txt", "/lib/share"},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, test := range tests {
 | 
						|
		actual := findRootDir(test.input)
 | 
						|
		assert.Equal(t, test.output, actual)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestFindNestedTextFile(t *testing.T) {
 | 
						|
	dir := getTestdataDir()
 | 
						|
	// test super asterisk
 | 
						|
	g1, err := Compile(dir + "/**.txt")
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	matches := g1.Match()
 | 
						|
	assert.Len(t, matches, 1)
 | 
						|
}
 | 
						|
 | 
						|
func getTestdataDir() string {
 | 
						|
	_, filename, _, _ := runtime.Caller(1)
 | 
						|
	return strings.Replace(filename, "globpath_test.go", "testdata", 1)
 | 
						|
}
 | 
						|
 | 
						|
func TestMatch_ErrPermission(t *testing.T) {
 | 
						|
	tests := []struct {
 | 
						|
		input    string
 | 
						|
		expected map[string]os.FileInfo
 | 
						|
	}{
 | 
						|
		{"/root/foo", map[string]os.FileInfo{}},
 | 
						|
		{"/root/f*", map[string]os.FileInfo{}},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, test := range tests {
 | 
						|
		glob, err := Compile(test.input)
 | 
						|
		require.NoError(t, err)
 | 
						|
		actual := glob.Match()
 | 
						|
		require.Equal(t, test.expected, actual)
 | 
						|
	}
 | 
						|
}
 |