github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/cmd/juju/service/removeunit_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package service
     5  
     6  import (
     7  	"fmt"
     8  
     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"
    13  
    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"
    19  )
    20  
    21  type RemoveUnitSuite struct {
    22  	jujutesting.RepoSuite
    23  	common.CmdBlockHelper
    24  }
    25  
    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() })
    31  }
    32  
    33  var _ = gc.Suite(&RemoveUnitSuite{})
    34  
    35  func runRemoveUnit(c *gc.C, args ...string) error {
    36  	_, err := testing.RunCommand(c, NewRemoveUnitCommand(), args...)
    37  	return err
    38  }
    39  
    40  func (s *RemoveUnitSuite) setupUnitForRemove(c *gc.C) *state.Service {
    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)
    46  	return svc
    47  }
    48  
    49  func (s *RemoveUnitSuite) TestRemoveUnit(c *gc.C) {
    50  	svc := s.setupUnitForRemove(c)
    51  
    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)
    58  	}
    59  }
    60  func (s *RemoveUnitSuite) TestBlockRemoveUnit(c *gc.C) {
    61  	svc := s.setupUnitForRemove(c)
    62  
    63  	// block operation
    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)
    68  }