11260: Fix tests.
authorTom Clegg <tclegg@veritasgenetics.com>
Tue, 17 Oct 2017 19:49:14 +0000 (15:49 -0400)
committerTom Clegg <tclegg@veritasgenetics.com>
Wed, 18 Oct 2017 14:03:22 +0000 (10:03 -0400)
refs #11260

Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

build/run-tests.sh
sdk/go/health/aggregator.go
sdk/go/health/aggregator_test.go

index da27487cc069028030b181056b66c678eb0a7b09..63c8801998c7224d51cdd1f232f252843d1735e2 100755 (executable)
@@ -792,7 +792,7 @@ gostuff=(
     sdk/go/arvadosclient
     sdk/go/blockdigest
     sdk/go/dispatch
-#    sdk/go/health
+    sdk/go/health
     sdk/go/httpserver
     sdk/go/manifest
     sdk/go/streamer
index 334584b6225f98c59bbaa8912550c9566739b109..297a8617084b3247c7b15c18a8ae9c2176224518 100644 (file)
@@ -3,6 +3,7 @@ package health
 import (
        "context"
        "encoding/json"
+       "errors"
        "fmt"
        "net"
        "net/http"
@@ -199,10 +200,14 @@ func (agg *Aggregator) ping(url string, cluster *arvados.Cluster) (result CheckR
        err = json.NewDecoder(resp.Body).Decode(&result.Response)
        if err != nil {
                err = fmt.Errorf("cannot decode response: %s", err)
-               return
        } else if resp.StatusCode != http.StatusOK {
                err = fmt.Errorf("HTTP %d %s", resp.StatusCode, resp.Status)
-               return
+       } else if h, _ := result.Response["health"].(string); h != "OK" {
+               if e, ok := result.Response["error"].(string); ok && e != "" {
+                       err = errors.New(e)
+               } else {
+                       err = fmt.Errorf("health=%q in ping response", h)
+               }
        }
        return
 }
index 048886af3019229925dbe36b1e76b70b5c88cfd5..7e601f2e70211e30b1786edae098380ba89556e6 100644 (file)
@@ -2,8 +2,6 @@ package health
 
 import (
        "encoding/json"
-       "fmt"
-       "net"
        "net/http"
        "net/http/httptest"
        "strings"
@@ -85,7 +83,7 @@ func (s *AggregatorSuite) TestUnhealthy(c *check.C) {
        srv, listen := s.stubServer(&unhealthyHandler{})
        defer srv.Close()
        s.handler.Config.Clusters["zzzzz"].SystemNodes["localhost"] = arvados.SystemNode{
-               Keepstore: arvados.Keepstore{Listen: listen},
+               Keepstore: arvados.SystemServiceInstance{Listen: listen},
        }
        s.handler.ServeHTTP(s.resp, s.req)
        s.checkUnhealthy(c)
@@ -104,38 +102,50 @@ func (*healthyHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
 func (s *AggregatorSuite) TestHealthy(c *check.C) {
        srv, listen := s.stubServer(&healthyHandler{})
        defer srv.Close()
-       _, port, _ := net.SplitHostPort(listen)
        s.handler.Config.Clusters["zzzzz"].SystemNodes["localhost"] = arvados.SystemNode{
-               Keepstore: arvados.Keepstore{Listen: listen},
+               Keepproxy:   arvados.SystemServiceInstance{Listen: listen},
+               Keepstore:   arvados.SystemServiceInstance{Listen: listen},
+               Keepweb:     arvados.SystemServiceInstance{Listen: listen},
+               Nodemanager: arvados.SystemServiceInstance{Listen: listen},
+               RailsAPI:    arvados.SystemServiceInstance{Listen: listen},
+               Websocket:   arvados.SystemServiceInstance{Listen: listen},
+               Workbench:   arvados.SystemServiceInstance{Listen: listen},
        }
        s.handler.ServeHTTP(s.resp, s.req)
        resp := s.checkOK(c)
-       ep := resp.Checks[fmt.Sprintf("keepstore+http://localhost:%d/_health/ping", port)]
+       svc := "keepstore+http://localhost" + listen + "/_health/ping"
+       c.Logf("%#v", resp)
+       ep := resp.Checks[svc]
        c.Check(ep.Health, check.Equals, "OK")
-       c.Check(ep.Status, check.Equals, 200)
+       c.Check(ep.HTTPStatusCode, check.Equals, 200)
 }
 
 func (s *AggregatorSuite) TestHealthyAndUnhealthy(c *check.C) {
        srvH, listenH := s.stubServer(&healthyHandler{})
        defer srvH.Close()
-       _, portH, _ := net.SplitHostPort(listenH)
        srvU, listenU := s.stubServer(&unhealthyHandler{})
        defer srvU.Close()
-       _, portU, _ := net.SplitHostPort(listenU)
        s.handler.Config.Clusters["zzzzz"].SystemNodes["localhost"] = arvados.SystemNode{
-               Keepstore: arvados.Keepstore{Listen: listenH},
+               Keepproxy:   arvados.SystemServiceInstance{Listen: listenH},
+               Keepstore:   arvados.SystemServiceInstance{Listen: listenH},
+               Keepweb:     arvados.SystemServiceInstance{Listen: listenH},
+               Nodemanager: arvados.SystemServiceInstance{Listen: listenH},
+               RailsAPI:    arvados.SystemServiceInstance{Listen: listenH},
+               Websocket:   arvados.SystemServiceInstance{Listen: listenH},
+               Workbench:   arvados.SystemServiceInstance{Listen: listenH},
        }
        s.handler.Config.Clusters["zzzzz"].SystemNodes["127.0.0.1"] = arvados.SystemNode{
-               Keepstore: arvados.Keepstore{Listen: listenU},
+               Keepstore: arvados.SystemServiceInstance{Listen: listenU},
        }
        s.handler.ServeHTTP(s.resp, s.req)
        resp := s.checkUnhealthy(c)
-       ep := resp.Checks[fmt.Sprintf("keepstore+http://localhost:%d/_health/ping", portH)]
+       ep := resp.Checks["keepstore+http://localhost"+listenH+"/_health/ping"]
        c.Check(ep.Health, check.Equals, "OK")
-       c.Check(ep.Status, check.Equals, 200)
-       ep = resp.Checks[fmt.Sprintf("keepstore+http://127.0.0.1:%d/_health/ping", portU)]
+       c.Check(ep.HTTPStatusCode, check.Equals, 200)
+       ep = resp.Checks["keepstore+http://127.0.0.1"+listenU+"/_health/ping"]
        c.Check(ep.Health, check.Equals, "ERROR")
-       c.Check(ep.Status, check.Equals, 200)
+       c.Check(ep.HTTPStatusCode, check.Equals, 200)
+       c.Logf("%#v", ep)
 }
 
 func (s *AggregatorSuite) checkError(c *check.C) {
@@ -179,13 +189,13 @@ func (s *AggregatorSuite) TestPingTimeout(c *check.C) {
        srv, listen := s.stubServer(&slowHandler{})
        defer srv.Close()
        s.handler.Config.Clusters["zzzzz"].SystemNodes["localhost"] = arvados.SystemNode{
-               Keepstore: arvados.Keepstore{Listen: listen},
+               Keepstore: arvados.SystemServiceInstance{Listen: listen},
        }
        s.handler.ServeHTTP(s.resp, s.req)
        resp := s.checkUnhealthy(c)
-       ep := resp.Checks["localhost/keepstore/_health/ping"]
+       ep := resp.Checks["keepstore+http://localhost"+listen+"/_health/ping"]
        c.Check(ep.Health, check.Equals, "ERROR")
-       c.Check(ep.Status, check.Equals, 0)
+       c.Check(ep.HTTPStatusCode, check.Equals, 0)
        rt, err := ep.ResponseTime.Float64()
        c.Check(err, check.IsNil)
        c.Check(rt > 0.005, check.Equals, true)