github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/featuretests/api_meterstatus_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package featuretests 5 6 import ( 7 "time" 8 9 jc "github.com/juju/testing/checkers" 10 "github.com/juju/utils" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/api/meterstatus" 14 "github.com/juju/juju/core/watcher/watchertest" 15 jujutesting "github.com/juju/juju/juju/testing" 16 "github.com/juju/juju/state" 17 ) 18 19 type meterStatusIntegrationSuite struct { 20 jujutesting.JujuConnSuite 21 22 status meterstatus.MeterStatusClient 23 unit *state.Unit 24 } 25 26 func (s *meterStatusIntegrationSuite) SetUpTest(c *gc.C) { 27 s.JujuConnSuite.SetUpTest(c) 28 s.unit = s.Factory.MakeUnit(c, nil) 29 30 password, err := utils.RandomPassword() 31 c.Assert(err, jc.ErrorIsNil) 32 err = s.unit.SetPassword(password) 33 c.Assert(err, jc.ErrorIsNil) 34 state := s.OpenAPIAs(c, s.unit.UnitTag(), password) 35 s.status = meterstatus.NewClient(state, s.unit.UnitTag()) 36 c.Assert(s.status, gc.NotNil) 37 } 38 39 func (s *meterStatusIntegrationSuite) TestMeterStatus(c *gc.C) { 40 code, info, err := s.status.MeterStatus() 41 c.Assert(err, jc.ErrorIsNil) 42 c.Assert(code, gc.Equals, "AMBER") 43 c.Assert(info, gc.Equals, "not set") 44 45 err = s.unit.SetMeterStatus("RED", "some status") 46 c.Assert(err, jc.ErrorIsNil) 47 48 code, info, err = s.status.MeterStatus() 49 c.Assert(err, jc.ErrorIsNil) 50 c.Assert(code, gc.Equals, "RED") 51 c.Assert(info, gc.Equals, "some status") 52 } 53 54 func (s *meterStatusIntegrationSuite) TestWatchMeterStatus(c *gc.C) { 55 w, err := s.status.WatchMeterStatus() 56 c.Assert(err, jc.ErrorIsNil) 57 wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync) 58 defer wc.AssertStops() 59 60 // Initial event. 61 wc.AssertOneChange() 62 63 err = s.unit.SetMeterStatus("AMBER", "ok") 64 c.Assert(err, jc.ErrorIsNil) 65 wc.AssertOneChange() 66 67 // Non-change is not reported. 68 err = s.unit.SetMeterStatus("AMBER", "ok") 69 c.Assert(err, jc.ErrorIsNil) 70 wc.AssertNoChange() 71 72 mm, err := s.State.MetricsManager() 73 c.Assert(err, jc.ErrorIsNil) 74 err = mm.SetLastSuccessfulSend(time.Now()) 75 c.Assert(err, jc.ErrorIsNil) 76 wc.AssertOneChange() 77 78 // meter status does not change on every failed 79 // attempt to send metrics - on three consecutive 80 // fails, we get a meter status change 81 err = mm.IncrementConsecutiveErrors() 82 c.Assert(err, jc.ErrorIsNil) 83 84 err = mm.IncrementConsecutiveErrors() 85 c.Assert(err, jc.ErrorIsNil) 86 87 err = mm.IncrementConsecutiveErrors() 88 c.Assert(err, jc.ErrorIsNil) 89 90 wc.AssertOneChange() 91 }