1
// Copyright 2012, 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
jc "github.com/juju/testing/checkers"
10
"github.com/juju/utils/series"
11
gc "gopkg.in/check.v1"
12
"gopkg.in/juju/charm.v6-unstable"
14
"github.com/juju/juju/cmd/juju/common"
15
jujutesting "github.com/juju/juju/juju/testing"
16
"github.com/juju/juju/state"
17
"github.com/juju/juju/testcharms"
18
"github.com/juju/juju/testing"
21
type RemoveUnitSuite struct {
26
func (s *RemoveUnitSuite) SetUpTest(c *gc.C) {
27
s.RepoSuite.SetUpTest(c)
28
s.CmdBlockHelper = common.NewCmdBlockHelper(s.APIState)
29
c.Assert(s.CmdBlockHelper, gc.NotNil)
30
s.AddCleanup(func(*gc.C) { s.CmdBlockHelper.Close() })
33
var _ = gc.Suite(&RemoveUnitSuite{})
35
func runRemoveUnit(c *gc.C, args ...string) error {
36
_, err := testing.RunCommand(c, NewRemoveUnitCommand(), args...)
40
func (s *RemoveUnitSuite) setupUnitForRemove(c *gc.C) *state.Application {
41
ch := testcharms.Repo.CharmArchivePath(s.CharmsPath, "dummy")
42
err := runDeploy(c, "-n", "2", ch, "dummy", "--series", series.LatestLts())
43
c.Assert(err, jc.ErrorIsNil)
44
curl := charm.MustParseURL(fmt.Sprintf("local:%s/dummy-1", series.LatestLts()))
45
svc, _ := s.AssertService(c, "dummy", curl, 2, 0)
49
func (s *RemoveUnitSuite) TestRemoveUnit(c *gc.C) {
50
svc := s.setupUnitForRemove(c)
52
err := runRemoveUnit(c, "dummy/0", "dummy/1", "dummy/2", "sillybilly/17")
53
c.Assert(err, gc.ErrorMatches, `some units were not destroyed: unit "dummy/2" does not exist; unit "sillybilly/17" does not exist`)
54
units, err := svc.AllUnits()
55
c.Assert(err, jc.ErrorIsNil)
56
for _, u := range units {
57
c.Assert(u.Life(), gc.Equals, state.Dying)
60
func (s *RemoveUnitSuite) TestBlockRemoveUnit(c *gc.C) {
61
svc := s.setupUnitForRemove(c)
64
s.BlockRemoveObject(c, "TestBlockRemoveUnit")
65
err := runRemoveUnit(c, "dummy/0", "dummy/1")
66
s.AssertBlocked(c, err, ".*TestBlockRemoveUnit.*")
67
c.Assert(svc.Life(), gc.Equals, state.Alive)