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: &params.Error{
   141  				Message: "<failure>",
   142  			}},
   143  		}},
   144  	})
   145  	s.stub.CheckCallNames(c, "ListResources")
   146  }