From 952599738f3c9f8901c895858865fc90b5e30c1d Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Sat, 10 May 2014 15:33:19 -0400 Subject: [PATCH] 2798: Initial commit, supports querying API server for list of Keep disks. (new branch because I forgot to commit before leaving work) --- .../src/arvados.org/keepclient/keepclient.go | 41 +++++++++++++++++++ .../arvados.org/keepclient/keepclient_test.go | 23 +++++++++++ 2 files changed, 64 insertions(+) create mode 100644 sdk/go/src/arvados.org/keepclient/keepclient.go create mode 100644 sdk/go/src/arvados.org/keepclient/keepclient_test.go diff --git a/sdk/go/src/arvados.org/keepclient/keepclient.go b/sdk/go/src/arvados.org/keepclient/keepclient.go new file mode 100644 index 0000000000..6bd6cbf781 --- /dev/null +++ b/sdk/go/src/arvados.org/keepclient/keepclient.go @@ -0,0 +1,41 @@ +package keepclient + +import ( + "crypto/tls" + "encoding/json" + "net/http" +) + +type KeepDisk struct { + Hostname string `json:"service_host"` + Port int `json:"service_port"` +} + +func KeepDisks() (disks []KeepDisk, err error) { + tr := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + client := &http.Client{Transport: tr} + + var req *http.Request + if req, err = http.NewRequest("GET", "https://localhost:3001/arvados/v1/keep_disks", nil); err != nil { + return nil, err + } + + var resp *http.Response + req.Header.Add("Authorization", "OAuth2 4axaw8zxe0qm22wa6urpp5nskcne8z88cvbupv653y1njyi05h") + if resp, err = client.Do(req); err != nil { + return nil, err + } + + type SvcList struct { + Items []KeepDisk `json:"items"` + } + dec := json.NewDecoder(resp.Body) + var m SvcList + if err := dec.Decode(&m); err != nil { + return nil, err + } + + return m.Items, nil +} diff --git a/sdk/go/src/arvados.org/keepclient/keepclient_test.go b/sdk/go/src/arvados.org/keepclient/keepclient_test.go new file mode 100644 index 0000000000..95f6c3cc65 --- /dev/null +++ b/sdk/go/src/arvados.org/keepclient/keepclient_test.go @@ -0,0 +1,23 @@ +package keepclient + +import ( + . "gopkg.in/check.v1" + "testing" +) + +// Hook up gocheck into the "go test" runner. +func Test(t *testing.T) { TestingT(t) } + +type MySuite struct{} + +var _ = Suite(&MySuite{}) + +func (s *MySuite) TestGetKeepDisks(c *C) { + k, err := KeepDisks() + c.Assert(err, Equals, nil) + c.Assert(len(k), Equals, 2) + c.Assert(k[0].Hostname, Equals, "localhost") + c.Assert(k[0].Port, Equals, 25108) + c.Assert(k[1].Hostname, Equals, "localhost") + c.Assert(k[1].Port, Equals, 25107) +} -- 2.30.2