traefik/pkg/cli/file_finder_test.go
2019-09-26 11:00:06 +02:00

162 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)
})
}
}