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 }