diff options
Diffstat (limited to 'utils/config_test.go')
-rw-r--r-- | utils/config_test.go | 174 |
1 files changed, 11 insertions, 163 deletions
diff --git a/utils/config_test.go b/utils/config_test.go index f57add303..75bbc420f 100644 --- a/utils/config_test.go +++ b/utils/config_test.go @@ -46,172 +46,20 @@ func TestTimezoneConfig(t *testing.T) { } func TestFindConfigFile(t *testing.T) { - t.Run("config.json in current working directory, not inside config/", func(t *testing.T) { - // Force a unique working directory - cwd, err := ioutil.TempDir("", "") - require.NoError(t, err) - defer os.RemoveAll(cwd) - - prevDir, err := os.Getwd() - require.NoError(t, err) - defer os.Chdir(prevDir) - os.Chdir(cwd) - - configJson, err := filepath.Abs("config.json") - require.NoError(t, err) - require.NoError(t, ioutil.WriteFile(configJson, []byte("{}"), 0600)) - - // Relative paths end up getting symlinks fully resolved. - configJsonResolved, err := filepath.EvalSymlinks(configJson) - require.NoError(t, err) - - assert.Equal(t, configJsonResolved, FindConfigFile("config.json")) - }) + dir, err := ioutil.TempDir("", "") + require.NoError(t, err) + defer os.RemoveAll(dir) - t.Run("config/config.json from various paths", func(t *testing.T) { - // Create the following directory structure: - // tmpDir1/ - // config/ - // config.json - // tmpDir2/ - // tmpDir3/ - // tmpDir4/ - // tmpDir5/ - tmpDir1, err := ioutil.TempDir("", "") - require.NoError(t, err) - defer os.RemoveAll(tmpDir1) - - err = os.Mkdir(filepath.Join(tmpDir1, "config"), 0700) - require.NoError(t, err) - - tmpDir2, err := ioutil.TempDir(tmpDir1, "") - require.NoError(t, err) - - tmpDir3, err := ioutil.TempDir(tmpDir2, "") - require.NoError(t, err) - - tmpDir4, err := ioutil.TempDir(tmpDir3, "") - require.NoError(t, err) - - tmpDir5, err := ioutil.TempDir(tmpDir4, "") - require.NoError(t, err) - - configJson := filepath.Join(tmpDir1, "config", "config.json") - require.NoError(t, ioutil.WriteFile(configJson, []byte("{}"), 0600)) - - // Relative paths end up getting symlinks fully resolved, so use this below as necessary. - configJsonResolved, err := filepath.EvalSymlinks(configJson) - require.NoError(t, err) - - testCases := []struct { - Description string - Cwd *string - FileName string - Expected string - }{ - { - "absolute path to config.json", - nil, - configJson, - configJson, - }, - { - "absolute path to config.json from directory containing config.json", - &tmpDir1, - configJson, - configJson, - }, - { - "relative path to config.json from directory containing config.json", - &tmpDir1, - "config.json", - configJsonResolved, - }, - { - "subdirectory of directory containing config.json", - &tmpDir2, - "config.json", - configJsonResolved, - }, - { - "twice-nested subdirectory of directory containing config.json", - &tmpDir3, - "config.json", - configJsonResolved, - }, - { - "thrice-nested subdirectory of directory containing config.json", - &tmpDir4, - "config.json", - configJsonResolved, - }, - { - "can't find from four nesting levels deep", - &tmpDir5, - "config.json", - "", - }, - } + path := filepath.Join(dir, "config.json") + require.NoError(t, ioutil.WriteFile(path, []byte("{}"), 0600)) - for _, testCase := range testCases { - t.Run(testCase.Description, func(t *testing.T) { - if testCase.Cwd != nil { - prevDir, err := os.Getwd() - require.NoError(t, err) - defer os.Chdir(prevDir) - os.Chdir(*testCase.Cwd) - } - - assert.Equal(t, testCase.Expected, FindConfigFile(testCase.FileName)) - }) - } - }) - - t.Run("config/config.json relative to executable", func(t *testing.T) { - osExecutable, err := os.Executable() - require.NoError(t, err) - osExecutableDir := filepath.Dir(osExecutable) - - // Force a working directory different than the executable. - cwd, err := ioutil.TempDir("", "") - require.NoError(t, err) - defer os.RemoveAll(cwd) - - prevDir, err := os.Getwd() - require.NoError(t, err) - defer os.Chdir(prevDir) - os.Chdir(cwd) - - testCases := []struct { - Description string - RelativePath string - }{ - { - "config/config.json", - ".", - }, - { - "../config/config.json", - "../", - }, - } + assert.Equal(t, path, FindConfigFile(path)) - for _, testCase := range testCases { - t.Run(testCase.Description, func(t *testing.T) { - // Install the config in config/config.json relative to the executable - configJson := filepath.Join(osExecutableDir, testCase.RelativePath, "config", "config.json") - require.NoError(t, os.Mkdir(filepath.Dir(configJson), 0700)) - require.NoError(t, ioutil.WriteFile(configJson, []byte("{}"), 0600)) - defer os.RemoveAll(filepath.Dir(configJson)) - - // Relative paths end up getting symlinks fully resolved. - configJsonResolved, err := filepath.EvalSymlinks(configJson) - require.NoError(t, err) - - assert.Equal(t, configJsonResolved, FindConfigFile("config.json")) - }) - } - }) + prevDir, err := os.Getwd() + require.NoError(t, err) + defer os.Chdir(prevDir) + os.Chdir(dir) + assert.Equal(t, path, FindConfigFile(path)) } func TestConfigFromEnviroVars(t *testing.T) { |