github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/client/resources/base_test.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package resources_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/resource" 14 15 "github.com/juju/juju/apiserver/facades/client/resources" 16 "github.com/juju/juju/apiserver/params" 17 "github.com/juju/juju/charmstore" 18 "github.com/juju/juju/resource" 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() (resources.CharmStore, error) { 39 s.stub.AddCall("newCSClient") 40 if err := s.stub.NextErr(); err != nil { 41 return nil, err 42 } 43 return s.csClient, nil 44 } 45 46 func newResource(c *gc.C, name, username, data string) (resource.Resource, params.Resource) { 47 opened := resourcetesting.NewResource(c, nil, name, "a-application", data) 48 res := opened.Resource 49 res.Username = username 50 if username == "" { 51 res.Timestamp = time.Time{} 52 } 53 54 apiRes := params.Resource{ 55 CharmResource: params.CharmResource{ 56 Name: name, 57 Description: name + " description", 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.ApplicationResources 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) OpenResource(application, name string) (resource.Resource, io.ReadCloser, error) { 86 s.stub.AddCall("OpenResource", application, name) 87 if err := s.stub.NextErr(); err != nil { 88 return resource.Resource{}, nil, errors.Trace(err) 89 } 90 return s.ReturnGetResource, nil, nil 91 } 92 93 func (s *stubDataStore) ListResources(application string) (resource.ApplicationResources, error) { 94 s.stub.AddCall("ListResources", application) 95 if err := s.stub.NextErr(); err != nil { 96 return resource.ApplicationResources{}, errors.Trace(err) 97 } 98 99 return s.ReturnListResources, nil 100 } 101 102 func (s *stubDataStore) AddPendingResource(application, userID string, chRes charmresource.Resource) (string, error) { 103 s.stub.AddCall("AddPendingResource", application, userID, chRes) 104 if err := s.stub.NextErr(); err != nil { 105 return "", errors.Trace(err) 106 } 107 108 return s.ReturnAddPendingResource, nil 109 } 110 111 func (s *stubDataStore) GetResource(application, name string) (resource.Resource, error) { 112 s.stub.AddCall("GetResource", application, name) 113 if err := s.stub.NextErr(); err != nil { 114 return resource.Resource{}, errors.Trace(err) 115 } 116 117 return s.ReturnGetResource, nil 118 } 119 120 func (s *stubDataStore) GetPendingResource(application, name, pendingID string) (resource.Resource, error) { 121 s.stub.AddCall("GetPendingResource", application, name, pendingID) 122 if err := s.stub.NextErr(); err != nil { 123 return resource.Resource{}, errors.Trace(err) 124 } 125 126 return s.ReturnGetPendingResource, nil 127 } 128 129 func (s *stubDataStore) SetResource(applicationID, userID string, res charmresource.Resource, r io.Reader) (resource.Resource, error) { 130 s.stub.AddCall("SetResource", applicationID, userID, res, r) 131 if err := s.stub.NextErr(); err != nil { 132 return resource.Resource{}, errors.Trace(err) 133 } 134 135 return s.ReturnSetResource, nil 136 } 137 138 func (s *stubDataStore) UpdatePendingResource(applicationID, pendingID, userID string, res charmresource.Resource, r io.Reader) (resource.Resource, error) { 139 s.stub.AddCall("UpdatePendingResource", applicationID, pendingID, userID, res, r) 140 if err := s.stub.NextErr(); err != nil { 141 return resource.Resource{}, errors.Trace(err) 142 } 143 144 return s.ReturnUpdatePendingResource, nil 145 } 146 147 type stubCSClient struct { 148 *testing.Stub 149 150 ReturnListResources [][]charmresource.Resource 151 ReturnResourceInfo *charmresource.Resource 152 } 153 154 func (s *stubCSClient) ListResources(charms []charmstore.CharmID) ([][]charmresource.Resource, error) { 155 s.AddCall("ListResources", charms) 156 if err := s.NextErr(); err != nil { 157 return nil, errors.Trace(err) 158 } 159 160 return s.ReturnListResources, nil 161 } 162 163 func (s *stubCSClient) ResourceInfo(req charmstore.ResourceRequest) (charmresource.Resource, error) { 164 s.AddCall("ResourceInfo", req) 165 if err := s.NextErr(); err != nil { 166 return charmresource.Resource{}, errors.Trace(err) 167 } 168 169 if s.ReturnResourceInfo == nil { 170 return charmresource.Resource{}, errors.NotFoundf("resource %q", req.Name) 171 } 172 return *s.ReturnResourceInfo, nil 173 }