7709: Merge branch 'master' into 7709-api-rails4
[arvados.git] / services / ws / server_test.go
1 package main
2
3 import (
4         "sync"
5         "time"
6
7         "git.curoverse.com/arvados.git/sdk/go/arvados"
8         check "gopkg.in/check.v1"
9 )
10
11 var _ = check.Suite(&serverSuite{})
12
13 type serverSuite struct {
14 }
15
16 func testConfig() *wsConfig {
17         cfg := defaultConfig()
18         cfg.Client = *(arvados.NewClientFromEnv())
19         cfg.Postgres = testDBConfig()
20         cfg.Listen = ":"
21         return &cfg
22 }
23
24 // TestBadDB ensures Run() returns an error (instead of panicking or
25 // deadlocking) if it can't connect to the database server at startup.
26 func (s *serverSuite) TestBadDB(c *check.C) {
27         cfg := testConfig()
28         cfg.Postgres["password"] = "1234"
29         srv := &server{wsConfig: cfg}
30
31         var wg sync.WaitGroup
32         wg.Add(1)
33         go func() {
34                 err := srv.Run()
35                 c.Check(err, check.NotNil)
36                 wg.Done()
37         }()
38         wg.Add(1)
39         go func() {
40                 srv.WaitReady()
41                 wg.Done()
42         }()
43
44         done := make(chan bool)
45         go func() {
46                 wg.Wait()
47                 close(done)
48         }()
49         select {
50         case <-done:
51         case <-time.After(10 * time.Second):
52                 c.Fatal("timeout")
53         }
54 }
55
56 func newTestServer() *server {
57         srv := &server{wsConfig: testConfig()}
58         go srv.Run()
59         srv.WaitReady()
60         return srv
61 }