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: &params.Error{
   137  				Message: "<failure>",
   138  			}},
   139  		}},
   140  	})
   141  }