github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/resource/api/server/server_listresources_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package server_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-unstable/resource"
    11  	"gopkg.in/juju/names.v2"
    12  
    13  	"github.com/juju/juju/apiserver/params"
    14  	"github.com/juju/juju/resource"
    15  	"github.com/juju/juju/resource/api"
    16  	"github.com/juju/juju/resource/api/server"
    17  )
    18  
    19  var _ = gc.Suite(&ListResourcesSuite{})
    20  
    21  type ListResourcesSuite struct {
    22  	BaseSuite
    23  }
    24  
    25  func (s *ListResourcesSuite) TestOkay(c *gc.C) {
    26  	res1, apiRes1 := newResource(c, "spam", "a-user", "spamspamspam")
    27  	res2, apiRes2 := newResource(c, "eggs", "a-user", "...")
    28  
    29  	tag0 := names.NewUnitTag("a-application/0")
    30  	tag1 := names.NewUnitTag("a-application/1")
    31  
    32  	chres1 := res1.Resource
    33  	chres2 := res2.Resource
    34  	chres1.Revision++
    35  	chres2.Revision++
    36  
    37  	apiChRes1 := apiRes1.CharmResource
    38  	apiChRes2 := apiRes2.CharmResource
    39  	apiChRes1.Revision++
    40  	apiChRes2.Revision++
    41  
    42  	s.data.ReturnListResources = resource.ServiceResources{
    43  		Resources: []resource.Resource{
    44  			res1,
    45  			res2,
    46  		},
    47  		UnitResources: []resource.UnitResources{
    48  			{
    49  				Tag: tag0,
    50  				Resources: []resource.Resource{
    51  					res1,
    52  					res2,
    53  				},
    54  			},
    55  			{
    56  				Tag: tag1,
    57  			},
    58  		},
    59  		CharmStoreResources: []charmresource.Resource{
    60  			chres1,
    61  			chres2,
    62  		},
    63  	}
    64  
    65  	facade, err := server.NewFacade(s.data, s.newCSClient)
    66  	c.Assert(err, jc.ErrorIsNil)
    67  
    68  	results, err := facade.ListResources(api.ListResourcesArgs{
    69  		Entities: []params.Entity{{
    70  			Tag: "application-a-application",
    71  		}},
    72  	})
    73  	c.Assert(err, jc.ErrorIsNil)
    74  
    75  	c.Check(results, jc.DeepEquals, api.ResourcesResults{
    76  		Results: []api.ResourcesResult{{
    77  			Resources: []api.Resource{
    78  				apiRes1,
    79  				apiRes2,
    80  			},
    81  			UnitResources: []api.UnitResources{
    82  				{
    83  					Entity: params.Entity{
    84  						Tag: "unit-a-application-0",
    85  					},
    86  					Resources: []api.Resource{
    87  						apiRes1,
    88  						apiRes2,
    89  					},
    90  				},
    91  				{
    92  					// we should have a listing for every unit, even if they
    93  					// have no resources.
    94  					Entity: params.Entity{
    95  						Tag: "unit-a-application-1",
    96  					},
    97  				},
    98  			},
    99  			CharmStoreResources: []api.CharmResource{
   100  				apiChRes1,
   101  				apiChRes2,
   102  			},
   103  		}},
   104  	})
   105  	s.stub.CheckCallNames(c, "ListResources")
   106  	s.stub.CheckCall(c, 0, "ListResources", "a-application")
   107  }
   108  
   109  func (s *ListResourcesSuite) TestEmpty(c *gc.C) {
   110  	facade, err := server.NewFacade(s.data, s.newCSClient)
   111  	c.Assert(err, jc.ErrorIsNil)
   112  
   113  	results, err := facade.ListResources(api.ListResourcesArgs{
   114  		Entities: []params.Entity{{
   115  			Tag: "application-a-application",
   116  		}},
   117  	})
   118  	c.Assert(err, jc.ErrorIsNil)
   119  
   120  	c.Check(results, jc.DeepEquals, api.ResourcesResults{
   121  		Results: []api.ResourcesResult{{}},
   122  	})
   123  	s.stub.CheckCallNames(c, "ListResources")
   124  }
   125  
   126  func (s *ListResourcesSuite) TestError(c *gc.C) {
   127  	failure := errors.New("<failure>")
   128  	s.stub.SetErrors(failure)
   129  	facade, err := server.NewFacade(s.data, s.newCSClient)
   130  	c.Assert(err, jc.ErrorIsNil)
   131  
   132  	results, err := facade.ListResources(api.ListResourcesArgs{
   133  		Entities: []params.Entity{{
   134  			Tag: "application-a-application",
   135  		}},
   136  	})
   137  	c.Assert(err, jc.ErrorIsNil)
   138  
   139  	c.Check(results, jc.DeepEquals, api.ResourcesResults{
   140  		Results: []api.ResourcesResult{{
   141  			ErrorResult: params.ErrorResult{Error: &params.Error{
   142  				Message: "<failure>",
   143  			}},
   144  		}},
   145  	})
   146  	s.stub.CheckCallNames(c, "ListResources")
   147  }