2cb7122543c62eb1be5f7d1f28aced9406e9759c
[arvados.git] / sdk / go / health / aggregator_test.go
1 package health
2
3 import (
4         "encoding/json"
5         "net/http"
6         "net/http/httptest"
7
8         "git.curoverse.com/arvados.git/sdk/go/arvados"
9         "git.curoverse.com/arvados.git/sdk/go/arvadostest"
10         "gopkg.in/check.v1"
11 )
12
13 type AggregatorSuite struct {
14         handler *Aggregator
15         req     *http.Request
16         resp    *httptest.ResponseRecorder
17 }
18
19 // Gocheck boilerplate
20 var _ = check.Suite(&AggregatorSuite{})
21
22 func (s *AggregatorSuite) TestInterface(c *check.C) {
23         var _ http.Handler = &Aggregator{}
24 }
25
26 func (s *AggregatorSuite) SetUpTest(c *check.C) {
27         s.handler = &Aggregator{Config: &arvados.Config{
28                 Clusters: map[string]arvados.Cluster{
29                         "zzzzz": {
30                                 ManagementToken: arvadostest.ManagementToken,
31                                 SystemNodes:     map[string]arvados.SystemNode{},
32                         },
33                 },
34         }}
35         s.req = httptest.NewRequest("GET", "/_health/all", nil)
36         s.req.Header.Set("Authorization", "Bearer "+arvadostest.ManagementToken)
37         s.resp = httptest.NewRecorder()
38 }
39
40 func (s *AggregatorSuite) TestNoAuth(c *check.C) {
41         s.req.Header.Del("Authorization")
42         s.handler.ServeHTTP(s.resp, s.req)
43         s.checkError(c)
44         c.Check(s.resp.Code, check.Equals, http.StatusUnauthorized)
45 }
46
47 func (s *AggregatorSuite) TestBadAuth(c *check.C) {
48         s.req.Header.Set("Authorization", "xyzzy")
49         s.handler.ServeHTTP(s.resp, s.req)
50         s.checkError(c)
51         c.Check(s.resp.Code, check.Equals, http.StatusUnauthorized)
52 }
53
54 func (s *AggregatorSuite) TestEmptyConfig(c *check.C) {
55         s.handler.ServeHTTP(s.resp, s.req)
56         s.checkOK(c)
57 }
58
59 func (s *AggregatorSuite) checkError(c *check.C) {
60         c.Check(s.resp.Code, check.Not(check.Equals), http.StatusOK)
61         var body map[string]interface{}
62         err := json.NewDecoder(s.resp.Body).Decode(&body)
63         c.Check(err, check.IsNil)
64         c.Check(body["health"], check.Not(check.Equals), "OK")
65 }
66
67 func (s *AggregatorSuite) checkOK(c *check.C) {
68         c.Check(s.resp.Code, check.Equals, http.StatusOK)
69         var body map[string]interface{}
70         err := json.NewDecoder(s.resp.Body).Decode(&body)
71         c.Check(err, check.IsNil)
72         c.Check(body["health"], check.Equals, "OK")
73 }