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 }