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
// 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() {
TimestampFormat: rfc3339NanoFixed,
}
- cluster := configure(logger, os.Args)
+ cluster, err := configure(logger, os.Args)
+ if err != nil {
+ log.Fatal(err)
+ }
if cluster == nil {
return
}
"math/rand"
"net/http"
"net/http/httptest"
+ "os"
"strings"
"sync"
"testing"
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()
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)
+}