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  }