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 }