Merge branch 'master' into 7490-datamanager-dont-die-return-error
[arvados.git] / services / datamanager / keep / keep_test.go
1 package keep
2
3 import (
4         "encoding/json"
5         "net/http"
6         "net/http/httptest"
7         "testing"
8
9         "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
10         "git.curoverse.com/arvados.git/sdk/go/keepclient"
11
12         . "gopkg.in/check.v1"
13 )
14
15 // Gocheck boilerplate
16 func Test(t *testing.T) {
17         TestingT(t)
18 }
19
20 type KeepSuite struct{}
21
22 var _ = Suite(&KeepSuite{})
23
24 type TestHandler struct {
25         request TrashList
26 }
27
28 func (ts *TestHandler) ServeHTTP(writer http.ResponseWriter, req *http.Request) {
29         r := json.NewDecoder(req.Body)
30         r.Decode(&ts.request)
31 }
32
33 func (s *KeepSuite) TestSendTrashLists(c *C) {
34         th := TestHandler{}
35         server := httptest.NewServer(&th)
36         defer server.Close()
37
38         tl := map[string]TrashList{
39                 server.URL: TrashList{TrashRequest{"000000000000000000000000deadbeef", 99}}}
40
41         arv := arvadosclient.ArvadosClient{ApiToken: "abc123"}
42         kc := keepclient.KeepClient{Arvados: &arv, Client: &http.Client{}}
43         kc.SetServiceRoots(map[string]string{"xxxx": server.URL},
44                 map[string]string{"xxxx": server.URL},
45                 map[string]string{})
46
47         err := SendTrashLists(&kc, tl)
48         server.Close()
49
50         c.Check(err, IsNil)
51
52         c.Check(th.request,
53                 DeepEquals,
54                 tl[server.URL])
55
56 }
57
58 type TestHandlerError struct {
59 }
60
61 func (tse *TestHandlerError) ServeHTTP(writer http.ResponseWriter, req *http.Request) {
62         http.Error(writer, "I'm a teapot", 418)
63 }
64
65 func sendTrashListError(c *C, server *httptest.Server) {
66         tl := map[string]TrashList{
67                 server.URL: TrashList{TrashRequest{"000000000000000000000000deadbeef", 99}}}
68
69         arv := arvadosclient.ArvadosClient{ApiToken: "abc123"}
70         kc := keepclient.KeepClient{Arvados: &arv, Client: &http.Client{}}
71         kc.SetServiceRoots(map[string]string{"xxxx": server.URL},
72                 map[string]string{"xxxx": server.URL},
73                 map[string]string{})
74
75         err := SendTrashLists(&kc, tl)
76
77         c.Check(err, NotNil)
78         c.Check(err[0], NotNil)
79 }
80
81 func (s *KeepSuite) TestSendTrashListErrorResponse(c *C) {
82         server := httptest.NewServer(&TestHandlerError{})
83         sendTrashListError(c, server)
84         defer server.Close()
85 }
86
87 func (s *KeepSuite) TestSendTrashListUnreachable(c *C) {
88         sendTrashListError(c, httptest.NewUnstartedServer(&TestHandler{}))
89 }