15003: Add dispatch-cloud configs to default/template file.
[arvados.git] / lib / config / load_test.go
index 277ff423a4f78607f5d018e64eeb240f9fa788ed..ed1dd1bdfd82f941921fa291c6b95067fb9a24c2 100644 (file)
@@ -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,44 +73,90 @@ func (s *LoadSuite) TestMultipleClusters(c *check.C) {
        c.Check(c2.ClusterID, check.Equals, "z2222")
 }
 
-func (s *LoadSuite) TestNodeProfilesToServices(c *check.C) {
-       hostname, err := os.Hostname()
+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)
-       s.checkEquivalent(c, `
+       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:
- z1111:
-  NodeProfiles:
-   "*":
-    arvados-dispatch-cloud:
-     listen: ":9006"
-    arvados-controller:
-     listen: ":9004"
-   `+hostname+`:
-    arvados-api-server:
-     listen: ":8000"
+ zzzzz:
+  postgresql:
+   connection:
+     dbname: dbname
+     host: host
+`), ctxlog.TestLogger(c))
+       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:
- z1111:
-  Services:
-   RailsAPI:
-    InternalURLs:
-     "http://`+hostname+`:8000": {}
-   Controller:
-    InternalURLs:
-     "http://`+hostname+`:9004": {}
-   DispatchCloud:
-    InternalURLs:
-     "http://`+hostname+`:9006": {}
-  NodeProfiles:
-   "*":
-    arvados-dispatch-cloud:
-     listen: ":9006"
-    arvados-controller:
-     listen: ":9004"
-   `+hostname+`:
-    arvados-api-server:
-     listen: ":8000"
-`)
+ 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) {