github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/cmd/juju/switch_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 "os" 8 9 gc "launchpad.net/gocheck" 10 11 "launchpad.net/juju-core/cmd" 12 _ "launchpad.net/juju-core/juju" 13 "launchpad.net/juju-core/testing" 14 ) 15 16 type SwitchSimpleSuite struct { 17 } 18 19 var _ = gc.Suite(&SwitchSimpleSuite{}) 20 21 func (*SwitchSimpleSuite) TestNoEnvironment(c *gc.C) { 22 defer testing.MakeEmptyFakeHome(c).Restore() 23 _, err := testing.RunCommand(c, &SwitchCommand{}, nil) 24 c.Assert(err, gc.ErrorMatches, "couldn't read the environment") 25 } 26 27 func (*SwitchSimpleSuite) TestNoDefault(c *gc.C) { 28 defer testing.MakeFakeHome(c, testing.MultipleEnvConfigNoDefault).Restore() 29 _, err := testing.RunCommand(c, &SwitchCommand{}, nil) 30 c.Assert(err, gc.ErrorMatches, "no currently specified environment") 31 } 32 33 func (*SwitchSimpleSuite) TestShowsDefault(c *gc.C) { 34 defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore() 35 context, err := testing.RunCommand(c, &SwitchCommand{}, nil) 36 c.Assert(err, gc.IsNil) 37 c.Assert(testing.Stdout(context), gc.Equals, "erewhemos\n") 38 } 39 40 func (*SwitchSimpleSuite) TestCurrentEnvironmentHasPrecidence(c *gc.C) { 41 home := testing.MakeFakeHome(c, testing.MultipleEnvConfig) 42 defer home.Restore() 43 home.AddFiles(c, []testing.TestFile{{".juju/current-environment", "fubar"}}) 44 context, err := testing.RunCommand(c, &SwitchCommand{}, nil) 45 c.Assert(err, gc.IsNil) 46 c.Assert(testing.Stdout(context), gc.Equals, "fubar\n") 47 } 48 49 func (*SwitchSimpleSuite) TestShowsJujuEnv(c *gc.C) { 50 defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore() 51 os.Setenv("JUJU_ENV", "using-env") 52 context, err := testing.RunCommand(c, &SwitchCommand{}, nil) 53 c.Assert(err, gc.IsNil) 54 c.Assert(testing.Stdout(context), gc.Equals, "using-env\n") 55 } 56 57 func (*SwitchSimpleSuite) TestJujuEnvOverCurrentEnvironment(c *gc.C) { 58 home := testing.MakeFakeHome(c, testing.MultipleEnvConfig) 59 defer home.Restore() 60 home.AddFiles(c, []testing.TestFile{{".juju/current-environment", "fubar"}}) 61 os.Setenv("JUJU_ENV", "using-env") 62 context, err := testing.RunCommand(c, &SwitchCommand{}, nil) 63 c.Assert(err, gc.IsNil) 64 c.Assert(testing.Stdout(context), gc.Equals, "using-env\n") 65 } 66 67 func (*SwitchSimpleSuite) TestSettingWritesFile(c *gc.C) { 68 defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore() 69 context, err := testing.RunCommand(c, &SwitchCommand{}, []string{"erewhemos-2"}) 70 c.Assert(err, gc.IsNil) 71 c.Assert(testing.Stdout(context), gc.Equals, "erewhemos -> erewhemos-2\n") 72 c.Assert(cmd.ReadCurrentEnvironment(), gc.Equals, "erewhemos-2") 73 } 74 75 func (*SwitchSimpleSuite) TestSettingToUnknown(c *gc.C) { 76 defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore() 77 _, err := testing.RunCommand(c, &SwitchCommand{}, []string{"unknown"}) 78 c.Assert(err, gc.ErrorMatches, `"unknown" is not a name of an existing defined environment`) 79 } 80 81 func (*SwitchSimpleSuite) TestSettingWhenJujuEnvSet(c *gc.C) { 82 defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore() 83 os.Setenv("JUJU_ENV", "using-env") 84 _, err := testing.RunCommand(c, &SwitchCommand{}, []string{"erewhemos-2"}) 85 c.Assert(err, gc.ErrorMatches, `cannot switch when JUJU_ENV is overriding the environment \(set to "using-env"\)`) 86 } 87 88 const expectedEnvironments = `erewhemos 89 erewhemos-2 90 ` 91 92 func (*SwitchSimpleSuite) TestListEnvironments(c *gc.C) { 93 defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore() 94 context, err := testing.RunCommand(c, &SwitchCommand{}, []string{"--list"}) 95 c.Assert(err, gc.IsNil) 96 c.Assert(testing.Stdout(context), gc.Equals, expectedEnvironments) 97 } 98 99 func (*SwitchSimpleSuite) TestListEnvironmentsOSJujuEnvSet(c *gc.C) { 100 defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore() 101 os.Setenv("JUJU_ENV", "using-env") 102 context, err := testing.RunCommand(c, &SwitchCommand{}, []string{"--list"}) 103 c.Assert(err, gc.IsNil) 104 c.Assert(testing.Stdout(context), gc.Equals, expectedEnvironments) 105 } 106 107 func (*SwitchSimpleSuite) TestListEnvironmentsAndChange(c *gc.C) { 108 defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore() 109 _, err := testing.RunCommand(c, &SwitchCommand{}, []string{"--list", "erewhemos-2"}) 110 c.Assert(err, gc.ErrorMatches, "cannot switch and list at the same time") 111 } 112 113 func (*SwitchSimpleSuite) TestTooManyParams(c *gc.C) { 114 defer testing.MakeFakeHome(c, testing.MultipleEnvConfig).Restore() 115 _, err := testing.RunCommand(c, &SwitchCommand{}, []string{"foo", "bar"}) 116 c.Assert(err, gc.ErrorMatches, `unrecognized args: ."bar".`) 117 }