11901: Require management token for health checks.
[arvados.git] / services / ws / server_test.go
index 57c734af2dac622cc6543ea672c1f5fe940ca4a7..da7440d0e0b98e10092b434655fa0b399d502066 100644 (file)
@@ -7,6 +7,7 @@ import (
        "time"
 
        "git.curoverse.com/arvados.git/sdk/go/arvados"
+       "git.curoverse.com/arvados.git/sdk/go/arvadostest"
        check "gopkg.in/check.v1"
 )
 
@@ -28,6 +29,7 @@ func (*serverSuite) testConfig() *wsConfig {
        cfg.Client = *(arvados.NewClientFromEnv())
        cfg.Postgres = testDBConfig()
        cfg.Listen = ":"
+       cfg.ManagementToken = arvadostest.ManagementToken
        return &cfg
 }
 
@@ -64,9 +66,21 @@ func (s *serverSuite) TestBadDB(c *check.C) {
 func (s *serverSuite) TestHealth(c *check.C) {
        go s.srv.Run()
        s.srv.WaitReady()
-       resp, err := http.Get("http://" + s.srv.listener.Addr().String() + "/_health/ping")
-       c.Check(err, check.IsNil)
-       buf, err := ioutil.ReadAll(resp.Body)
-       c.Check(err, check.IsNil)
-       c.Check(string(buf), check.Equals, `{"health":"OK"}`+"\n")
+       for _, token := range []string{"", "foo", s.cfg.ManagementToken} {
+               req, err := http.NewRequest("GET", "http://"+s.srv.listener.Addr().String()+"/_health/ping", nil)
+               c.Assert(err, check.IsNil)
+               if token != "" {
+                       req.Header.Add("Authorization", "Bearer "+token)
+               }
+               resp, err := http.DefaultClient.Do(req)
+               c.Check(err, check.IsNil)
+               if token == s.cfg.ManagementToken {
+                       c.Check(resp.StatusCode, check.Equals, http.StatusOK)
+                       buf, err := ioutil.ReadAll(resp.Body)
+                       c.Check(err, check.IsNil)
+                       c.Check(string(buf), check.Equals, `{"health":"OK"}`+"\n")
+               } else {
+                       c.Check(resp.StatusCode, check.Not(check.Equals), http.StatusOK)
+               }
+       }
 }