github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/cmd/juju/commands/removeunit_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package commands
     5  
     6  import (
     7  	"fmt"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  	"gopkg.in/juju/charm.v5"
    12  
    13  	"github.com/juju/juju/cmd/envcmd"
    14  	jujutesting "github.com/juju/juju/juju/testing"
    15  	"github.com/juju/juju/state"
    16  	"github.com/juju/juju/testcharms"
    17  	"github.com/juju/juju/testing"
    18  )
    19  
    20  type RemoveUnitSuite struct {
    21  	jujutesting.RepoSuite
    22  	CmdBlockHelper
    23  }
    24  
    25  func (s *RemoveUnitSuite) SetUpTest(c *gc.C) {
    26  	s.RepoSuite.SetUpTest(c)
    27  	s.CmdBlockHelper = NewCmdBlockHelper(s.APIState)
    28  	c.Assert(s.CmdBlockHelper, gc.NotNil)
    29  	s.AddCleanup(func(*gc.C) { s.CmdBlockHelper.Close() })
    30  }
    31  
    32  var _ = gc.Suite(&RemoveUnitSuite{})
    33  
    34  func runRemoveUnit(c *gc.C, args ...string) error {
    35  	_, err := testing.RunCommand(c, envcmd.Wrap(&RemoveUnitCommand{}), args...)
    36  	return err
    37  }
    38  
    39  func (s *RemoveUnitSuite) setupUnitForRemove(c *gc.C) *state.Service {
    40  	testcharms.Repo.CharmArchivePath(s.SeriesPath, "dummy")
    41  	err := runDeploy(c, "-n", "2", "local:dummy", "dummy")
    42  	c.Assert(err, jc.ErrorIsNil)
    43  	curl := charm.MustParseURL(fmt.Sprintf("local:%s/dummy-1", testing.FakeDefaultSeries))
    44  	svc, _ := s.AssertService(c, "dummy", curl, 2, 0)
    45  	return svc
    46  }
    47  
    48  func (s *RemoveUnitSuite) TestRemoveUnit(c *gc.C) {
    49  	svc := s.setupUnitForRemove(c)
    50  
    51  	err := runRemoveUnit(c, "dummy/0", "dummy/1", "dummy/2", "sillybilly/17")
    52  	c.Assert(err, gc.ErrorMatches, `some units were not destroyed: unit "dummy/2" does not exist; unit "sillybilly/17" does not exist`)
    53  	units, err := svc.AllUnits()
    54  	c.Assert(err, jc.ErrorIsNil)
    55  	for _, u := range units {
    56  		c.Assert(u.Life(), gc.Equals, state.Dying)
    57  	}
    58  }
    59  func (s *RemoveUnitSuite) TestBlockRemoveUnit(c *gc.C) {
    60  	svc := s.setupUnitForRemove(c)
    61  
    62  	// block operation
    63  	s.BlockRemoveObject(c, "TestBlockRemoveUnit")
    64  	err := runRemoveUnit(c, "dummy/0", "dummy/1")
    65  	s.AssertBlocked(c, err, ".*TestBlockRemoveUnit.*")
    66  	c.Assert(svc.Life(), gc.Equals, state.Alive)
    67  }