files_test.go

 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}