162 lines
3.8 KiB
Go
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)
|
||
|
})
|
||
|
}
|
||
|
}
|