1package config
2
3import (
4 "os"
5 "path/filepath"
6 "reflect"
7 "testing"
8)
9
10func TestDiscoverFiles_ConfigFileOverride(t *testing.T) {
11 tmpDir := t.TempDir()
12 homeDir := filepath.Join(tmpDir, "home")
13 if err := os.MkdirAll(homeDir, 0o755); err != nil {
14 t.Fatalf("creating temp HOME: %v", err)
15 }
16
17 t.Setenv("HOME", homeDir)
18 t.Setenv("KELD_CONFIG_FILE", "~/only.toml")
19 t.Setenv("KELD_CONFIG_PATHS", filepath.Join(tmpDir, "extras", "*.toml"))
20
21 got := DiscoverFiles()
22 want := []string{filepath.Join(homeDir, "only.toml")}
23
24 if !reflect.DeepEqual(got, want) {
25 t.Fatalf("DiscoverFiles() mismatch: got %#v, want %#v", got, want)
26 }
27}
28
29func TestDiscoverFiles_Order(t *testing.T) {
30 tmpDir := t.TempDir()
31 dirA := filepath.Join(tmpDir, "a")
32 dirB := filepath.Join(tmpDir, "b")
33 extraDir := filepath.Join(tmpDir, "extra")
34 if err := os.MkdirAll(filepath.Join(dirA, "conf.d"), 0o755); err != nil {
35 t.Fatalf("mkdir dirA conf.d: %v", err)
36 }
37 if err := os.MkdirAll(filepath.Join(dirB, "conf.d"), 0o755); err != nil {
38 t.Fatalf("mkdir dirB conf.d: %v", err)
39 }
40 if err := os.MkdirAll(extraDir, 0o755); err != nil {
41 t.Fatalf("mkdir extraDir: %v", err)
42 }
43
44 for _, path := range []string{
45 filepath.Join(dirA, "conf.d", "z.toml"),
46 filepath.Join(dirA, "conf.d", "a.toml"),
47 filepath.Join(dirB, "conf.d", "c.toml"),
48 filepath.Join(dirB, "conf.d", "b.toml"),
49 filepath.Join(extraDir, "later.toml"),
50 filepath.Join(extraDir, "earlier.toml"),
51 } {
52 if err := os.WriteFile(path, []byte("# fixture"), 0o600); err != nil {
53 t.Fatalf("writing %s: %v", path, err)
54 }
55 }
56
57 explicit := filepath.Join(tmpDir, "explicit.toml")
58 if err := os.WriteFile(explicit, []byte("# explicit"), 0o600); err != nil {
59 t.Fatalf("writing explicit file: %v", err)
60 }
61
62 originalDirs := DefaultConfigDirs
63 DefaultConfigDirs = []string{dirA, dirB}
64 t.Cleanup(func() {
65 DefaultConfigDirs = originalDirs
66 })
67
68 t.Setenv("KELD_CONFIG_FILE", "")
69 t.Setenv("KELD_CONFIG_PATHS", filepath.Join(extraDir, "*.toml")+":"+explicit)
70
71 got := DiscoverFiles()
72 want := []string{
73 filepath.Join(dirA, "config.toml"),
74 filepath.Join(dirA, "conf.d", "a.toml"),
75 filepath.Join(dirA, "conf.d", "z.toml"),
76 filepath.Join(dirB, "config.toml"),
77 filepath.Join(dirB, "conf.d", "b.toml"),
78 filepath.Join(dirB, "conf.d", "c.toml"),
79 filepath.Join(extraDir, "earlier.toml"),
80 filepath.Join(extraDir, "later.toml"),
81 explicit,
82 }
83
84 if !reflect.DeepEqual(got, want) {
85 t.Fatalf("DiscoverFiles() ordering mismatch: got %#v, want %#v", got, want)
86 }
87}