github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/resource/api/server/base_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package server_test 5 6 import ( 7 "io" 8 "time" 9 10 "github.com/juju/errors" 11 "github.com/juju/testing" 12 gc "gopkg.in/check.v1" 13 charmresource "gopkg.in/juju/charm.v6-unstable/resource" 14 15 "github.com/juju/juju/charmstore" 16 "github.com/juju/juju/resource" 17 "github.com/juju/juju/resource/api" 18 "github.com/juju/juju/resource/api/server" 19 "github.com/juju/juju/resource/resourcetesting" 20 ) 21 22 type BaseSuite struct { 23 testing.IsolationSuite 24 25 stub *testing.Stub 26 data *stubDataStore 27 csClient *stubCSClient 28 } 29 30 func (s *BaseSuite) SetUpTest(c *gc.C) { 31 s.IsolationSuite.SetUpTest(c) 32 33 s.stub = &testing.Stub{} 34 s.data = &stubDataStore{stub: s.stub} 35 s.csClient = &stubCSClient{Stub: s.stub} 36 } 37 38 func (s *BaseSuite) newCSClient() (server.CharmStore, error) { 39 s.stub.AddCall("newCSClient") 40 if err := s.stub.NextErr(); err != nil { 41 return nil, err 42 } 43 44 return s.csClient, nil 45 } 46 47 func newResource(c *gc.C, name, username, data string) (resource.Resource, api.Resource) { 48 opened := resourcetesting.NewResource(c, nil, name, "a-application", data) 49 res := opened.Resource 50 res.Username = username 51 if username == "" { 52 res.Timestamp = time.Time{} 53 } 54 55 apiRes := api.Resource{ 56 CharmResource: api.CharmResource{ 57 Name: name, 58 Type: "file", 59 Path: res.Path, 60 Origin: "upload", 61 Revision: 0, 62 Fingerprint: res.Fingerprint.Bytes(), 63 Size: res.Size, 64 }, 65 ID: res.ID, 66 ApplicationID: res.ApplicationID, 67 Username: username, 68 Timestamp: res.Timestamp, 69 } 70 71 return res, apiRes 72 } 73 74 type stubDataStore struct { 75 stub *testing.Stub 76 77 ReturnListResources resource.ServiceResources 78 ReturnAddPendingResource string 79 ReturnGetResource resource.Resource 80 ReturnGetPendingResource resource.Resource 81 ReturnSetResource resource.Resource 82 ReturnUpdatePendingResource resource.Resource 83 } 84 85 func (s *stubDataStore) ListResources(service string) (resource.ServiceResources, error) { 86 s.stub.AddCall("ListResources", service) 87 if err := s.stub.NextErr(); err != nil { 88 return resource.ServiceResources{}, errors.Trace(err) 89 } 90 91 return s.ReturnListResources, nil 92 } 93 94 func (s *stubDataStore) AddPendingResource(service, userID string, chRes charmresource.Resource, r io.Reader) (string, error) { 95 s.stub.AddCall("AddPendingResource", service, userID, chRes, r) 96 if err := s.stub.NextErr(); err != nil { 97 return "", errors.Trace(err) 98 } 99 100 return s.ReturnAddPendingResource, nil 101 } 102 103 func (s *stubDataStore) GetResource(service, name string) (resource.Resource, error) { 104 s.stub.AddCall("GetResource", service, name) 105 if err := s.stub.NextErr(); err != nil { 106 return resource.Resource{}, errors.Trace(err) 107 } 108 109 return s.ReturnGetResource, nil 110 } 111 112 func (s *stubDataStore) GetPendingResource(service, name, pendingID string) (resource.Resource, error) { 113 s.stub.AddCall("GetPendingResource", service, name, pendingID) 114 if err := s.stub.NextErr(); err != nil { 115 return resource.Resource{}, errors.Trace(err) 116 } 117 118 return s.ReturnGetPendingResource, nil 119 } 120 121 func (s *stubDataStore) SetResource(applicationID, userID string, res charmresource.Resource, r io.Reader) (resource.Resource, error) { 122 s.stub.AddCall("SetResource", applicationID, userID, res, r) 123 if err := s.stub.NextErr(); err != nil { 124 return resource.Resource{}, errors.Trace(err) 125 } 126 127 return s.ReturnSetResource, nil 128 } 129 130 func (s *stubDataStore) UpdatePendingResource(applicationID, pendingID, userID string, res charmresource.Resource, r io.Reader) (resource.Resource, error) { 131 s.stub.AddCall("UpdatePendingResource", applicationID, pendingID, userID, res, r) 132 if err := s.stub.NextErr(); err != nil { 133 return resource.Resource{}, errors.Trace(err) 134 } 135 136 return s.ReturnUpdatePendingResource, nil 137 } 138 139 type stubCSClient struct { 140 *testing.Stub 141 142 ReturnListResources [][]charmresource.Resource 143 ReturnResourceInfo *charmresource.Resource 144 } 145 146 func (s *stubCSClient) ListResources(charms []charmstore.CharmID) ([][]charmresource.Resource, error) { 147 s.AddCall("ListResources", charms) 148 if err := s.NextErr(); err != nil { 149 return nil, errors.Trace(err) 150 } 151 152 return s.ReturnListResources, nil 153 } 154 155 func (s *stubCSClient) ResourceInfo(req charmstore.ResourceRequest) (charmresource.Resource, error) { 156 s.AddCall("ResourceInfo", req) 157 if err := s.NextErr(); err != nil { 158 return charmresource.Resource{}, errors.Trace(err) 159 } 160 161 if s.ReturnResourceInfo == nil { 162 return charmresource.Resource{}, errors.NotFoundf("resource %q", req.Name) 163 } 164 return *s.ReturnResourceInfo, nil 165 }