47
func (s *AddPendingResourcesSuite) TestError(c *gc.C) {
49
func (s *AddPendingResourcesSuite) TestWithURLUpToDate(c *gc.C) {
50
res1, apiRes1 := newResource(c, "spam", "a-user", "spamspamspam")
51
res1.Origin = charmresource.OriginStore
53
apiRes1.Origin = charmresource.OriginStore.String()
55
id1 := "some-unique-ID"
56
s.data.ReturnAddPendingResource = id1
57
s.csClient.ReturnListResources = [][]charmresource.Resource{{
60
facade, err := server.NewFacade(s.data, s.newCSClient)
61
c.Assert(err, jc.ErrorIsNil)
63
result, err := facade.AddPendingResources(api.AddPendingResourcesArgs{
64
Entity: params.Entity{
65
Tag: "service-a-service",
67
AddCharmWithAuthorization: params.AddCharmWithAuthorization{
68
URL: "cs:~a-user/trusty/spam-5",
70
Resources: []api.CharmResource{
71
apiRes1.CharmResource,
74
c.Assert(err, jc.ErrorIsNil)
75
c.Assert(result.Error, gc.IsNil)
77
s.stub.CheckCallNames(c, "newCSClient", "ListResources", "AddPendingResource")
78
s.stub.CheckCall(c, 2, "AddPendingResource", "a-service", "", res1.Resource, nil)
79
c.Check(result, jc.DeepEquals, api.AddPendingResourcesResult{
86
func (s *AddPendingResourcesSuite) TestWithURLMismatchComplete(c *gc.C) {
87
res1, apiRes1 := newResource(c, "spam", "a-user", "spamspamspam")
88
res1.Origin = charmresource.OriginStore
90
apiRes1.Origin = charmresource.OriginStore.String()
92
id1 := "some-unique-ID"
93
s.data.ReturnAddPendingResource = id1
94
csRes := res1 // a copy
96
s.csClient.ReturnListResources = [][]charmresource.Resource{{
99
facade, err := server.NewFacade(s.data, s.newCSClient)
100
c.Assert(err, jc.ErrorIsNil)
102
result, err := facade.AddPendingResources(api.AddPendingResourcesArgs{
103
Entity: params.Entity{
104
Tag: "service-a-service",
106
AddCharmWithAuthorization: params.AddCharmWithAuthorization{
107
URL: "cs:~a-user/trusty/spam-5",
109
Resources: []api.CharmResource{
110
apiRes1.CharmResource,
113
c.Assert(err, jc.ErrorIsNil)
114
c.Assert(result.Error, gc.IsNil)
116
s.stub.CheckCallNames(c, "newCSClient", "ListResources", "AddPendingResource")
117
s.stub.CheckCall(c, 2, "AddPendingResource", "a-service", "", res1.Resource, nil)
118
c.Check(result, jc.DeepEquals, api.AddPendingResourcesResult{
119
PendingIDs: []string{
125
func (s *AddPendingResourcesSuite) TestWithURLMismatchIncomplete(c *gc.C) {
126
res1, apiRes1 := newResource(c, "spam", "a-user", "spamspamspam")
127
res1.Origin = charmresource.OriginStore
129
apiRes1.Origin = charmresource.OriginStore.String()
131
apiRes1.Fingerprint = nil
133
id1 := "some-unique-ID"
134
s.data.ReturnAddPendingResource = id1
135
csRes := res1 // a copy
137
s.csClient.ReturnListResources = [][]charmresource.Resource{{
140
expected := charmresource.Resource{
142
Origin: charmresource.OriginStore,
144
Fingerprint: res1.Fingerprint,
147
s.csClient.ReturnGetResource = &expected
148
facade, err := server.NewFacade(s.data, s.newCSClient)
149
c.Assert(err, jc.ErrorIsNil)
151
result, err := facade.AddPendingResources(api.AddPendingResourcesArgs{
152
Entity: params.Entity{
153
Tag: "service-a-service",
155
AddCharmWithAuthorization: params.AddCharmWithAuthorization{
156
URL: "cs:~a-user/trusty/spam-5",
158
Resources: []api.CharmResource{
159
apiRes1.CharmResource,
162
c.Assert(err, jc.ErrorIsNil)
164
s.stub.CheckCallNames(c, "newCSClient", "ListResources", "GetResource", "AddPendingResource")
165
s.stub.CheckCall(c, 3, "AddPendingResource", "a-service", "", expected, nil)
166
c.Check(result, jc.DeepEquals, api.AddPendingResourcesResult{
167
PendingIDs: []string{
173
func (s *AddPendingResourcesSuite) TestWithURLNoRevision(c *gc.C) {
174
res1, apiRes1 := newResource(c, "spam", "a-user", "spamspamspam")
175
res1.Origin = charmresource.OriginStore
178
apiRes1.Origin = charmresource.OriginStore.String()
179
apiRes1.Revision = -1
181
apiRes1.Fingerprint = nil
182
id1 := "some-unique-ID"
183
s.data.ReturnAddPendingResource = id1
184
csRes := res1 // a copy
187
s.csClient.ReturnListResources = [][]charmresource.Resource{{
190
facade, err := server.NewFacade(s.data, s.newCSClient)
191
c.Assert(err, jc.ErrorIsNil)
193
result, err := facade.AddPendingResources(api.AddPendingResourcesArgs{
194
Entity: params.Entity{
195
Tag: "service-a-service",
197
AddCharmWithAuthorization: params.AddCharmWithAuthorization{
198
URL: "cs:~a-user/trusty/spam-5",
200
Resources: []api.CharmResource{
201
apiRes1.CharmResource,
204
c.Assert(err, jc.ErrorIsNil)
205
c.Assert(result.Error, gc.IsNil)
207
s.stub.CheckCallNames(c, "newCSClient", "ListResources", "AddPendingResource")
208
s.stub.CheckCall(c, 2, "AddPendingResource", "a-service", "", res1.Resource, nil)
209
c.Check(result, jc.DeepEquals, api.AddPendingResourcesResult{
210
PendingIDs: []string{
216
func (s *AddPendingResourcesSuite) TestWithURLUpload(c *gc.C) {
217
res1, apiRes1 := newResource(c, "spam", "a-user", "spamspamspam")
218
res1.Origin = charmresource.OriginUpload
220
apiRes1.Origin = charmresource.OriginUpload.String()
222
id1 := "some-unique-ID"
223
s.data.ReturnAddPendingResource = id1
224
csRes := res1 // a copy
225
csRes.Origin = charmresource.OriginStore
227
s.csClient.ReturnListResources = [][]charmresource.Resource{{
230
facade, err := server.NewFacade(s.data, s.newCSClient)
231
c.Assert(err, jc.ErrorIsNil)
233
result, err := facade.AddPendingResources(api.AddPendingResourcesArgs{
234
Entity: params.Entity{
235
Tag: "service-a-service",
237
AddCharmWithAuthorization: params.AddCharmWithAuthorization{
238
URL: "cs:~a-user/trusty/spam-5",
240
Resources: []api.CharmResource{
241
apiRes1.CharmResource,
244
c.Assert(err, jc.ErrorIsNil)
245
c.Assert(result.Error, gc.IsNil)
247
s.stub.CheckCallNames(c, "newCSClient", "ListResources", "AddPendingResource")
248
s.stub.CheckCall(c, 2, "AddPendingResource", "a-service", "", res1.Resource, nil)
249
c.Check(result, jc.DeepEquals, api.AddPendingResourcesResult{
250
PendingIDs: []string{
256
// TODO(ericsnow) Once the CS API has ListResources() implemented:
257
//func (s *AddPendingResourcesSuite) TestUnknownResource(c *gc.C) {
258
// _, apiRes1 := newResource(c, "spam", "a-user", "spamspamspam")
259
// apiRes1.Origin = charmresource.OriginStore.String()
260
// facade, err := server.NewFacade(s.data, s.newCSClient)
261
// c.Assert(err, jc.ErrorIsNil)
263
// result, err := facade.AddPendingResources(api.AddPendingResourcesArgs{
264
// Entity: params.Entity{
265
// Tag: "service-a-service",
267
// AddCharmWithAuthorization: params.AddCharmWithAuthorization{
268
// URL: "cs:~a-user/trusty/spam-5",
270
// Resources: []api.CharmResource{
271
// apiRes1.CharmResource,
274
// c.Assert(err, jc.ErrorIsNil)
276
// s.stub.CheckCallNames(c, "newCSClient", "ListResources")
277
// c.Check(result, jc.DeepEquals, api.AddPendingResourcesResult{
278
// ErrorResult: params.ErrorResult{Error: ¶ms.Error{
279
// Message: `charm store resource "spam" not found`,
280
// Code: params.CodeNotFound,
285
func (s *AddPendingResourcesSuite) TestUnknownResource(c *gc.C) {
286
res1, apiRes1 := newResource(c, "spam", "a-user", "spamspamspam")
287
res1.Origin = charmresource.OriginStore
289
apiRes1.Origin = charmresource.OriginStore.String()
291
id1 := "some-unique-ID"
292
s.data.ReturnAddPendingResource = id1
293
s.csClient.ReturnListResources = [][]charmresource.Resource{{
296
facade, err := server.NewFacade(s.data, s.newCSClient)
297
c.Assert(err, jc.ErrorIsNil)
299
result, err := facade.AddPendingResources(api.AddPendingResourcesArgs{
300
Entity: params.Entity{
301
Tag: "service-a-service",
303
AddCharmWithAuthorization: params.AddCharmWithAuthorization{
304
URL: "cs:~a-user/trusty/spam-5",
306
Resources: []api.CharmResource{
307
apiRes1.CharmResource,
310
c.Assert(err, jc.ErrorIsNil)
312
s.stub.CheckCallNames(c, "newCSClient", "ListResources", "AddPendingResource")
313
s.stub.CheckCall(c, 2, "AddPendingResource", "a-service", "", res1.Resource, nil)
314
c.Check(result, jc.DeepEquals, api.AddPendingResourcesResult{
315
PendingIDs: []string{
321
func (s *AddPendingResourcesSuite) TestDataStoreError(c *gc.C) {
48
322
_, apiRes1 := newResource(c, "spam", "a-user", "spamspamspam")
49
323
failure := errors.New("<failure>")
50
324
s.stub.SetErrors(failure)
51
facade := server.NewFacade(s.data)
325
facade, err := server.NewFacade(s.data, s.newCSClient)
326
c.Assert(err, jc.ErrorIsNil)
53
328
result, err := facade.AddPendingResources(api.AddPendingResourcesArgs{
54
329
Entity: params.Entity{