13647: Use cluster config instead of custom keepstore config.
[arvados.git] / lib / config / cmd_test.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package config
6
7 import (
8         "bytes"
9         "io"
10         "io/ioutil"
11         "os"
12
13         "git.curoverse.com/arvados.git/lib/cmd"
14         check "gopkg.in/check.v1"
15 )
16
17 var _ = check.Suite(&CommandSuite{})
18
19 var (
20         // Commands must satisfy cmd.Handler interface
21         _ cmd.Handler = dumpCommand{}
22         _ cmd.Handler = checkCommand{}
23 )
24
25 type CommandSuite struct{}
26
27 func (s *CommandSuite) TestBadArg(c *check.C) {
28         var stderr bytes.Buffer
29         code := DumpCommand.RunCommand("arvados config-dump", []string{"-badarg"}, bytes.NewBuffer(nil), bytes.NewBuffer(nil), &stderr)
30         c.Check(code, check.Equals, 2)
31         c.Check(stderr.String(), check.Matches, `(?ms)flag provided but not defined: -badarg\nUsage:\n.*`)
32 }
33
34 func (s *CommandSuite) TestEmptyInput(c *check.C) {
35         var stdout, stderr bytes.Buffer
36         code := DumpCommand.RunCommand("arvados config-dump", []string{"-config", "-"}, &bytes.Buffer{}, &stdout, &stderr)
37         c.Check(code, check.Equals, 1)
38         c.Check(stderr.String(), check.Matches, `config does not define any clusters\n`)
39 }
40
41 func (s *CommandSuite) TestCheckNoDeprecatedKeys(c *check.C) {
42         var stdout, stderr bytes.Buffer
43         in := `
44 Clusters:
45  z1234:
46   API:
47     MaxItemsPerResponse: 1234
48   PostgreSQL:
49     Connection:
50       sslmode: require
51   Services:
52     RailsAPI:
53       InternalURLs:
54         "http://0.0.0.0:8000": {}
55   Workbench:
56     UserProfileFormFields:
57       color:
58         Type: select
59         Options:
60           fuchsia: {}
61     ApplicationMimetypesWithViewIcon:
62       whitespace: {}
63 `
64         code := CheckCommand.RunCommand("arvados config-check", []string{"-config", "-"}, bytes.NewBufferString(in), &stdout, &stderr)
65         c.Check(code, check.Equals, 0)
66         c.Check(stdout.String(), check.Equals, "")
67         c.Check(stderr.String(), check.Equals, "")
68 }
69
70 func (s *CommandSuite) TestCheckDeprecatedKeys(c *check.C) {
71         var stdout, stderr bytes.Buffer
72         in := `
73 Clusters:
74  z1234:
75   RequestLimits:
76     MaxItemsPerResponse: 1234
77 `
78         code := CheckCommand.RunCommand("arvados config-check", []string{"-config", "-"}, bytes.NewBufferString(in), &stdout, &stderr)
79         c.Check(code, check.Equals, 1)
80         c.Check(stdout.String(), check.Matches, `(?ms).*\n\- +.*MaxItemsPerResponse: 1000\n\+ +MaxItemsPerResponse: 1234\n.*`)
81 }
82
83 func (s *CommandSuite) TestCheckOldKeepstoreConfigFile(c *check.C) {
84         f, err := ioutil.TempFile("", "")
85         c.Assert(err, check.IsNil)
86         defer os.Remove(f.Name())
87
88         io.WriteString(f, "Listen: :12345\nDebug: true\n")
89
90         var stdout, stderr bytes.Buffer
91         in := `
92 Clusters:
93  z1234:
94   SystemLogs:
95     LogLevel: info
96 `
97         code := CheckCommand.RunCommand("arvados config-check", []string{"-config", "-", "-legacy-keepstore-config", f.Name()}, bytes.NewBufferString(in), &stdout, &stderr)
98         c.Check(code, check.Equals, 1)
99         c.Check(stdout.String(), check.Matches, `(?ms).*\n\- +.*LogLevel: info\n\+ +LogLevel: debug\n.*`)
100         c.Check(stderr.String(), check.Matches, `(?ms).*you should remove the legacy keepstore config file.*\n`)
101 }
102
103 func (s *CommandSuite) TestCheckUnknownKey(c *check.C) {
104         var stdout, stderr bytes.Buffer
105         in := `
106 Clusters:
107  z1234:
108   Bogus1: foo
109   BogusSection:
110     Bogus2: foo
111   API:
112     Bogus3:
113      Bogus4: true
114   PostgreSQL:
115     ConnectionPool:
116       {Bogus5: true}
117 `
118         code := CheckCommand.RunCommand("arvados config-check", []string{"-config", "-"}, bytes.NewBufferString(in), &stdout, &stderr)
119         c.Log(stderr.String())
120         c.Check(code, check.Equals, 1)
121         c.Check(stderr.String(), check.Matches, `(?ms).*deprecated or unknown config entry: Clusters.z1234.Bogus1"\n.*`)
122         c.Check(stderr.String(), check.Matches, `(?ms).*deprecated or unknown config entry: Clusters.z1234.BogusSection"\n.*`)
123         c.Check(stderr.String(), check.Matches, `(?ms).*deprecated or unknown config entry: Clusters.z1234.API.Bogus3"\n.*`)
124         c.Check(stderr.String(), check.Matches, `(?ms).*unexpected object in config entry: Clusters.z1234.PostgreSQL.ConnectionPool"\n.*`)
125 }
126
127 func (s *CommandSuite) TestDumpFormatting(c *check.C) {
128         var stdout, stderr bytes.Buffer
129         in := `
130 Clusters:
131  z1234:
132   Containers:
133    CloudVMs:
134     TimeoutBooting: 600s
135   Services:
136    Controller:
137     InternalURLs:
138      http://localhost:12345: {}
139 `
140         code := DumpCommand.RunCommand("arvados config-dump", []string{"-config", "-"}, bytes.NewBufferString(in), &stdout, &stderr)
141         c.Check(code, check.Equals, 0)
142         c.Check(stdout.String(), check.Matches, `(?ms).*TimeoutBooting: 10m\n.*`)
143         c.Check(stdout.String(), check.Matches, `(?ms).*http://localhost:12345: {}\n.*`)
144 }
145
146 func (s *CommandSuite) TestDumpUnknownKey(c *check.C) {
147         var stdout, stderr bytes.Buffer
148         in := `
149 Clusters:
150  z1234:
151   UnknownKey: foobar
152   ManagementToken: secret
153 `
154         code := DumpCommand.RunCommand("arvados config-dump", []string{"-config", "-"}, bytes.NewBufferString(in), &stdout, &stderr)
155         c.Check(code, check.Equals, 0)
156         c.Check(stderr.String(), check.Matches, `(?ms).*deprecated or unknown config entry: Clusters.z1234.UnknownKey.*`)
157         c.Check(stdout.String(), check.Matches, `(?ms)Clusters:\n  z1234:\n.*`)
158         c.Check(stdout.String(), check.Matches, `(?ms).*\n *ManagementToken: secret\n.*`)
159         c.Check(stdout.String(), check.Not(check.Matches), `(?ms).*UnknownKey.*`)
160 }