github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/cmd/juju/environment_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  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	jujutesting "github.com/juju/juju/juju/testing"
    14  	"github.com/juju/juju/state"
    15  	"github.com/juju/juju/testing"
    16  	"github.com/juju/juju/testing/factory"
    17  )
    18  
    19  // EnvironmentSuite tests the connectivity of all the environment subcommands.
    20  // These tests go from the command line, api client, api server, db. The db
    21  // changes are then checked.  Only one test for each command is done here to
    22  // check connectivity.  Exhaustive unit tests are at each layer.
    23  type EnvironmentSuite struct {
    24  	jujutesting.JujuConnSuite
    25  }
    26  
    27  var _ = gc.Suite(&EnvironmentSuite{})
    28  
    29  func (s *EnvironmentSuite) assertEnvValue(c *gc.C, key string, expected interface{}) {
    30  	envConfig, err := s.State.EnvironConfig()
    31  	c.Assert(err, jc.ErrorIsNil)
    32  	value, found := envConfig.AllAttrs()[key]
    33  	c.Assert(found, jc.IsTrue)
    34  	c.Assert(value, gc.Equals, expected)
    35  }
    36  
    37  func (s *EnvironmentSuite) assertEnvValueMissing(c *gc.C, key string) {
    38  	envConfig, err := s.State.EnvironConfig()
    39  	c.Assert(err, jc.ErrorIsNil)
    40  	_, found := envConfig.AllAttrs()[key]
    41  	c.Assert(found, jc.IsFalse)
    42  }
    43  
    44  func (s *EnvironmentSuite) RunEnvironmentCommand(c *gc.C, commands ...string) (*cmd.Context, error) {
    45  	args := []string{"environment"}
    46  	args = append(args, commands...)
    47  	context := testing.Context(c)
    48  	juju := NewJujuCommand(context)
    49  	if err := testing.InitCommand(juju, args); err != nil {
    50  		return context, err
    51  	}
    52  	return context, juju.Run(context)
    53  }
    54  
    55  func (s *EnvironmentSuite) TestGet(c *gc.C) {
    56  	err := s.State.UpdateEnvironConfig(map[string]interface{}{"special": "known"}, nil, nil)
    57  	c.Assert(err, jc.ErrorIsNil)
    58  
    59  	context, err := s.RunEnvironmentCommand(c, "get", "special")
    60  	c.Assert(err, jc.ErrorIsNil)
    61  	c.Assert(testing.Stdout(context), gc.Equals, "known\n")
    62  }
    63  
    64  func (s *EnvironmentSuite) TestSet(c *gc.C) {
    65  	_, err := s.RunEnvironmentCommand(c, "set", "special=known")
    66  	c.Assert(err, jc.ErrorIsNil)
    67  	s.assertEnvValue(c, "special", "known")
    68  }
    69  
    70  func (s *EnvironmentSuite) TestUnset(c *gc.C) {
    71  	err := s.State.UpdateEnvironConfig(map[string]interface{}{"special": "known"}, nil, nil)
    72  	c.Assert(err, jc.ErrorIsNil)
    73  
    74  	_, err = s.RunEnvironmentCommand(c, "unset", "special")
    75  	c.Assert(err, jc.ErrorIsNil)
    76  	s.assertEnvValueMissing(c, "special")
    77  }
    78  
    79  func (s *EnvironmentSuite) TestEnsureAvailability(c *gc.C) {
    80  	s.Factory.MakeMachine(c, &factory.MachineParams{
    81  		Jobs: []state.MachineJob{state.JobManageEnviron},
    82  	})
    83  	ctx, err := s.RunEnvironmentCommand(c, "ensure-availability", "-n", "3")
    84  	c.Assert(err, jc.ErrorIsNil)
    85  
    86  	// Machine 0 is demoted because it hasn't reported its presence
    87  	c.Assert(testing.Stdout(ctx), gc.Equals,
    88  		"adding machines: 1, 2, 3\n"+
    89  			"demoting machines 0\n\n")
    90  }
    91  
    92  func (s *EnvironmentSuite) TestRetryProvisioning(c *gc.C) {
    93  	s.Factory.MakeMachine(c, &factory.MachineParams{
    94  		Jobs: []state.MachineJob{state.JobManageEnviron},
    95  	})
    96  	ctx, err := s.RunEnvironmentCommand(c, "retry-provisioning", "0")
    97  	c.Assert(err, jc.ErrorIsNil)
    98  
    99  	output := testing.Stderr(ctx)
   100  	stripped := strings.Replace(output, "\n", "", -1)
   101  	c.Check(stripped, gc.Equals, `machine 0 is not in an error state`)
   102  }