github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/apiserver/meterstatus/meterstatus_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package meterstatus_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/apiserver/common"
    11  	"github.com/juju/juju/apiserver/meterstatus"
    12  	meterstatustesting "github.com/juju/juju/apiserver/meterstatus/testing"
    13  	"github.com/juju/juju/apiserver/params"
    14  	apiservertesting "github.com/juju/juju/apiserver/testing"
    15  	jujutesting "github.com/juju/juju/juju/testing"
    16  	"github.com/juju/juju/state"
    17  	jujufactory "github.com/juju/juju/testing/factory"
    18  )
    19  
    20  var _ = gc.Suite(&meterStatusSuite{})
    21  
    22  type meterStatusSuite struct {
    23  	jujutesting.JujuConnSuite
    24  
    25  	authorizer apiservertesting.FakeAuthorizer
    26  	resources  *common.Resources
    27  
    28  	factory *jujufactory.Factory
    29  
    30  	unit *state.Unit
    31  
    32  	status meterstatus.MeterStatus
    33  }
    34  
    35  func (s *meterStatusSuite) SetUpTest(c *gc.C) {
    36  	s.JujuConnSuite.SetUpTest(c)
    37  
    38  	s.factory = jujufactory.NewFactory(s.State)
    39  	s.unit = s.factory.MakeUnit(c, nil)
    40  
    41  	// Create a FakeAuthorizer so we can check permissions,
    42  	// set up assuming unit 0 has logged in.
    43  	s.authorizer = apiservertesting.FakeAuthorizer{
    44  		Tag: s.unit.UnitTag(),
    45  	}
    46  
    47  	// Create the resource registry separately to track invocations to
    48  	// Register.
    49  	s.resources = common.NewResources()
    50  	s.AddCleanup(func(_ *gc.C) { s.resources.StopAll() })
    51  
    52  	status, err := meterstatus.NewMeterStatusAPI(s.State, s.resources, s.authorizer)
    53  	c.Assert(err, jc.ErrorIsNil)
    54  	s.status = status
    55  }
    56  
    57  func (s *meterStatusSuite) TestGetMeterStatusUnauthenticated(c *gc.C) {
    58  	service, err := s.unit.Service()
    59  	c.Assert(err, jc.ErrorIsNil)
    60  	otherunit := s.factory.MakeUnit(c, &jujufactory.UnitParams{Service: service})
    61  	args := params.Entities{Entities: []params.Entity{{otherunit.Tag().String()}}}
    62  	result, err := s.status.GetMeterStatus(args)
    63  	c.Assert(err, jc.ErrorIsNil)
    64  	c.Assert(result.Results, gc.HasLen, 1)
    65  	c.Assert(result.Results[0].Error, gc.ErrorMatches, "permission denied")
    66  	c.Assert(result.Results[0].Code, gc.Equals, "")
    67  	c.Assert(result.Results[0].Info, gc.Equals, "")
    68  }
    69  
    70  func (s *meterStatusSuite) TestGetMeterStatusBadTag(c *gc.C) {
    71  	tags := []string{
    72  		"user-admin",
    73  		"unit-nosuchunit",
    74  		"thisisnotatag",
    75  		"machine-0",
    76  		"model-blah",
    77  	}
    78  	args := params.Entities{Entities: make([]params.Entity, len(tags))}
    79  	for i, tag := range tags {
    80  		args.Entities[i] = params.Entity{Tag: tag}
    81  	}
    82  	result, err := s.status.GetMeterStatus(args)
    83  	c.Assert(err, jc.ErrorIsNil)
    84  	c.Assert(result.Results, gc.HasLen, len(tags))
    85  	for i, result := range result.Results {
    86  		c.Logf("checking result %d", i)
    87  		c.Assert(result.Code, gc.Equals, "")
    88  		c.Assert(result.Info, gc.Equals, "")
    89  		c.Assert(result.Error, gc.ErrorMatches, "permission denied")
    90  	}
    91  }
    92  
    93  func (s *meterStatusSuite) TestGetMeterStatus(c *gc.C) {
    94  	meterstatustesting.TestGetMeterStatus(c, s.status, s.unit)
    95  }
    96  
    97  func (s *meterStatusSuite) TestWatchMeterStatus(c *gc.C) {
    98  	meterstatustesting.TestWatchMeterStatus(c, s.status, s.unit, s.State, s.resources)
    99  }