1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: Apache-2.0
14 "git.arvados.org/arvados.git/lib/config"
15 "git.arvados.org/arvados.git/sdk/go/arvados"
16 "git.arvados.org/arvados.git/sdk/go/arvadosclient"
17 "git.arvados.org/arvados.git/sdk/go/arvadostest"
18 "git.arvados.org/arvados.git/sdk/go/ctxlog"
22 func (s *ServerRequiredSuite) TestOverrideDiscovery(c *check.C) {
23 defer os.Unsetenv("ARVADOS_KEEP_SERVICES")
25 data := []byte("TestOverrideDiscovery")
26 hash := fmt.Sprintf("%x+%d", md5.Sum(data), len(data))
30 arvadostest.ActiveToken,
33 ks := RunSomeFakeKeepServers(st, 2)
35 os.Setenv("ARVADOS_KEEP_SERVICES", "")
36 arv1, err := arvadosclient.MakeArvadosClient()
37 c.Assert(err, check.IsNil)
38 arv1.ApiToken = arvadostest.ActiveToken
40 os.Setenv("ARVADOS_KEEP_SERVICES", ks[0].url+" "+ks[1].url+" ")
41 arv2, err := arvadosclient.MakeArvadosClient()
42 c.Assert(err, check.IsNil)
43 arv2.ApiToken = arvadostest.ActiveToken
45 // ARVADOS_KEEP_SERVICES was empty when we created arv1, but
46 // it pointed to our stub servers when we created
47 // arv2. Regardless of what it's set to now, a keepclient for
48 // arv2 should use our stub servers, but one created for arv1
51 kc1, err := MakeKeepClient(arv1)
52 c.Assert(err, check.IsNil)
53 kc2, err := MakeKeepClient(arv2)
54 c.Assert(err, check.IsNil)
56 _, _, _, err = kc1.Get(hash)
57 c.Check(err, check.NotNil)
58 _, _, _, err = kc2.Get(hash)
59 c.Check(err, check.IsNil)
62 func (s *ServerRequiredSuite) TestDoubleSlash(c *check.C) {
63 defer os.Unsetenv("ARVADOS_KEEP_SERVICES")
65 data := []byte("TestDoubleSlash")
66 hash := fmt.Sprintf("%x+%d", md5.Sum(data), len(data))
68 os.Setenv("ARVADOS_KEEP_SERVICES", "")
69 arv1, err := arvadosclient.MakeArvadosClient()
70 c.Assert(err, check.IsNil)
71 arv1.ApiToken = arvadostest.ActiveToken
72 kc1, err := MakeKeepClient(arv1)
73 c.Assert(err, check.IsNil)
75 // Use kc1's config to set up a new client kc2, but add an
76 // extra trailing slash to each URL.
78 for _, url := range kc1.LocalRoots() {
81 c.Assert(svcs, check.Not(check.HasLen), 0)
82 os.Setenv("ARVADOS_KEEP_SERVICES", svcs)
84 arv2, err := arvadosclient.MakeArvadosClient()
85 c.Assert(err, check.IsNil)
86 arv2.ApiToken = arvadostest.ActiveToken
87 kc2, err := MakeKeepClient(arv2)
88 c.Assert(err, check.IsNil)
90 // Check that trailing slashes were trimmed.
91 for _, url := range kc2.LocalRoots() {
92 c.Assert(url, check.Not(check.Matches), `.*/$`)
95 _, _, err = kc2.PutB(data)
96 c.Assert(err, check.IsNil)
97 _, _, _, err = kc2.Get(hash)
98 c.Check(err, check.IsNil)
101 func (s *StandaloneSuite) TestKeepServicesFromClusterConfig(c *check.C) {
102 // This behavior is disabled via env var in the test
103 // environment. Clear the env var to test the default
104 // production behavior.
105 v := "ARVADOS_USE_KEEP_ACCESSIBLE_API"
106 defer os.Setenv(v, os.Getenv(v))
109 rdr := bytes.NewReader([]byte(`
115 "https://[::1]:12345/":
116 Rendezvous: abcdefghijklmno
117 "https://[::1]:54321/":
119 "http://0.0.0.0:54321/":
123 "https://[::1]:55555/":
126 ldr := config.NewLoader(rdr, ctxlog.TestLogger(c))
128 cfg, err := ldr.Load()
129 c.Assert(err, check.IsNil)
130 cluster, err := cfg.GetCluster("")
131 c.Assert(err, check.IsNil)
132 c.Assert(cluster.ClusterID, check.Equals, "zzzzz")
133 ac, err := arvados.NewClientFromConfig(cluster)
134 c.Assert(err, check.IsNil)
135 arv1, err := arvadosclient.New(ac)
136 c.Assert(err, check.IsNil)
137 c.Check(arv1.Cluster, check.NotNil)
138 kc, err := MakeKeepClient(arv1)
139 c.Assert(err, check.IsNil)
140 // Note the default rendezvous string is generated based on
141 // the MD5 of the keepstore URL and that URL *must* have a
142 // trailing slash in order to match the RailsAPI behavior --
143 // meanwhile, the keepstore URL given in the localRoots map
144 // *must not* have a trailing slash.
145 c.Check(kc.localRoots, check.DeepEquals, map[string]string{
146 "zzzzz-bi6l4-abcdefghijklmno": "https://[::1]:12345",
147 fmt.Sprintf("zzzzz-bi6l4-%x", md5.Sum([]byte("xyz")))[:27]: "https://[::1]:54321",
148 fmt.Sprintf("zzzzz-bi6l4-%x", md5.Sum([]byte("http://0.0.0.0:54321/")))[:27]: "http://0.0.0.0:54321",