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 }