github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/setmeterstatus/setmeterstatus_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package setmeterstatus_test
     5  
     6  import (
     7  	stdtesting "testing"
     8  
     9  	"github.com/juju/cmd"
    10  	"github.com/juju/cmd/cmdtesting"
    11  	"github.com/juju/testing"
    12  	jc "github.com/juju/testing/checkers"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	"github.com/juju/juju/cmd/juju/setmeterstatus"
    16  	"github.com/juju/juju/cmd/modelcmd"
    17  	jujutesting "github.com/juju/juju/juju/testing"
    18  	"github.com/juju/juju/jujuclient/jujuclienttesting"
    19  	"github.com/juju/juju/state"
    20  	coretesting "github.com/juju/juju/testing"
    21  	"github.com/juju/juju/testing/factory"
    22  )
    23  
    24  func TestPackage(t *stdtesting.T) {
    25  	coretesting.MgoTestPackage(t)
    26  }
    27  
    28  type MockSetMeterStatusClient struct {
    29  	testing.Stub
    30  }
    31  
    32  func (m *MockSetMeterStatusClient) SetMeterStatus(tag, status, info string) error {
    33  	m.Stub.MethodCall(m, "SetMeterStatus", tag, status, info)
    34  	return m.NextErr()
    35  }
    36  func (m *MockSetMeterStatusClient) Close() error {
    37  	m.Stub.MethodCall(m, "Close")
    38  	return nil
    39  }
    40  
    41  type SetMeterStatusSuite struct {
    42  	coretesting.FakeJujuXDGDataHomeSuite
    43  }
    44  
    45  var _ = gc.Suite(&SetMeterStatusSuite{})
    46  
    47  func setMeterStatusCommand() cmd.Command {
    48  	return setmeterstatus.NewCommandForTest(jujuclienttesting.MinimalStore())
    49  }
    50  
    51  func (s *SetMeterStatusSuite) TestUnit(c *gc.C) {
    52  	client := MockSetMeterStatusClient{testing.Stub{}}
    53  	s.PatchValue(setmeterstatus.NewClient, func(_ modelcmd.ModelCommandBase) (setmeterstatus.SetMeterStatusClient, error) {
    54  		return &client, nil
    55  	})
    56  	_, err := cmdtesting.RunCommand(c, setMeterStatusCommand(), "metered/0", "RED")
    57  	c.Assert(err, jc.ErrorIsNil)
    58  	client.CheckCall(c, 0, "SetMeterStatus", "unit-metered-0", "RED", "")
    59  }
    60  
    61  func (s *SetMeterStatusSuite) TestApplication(c *gc.C) {
    62  	client := MockSetMeterStatusClient{testing.Stub{}}
    63  	s.PatchValue(setmeterstatus.NewClient, func(_ modelcmd.ModelCommandBase) (setmeterstatus.SetMeterStatusClient, error) {
    64  		return &client, nil
    65  	})
    66  	_, err := cmdtesting.RunCommand(c, setMeterStatusCommand(), "metered", "RED")
    67  	c.Assert(err, jc.ErrorIsNil)
    68  	client.CheckCall(c, 0, "SetMeterStatus", "application-metered", "RED", "")
    69  }
    70  
    71  func (s *SetMeterStatusSuite) TestNotValidApplicationOrUnit(c *gc.C) {
    72  	client := MockSetMeterStatusClient{testing.Stub{}}
    73  	s.PatchValue(setmeterstatus.NewClient, func(_ modelcmd.ModelCommandBase) (setmeterstatus.SetMeterStatusClient, error) {
    74  		return &client, nil
    75  	})
    76  	_, err := cmdtesting.RunCommand(c, setMeterStatusCommand(), "!!!!!!", "RED")
    77  	c.Assert(err, gc.ErrorMatches, `"!!!!!!" is not a valid unit or application`)
    78  }
    79  
    80  type DebugMetricsCommandSuite struct {
    81  	jujutesting.JujuConnSuite
    82  }
    83  
    84  var _ = gc.Suite(&DebugMetricsCommandSuite{})
    85  
    86  func (s *DebugMetricsCommandSuite) TestDebugNoArgs(c *gc.C) {
    87  	cmd := setmeterstatus.NewCommandForTest(s.ControllerStore)
    88  	_, err := cmdtesting.RunCommand(c, cmd)
    89  	c.Assert(err, gc.ErrorMatches, `you need to specify an entity \(application or unit\) and a status`)
    90  }
    91  
    92  func (s *DebugMetricsCommandSuite) TestUnits(c *gc.C) {
    93  	charm := s.Factory.MakeCharm(c, &factory.CharmParams{Name: "mysql", URL: "local:quantal/mysql-1"})
    94  	app := s.Factory.MakeApplication(c, &factory.ApplicationParams{Charm: charm})
    95  	unit := s.Factory.MakeUnit(c, &factory.UnitParams{Application: app, SetCharmURL: true})
    96  	cmd := setmeterstatus.NewCommandForTest(s.ControllerStore)
    97  	_, err := cmdtesting.RunCommand(c, cmd, unit.Name(), "RED", "--info", "foobar")
    98  	c.Assert(err, jc.ErrorIsNil)
    99  	status, err := unit.GetMeterStatus()
   100  	c.Assert(err, jc.ErrorIsNil)
   101  	c.Assert(status.Code.String(), gc.Equals, "RED")
   102  	c.Assert(status.Info, gc.Equals, "foobar")
   103  }
   104  
   105  func (s *DebugMetricsCommandSuite) TestApplication(c *gc.C) {
   106  	charm := s.Factory.MakeCharm(c, &factory.CharmParams{Name: "mysql", URL: "local:quantal/mysql-1"})
   107  	app := s.Factory.MakeApplication(c, &factory.ApplicationParams{Charm: charm})
   108  	unit0, err := app.AddUnit(state.AddUnitParams{})
   109  	c.Assert(err, jc.ErrorIsNil)
   110  	unit1, err := app.AddUnit(state.AddUnitParams{})
   111  	c.Assert(err, jc.ErrorIsNil)
   112  	cmd := setmeterstatus.NewCommandForTest(s.ControllerStore)
   113  	_, err = cmdtesting.RunCommand(c, cmd, "mysql", "RED", "--info", "foobar")
   114  	c.Assert(err, jc.ErrorIsNil)
   115  	status, err := unit0.GetMeterStatus()
   116  	c.Assert(err, jc.ErrorIsNil)
   117  	c.Assert(status.Code.String(), gc.Equals, "RED")
   118  	c.Assert(status.Info, gc.Equals, "foobar")
   119  
   120  	status, err = unit1.GetMeterStatus()
   121  	c.Assert(err, jc.ErrorIsNil)
   122  	c.Assert(status.Code.String(), gc.Equals, "RED")
   123  	c.Assert(status.Info, gc.Equals, "foobar")
   124  }