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 }