github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/agent/meterstatus/testing/tests.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package testing
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/apiserver/common"
    11  	"github.com/juju/juju/apiserver/facades/agent/meterstatus"
    12  	"github.com/juju/juju/apiserver/params"
    13  	apiservertesting "github.com/juju/juju/apiserver/testing"
    14  	jujustate "github.com/juju/juju/state"
    15  	statetesting "github.com/juju/juju/state/testing"
    16  )
    17  
    18  // TestGetMeterStatus tests unit meter status retrieval.
    19  func TestGetMeterStatus(c *gc.C, status meterstatus.MeterStatus, unit *jujustate.Unit) {
    20  	args := params.Entities{Entities: []params.Entity{{Tag: unit.Tag().String()}}}
    21  	result, err := status.GetMeterStatus(args)
    22  	c.Assert(err, jc.ErrorIsNil)
    23  	c.Assert(result.Results, gc.HasLen, 1)
    24  	c.Assert(result.Results[0].Error, gc.IsNil)
    25  	c.Assert(result.Results[0].Code, gc.Equals, "AMBER")
    26  	c.Assert(result.Results[0].Info, gc.Equals, "not set")
    27  
    28  	newCode := "GREEN"
    29  	newInfo := "All is ok."
    30  
    31  	err = unit.SetMeterStatus(newCode, newInfo)
    32  	c.Assert(err, jc.ErrorIsNil)
    33  
    34  	result, err = status.GetMeterStatus(args)
    35  	c.Assert(err, jc.ErrorIsNil)
    36  	c.Assert(result.Results, gc.HasLen, 1)
    37  	c.Assert(result.Results[0].Error, gc.IsNil)
    38  	c.Assert(result.Results[0].Code, gc.DeepEquals, newCode)
    39  	c.Assert(result.Results[0].Info, gc.DeepEquals, newInfo)
    40  }
    41  
    42  // TestWatchMeterStatus tests the meter status watcher functionality.
    43  func TestWatchMeterStatus(c *gc.C, status meterstatus.MeterStatus, unit *jujustate.Unit, state *jujustate.State, resources *common.Resources) {
    44  	c.Assert(resources.Count(), gc.Equals, 0)
    45  
    46  	args := params.Entities{Entities: []params.Entity{
    47  		{Tag: unit.UnitTag().String()},
    48  		{Tag: "unit-foo-42"},
    49  	}}
    50  	result, err := status.WatchMeterStatus(args)
    51  	c.Assert(err, jc.ErrorIsNil)
    52  	c.Assert(result, gc.DeepEquals, params.NotifyWatchResults{
    53  		Results: []params.NotifyWatchResult{
    54  			{NotifyWatcherId: "1"},
    55  			{Error: apiservertesting.ErrUnauthorized},
    56  		},
    57  	})
    58  
    59  	// Verify the resource was registered and stop when done
    60  	c.Assert(resources.Count(), gc.Equals, 1)
    61  	resource := resources.Get("1")
    62  	defer statetesting.AssertStop(c, resource)
    63  
    64  	// Check that the Watch has consumed the initial event ("returned" in
    65  	// the Watch call)
    66  	wc := statetesting.NewNotifyWatcherC(c, state, resource.(jujustate.NotifyWatcher))
    67  	wc.AssertNoChange()
    68  
    69  	err = unit.SetMeterStatus("GREEN", "No additional information.")
    70  	c.Assert(err, jc.ErrorIsNil)
    71  	wc.AssertOneChange()
    72  }