mirror of
				https://github.com/traefik/traefik.git
				synced 2025-11-04 02:11:15 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			163 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package cli
 | 
						|
 | 
						|
import (
 | 
						|
	"io/ioutil"
 | 
						|
	"os"
 | 
						|
	"path/filepath"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
)
 | 
						|
 | 
						|
func TestFinder_Find(t *testing.T) {
 | 
						|
	configFile, err := ioutil.TempFile("", "traefik-file-finder-test-*.toml")
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	defer func() {
 | 
						|
		_ = os.Remove(configFile.Name())
 | 
						|
	}()
 | 
						|
 | 
						|
	dir, err := ioutil.TempDir("", "traefik-file-finder-test")
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	defer func() {
 | 
						|
		_ = os.RemoveAll(dir)
 | 
						|
	}()
 | 
						|
 | 
						|
	fooFile, err := os.Create(filepath.Join(dir, "foo.toml"))
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	_, err = os.Create(filepath.Join(dir, "bar.toml"))
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	type expected struct {
 | 
						|
		error bool
 | 
						|
		path  string
 | 
						|
	}
 | 
						|
 | 
						|
	testCases := []struct {
 | 
						|
		desc       string
 | 
						|
		basePaths  []string
 | 
						|
		configFile string
 | 
						|
		expected   expected
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			desc:       "not found: no config file",
 | 
						|
			configFile: "",
 | 
						|
			expected:   expected{path: ""},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:       "not found: no config file, no other paths available",
 | 
						|
			configFile: "",
 | 
						|
			basePaths:  []string{"/my/path/traefik", "$HOME/my/path/traefik", "./my-traefik"},
 | 
						|
			expected:   expected{path: ""},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:       "not found: with non existing config file",
 | 
						|
			configFile: "/my/path/config.toml",
 | 
						|
			expected:   expected{path: ""},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:       "found: with config file",
 | 
						|
			configFile: configFile.Name(),
 | 
						|
			expected:   expected{path: configFile.Name()},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:       "found: no config file, first base path",
 | 
						|
			configFile: "",
 | 
						|
			basePaths:  []string{filepath.Join(dir, "foo"), filepath.Join(dir, "bar")},
 | 
						|
			expected:   expected{path: fooFile.Name()},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:       "found: no config file, base path",
 | 
						|
			configFile: "",
 | 
						|
			basePaths:  []string{"/my/path/traefik", "$HOME/my/path/traefik", filepath.Join(dir, "foo")},
 | 
						|
			expected:   expected{path: fooFile.Name()},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:       "found: config file over base path",
 | 
						|
			configFile: configFile.Name(),
 | 
						|
			basePaths:  []string{filepath.Join(dir, "foo"), filepath.Join(dir, "bar")},
 | 
						|
			expected:   expected{path: configFile.Name()},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, test := range testCases {
 | 
						|
		t.Run(test.desc, func(t *testing.T) {
 | 
						|
 | 
						|
			finder := Finder{
 | 
						|
				BasePaths:  test.basePaths,
 | 
						|
				Extensions: []string{"toml", "yaml", "yml"},
 | 
						|
			}
 | 
						|
 | 
						|
			path, err := finder.Find(test.configFile)
 | 
						|
 | 
						|
			if test.expected.error {
 | 
						|
				require.Error(t, err)
 | 
						|
			} else {
 | 
						|
				require.NoError(t, err)
 | 
						|
				assert.Equal(t, test.expected.path, path)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestFinder_getPaths(t *testing.T) {
 | 
						|
	testCases := []struct {
 | 
						|
		desc       string
 | 
						|
		basePaths  []string
 | 
						|
		configFile string
 | 
						|
		expected   []string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			desc:       "no config file",
 | 
						|
			basePaths:  []string{"/etc/traefik/traefik", "$HOME/.config/traefik", "./traefik"},
 | 
						|
			configFile: "",
 | 
						|
			expected: []string{
 | 
						|
				"/etc/traefik/traefik.toml",
 | 
						|
				"/etc/traefik/traefik.yaml",
 | 
						|
				"/etc/traefik/traefik.yml",
 | 
						|
				"$HOME/.config/traefik.toml",
 | 
						|
				"$HOME/.config/traefik.yaml",
 | 
						|
				"$HOME/.config/traefik.yml",
 | 
						|
				"./traefik.toml",
 | 
						|
				"./traefik.yaml",
 | 
						|
				"./traefik.yml",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:       "with config file",
 | 
						|
			basePaths:  []string{"/etc/traefik/traefik", "$HOME/.config/traefik", "./traefik"},
 | 
						|
			configFile: "/my/path/config.toml",
 | 
						|
			expected: []string{
 | 
						|
				"/my/path/config.toml",
 | 
						|
				"/etc/traefik/traefik.toml",
 | 
						|
				"/etc/traefik/traefik.yaml",
 | 
						|
				"/etc/traefik/traefik.yml",
 | 
						|
				"$HOME/.config/traefik.toml",
 | 
						|
				"$HOME/.config/traefik.yaml",
 | 
						|
				"$HOME/.config/traefik.yml",
 | 
						|
				"./traefik.toml",
 | 
						|
				"./traefik.yaml",
 | 
						|
				"./traefik.yml",
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, test := range testCases {
 | 
						|
		test := test
 | 
						|
		t.Run(test.desc, func(t *testing.T) {
 | 
						|
			t.Parallel()
 | 
						|
 | 
						|
			finder := Finder{
 | 
						|
				BasePaths:  test.basePaths,
 | 
						|
				Extensions: []string{"toml", "yaml", "yml"},
 | 
						|
			}
 | 
						|
			paths := finder.getPaths(test.configFile)
 | 
						|
 | 
						|
			assert.Equal(t, test.expected, paths)
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |