github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/featuretests/cmd_juju_environment_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package featuretests
     5  
     6  import (
     7  	"strings"
     8  
     9  	"github.com/juju/cmd"
    10  	"github.com/juju/errors"
    11  	"github.com/juju/names"
    12  	jc "github.com/juju/testing/checkers"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	cmdenvironment "github.com/juju/juju/cmd/juju/environment"
    16  	"github.com/juju/juju/constraints"
    17  	"github.com/juju/juju/feature"
    18  	jujutesting "github.com/juju/juju/juju/testing"
    19  	"github.com/juju/juju/state"
    20  	"github.com/juju/juju/testing"
    21  	"github.com/juju/juju/testing/factory"
    22  )
    23  
    24  type cmdEnvironmentSuite struct {
    25  	jujutesting.RepoSuite
    26  }
    27  
    28  func (s *cmdEnvironmentSuite) SetUpTest(c *gc.C) {
    29  	s.RepoSuite.SetUpTest(c)
    30  	s.SetFeatureFlags(feature.JES)
    31  }
    32  
    33  func (s *cmdEnvironmentSuite) run(c *gc.C, args ...string) *cmd.Context {
    34  	command := cmdenvironment.NewSuperCommand()
    35  	context, err := testing.RunCommand(c, command, args...)
    36  	c.Assert(err, jc.ErrorIsNil)
    37  	return context
    38  }
    39  
    40  func (s *cmdEnvironmentSuite) TestEnvironmentShareCmdStack(c *gc.C) {
    41  	username := "bar@ubuntuone"
    42  	context := s.run(c, "share", username)
    43  	obtained := strings.Replace(testing.Stdout(context), "\n", "", -1)
    44  	expected := ""
    45  	c.Assert(obtained, gc.Equals, expected)
    46  
    47  	user := names.NewUserTag(username)
    48  	envUser, err := s.State.EnvironmentUser(user)
    49  	c.Assert(err, jc.ErrorIsNil)
    50  	c.Assert(envUser.UserName(), gc.Equals, user.Username())
    51  	c.Assert(envUser.CreatedBy(), gc.Equals, s.AdminUserTag(c).Username())
    52  	lastConn, err := envUser.LastConnection()
    53  	c.Assert(err, jc.Satisfies, state.IsNeverConnectedError)
    54  	c.Assert(lastConn.IsZero(), jc.IsTrue)
    55  }
    56  
    57  func (s *cmdEnvironmentSuite) TestEnvironmentUnshareCmdStack(c *gc.C) {
    58  	// Firstly share an environment with a user
    59  	username := "bar@ubuntuone"
    60  	context := s.run(c, "share", username)
    61  	user := names.NewUserTag(username)
    62  	envuser, err := s.State.EnvironmentUser(user)
    63  	c.Assert(err, jc.ErrorIsNil)
    64  	c.Assert(envuser, gc.NotNil)
    65  
    66  	// Then test that the unshare command stack is hooked up
    67  	context = s.run(c, "unshare", username)
    68  	obtained := strings.Replace(testing.Stdout(context), "\n", "", -1)
    69  	expected := ""
    70  	c.Assert(obtained, gc.Equals, expected)
    71  
    72  	envuser, err = s.State.EnvironmentUser(user)
    73  	c.Assert(errors.IsNotFound(err), jc.IsTrue)
    74  	c.Assert(envuser, gc.IsNil)
    75  }
    76  
    77  func (s *cmdEnvironmentSuite) TestEnvironmentUsersCmd(c *gc.C) {
    78  	// Firstly share an environment with a user
    79  	username := "bar@ubuntuone"
    80  	context := s.run(c, "share", username)
    81  	user := names.NewUserTag(username)
    82  	envuser, err := s.State.EnvironmentUser(user)
    83  	c.Assert(err, jc.ErrorIsNil)
    84  	c.Assert(envuser, gc.NotNil)
    85  
    86  	context = s.run(c, "users")
    87  	c.Assert(err, jc.ErrorIsNil)
    88  	c.Assert(testing.Stdout(context), gc.Equals, ""+
    89  		"NAME               DATE CREATED  LAST CONNECTION\n"+
    90  		"dummy-admin@local  just now      just now\n"+
    91  		"bar@ubuntuone      just now      never connected\n"+
    92  		"\n")
    93  
    94  }
    95  
    96  func (s *cmdEnvironmentSuite) TestGet(c *gc.C) {
    97  	err := s.State.UpdateEnvironConfig(map[string]interface{}{"special": "known"}, nil, nil)
    98  	c.Assert(err, jc.ErrorIsNil)
    99  
   100  	context := s.run(c, "get", "special")
   101  	c.Assert(testing.Stdout(context), gc.Equals, "known\n")
   102  }
   103  
   104  func (s *cmdEnvironmentSuite) TestSet(c *gc.C) {
   105  	s.run(c, "set", "special=known")
   106  	s.assertEnvValue(c, "special", "known")
   107  }
   108  
   109  func (s *cmdEnvironmentSuite) TestUnset(c *gc.C) {
   110  	err := s.State.UpdateEnvironConfig(map[string]interface{}{"special": "known"}, nil, nil)
   111  	c.Assert(err, jc.ErrorIsNil)
   112  
   113  	s.run(c, "unset", "special")
   114  	s.assertEnvValueMissing(c, "special")
   115  }
   116  
   117  func (s *cmdEnvironmentSuite) TestRetryProvisioning(c *gc.C) {
   118  	s.Factory.MakeMachine(c, &factory.MachineParams{
   119  		Jobs: []state.MachineJob{state.JobManageEnviron},
   120  	})
   121  	ctx := s.run(c, "retry-provisioning", "0")
   122  	output := testing.Stderr(ctx)
   123  	stripped := strings.Replace(output, "\n", "", -1)
   124  	c.Check(stripped, gc.Equals, `machine 0 is not in an error state`)
   125  }
   126  
   127  func (s *cmdEnvironmentSuite) TestGetConstraints(c *gc.C) {
   128  	cons := constraints.Value{CpuPower: uint64p(250)}
   129  	err := s.State.SetEnvironConstraints(cons)
   130  	c.Assert(err, jc.ErrorIsNil)
   131  
   132  	ctx := s.run(c, "get-constraints")
   133  	c.Check(testing.Stdout(ctx), gc.Equals, "cpu-power=250\n")
   134  }
   135  
   136  func (s *cmdEnvironmentSuite) TestSetConstraints(c *gc.C) {
   137  	s.run(c, "set-constraints", "mem=4G", "cpu-power=250")
   138  
   139  	cons, err := s.State.EnvironConstraints()
   140  	c.Assert(err, jc.ErrorIsNil)
   141  	c.Assert(cons, gc.DeepEquals, constraints.Value{
   142  		CpuPower: uint64p(250),
   143  		Mem:      uint64p(4096),
   144  	})
   145  }
   146  
   147  func (s *cmdEnvironmentSuite) assertEnvValue(c *gc.C, key string, expected interface{}) {
   148  	envConfig, err := s.State.EnvironConfig()
   149  	c.Assert(err, jc.ErrorIsNil)
   150  	value, found := envConfig.AllAttrs()[key]
   151  	c.Assert(found, jc.IsTrue)
   152  	c.Assert(value, gc.Equals, expected)
   153  }
   154  
   155  func (s *cmdEnvironmentSuite) assertEnvValueMissing(c *gc.C, key string) {
   156  	envConfig, err := s.State.EnvironConfig()
   157  	c.Assert(err, jc.ErrorIsNil)
   158  	_, found := envConfig.AllAttrs()[key]
   159  	c.Assert(found, jc.IsFalse)
   160  }