cmd/gitbay-runner/config_test.go
84 lines · 2519 bytes
1package main
2
3import (
4 "flag"
5 "os"
6 "path/filepath"
7 "testing"
8)
9
10// A config file sets the flags' values; a flag on the command line wins.
11func TestConfigFileFeedsFlagsAndFlagsOverride(t *testing.T) {
12 dir := t.TempDir()
13 path := filepath.Join(dir, "config.toml")
14 os.WriteFile(path, []byte("remote = \"git@example.test\"\npoll = \"9s\"\nuntrusted = true\nidentity = \"/k\"\njobs = 2\n"), 0o600)
15
16 values, found, err := loadConfig(path)
17 if err != nil || !found {
18 t.Fatalf("loadConfig: found=%v err=%v", found, err)
19 }
20 fs := flag.NewFlagSet("t", flag.ContinueOnError)
21 remote := fs.String("remote", "git@gitbay.org", "")
22 poll := fs.Duration("poll", 0, "")
23 untrusted := fs.Bool("untrusted", false, "")
24 identity := fs.String("identity", "", "")
25 jobs := fs.Int("jobs", 1, "")
26 if err := applyConfig(fs, values); err != nil {
27 t.Fatal(err)
28 }
29 if err := fs.Parse([]string{"-poll", "3s"}); err != nil {
30 t.Fatal(err)
31 }
32 if *remote != "git@example.test" || poll.String() != "3s" || !*untrusted || *identity != "/k" || *jobs != 2 {
33 t.Fatalf("remote=%s poll=%s untrusted=%v identity=%s jobs=%d", *remote, poll, *untrusted, *identity, *jobs)
34 }
35 if _, found, err := loadConfig(filepath.Join(dir, "missing.toml")); found || err != nil {
36 t.Fatalf("missing file: found=%v err=%v", found, err)
37 }
38 if _, _, err := loadConfig(path); err != nil {
39 t.Fatal(err)
40 }
41 os.WriteFile(path, []byte("nonsense = \"x\"\n"), 0o600)
42 if _, _, err := loadConfig(path); err == nil {
43 t.Fatal("an unknown key was accepted")
44 }
45}
46
47func TestConfigPathFromArgs(t *testing.T) {
48 for _, tc := range []struct {
49 args []string
50 want string
51 }{
52 {nil, "/def"},
53 {[]string{"-once"}, "/def"},
54 {[]string{"-config", "/a"}, "/a"},
55 {[]string{"--config", "/b", "-once"}, "/b"},
56 {[]string{"-config=/c"}, "/c"},
57 } {
58 if got := configPathFromArgs(tc.args, "/def"); got != tc.want {
59 t.Errorf("%v: got %s want %s", tc.args, got, tc.want)
60 }
61 }
62}
63
64func TestConfigDirHonoursXDG(t *testing.T) {
65 t.Setenv("XDG_CONFIG_HOME", "/x")
66 if got := configDir(); got != "/x/gitbay-runner" {
67 t.Fatalf("got %s", got)
68 }
69 t.Setenv("XDG_CONFIG_HOME", "")
70 t.Setenv("HOME", "/h")
71 if got := configDir(); got != "/h/.config/gitbay-runner" {
72 t.Fatalf("got %s", got)
73 }
74}
75
76func TestIdentityOpts(t *testing.T) {
77 if got := identityOpts(""); got != nil {
78 t.Fatalf("empty identity produced %v", got)
79 }
80 got := identityOpts("/k")
81 if len(got) != 4 || got[0] != "-i" || got[1] != "/k" || got[3] != "IdentitiesOnly=yes" {
82 t.Fatalf("got %v", got)
83 }
84}