github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/state/metricsmanager_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package state_test 5 6 import ( 7 "time" 8 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/state" 13 testing "github.com/juju/juju/state/testing" 14 coretesting "github.com/juju/juju/testing" 15 ) 16 17 type metricsManagerSuite struct { 18 testing.StateSuite 19 } 20 21 var _ = gc.Suite(&metricsManagerSuite{}) 22 23 func (s *metricsManagerSuite) TestDefaultsWritten(c *gc.C) { 24 mm, err := s.State.MetricsManager() 25 c.Assert(err, jc.ErrorIsNil) 26 c.Assert(mm.LastSuccessfulSend(), gc.DeepEquals, time.Time{}) 27 c.Assert(mm.ConsecutiveErrors(), gc.Equals, 0) 28 c.Assert(mm.GracePeriod(), gc.Equals, 24*7*time.Hour) 29 } 30 31 func (s *metricsManagerSuite) TestMetricsManagerCreatesThenReturns(c *gc.C) { 32 mm, err := s.State.MetricsManager() 33 c.Assert(err, jc.ErrorIsNil) 34 err = mm.IncrementConsecutiveErrors() 35 c.Assert(err, jc.ErrorIsNil) 36 mm2, err := s.State.MetricsManager() 37 c.Assert(err, jc.ErrorIsNil) 38 c.Assert(mm.ConsecutiveErrors(), gc.Equals, mm2.ConsecutiveErrors()) 39 } 40 41 func (s *metricsManagerSuite) TestSetLastSuccesfulSend(c *gc.C) { 42 mm, err := s.State.MetricsManager() 43 c.Assert(err, jc.ErrorIsNil) 44 err = mm.IncrementConsecutiveErrors() 45 c.Assert(err, jc.ErrorIsNil) 46 now := coretesting.ZeroTime().Round(time.Second).UTC() 47 err = mm.SetLastSuccessfulSend(now) 48 c.Assert(err, jc.ErrorIsNil) 49 c.Assert(mm.LastSuccessfulSend(), gc.DeepEquals, now) 50 c.Assert(mm.ConsecutiveErrors(), gc.Equals, 0) 51 52 m, err := s.State.MetricsManager() 53 c.Assert(err, jc.ErrorIsNil) 54 c.Assert(m.LastSuccessfulSend().Equal(now), jc.IsTrue) 55 c.Assert(mm.ConsecutiveErrors(), gc.Equals, 0) 56 } 57 58 func (s *metricsManagerSuite) TestIncrementConsecutiveErrors(c *gc.C) { 59 mm, err := s.State.MetricsManager() 60 c.Assert(err, jc.ErrorIsNil) 61 c.Assert(mm.ConsecutiveErrors(), gc.Equals, 0) 62 err = mm.IncrementConsecutiveErrors() 63 c.Assert(err, jc.ErrorIsNil) 64 c.Assert(mm.ConsecutiveErrors(), gc.Equals, 1) 65 66 m, err := s.State.MetricsManager() 67 c.Assert(err, jc.ErrorIsNil) 68 c.Assert(m.ConsecutiveErrors(), gc.Equals, 1) 69 } 70 71 func (s *metricsManagerSuite) TestSetGracePeriod(c *gc.C) { 72 mm, err := s.State.MetricsManager() 73 c.Assert(err, jc.ErrorIsNil) 74 c.Assert(mm.GracePeriod(), gc.Equals, time.Hour*24*7) 75 err = mm.SetGracePeriod(time.Hour) 76 c.Assert(err, jc.ErrorIsNil) 77 78 m, err := s.State.MetricsManager() 79 c.Assert(err, jc.ErrorIsNil) 80 c.Assert(m.GracePeriod(), gc.Equals, time.Hour) 81 } 82 83 func (s *metricsManagerSuite) TestNegativeGracePeriod(c *gc.C) { 84 mm, err := s.State.MetricsManager() 85 c.Assert(err, jc.ErrorIsNil) 86 c.Assert(mm.GracePeriod(), gc.Equals, time.Hour*24*7) 87 err = mm.SetGracePeriod(-time.Hour) 88 c.Assert(err, gc.ErrorMatches, "grace period can't be negative") 89 } 90 91 func (s *metricsManagerSuite) TestMeterStatus(c *gc.C) { 92 mm, err := s.State.MetricsManager() 93 c.Assert(err, jc.ErrorIsNil) 94 status := mm.MeterStatus() 95 c.Assert(status.Code, gc.Equals, state.MeterGreen) 96 now := coretesting.NonZeroTime() 97 err = mm.SetLastSuccessfulSend(now) 98 c.Assert(err, jc.ErrorIsNil) 99 for i := 0; i < 3; i++ { 100 err := mm.IncrementConsecutiveErrors() 101 c.Assert(err, jc.ErrorIsNil) 102 } 103 status = mm.MeterStatus() 104 c.Assert(status.Code, gc.Equals, state.MeterAmber) 105 err = mm.SetLastSuccessfulSend(now.Add(-(24 * 7 * time.Hour))) 106 c.Assert(err, jc.ErrorIsNil) 107 for i := 0; i < 3; i++ { 108 err := mm.IncrementConsecutiveErrors() 109 c.Assert(err, jc.ErrorIsNil) 110 } 111 status = mm.MeterStatus() 112 c.Assert(status.Code, gc.Equals, state.MeterRed) 113 114 err = mm.SetLastSuccessfulSend(now) 115 c.Assert(err, jc.ErrorIsNil) 116 status = mm.MeterStatus() 117 c.Assert(status.Code, gc.Equals, state.MeterGreen) 118 }