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  }