github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/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 ) 15 16 type metricsManagerSuite struct { 17 testing.StateSuite 18 } 19 20 var _ = gc.Suite(&metricsManagerSuite{}) 21 22 func (s *metricsManagerSuite) TestDefaultsWritten(c *gc.C) { 23 mm, err := s.State.MetricsManager() 24 c.Assert(err, jc.ErrorIsNil) 25 c.Assert(mm.LastSuccessfulSend(), gc.DeepEquals, time.Time{}) 26 c.Assert(mm.ConsecutiveErrors(), gc.Equals, 0) 27 c.Assert(mm.GracePeriod(), gc.Equals, 24*7*time.Hour) 28 } 29 30 func (s *metricsManagerSuite) TestMetricsManagerCreatesThenReturns(c *gc.C) { 31 mm, err := s.State.MetricsManager() 32 c.Assert(err, jc.ErrorIsNil) 33 err = mm.IncrementConsecutiveErrors() 34 c.Assert(err, jc.ErrorIsNil) 35 mm2, err := s.State.MetricsManager() 36 c.Assert(err, jc.ErrorIsNil) 37 c.Assert(mm.ConsecutiveErrors(), gc.Equals, mm2.ConsecutiveErrors()) 38 } 39 40 func (s *metricsManagerSuite) TestSetLastSuccesfulSend(c *gc.C) { 41 mm, err := s.State.MetricsManager() 42 c.Assert(err, jc.ErrorIsNil) 43 err = mm.IncrementConsecutiveErrors() 44 c.Assert(err, jc.ErrorIsNil) 45 now := time.Now().Round(time.Second).UTC() 46 err = mm.SetLastSuccessfulSend(now) 47 c.Assert(err, jc.ErrorIsNil) 48 c.Assert(mm.LastSuccessfulSend(), gc.DeepEquals, now) 49 c.Assert(mm.ConsecutiveErrors(), gc.Equals, 0) 50 51 m, err := s.State.MetricsManager() 52 c.Assert(err, jc.ErrorIsNil) 53 c.Assert(m.LastSuccessfulSend().Equal(now), jc.IsTrue) 54 c.Assert(mm.ConsecutiveErrors(), gc.Equals, 0) 55 } 56 57 func (s *metricsManagerSuite) TestIncrementConsecutiveErrors(c *gc.C) { 58 mm, err := s.State.MetricsManager() 59 c.Assert(err, jc.ErrorIsNil) 60 c.Assert(mm.ConsecutiveErrors(), gc.Equals, 0) 61 err = mm.IncrementConsecutiveErrors() 62 c.Assert(err, jc.ErrorIsNil) 63 c.Assert(mm.ConsecutiveErrors(), gc.Equals, 1) 64 65 m, err := s.State.MetricsManager() 66 c.Assert(err, jc.ErrorIsNil) 67 c.Assert(m.ConsecutiveErrors(), gc.Equals, 1) 68 } 69 70 func (s *metricsManagerSuite) TestSetGracePeriod(c *gc.C) { 71 mm, err := s.State.MetricsManager() 72 c.Assert(err, jc.ErrorIsNil) 73 c.Assert(mm.GracePeriod(), gc.Equals, time.Hour*24*7) 74 err = mm.SetGracePeriod(time.Hour) 75 c.Assert(err, jc.ErrorIsNil) 76 77 m, err := s.State.MetricsManager() 78 c.Assert(err, jc.ErrorIsNil) 79 c.Assert(m.GracePeriod(), gc.Equals, time.Hour) 80 } 81 82 func (s *metricsManagerSuite) TestNegativeGracePeriod(c *gc.C) { 83 mm, err := s.State.MetricsManager() 84 c.Assert(err, jc.ErrorIsNil) 85 c.Assert(mm.GracePeriod(), gc.Equals, time.Hour*24*7) 86 err = mm.SetGracePeriod(-time.Hour) 87 c.Assert(err, gc.ErrorMatches, "grace period can't be negative") 88 } 89 90 func (s *metricsManagerSuite) TestMeterStatus(c *gc.C) { 91 mm, err := s.State.MetricsManager() 92 c.Assert(err, jc.ErrorIsNil) 93 status := mm.MeterStatus() 94 c.Assert(status.Code, gc.Equals, state.MeterGreen) 95 now := time.Now() 96 err = mm.SetLastSuccessfulSend(now) 97 c.Assert(err, jc.ErrorIsNil) 98 for i := 0; i < 3; i++ { 99 err := mm.IncrementConsecutiveErrors() 100 c.Assert(err, jc.ErrorIsNil) 101 } 102 status = mm.MeterStatus() 103 c.Assert(status.Code, gc.Equals, state.MeterAmber) 104 err = mm.SetLastSuccessfulSend(now.Add(-(24 * 7 * time.Hour))) 105 c.Assert(err, jc.ErrorIsNil) 106 for i := 0; i < 3; i++ { 107 err := mm.IncrementConsecutiveErrors() 108 c.Assert(err, jc.ErrorIsNil) 109 } 110 status = mm.MeterStatus() 111 c.Assert(status.Code, gc.Equals, state.MeterRed) 112 113 err = mm.SetLastSuccessfulSend(now) 114 c.Assert(err, jc.ErrorIsNil) 115 status = mm.MeterStatus() 116 c.Assert(status.Code, gc.Equals, state.MeterGreen) 117 }