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