github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/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 charmresource "github.com/juju/charm/v12/resource" 8 "github.com/juju/errors" 9 "github.com/juju/names/v5" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 coreresources "github.com/juju/juju/core/resources" 14 "github.com/juju/juju/rpc/params" 15 ) 16 17 var _ = gc.Suite(&ListResourcesSuite{}) 18 19 type ListResourcesSuite struct { 20 BaseSuite 21 } 22 23 func (s *ListResourcesSuite) TestOkay(c *gc.C) { 24 defer s.setUpTest(c).Finish() 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 appTag := names.NewApplicationTag("a-application") 42 s.backend.EXPECT().ListResources(appTag.Id()).Return(coreresources.ApplicationResources{ 43 Resources: []coreresources.Resource{ 44 res1, 45 res2, 46 }, 47 UnitResources: []coreresources.UnitResources{ 48 { 49 Tag: tag0, 50 Resources: []coreresources.Resource{ 51 res1, 52 res2, 53 }, 54 }, 55 { 56 Tag: tag1, 57 }, 58 }, 59 CharmStoreResources: []charmresource.Resource{ 60 chres1, 61 chres2, 62 }, 63 }, nil) 64 65 results, err := s.newFacade(c).ListResources(params.ListResourcesArgs{ 66 Entities: []params.Entity{{ 67 Tag: appTag.String(), 68 }}, 69 }) 70 c.Assert(err, jc.ErrorIsNil) 71 72 c.Check(results, jc.DeepEquals, params.ResourcesResults{ 73 Results: []params.ResourcesResult{{ 74 Resources: []params.Resource{ 75 apiRes1, 76 apiRes2, 77 }, 78 UnitResources: []params.UnitResources{ 79 { 80 Entity: params.Entity{ 81 Tag: tag0.String(), 82 }, 83 Resources: []params.Resource{ 84 apiRes1, 85 apiRes2, 86 }, 87 }, 88 { 89 // we should have a listing for every unit, even if they 90 // have no 91 Entity: params.Entity{ 92 Tag: tag1.String(), 93 }, 94 }, 95 }, 96 CharmStoreResources: []params.CharmResource{ 97 apiChRes1, 98 apiChRes2, 99 }, 100 }}, 101 }) 102 } 103 104 func (s *ListResourcesSuite) TestEmpty(c *gc.C) { 105 defer s.setUpTest(c).Finish() 106 tag := names.NewApplicationTag("a-application") 107 s.backend.EXPECT().ListResources(tag.Id()).Return(coreresources.ApplicationResources{}, nil) 108 109 results, err := s.newFacade(c).ListResources(params.ListResourcesArgs{ 110 Entities: []params.Entity{{ 111 Tag: tag.String(), 112 }}, 113 }) 114 c.Assert(err, jc.ErrorIsNil) 115 116 c.Check(results, jc.DeepEquals, params.ResourcesResults{ 117 Results: []params.ResourcesResult{{}}, 118 }) 119 } 120 121 func (s *ListResourcesSuite) TestError(c *gc.C) { 122 defer s.setUpTest(c).Finish() 123 failure := errors.New("<failure>") 124 tag := names.NewApplicationTag("a-application") 125 s.backend.EXPECT().ListResources(tag.Id()).Return(coreresources.ApplicationResources{}, failure) 126 127 results, err := s.newFacade(c).ListResources(params.ListResourcesArgs{ 128 Entities: []params.Entity{{ 129 Tag: tag.String(), 130 }}, 131 }) 132 c.Assert(err, jc.ErrorIsNil) 133 134 c.Check(results, jc.DeepEquals, params.ResourcesResults{ 135 Results: []params.ResourcesResult{{ 136 ErrorResult: params.ErrorResult{Error: ¶ms.Error{ 137 Message: "<failure>", 138 }}, 139 }}, 140 }) 141 }