github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/cmd/juju/removeservice_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package main
     5  
     6  import (
     7  	"strings"
     8  
     9  	"github.com/juju/cmd"
    10  	"github.com/juju/juju/cmd/envcmd"
    11  	jujutesting "github.com/juju/juju/juju/testing"
    12  	jc "github.com/juju/testing/checkers"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	"github.com/juju/juju/state"
    16  	"github.com/juju/juju/testcharms"
    17  	"github.com/juju/juju/testing"
    18  )
    19  
    20  type RemoveServiceSuite struct {
    21  	jujutesting.RepoSuite
    22  }
    23  
    24  var _ = gc.Suite(&RemoveServiceSuite{})
    25  
    26  func runRemoveService(c *gc.C, args ...string) error {
    27  	_, err := testing.RunCommand(c, envcmd.Wrap(&RemoveServiceCommand{}), args...)
    28  	return err
    29  }
    30  
    31  func (s *RemoveServiceSuite) setupTestService(c *gc.C) {
    32  	// Destroy a service that exists.
    33  	testcharms.Repo.CharmArchivePath(s.SeriesPath, "riak")
    34  	err := runDeploy(c, "local:riak", "riak")
    35  	c.Assert(err, jc.ErrorIsNil)
    36  }
    37  
    38  func (s *RemoveServiceSuite) TestSuccess(c *gc.C) {
    39  	s.setupTestService(c)
    40  	err := runRemoveService(c, "riak")
    41  	c.Assert(err, jc.ErrorIsNil)
    42  	riak, err := s.State.Service("riak")
    43  	c.Assert(err, jc.ErrorIsNil)
    44  	c.Assert(riak.Life(), gc.Equals, state.Dying)
    45  }
    46  
    47  func (s *RemoveServiceSuite) TestBlockRemoveService(c *gc.C) {
    48  	s.setupTestService(c)
    49  
    50  	// block operation
    51  	s.AssertConfigParameterUpdated(c, "block-remove-object", true)
    52  	err := runRemoveService(c, "riak")
    53  	c.Assert(err, gc.ErrorMatches, cmd.ErrSilent.Error())
    54  	riak, err := s.State.Service("riak")
    55  	c.Assert(err, jc.ErrorIsNil)
    56  	c.Assert(riak.Life(), gc.Equals, state.Alive)
    57  
    58  	// msg is logged
    59  	stripped := strings.Replace(c.GetTestLog(), "\n", "", -1)
    60  	c.Check(stripped, gc.Matches, ".*To unblock removal.*")
    61  }
    62  
    63  func (s *RemoveServiceSuite) TestFailure(c *gc.C) {
    64  	// Destroy a service that does not exist.
    65  	err := runRemoveService(c, "gargleblaster")
    66  	c.Assert(err, gc.ErrorMatches, `service "gargleblaster" not found`)
    67  }
    68  
    69  func (s *RemoveServiceSuite) TestInvalidArgs(c *gc.C) {
    70  	err := runRemoveService(c)
    71  	c.Assert(err, gc.ErrorMatches, `no service specified`)
    72  	err = runRemoveService(c, "ping", "pong")
    73  	c.Assert(err, gc.ErrorMatches, `unrecognized args: \["pong"\]`)
    74  	err = runRemoveService(c, "invalid:name")
    75  	c.Assert(err, gc.ErrorMatches, `invalid service name "invalid:name"`)
    76  }