github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/resource/api/server/server_listresources_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 "github.com/juju/errors" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 charmresource "gopkg.in/juju/charm.v6-unstable/resource" 11 "gopkg.in/juju/names.v2" 12 13 "github.com/juju/juju/apiserver/params" 14 "github.com/juju/juju/resource" 15 "github.com/juju/juju/resource/api" 16 "github.com/juju/juju/resource/api/server" 17 ) 18 19 var _ = gc.Suite(&ListResourcesSuite{}) 20 21 type ListResourcesSuite struct { 22 BaseSuite 23 } 24 25 func (s *ListResourcesSuite) TestOkay(c *gc.C) { 26 res1, apiRes1 := newResource(c, "spam", "a-user", "spamspamspam") 27 res2, apiRes2 := newResource(c, "eggs", "a-user", "...") 28 29 tag0 := names.NewUnitTag("a-application/0") 30 tag1 := names.NewUnitTag("a-application/1") 31 32 chres1 := res1.Resource 33 chres2 := res2.Resource 34 chres1.Revision++ 35 chres2.Revision++ 36 37 apiChRes1 := apiRes1.CharmResource 38 apiChRes2 := apiRes2.CharmResource 39 apiChRes1.Revision++ 40 apiChRes2.Revision++ 41 42 s.data.ReturnListResources = resource.ServiceResources{ 43 Resources: []resource.Resource{ 44 res1, 45 res2, 46 }, 47 UnitResources: []resource.UnitResources{ 48 { 49 Tag: tag0, 50 Resources: []resource.Resource{ 51 res1, 52 res2, 53 }, 54 }, 55 { 56 Tag: tag1, 57 }, 58 }, 59 CharmStoreResources: []charmresource.Resource{ 60 chres1, 61 chres2, 62 }, 63 } 64 65 facade, err := server.NewFacade(s.data, s.newCSClient) 66 c.Assert(err, jc.ErrorIsNil) 67 68 results, err := facade.ListResources(api.ListResourcesArgs{ 69 Entities: []params.Entity{{ 70 Tag: "application-a-application", 71 }}, 72 }) 73 c.Assert(err, jc.ErrorIsNil) 74 75 c.Check(results, jc.DeepEquals, api.ResourcesResults{ 76 Results: []api.ResourcesResult{{ 77 Resources: []api.Resource{ 78 apiRes1, 79 apiRes2, 80 }, 81 UnitResources: []api.UnitResources{ 82 { 83 Entity: params.Entity{ 84 Tag: "unit-a-application-0", 85 }, 86 Resources: []api.Resource{ 87 apiRes1, 88 apiRes2, 89 }, 90 }, 91 { 92 // we should have a listing for every unit, even if they 93 // have no resources. 94 Entity: params.Entity{ 95 Tag: "unit-a-application-1", 96 }, 97 }, 98 }, 99 CharmStoreResources: []api.CharmResource{ 100 apiChRes1, 101 apiChRes2, 102 }, 103 }}, 104 }) 105 s.stub.CheckCallNames(c, "ListResources") 106 s.stub.CheckCall(c, 0, "ListResources", "a-application") 107 } 108 109 func (s *ListResourcesSuite) TestEmpty(c *gc.C) { 110 facade, err := server.NewFacade(s.data, s.newCSClient) 111 c.Assert(err, jc.ErrorIsNil) 112 113 results, err := facade.ListResources(api.ListResourcesArgs{ 114 Entities: []params.Entity{{ 115 Tag: "application-a-application", 116 }}, 117 }) 118 c.Assert(err, jc.ErrorIsNil) 119 120 c.Check(results, jc.DeepEquals, api.ResourcesResults{ 121 Results: []api.ResourcesResult{{}}, 122 }) 123 s.stub.CheckCallNames(c, "ListResources") 124 } 125 126 func (s *ListResourcesSuite) TestError(c *gc.C) { 127 failure := errors.New("<failure>") 128 s.stub.SetErrors(failure) 129 facade, err := server.NewFacade(s.data, s.newCSClient) 130 c.Assert(err, jc.ErrorIsNil) 131 132 results, err := facade.ListResources(api.ListResourcesArgs{ 133 Entities: []params.Entity{{ 134 Tag: "application-a-application", 135 }}, 136 }) 137 c.Assert(err, jc.ErrorIsNil) 138 139 c.Check(results, jc.DeepEquals, api.ResourcesResults{ 140 Results: []api.ResourcesResult{{ 141 ErrorResult: params.ErrorResult{Error: ¶ms.Error{ 142 Message: "<failure>", 143 }}, 144 }}, 145 }) 146 s.stub.CheckCallNames(c, "ListResources") 147 }