7167: Use struct instead of map for APIConfig
authorradhika <radhika@curoverse.com>
Tue, 6 Oct 2015 20:51:36 +0000 (16:51 -0400)
committerradhika <radhika@curoverse.com>
Tue, 6 Oct 2015 20:51:36 +0000 (16:51 -0400)
sdk/go/arvadosclient/arvadosclient.go
tools/keep-rsync/keep-rsync.go
tools/keep-rsync/keep-rsync_test.go

index ab2d9b29ea101206175558236b930b3976138f28..cc99efdcf4b5deb327113780fdb8bf355163becf 100644 (file)
@@ -78,33 +78,42 @@ type ArvadosClient struct {
        DiscoveryDoc Dict
 }
 
-// Create a new ArvadosClient, initialized with standard Arvados environment
-// variables ARVADOS_API_HOST, ARVADOS_API_TOKEN, and (optionally)
-// ARVADOS_API_HOST_INSECURE.
+// APIConfig struct consists of:
+//    APIToken        string
+//    APIHost         string
+//    APIHostInsecure bool
+//    ExternalClient  bool
+type APIConfig struct {
+       APIToken        string
+       APIHost         string
+       APIHostInsecure bool
+       ExternalClient  bool
+}
+
+// Create a new ArvadosClient, initialized with standard Arvados environment variables
+// ARVADOS_API_HOST, ARVADOS_API_TOKEN, ARVADOS_API_HOST_INSECURE, ARVADOS_EXTERNAL_CLIENT.
 func MakeArvadosClient() (ac ArvadosClient, err error) {
-       config := make(map[string]string)
-       config["ARVADOS_API_TOKEN"] = os.Getenv("ARVADOS_API_TOKEN")
-       config["ARVADOS_API_HOST"] = os.Getenv("ARVADOS_API_HOST")
-       config["ARVADOS_API_HOST_INSECURE"] = os.Getenv("ARVADOS_API_HOST_INSECURE")
-       config["ARVADOS_EXTERNAL_CLIENT"] = os.Getenv("ARVADOS_EXTERNAL_CLIENT")
+       var config APIConfig
+       config.APIToken = os.Getenv("ARVADOS_API_TOKEN")
+       config.APIHost = os.Getenv("ARVADOS_API_HOST")
+
+       var matchTrue = regexp.MustCompile("^(?i:1|yes|true)$")
+
+       config.APIHostInsecure = matchTrue.MatchString(os.Getenv("ARVADOS_API_HOST_INSECURE"))
+       config.ExternalClient = matchTrue.MatchString(os.Getenv("ARVADOS_EXTERNAL_CLIENT"))
 
        return MakeArvadosClientWithConfig(config)
 }
 
 // Create a new ArvadosClient, using the given input parameters.
