X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f7c4c3fa0d3d177982a7ff665325ea082a872c99..6c78b28f9f54664babc57a4b4372c502065ed5d1:/lib/config/load_test.go diff --git a/lib/config/load_test.go b/lib/config/load_test.go index fddf3660d2..6ce81bb5f9 100644 --- a/lib/config/load_test.go +++ b/lib/config/load_test.go @@ -9,10 +9,13 @@ import ( "io" "os" "os/exec" + "strings" "testing" + "git.curoverse.com/arvados.git/sdk/go/arvados" "git.curoverse.com/arvados.git/sdk/go/ctxlog" "github.com/ghodss/yaml" + "github.com/sirupsen/logrus" check "gopkg.in/check.v1" ) @@ -42,6 +45,23 @@ func (s *LoadSuite) TestNoConfigs(c *check.C) { c.Check(cc.API.MaxItemsPerResponse, check.Equals, 1000) } +func (s *LoadSuite) TestSampleKeys(c *check.C) { + for _, yaml := range []string{ + `{"Clusters":{"z1111":{}}}`, + `{"Clusters":{"z1111":{"InstanceTypes":{"Foo":{"RAM": "12345M"}}}}}`, + } { + cfg, err := Load(bytes.NewBufferString(yaml), ctxlog.TestLogger(c)) + c.Assert(err, check.IsNil) + cc, err := cfg.GetCluster("z1111") + _, hasSample := cc.InstanceTypes["SAMPLE"] + c.Check(hasSample, check.Equals, false) + if strings.Contains(yaml, "Foo") { + c.Check(cc.InstanceTypes["Foo"].RAM, check.Equals, arvados.ByteSize(12345000000)) + c.Check(cc.InstanceTypes["Foo"].Price, check.Equals, 0.0) + } + } +} + func (s *LoadSuite) TestMultipleClusters(c *check.C) { cfg, err := Load(bytes.NewBufferString(`{"Clusters":{"z1111":{},"z2222":{}}}`), ctxlog.TestLogger(c)) c.Assert(err, check.IsNil) @@ -53,16 +73,90 @@ func (s *LoadSuite) TestMultipleClusters(c *check.C) { c.Check(c2.ClusterID, check.Equals, "z2222") } +func (s *LoadSuite) TestDeprecatedOrUnknownWarning(c *check.C) { + var logbuf bytes.Buffer + logger := logrus.New() + logger.Out = &logbuf + _, err := Load(bytes.NewBufferString(` +Clusters: + zzzzz: + postgresql: {} + BadKey: {} + Containers: {} + RemoteClusters: + z2222: + Host: z2222.arvadosapi.com + Proxy: true + BadKey: badValue +`), logger) + c.Assert(err, check.IsNil) + logs := strings.Split(strings.TrimSuffix(logbuf.String(), "\n"), "\n") + for _, log := range logs { + c.Check(log, check.Matches, `.*deprecated or unknown config entry:.*BadKey.*`) + } + c.Check(logs, check.HasLen, 2) +} + +func (s *LoadSuite) TestNoWarningsForDumpedConfig(c *check.C) { + var logbuf bytes.Buffer + logger := logrus.New() + logger.Out = &logbuf + cfg, err := Load(bytes.NewBufferString(`{"Clusters":{"zzzzz":{}}}`), logger) + c.Assert(err, check.IsNil) + yaml, err := yaml.Marshal(cfg) + c.Assert(err, check.IsNil) + cfgDumped, err := Load(bytes.NewBuffer(yaml), logger) + c.Assert(err, check.IsNil) + c.Check(cfg, check.DeepEquals, cfgDumped) + c.Check(logbuf.String(), check.Equals, "") +} + func (s *LoadSuite) TestPostgreSQLKeyConflict(c *check.C) { _, err := Load(bytes.NewBufferString(` Clusters: zzzzz: postgresql: connection: - dbname: dbname - host: host + DBName: dbname + Host: host `), ctxlog.TestLogger(c)) - c.Assert(err, check.ErrorMatches, `Clusters.zzzzz.PostgreSQL.Connection: multiple keys with .*"(dbname|host)".*`) + c.Check(err, check.ErrorMatches, `Clusters.zzzzz.PostgreSQL.Connection: multiple entries for "(dbname|host)".*`) +} + +func (s *LoadSuite) TestBadType(c *check.C) { + for _, data := range []string{` +Clusters: + zzzzz: + PostgreSQL: true +`, ` +Clusters: + zzzzz: + PostgreSQL: + ConnectionPool: true +`, ` +Clusters: + zzzzz: + PostgreSQL: + ConnectionPool: "foo" +`, ` +Clusters: + zzzzz: + PostgreSQL: + ConnectionPool: [] +`, ` +Clusters: + zzzzz: + PostgreSQL: + ConnectionPool: [] # {foo: bar} isn't caught here; we rely on config-check +`, + } { + c.Log(data) + v, err := Load(bytes.NewBufferString(data), ctxlog.TestLogger(c)) + if v != nil { + c.Logf("%#v", v.Clusters["zzzzz"].PostgreSQL.ConnectionPool) + } + c.Check(err, check.ErrorMatches, `.*cannot unmarshal .*PostgreSQL.*`) + } } func (s *LoadSuite) TestMovedKeys(c *check.C) {