cmd/gitbay-runner/config_test.go

v1.17.0
gitbay/cmd/gitbay-runner/config_test.go history · blame · raw

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}