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 := &params.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 := &params.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 := &params.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 := &params.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 := &params.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: &params.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  }