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  }