package config import ( "testing" ) func TestLoadDefaults(t *testing.T) { cfg, err := Load() if err != nil { t.Fatalf("Load: %v", err) } for _, tc := range []struct{ name, got, want string }{ {"Listen", cfg.Listen, ":8080"}, {"Namespace", cfg.Namespace, "repospawner"}, {"JobServiceAccount", cfg.JobServiceAccount, "repospawner"}, {"GiteaURL", cfg.GiteaURL, "https://git.unkin.net"}, {"TFGitRepo", cfg.TFGitRepo, "unkin/terraform-git"}, {"VaultAddr", cfg.VaultAddr, "https://vault.service.consul:8200"}, {"VaultK8sMount", cfg.VaultK8sMount, "k8s/au/syd1"}, {"VaultK8sRole", cfg.VaultK8sRole, "repospawner"}, {"GiteaCredsPath", cfg.GiteaCredsPath, "gitea/creds/repospawner"}, {"WoodpeckerServer", cfg.WoodpeckerServer, "https://ci.k8s.syd1.au.unkin.net"}, {"WoodpeckerTokenFile", cfg.WoodpeckerTokenFile, "/etc/repospawner/woodpecker/token"}, {"GroupsHeader", cfg.GroupsHeader, "X-Forwarded-Groups"}, } { if tc.got != tc.want { t.Errorf("%s = %q, want %q", tc.name, tc.got, tc.want) } } if len(cfg.AllowedGroups) != 1 { t.Errorf("AllowedGroups = %v", cfg.AllowedGroups) } } func TestLoadFailsClosed(t *testing.T) { cases := []struct { name string env map[string]string }{ {name: "empty group list", env: map[string]string{"REPOSPAWNER_ALLOWED_GROUPS": " , ,"}}, {name: "blank groups header", env: map[string]string{"REPOSPAWNER_GROUPS_HEADER": " "}}, {name: "non-http gitea url", env: map[string]string{"GITEA_URL": "git.unkin.net"}}, {name: "non-http vault addr", env: map[string]string{"VAULT_ADDR": "vault.service.consul:8200"}}, {name: "non-http woodpecker", env: map[string]string{"WOODPECKER_SERVER": "ci.unkin.net"}}, {name: "bad tfgit repo", env: map[string]string{"REPOSPAWNER_TFGIT_REPO": "terraform-git"}}, {name: "nested tfgit repo", env: map[string]string{"REPOSPAWNER_TFGIT_REPO": "a/b/c"}}, {name: "blank namespace", env: map[string]string{"REPOSPAWNER_NAMESPACE": " "}}, {name: "blank vault role", env: map[string]string{"REPOSPAWNER_VAULT_K8S_ROLE": " "}}, {name: "blank creds path", env: map[string]string{"REPOSPAWNER_GITEA_CREDS_PATH": " "}}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { for k, v := range tc.env { t.Setenv(k, v) } if _, err := Load(); err == nil { t.Fatalf("Load() with %v should have failed", tc.env) } }) } } func TestSplitRepo(t *testing.T) { owner, name, err := SplitRepo(" unkin/terraform-git ") if err != nil || owner != "unkin" || name != "terraform-git" { t.Fatalf("SplitRepo = %q %q %v", owner, name, err) } for _, bad := range []string{"", "unkin", "/name", "owner/", "a/b/c"} { if _, _, err := SplitRepo(bad); err == nil { t.Errorf("SplitRepo(%q) should have failed", bad) } } } func TestParseGroups(t *testing.T) { got := ParseGroups("a, b;c\nd e") want := []string{"a", "b", "c", "d", "e"} if len(got) != len(want) { t.Fatalf("ParseGroups = %v, want %v", got, want) } for i := range want { if got[i] != want[i] { t.Fatalf("ParseGroups = %v, want %v", got, want) } } if len(ParseGroups(" ,, ")) != 0 { t.Errorf("ParseGroups of separators only should be empty") } }