14717: Remove LegacyComponentConfig behavior
[arvados.git] / services / ws / server_test.go
index b1f943857a18f495f2777c24aa3627855aa0d9f6..8b43cef3758398f3b44e9166aab6f76df3276707 100644 (file)
@@ -7,10 +7,13 @@ package main
 import (
        "encoding/json"
        "io/ioutil"
+       "log"
        "net/http"
+       "os"
        "sync"
        "time"
 
+       "git.curoverse.com/arvados.git/lib/config"
        "git.curoverse.com/arvados.git/sdk/go/arvados"
        "git.curoverse.com/arvados.git/sdk/go/arvadostest"
        check "gopkg.in/check.v1"
@@ -19,29 +22,42 @@ import (
 var _ = check.Suite(&serverSuite{})
 
 type serverSuite struct {
-       cfg *wsConfig
-       srv *server
-       wg  sync.WaitGroup
+       cluster *arvados.Cluster
+       srv     *server
+       wg      sync.WaitGroup
 }
 
 func (s *serverSuite) SetUpTest(c *check.C) {
-       s.cfg = s.testConfig()
-       s.srv = &server{wsConfig: s.cfg}
+       var err error
+       s.cluster, err = s.testConfig()
+       c.Assert(err, check.IsNil)
+       s.srv = &server{cluster: s.cluster}
 }
 
-func (*serverSuite) testConfig() *wsConfig {
-       cfg := defaultConfig()
-       cfg.Client = *(arvados.NewClientFromEnv())
-       cfg.Postgres = testDBConfig()
-       cfg.Listen = ":"
-       cfg.ManagementToken = arvadostest.ManagementToken
-       return &cfg
+func (*serverSuite) testConfig() (*arvados.Cluster, error) {
+       ldr := config.NewLoader(nil, nil)
+       cfg, err := ldr.Load()
+       if err != nil {
+               return nil, err
+       }
+       cluster, err := cfg.GetCluster("")
+       if err != nil {
+               return nil, err
+       }
+       client := arvados.NewClientFromEnv()
+       cluster.Services.Controller.ExternalURL.Host = client.APIHost
+       cluster.SystemRootToken = client.AuthToken
+       cluster.TLS.Insecure = client.Insecure
+       cluster.PostgreSQL.Connection = testDBConfig()
+       cluster.Services.Websocket.InternalURLs = map[arvados.URL]arvados.ServiceInstance{arvados.URL{Host: ":"}: arvados.ServiceInstance{}}
+       cluster.ManagementToken = arvadostest.ManagementToken
+       return cluster, nil
 }
 
 // TestBadDB ensures Run() returns an error (instead of panicking or
 // deadlocking) if it can't connect to the database server at startup.
 func (s *serverSuite) TestBadDB(c *check.C) {
-       s.cfg.Postgres["password"] = "1234"
+       s.cluster.PostgreSQL.Connection["password"] = "1234"
 
        var wg sync.WaitGroup
        wg.Add(1)
@@ -72,7 +88,7 @@ func (s *serverSuite) TestHealth(c *check.C) {
        go s.srv.Run()
        defer s.srv.Close()
        s.srv.WaitReady()
-       for _, token := range []string{"", "foo", s.cfg.ManagementToken} {
+       for _, token := range []string{"", "foo", s.cluster.ManagementToken} {
                req, err := http.NewRequest("GET", "http://"+s.srv.listener.Addr().String()+"/_health/ping", nil)
                c.Assert(err, check.IsNil)
                if token != "" {
@@ -80,7 +96,7 @@ func (s *serverSuite) TestHealth(c *check.C) {
                }
                resp, err := http.DefaultClient.Do(req)
                c.Check(err, check.IsNil)
-               if token == s.cfg.ManagementToken {
+               if token == s.cluster.ManagementToken {
                        c.Check(resp.StatusCode, check.Equals, http.StatusOK)
                        buf, err := ioutil.ReadAll(resp.Body)
                        c.Check(err, check.IsNil)
@@ -107,7 +123,7 @@ func (s *serverSuite) TestStatus(c *check.C) {
 }
 
 func (s *serverSuite) TestHealthDisabled(c *check.C) {
-       s.cfg.ManagementToken = ""
+       s.cluster.ManagementToken = ""
 
        go s.srv.Run()
        defer s.srv.Close()
@@ -122,3 +138,64 @@ func (s *serverSuite) TestHealthDisabled(c *check.C) {
                c.Check(resp.StatusCode, check.Equals, http.StatusNotFound)
        }
 }
+
+func (s *serverSuite) TestLoadLegacyConfig(c *check.C) {
+       content := []byte(`
+Client:
+  APIHost: example.com
+  AuthToken: abcdefg
+Postgres:
+  "dbname": "arvados_production"
+  "user": "arvados"
+  "password": "xyzzy"
+  "host": "localhost"
+  "connect_timeout": "30"
+  "sslmode": "require"
+  "fallback_application_name": "arvados-ws"
+PostgresPool: 63
+Listen: ":8765"
+LogLevel: "debug"
+LogFormat: "text"
+PingTimeout: 61s
+ClientEventQueue: 62
+ServerEventQueue:  5
+ManagementToken: qqqqq
+`)
+       tmpfile, err := ioutil.TempFile("", "example")
+       if err != nil {
+               log.Fatal(err)
+       }
+
+       defer os.Remove(tmpfile.Name()) // clean up
+
+       if _, err := tmpfile.Write(content); err != nil {
+               log.Fatal(err)
+       }
+       if err := tmpfile.Close(); err != nil {
+               log.Fatal(err)
+
+       }
+       cluster := configure(logger(nil), []string{"arvados-ws", "-config", tmpfile.Name()})
+       c.Check(cluster, check.NotNil)
+
+       c.Check(cluster.Services.Controller.ExternalURL, check.Equals, arvados.URL{Scheme: "https", Host: "example.com"})
+       c.Check(cluster.SystemRootToken, check.Equals, "abcdefg")
+
+       c.Check(cluster.PostgreSQL.Connection, check.DeepEquals, arvados.PostgreSQLConnection{
+               "connect_timeout":           "30",
+               "dbname":                    "arvados_production",
+               "fallback_application_name": "arvados-ws",
+               "host":                      "localhost",
+               "password":                  "xyzzy",
+               "sslmode":                   "require",
+               "user":                      "arvados"})
+       c.Check(cluster.PostgreSQL.ConnectionPool, check.Equals, 63)
+       c.Check(cluster.Services.Websocket.InternalURLs, check.DeepEquals, map[arvados.URL]arvados.ServiceInstance{
+               arvados.URL{Host: ":8765"}: arvados.ServiceInstance{}})
+       c.Check(cluster.SystemLogs.LogLevel, check.Equals, "debug")
+       c.Check(cluster.SystemLogs.Format, check.Equals, "text")
+       c.Check(cluster.API.SendTimeout, check.Equals, arvados.Duration(61*time.Second))
+       c.Check(cluster.API.WebsocketClientEventQueue, check.Equals, 62)
+       c.Check(cluster.API.WebsocketServerEventQueue, check.Equals, 5)
+       c.Check(cluster.ManagementToken, check.Equals, "qqqqq")
+}