-func MakeArvadosClientWithConfig(config map[string]string) (ac ArvadosClient, err error) {
-       var matchTrue = regexp.MustCompile("^(?i:1|yes|true)$")
-
-       insecure := matchTrue.MatchString(config["ARVADOS_API_HOST_INSECURE"])
-       external := matchTrue.MatchString(config["ARVADOS_EXTERNAL_CLIENT"])
-
+func MakeArvadosClientWithConfig(config APIConfig) (ac ArvadosClient, err error) {
        ac = ArvadosClient{
-               ApiServer:   config["ARVADOS_API_HOST"],
-               ApiToken:    config["ARVADOS_API_TOKEN"],
-               ApiInsecure: insecure,
+               ApiServer:   config.APIHost,
+               ApiToken:    config.APIToken,
+               ApiInsecure: config.APIHostInsecure,
                Client: &http.Client{Transport: &http.Transport{
-                       TLSClientConfig: &tls.Config{InsecureSkipVerify: insecure}}},
-               External: external}
+                       TLSClientConfig: &tls.Config{InsecureSkipVerify: config.APIHostInsecure}}},
+               External: config.ExternalClient}
 
        if ac.ApiServer == "" {
                return ac, MissingArvadosApiHost
index 3761cc7e9c9d154b4a5d061c5e98c85b2b0260e1..1f00a9fdf3a6cf53ed00d9f1719c4006df726d65 100644 (file)
@@ -6,13 +6,14 @@ import (
        "git.curoverse.com/arvados.git/sdk/go/keepclient"
        "io/ioutil"
        "log"
+       "regexp"
        "strings"
 )
 
 // keep-rsync arguments
 var (
-       srcConfig           map[string]string
-       dstConfig           map[string]string
+       srcConfig           arvadosclient.APIConfig
+       dstConfig           arvadosclient.APIConfig
        srcKeepServicesJSON string
        dstKeepServicesJSON string
        replications        int
@@ -69,6 +70,7 @@ func main() {
 
        var err error
 
+       // Load config
        if srcConfigFile == "" {
                log.Fatal("-src-config-file must be specified.")
        }
@@ -85,27 +87,41 @@ func main() {
                log.Fatal("Error reading destination configuration: %s", err.Error())
        }
 
+       // Initialize keep-rsync
        err = initializeKeepRsync()
        if err != nil {
                log.Fatal("Error configurating keep-rsync: %s", err.Error())
        }
 }
 
+var matchTrue = regexp.MustCompile("^(?i:1|yes|true)$")
+
 // Reads config from file
-func readConfigFromFile(filename string) (map[string]string, error) {
+func readConfigFromFile(filename string) (arvadosclient.APIConfig, error) {
+       var config arvadosclient.APIConfig
+
        content, err := ioutil.ReadFile(filename)
        if err != nil {
-               return nil, err
+               return config, err
        }
 
-       config := make(map[string]string)
        lines := strings.Split(string(content), "\n")
        for _, line := range lines {
                if line == "" {
                        continue
                }
                kv := strings.Split(line, "=")
-               config[kv[0]] = kv[1]
+
+               switch kv[0] {
+               case "ARVADOS_API_TOKEN":
+                       config.APIToken = kv[1]
+               case "ARVADOS_API_HOST":
+                       config.APIHost = kv[1]
+               case "ARVADOS_API_HOST_INSECURE":
+                       config.APIHostInsecure = matchTrue.MatchString(kv[1])
+               case "ARVADOS_EXTERNAL_CLIENT":
+                       config.ExternalClient = matchTrue.MatchString(kv[1])
+               }
        }
        return config, nil
 }
@@ -157,6 +173,7 @@ func initializeKeepRsync() (err error) {
                        return
                }
        }
+       kcDst.Want_replicas = replications
 
        return
 }
index 97db5717d0dbb6d7f0cff8369a3cb8d22a45d669..ae80f450eef8601bc9d7b7b402189aa1110c2c52 100644 (file)
@@ -5,6 +5,7 @@ import (
        "fmt"
        "io/ioutil"
        "os"
+       "regexp"
        "testing"
 
        "git.curoverse.com/arvados.git/sdk/go/arvadostest"
@@ -44,17 +45,18 @@ func (s *ServerRequiredSuite) TearDownSuite(c *C) {
 // to create the keep servers to be used as destination.
 func setupRsync(c *C) {
        // srcConfig
-       srcConfig = make(map[string]string)
-       srcConfig["ARVADOS_API_HOST"] = os.Getenv("ARVADOS_API_HOST")
-       srcConfig["ARVADOS_API_TOKEN"] = os.Getenv("ARVADOS_API_TOKEN")
-       srcConfig["ARVADOS_API_HOST_INSECURE"] = os.Getenv("ARVADOS_API_HOST_INSECURE")
+       srcConfig.APIHost = os.Getenv("ARVADOS_API_HOST")
+       srcConfig.APIToken = os.Getenv("ARVADOS_API_TOKEN")
+       srcConfig.APIHostInsecure = matchTrue.MatchString(os.Getenv("ARVADOS_API_HOST_INSECURE"))
 
        // dstConfig
-       dstConfig = make(map[string]string)
-       dstConfig["ARVADOS_API_HOST"] = os.Getenv("ARVADOS_API_HOST")
-       dstConfig["ARVADOS_API_TOKEN"] = os.Getenv("ARVADOS_API_TOKEN")
-       dstConfig["ARVADOS_API_HOST_INSECURE"] = os.Getenv("ARVADOS_API_HOST_INSECURE")
+       dstConfig.APIHost = os.Getenv("ARVADOS_API_HOST")
+       dstConfig.APIToken = os.Getenv("ARVADOS_API_TOKEN")
+       dstConfig.APIHostInsecure = matchTrue.MatchString(os.Getenv("ARVADOS_API_HOST_INSECURE"))
 
+       replications = 1
+
+       // Start API and Keep servers
        arvadostest.StartAPI()
        arvadostest.StartKeep()
 
@@ -87,10 +89,10 @@ func (s *ServerRequiredSuite) TestReadConfigFromFile(c *C) {
        // Invoke readConfigFromFile method with this test filename
        config, err := readConfigFromFile(file.Name())
        c.Assert(err, Equals, nil)
-       c.Assert(config["ARVADOS_API_HOST"], Equals, "testhost")
-       c.Assert(config["ARVADOS_API_TOKEN"], Equals, "testtoken")
-       c.Assert(config["ARVADOS_API_HOST_INSECURE"], Equals, "true")
-       c.Assert(config["EXTERNAL_CLIENT"], Equals, "")
+       c.Assert(config.APIHost, Equals, "testhost")
+       c.Assert(config.APIToken, Equals, "testtoken")
+       c.Assert(config.APIHostInsecure, Equals, true)
+       c.Assert(config.ExternalClient, Equals, false)
 }
 
 // Test keep-rsync initialization, with src and dst keep servers.
@@ -150,7 +152,7 @@ func (s *ServerRequiredSuite) TestRsyncInitializeWithKeepServicesJSON(c *C) {
        c.Check(localRoots != nil, Equals, true)
 
        foundIt := false
-       for k, _ := range localRoots {
+       for k := range localRoots {
                if k == "zzzzz-bi6l4-123456789012340" {
                        foundIt = true
                }
@@ -158,7 +160,7 @@ func (s *ServerRequiredSuite) TestRsyncInitializeWithKeepServicesJSON(c *C) {
        c.Check(foundIt, Equals, true)
 
        foundIt = false
-       for k, _ := range localRoots {
+       for k := range localRoots {
                if k == "zzzzz-bi6l4-123456789012341" {
                        foundIt = true
                }