9005: Keep service discovery up to date automatically.
[arvados.git] / sdk / go / keepclient / discover_test.go
index 43a984e8c42f8696e116c15a2471325d20d6e332..4065ce342e43dfaa5172ca48f4a3ec3282045296 100644 (file)
@@ -1,21 +1,52 @@
 package keepclient
 
 import (
+       "crypto/md5"
        "fmt"
-       "time"
+       "net/http"
+       "os"
+
+       "gopkg.in/check.v1"
 
        "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
+       "git.curoverse.com/arvados.git/sdk/go/arvadostest"
 )
 
-func ExampleRefreshServices() {
-       arv, err := arvadosclient.MakeArvadosClient()
-       if err != nil {
-               panic(err)
-       }
-       kc, err := MakeKeepClient(&arv)
-       if err != nil {
-               panic(err)
-       }
-       go kc.RefreshServices(5*time.Minute, 3*time.Second)
-       fmt.Printf("LocalRoots: %#v\n", kc.LocalRoots())
+func (s *ServerRequiredSuite) TestOverrideDiscovery(c *check.C) {
+       defer os.Setenv("ARVADOS_KEEP_SERVICES", "")
+
+       hash := fmt.Sprintf("%x+3", md5.Sum([]byte("TestOverrideDiscovery")))
+       st := StubGetHandler{
+               c,
+               hash,
+               arvadostest.ActiveToken,
+               http.StatusOK,
+               []byte("TestOverrideDiscovery")}
+       ks := RunSomeFakeKeepServers(st, 2)
+
+       os.Setenv("ARVADOS_KEEP_SERVICES", "")
+       arv1, err := arvadosclient.MakeArvadosClient()
+       c.Assert(err, check.IsNil)
+       arv1.ApiToken = arvadostest.ActiveToken
+
+       os.Setenv("ARVADOS_KEEP_SERVICES", ks[0].url+"  "+ks[1].url+" ")
+       arv2, err := arvadosclient.MakeArvadosClient()
+       c.Assert(err, check.IsNil)
+       arv2.ApiToken = arvadostest.ActiveToken
+
+       // ARVADOS_KEEP_SERVICES was empty when we created arv1, but
+       // it pointed to our stub servers when we created
+       // arv2. Regardless of what it's set to now, a keepclient for
+       // arv2 should use our stub servers, but one created for arv1
+       // should not.
+
+       kc1, err := MakeKeepClient(arv1)
+       c.Assert(err, check.IsNil)
+       kc2, err := MakeKeepClient(arv2)
+       c.Assert(err, check.IsNil)
+
+       _, _, _, err = kc1.Get(hash)
+       c.Check(err, check.NotNil)
+       _, _, _, err = kc2.Get(hash)
+       c.Check(err, check.IsNil)
 }