14715: Adds legacy config test
authorEric Biagiotti <ebiagiotti@veritasgenetics.com>
Mon, 12 Aug 2019 13:06:29 +0000 (09:06 -0400)
committerEric Biagiotti <ebiagiotti@veritasgenetics.com>
Mon, 12 Aug 2019 13:06:29 +0000 (09:06 -0400)
Arvados-DCO-1.1-Signed-off-by: Eric Biagiotti <ebiagiotti@veritasgenetics.com>

services/keepproxy/keepproxy.go
services/keepproxy/keepproxy_test.go

index f2a89e58eff3828b8e9cff4425639d5d9527d85f..824b748bccee3992ac979ebe38d6caf35a599c89 100644 (file)
@@ -41,7 +41,7 @@ var (
 
 const rfc3339NanoFixed = "2006-01-02T15:04:05.000000000Z07:00"
 
-func configure(logger log.FieldLogger, args []string) *arvados.Cluster {
+func configure(logger log.FieldLogger, args []string) (*arvados.Cluster, error) {
        flags := flag.NewFlagSet(args[0], flag.ExitOnError)
        flags.Usage = usage
 
@@ -57,31 +57,29 @@ func configure(logger log.FieldLogger, args []string) *arvados.Cluster {
        // Print version information if requested
        if *getVersion {
                fmt.Printf("keepproxy %s\n", version)
-               return nil
+               return nil, nil
        }
 
        cfg, err := loader.Load()
        if err != nil {
-               log.Fatal(err)
+               return nil, err
        }
-
        cluster, err := cfg.GetCluster("")
        if err != nil {
-               log.Fatal(err)
+               return nil, err
        }
 
        if *dumpConfig {
                out, err := yaml.Marshal(cfg)
                if err != nil {
-                       log.Fatal(err)
+                       return nil, err
                }
-               _, err = os.Stdout.Write(out)
-               if err != nil {
-                       log.Fatal(err)
+               if _, err := os.Stdout.Write(out); err != nil {
+                       return nil, err
                }
-               return nil
+               return nil, nil
        }
-       return cluster
+       return cluster, nil
 }
 
 func main() {
@@ -90,7 +88,10 @@ func main() {
                TimestampFormat: rfc3339NanoFixed,
        }
 
-       cluster := configure(logger, os.Args)
+       cluster, err := configure(logger, os.Args)
+       if err != nil {
+               log.Fatal(err)
+       }
        if cluster == nil {
                return
        }
index 5f19c8c1f93c0c712d8cd6256f432a82cb698a0f..609da4f7058dcc9b7a2aa5da98e1a3127dd990a8 100644 (file)
@@ -13,6 +13,7 @@ import (
        "math/rand"
        "net/http"
        "net/http/httptest"
+       "os"
        "strings"
        "sync"
        "testing"
@@ -107,7 +108,10 @@ func runProxy(c *C, bogusClientToken bool) *keepclient.KeepClient {
        cluster.Services.Keepproxy.InternalURLs = map[arvados.URL]arvados.ServiceInstance{arvados.URL{Host: ":0"}: arvados.ServiceInstance{}}
 
        listener = nil
-       go run(log.New(), cluster)
+       go func() {
+               run(log.New(), cluster)
+               defer closeListener()
+       }()
        waitForListener()
 
        client := arvados.NewClientFromEnv()
@@ -636,3 +640,74 @@ func (s *ServerRequiredSuite) TestPing(c *C) {
        c.Check(resp.Code, Equals, 200)
        c.Assert(resp.Body.String(), Matches, `{"health":"OK"}\n?`)
 }
+
+func (s *NoKeepServerSuite) TestLegacyConfig(c *C) {
+       content := []byte(fmtConfig("", true))
+       cluster, err := loadLegacyConfig(content, c)
+
+       c.Check(err, IsNil)
+       c.Check(cluster, NotNil)
+       c.Check(cluster.Services.Controller.ExternalURL, Equals, arvados.URL{Scheme: "https", Host: "example.com"})
+       c.Check(cluster.SystemRootToken, Equals, "abcdefg")
+       c.Check(cluster.ManagementToken, Equals, "xyzzy")
+       c.Check(cluster.Services.Keepproxy.InternalURLs[arvados.URL{Host: ":80"}], Equals, arvados.ServiceInstance{})
+       c.Check(cluster.Collections.DefaultReplication, Equals, 0)
+       c.Check(cluster.API.KeepServiceRequestTimeout.String(), Equals, "15s")
+       c.Check(cluster.SystemLogs.LogLevel, Equals, "debug")
+
+       content = []byte(fmtConfig("", false))
+       cluster, err = loadLegacyConfig(content, c)
+       c.Check(cluster.SystemLogs.LogLevel, Equals, "info")
+
+       content = []byte(fmtConfig(`"DisableGet": true,`, true))
+       _, err = loadLegacyConfig(content, c)
+       c.Check(err, NotNil)
+
+       content = []byte(fmtConfig(`"DisablePut": true,`, true))
+       _, err = loadLegacyConfig(content, c)
+       c.Check(err, NotNil)
+
+       content = []byte(fmtConfig(`"PIDFile": "test",`, true))
+       _, err = loadLegacyConfig(content, c)
+       c.Check(err, NotNil)
+
+       content = []byte(fmtConfig(`"DisableGet": false, "DisablePut": false, "PIDFile": "",`, true))
+       _, err = loadLegacyConfig(content, c)
+       c.Check(err, IsNil)
+
+}
+
+func loadLegacyConfig(content []byte, c *C) (*arvados.Cluster, error) {
+       tmpfile, err := ioutil.TempFile("", "example")
+       if err != nil {
+               c.Error(err)
+       }
+       defer os.Remove(tmpfile.Name())
+
+       if _, err := tmpfile.Write(content); err != nil {
+               c.Error(err)
+       }
+       if err := tmpfile.Close(); err != nil {
+               c.Error(err)
+       }
+       return configure(log.New(), []string{"keepproxy", "-config", tmpfile.Name()})
+}
+
+func fmtConfig(param string, debugLog bool) string {
+       return fmt.Sprintf(`
+{
+       "Client": {
+               "Scheme": "",
+               "APIHost": "example.com",
+               "AuthToken": "abcdefg",
+               "Insecure": false
+       },
+       "Listen": ":80",
+       "DefaultReplicas": 0,
+       "Timeout": "15s",
+       "Debug": %t,
+       %s
+       "ManagementToken": "xyzzy"
+}
+`, debugLog, param)
+}