github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/api/client/resources/client_listresources_test.go (about) 1 // Copyright 2015 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 "go.uber.org/mock/gomock" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/api/base/mocks" 13 "github.com/juju/juju/api/client/resources" 14 coreresources "github.com/juju/juju/core/resources" 15 "github.com/juju/juju/rpc/params" 16 ) 17 18 var _ = gc.Suite(&ListResourcesSuite{}) 19 20 type ListResourcesSuite struct{} 21 22 func (s *ListResourcesSuite) TestListResources(c *gc.C) { 23 ctrl := gomock.NewController(c) 24 defer ctrl.Finish() 25 26 args := ¶ms.ListResourcesArgs{[]params.Entity{{ 27 Tag: "application-a-application", 28 }, { 29 Tag: "application-other-application", 30 }}} 31 expected1, apiResult1 := newResourceResult(c, "spam") 32 expected2, apiResult2 := newResourceResult(c, "eggs", "ham") 33 result := new(params.ResourcesResults) 34 results := params.ResourcesResults{ 35 Results: []params.ResourcesResult{apiResult1, apiResult2}, 36 } 37 38 mockFacadeCaller := mocks.NewMockFacadeCaller(ctrl) 39 mockFacadeCaller.EXPECT().FacadeCall("ListResources", args, result).SetArg(2, results).Return(nil) 40 client := resources.NewClientFromCaller(mockFacadeCaller) 41 42 res, err := client.ListResources([]string{"a-application", "other-application"}) 43 c.Assert(err, jc.ErrorIsNil) 44 c.Check(res, jc.DeepEquals, []coreresources.ApplicationResources{ 45 {Resources: expected1}, 46 {Resources: expected2}, 47 }) 48 } 49 50 func (s *ListResourcesSuite) TestBadApplication(c *gc.C) { 51 ctrl := gomock.NewController(c) 52 defer ctrl.Finish() 53 54 mockFacadeCaller := mocks.NewMockFacadeCaller(ctrl) 55 client := resources.NewClientFromCaller(mockFacadeCaller) 56 _, err := client.ListResources([]string{"???"}) 57 c.Check(err, gc.ErrorMatches, `.*invalid application.*`) 58 } 59 60 func (s *ListResourcesSuite) TestEmptyResources(c *gc.C) { 61 ctrl := gomock.NewController(c) 62 defer ctrl.Finish() 63 64 args := ¶ms.ListResourcesArgs{[]params.Entity{{ 65 Tag: "application-a-application", 66 }, { 67 Tag: "application-other-application", 68 }}} 69 result := new(params.ResourcesResults) 70 results := params.ResourcesResults{ 71 Results: []params.ResourcesResult{{}, {}}, 72 } 73 mockFacadeCaller := mocks.NewMockFacadeCaller(ctrl) 74 mockFacadeCaller.EXPECT().FacadeCall("ListResources", args, result).SetArg(2, results).Return(nil) 75 client := resources.NewClientFromCaller(mockFacadeCaller) 76 77 res, err := client.ListResources([]string{"a-application", "other-application"}) 78 c.Assert(err, jc.ErrorIsNil) 79 c.Check(res, jc.DeepEquals, []coreresources.ApplicationResources{{}, {}}) 80 } 81 82 func (s *ListResourcesSuite) TestServerError(c *gc.C) { 83 ctrl := gomock.NewController(c) 84 defer ctrl.Finish() 85 86 args := ¶ms.ListResourcesArgs{[]params.Entity{{ 87 Tag: "application-a-application", 88 }}} 89 result := new(params.ResourcesResults) 90 results := params.ResourcesResults{ 91 Results: []params.ResourcesResult{{}}, 92 } 93 mockFacadeCaller := mocks.NewMockFacadeCaller(ctrl) 94 mockFacadeCaller.EXPECT().FacadeCall("ListResources", args, result).SetArg(2, results).Return(errors.New("boom")) 95 client := resources.NewClientFromCaller(mockFacadeCaller) 96 97 _, err := client.ListResources([]string{"a-application"}) 98 c.Assert(err, gc.ErrorMatches, "boom") 99 } 100 101 func (s *ListResourcesSuite) TestArity(c *gc.C) { 102 ctrl := gomock.NewController(c) 103 defer ctrl.Finish() 104 105 args := ¶ms.ListResourcesArgs{[]params.Entity{{ 106 Tag: "application-a-application", 107 }, { 108 Tag: "application-other-application", 109 }}} 110 result := new(params.ResourcesResults) 111 results := params.ResourcesResults{ 112 Results: []params.ResourcesResult{{}}, 113 } 114 mockFacadeCaller := mocks.NewMockFacadeCaller(ctrl) 115 mockFacadeCaller.EXPECT().FacadeCall("ListResources", args, result).SetArg(2, results).Return(nil) 116 client := resources.NewClientFromCaller(mockFacadeCaller) 117 118 _, err := client.ListResources([]string{"a-application", "other-application"}) 119 c.Assert(err, gc.ErrorMatches, "expected 2 results, got 1") 120 } 121 122 func (s *ListResourcesSuite) TestConversionFailed(c *gc.C) { 123 ctrl := gomock.NewController(c) 124 defer ctrl.Finish() 125 126 args := ¶ms.ListResourcesArgs{[]params.Entity{{ 127 Tag: "application-a-application", 128 }}} 129 result := new(params.ResourcesResults) 130 results := params.ResourcesResults{ 131 Results: []params.ResourcesResult{{ 132 ErrorResult: params.ErrorResult{Error: ¶ms.Error{Message: "boom"}}, 133 }}, 134 } 135 mockFacadeCaller := mocks.NewMockFacadeCaller(ctrl) 136 mockFacadeCaller.EXPECT().FacadeCall("ListResources", args, result).SetArg(2, results).Return(nil) 137 client := resources.NewClientFromCaller(mockFacadeCaller) 138 139 _, err := client.ListResources([]string{"a-application"}) 140 c.Assert(err, gc.ErrorMatches, "boom") 141 }