11901: Add /_health/ping and /_health/db health checks.
[arvados.git] / services / ws / server_test.go
1 package main
2
3 import (
4         "io/ioutil"
5         "net/http"
6         "sync"
7         "time"
8
9         "git.curoverse.com/arvados.git/sdk/go/arvados"
10         check "gopkg.in/check.v1"
11 )
12
13 var _ = check.Suite(&serverSuite{})
14
15 type serverSuite struct {
16         cfg *wsConfig
17         srv *server
18         wg  sync.WaitGroup
19 }
20
21 func (s *serverSuite) SetUpTest(c *check.C) {
22         s.cfg = s.testConfig()
23         s.srv = &server{wsConfig: s.cfg}
24 }
25
26 func (*serverSuite) testConfig() *wsConfig {
27         cfg := defaultConfig()
28         cfg.Client = *(arvados.NewClientFromEnv())
29         cfg.Postgres = testDBConfig()
30         cfg.Listen = ":"
31         return &cfg
32 }
33
34 // TestBadDB ensures Run() returns an error (instead of panicking or
35 // deadlocking) if it can't connect to the database server at startup.
36 func (s *serverSuite) TestBadDB(c *check.C) {
37         s.cfg.Postgres["password"] = "1234"
38
39         var wg sync.WaitGroup
40         wg.Add(1)
41         go func() {
42                 err := s.srv.Run()
43                 c.Check(err, check.NotNil)
44                 wg.Done()
45         }()
46         wg.Add(1)
47         go func() {
48                 s.srv.WaitReady()
49                 wg.Done()
50         }()
51
52         done := make(chan bool)
53         go func() {
54                 wg.Wait()
55                 close(done)
56         }()
57         select {
58         case <-done:
59         case <-time.After(10 * time.Second):
60                 c.Fatal("timeout")
61         }
62 }
63
64 func (s *serverSuite) TestHealth(c *check.C) {
65         go s.srv.Run()
66         s.srv.WaitReady()
67         resp, err := http.Get("http://" + s.srv.listener.Addr().String() + "/_health/ping")
68         c.Check(err, check.IsNil)
69         buf, err := ioutil.ReadAll(resp.Body)
70         c.Check(err, check.IsNil)
71         c.Check(string(buf), check.Equals, `{"health":"OK"}`+"\n")
72 }