Using_proxy: true,
Client: &http.Client{},
}
- kc.SetServiceRoots(map[string]string{
+ locals := map[string]string{
"proxy": fmt.Sprintf("http://localhost:%v", port),
- })
+ }
+ writableLocals := map[string]string{
+ "proxy": fmt.Sprintf("http://localhost:%v", port),
+ }
+ kc.SetServiceRoots(locals, writableLocals, nil)
c.Check(kc.Using_proxy, Equals, true)
- c.Check(len(kc.ServiceRoots()), Equals, 1)
- for _, root := range kc.ServiceRoots() {
+ c.Check(len(kc.LocalRoots()), Equals, 1)
+ for _, root := range kc.LocalRoots() {
c.Check(root, Equals, fmt.Sprintf("http://localhost:%v", port))
}
log.Print("keepclient created")
c.Assert(err, Equals, nil)
c.Check(kc.Arvados.External, Equals, true)
c.Check(kc.Using_proxy, Equals, true)
- c.Check(len(kc.ServiceRoots()), Equals, 1)
- for _, root := range kc.ServiceRoots() {
+ c.Check(len(kc.LocalRoots()), Equals, 1)
+ for _, root := range kc.LocalRoots() {
c.Check(root, Equals, "http://localhost:29950")
}
os.Setenv("ARVADOS_EXTERNAL_CLIENT", "")
c.Check(err, Equals, nil)
body, err := ioutil.ReadAll(resp.Body)
c.Check(err, Equals, nil)
- c.Check(string(body), Equals,
- fmt.Sprintf("%x+%d", md5.Sum([]byte("qux")), 3))
+ c.Check(string(body), Matches,
+ fmt.Sprintf(`^%x\+3(\+.+)?$`, md5.Sum([]byte("qux"))))
+ }
+}
+
+func (s *ServerRequiredSuite) TestStripHint(c *C) {
+ c.Check(removeHint.ReplaceAllString("http://keep.zzzzz.arvadosapi.com:25107/2228819a18d3727630fa30c81853d23f+67108864+A37b6ab198qqqq28d903b975266b23ee711e1852c@55635f73+K@zzzzz", "$1"),
+ Equals,
+ "http://keep.zzzzz.arvadosapi.com:25107/2228819a18d3727630fa30c81853d23f+67108864+A37b6ab198qqqq28d903b975266b23ee711e1852c@55635f73")
+ c.Check(removeHint.ReplaceAllString("http://keep.zzzzz.arvadosapi.com:25107/2228819a18d3727630fa30c81853d23f+67108864+K@zzzzz+A37b6ab198qqqq28d903b975266b23ee711e1852c@55635f73", "$1"),
+ Equals,
+ "http://keep.zzzzz.arvadosapi.com:25107/2228819a18d3727630fa30c81853d23f+67108864+A37b6ab198qqqq28d903b975266b23ee711e1852c@55635f73")
+ c.Check(removeHint.ReplaceAllString("http://keep.zzzzz.arvadosapi.com:25107/2228819a18d3727630fa30c81853d23f+67108864+A37b6ab198qqqq28d903b975266b23ee711e1852c@55635f73+K@zzzzz-zzzzz-zzzzzzzzzzzzzzz", "$1"),
+ Equals,
+ "http://keep.zzzzz.arvadosapi.com:25107/2228819a18d3727630fa30c81853d23f+67108864+A37b6ab198qqqq28d903b975266b23ee711e1852c@55635f73+K@zzzzz-zzzzz-zzzzzzzzzzzzzzz")
+ c.Check(removeHint.ReplaceAllString("http://keep.zzzzz.arvadosapi.com:25107/2228819a18d3727630fa30c81853d23f+67108864+K@zzzzz-zzzzz-zzzzzzzzzzzzzzz+A37b6ab198qqqq28d903b975266b23ee711e1852c@55635f73", "$1"),
+ Equals,
+ "http://keep.zzzzz.arvadosapi.com:25107/2228819a18d3727630fa30c81853d23f+67108864+K@zzzzz-zzzzz-zzzzzzzzzzzzzzz+A37b6ab198qqqq28d903b975266b23ee711e1852c@55635f73")
+
+}
+
+// Test GetIndex
+// Put one block, with 2 replicas
+// With no prefix (expect the block locator, twice)
+// With an existing prefix (expect the block locator, twice)
+// With a valid but non-existing prefix (expect "\n")
+// With an invalid prefix (expect error)
+func (s *ServerRequiredSuite) TestGetIndex(c *C) {
+ kc := runProxy(c, []string{"keepproxy"}, 28852, false)
+ waitForListener()
+ defer closeListener()
+
+ // Write "index-data" blocks
+ data := []byte("index-data")
+ hash := fmt.Sprintf("%x", md5.Sum(data))
+
+ hash2, rep, err := kc.PutB(data)
+ c.Check(hash2, Matches, fmt.Sprintf(`^%s\+10(\+.+)?$`, hash))
+ c.Check(rep, Equals, 2)
+ c.Check(err, Equals, nil)
+
+ reader, blocklen, _, err := kc.Get(hash)
+ c.Assert(err, Equals, nil)
+ c.Check(blocklen, Equals, int64(10))
+ all, err := ioutil.ReadAll(reader)
+ c.Check(all, DeepEquals, data)
+
+ // Write some more blocks
+ otherData := []byte("some-more-index-data")
+ otherHash := fmt.Sprintf("%x", md5.Sum(otherData))
+ _, rep, err = kc.PutB(otherData)
+ c.Check(err, Equals, nil)
+
+ // GetIndex with no prefix; expect both data and otherData blocks
+ indexReader, err := kc.GetIndex("proxy", "")
+ c.Assert(err, Equals, nil)
+ indexResp, err := ioutil.ReadAll(indexReader)
+ locators := strings.Split(string(indexResp), "\n")
+ matchingLocators := 0
+ otherLocators := 0
+ for _, locator := range locators {
+ if strings.HasPrefix(locator, hash) {
+ matchingLocators++
+ } else if strings.HasPrefix(locator, otherHash) {
+ otherLocators++
+ }
}
+ c.Assert(2, Equals, matchingLocators)
+ c.Assert(2, Equals, otherLocators)
+
+ // GetIndex with prefix
+ indexReader, err = kc.GetIndex("proxy", hash[0:3])
+ c.Assert(err, Equals, nil)
+ indexResp, err = ioutil.ReadAll(indexReader)
+ locators = strings.Split(string(indexResp), "\n")
+ totalLocators := 0
+ matchingLocators = 0
+ for _, locator := range locators {
+ if locator != "" {
+ totalLocators++
+ }
+ if strings.HasPrefix(locator, hash[0:3]) {
+ matchingLocators++
+ }
+ }
+ c.Assert(2, Equals, matchingLocators)
+ c.Assert(totalLocators, Equals, matchingLocators)
+
+ // GetIndex with valid but no such prefix
+ indexReader, err = kc.GetIndex("proxy", "abcd")
+ c.Assert(err, Equals, nil)
+ indexResp, err = ioutil.ReadAll(indexReader)
+ c.Assert(string(indexResp), Equals, "")
+
+ // GetIndex with invalid prefix
+ indexReader, err = kc.GetIndex("proxy", "xyz")
+ c.Assert((err != nil), Equals, true)
}