github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/cmd/envcmd/files_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package envcmd_test 5 6 import ( 7 "io/ioutil" 8 "os" 9 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/cmd/envcmd" 14 "github.com/juju/juju/testing" 15 ) 16 17 type filesSuite struct { 18 testing.FakeJujuHomeSuite 19 } 20 21 var _ = gc.Suite(&filesSuite{}) 22 23 func (s *filesSuite) assertCurrentEnvironment(c *gc.C, environmentName string) { 24 current, err := envcmd.ReadCurrentEnvironment() 25 c.Assert(err, jc.ErrorIsNil) 26 c.Assert(current, gc.Equals, environmentName) 27 } 28 29 func (s *filesSuite) assertCurrentSystem(c *gc.C, systemName string) { 30 current, err := envcmd.ReadCurrentSystem() 31 c.Assert(err, jc.ErrorIsNil) 32 c.Assert(current, gc.Equals, systemName) 33 } 34 35 func (s *filesSuite) TestReadCurrentEnvironmentUnset(c *gc.C) { 36 s.assertCurrentEnvironment(c, "") 37 } 38 39 func (s *filesSuite) TestReadCurrentSystemUnset(c *gc.C) { 40 s.assertCurrentSystem(c, "") 41 } 42 43 func (s *filesSuite) TestReadCurrentEnvironmentSet(c *gc.C) { 44 err := envcmd.WriteCurrentEnvironment("fubar") 45 c.Assert(err, jc.ErrorIsNil) 46 s.assertCurrentEnvironment(c, "fubar") 47 } 48 49 func (s *filesSuite) TestReadCurrentSystemSet(c *gc.C) { 50 err := envcmd.WriteCurrentSystem("fubar") 51 c.Assert(err, jc.ErrorIsNil) 52 s.assertCurrentSystem(c, "fubar") 53 } 54 55 func (s *filesSuite) TestWriteEnvironmentAddsNewline(c *gc.C) { 56 err := envcmd.WriteCurrentEnvironment("fubar") 57 c.Assert(err, jc.ErrorIsNil) 58 current, err := ioutil.ReadFile(envcmd.GetCurrentEnvironmentFilePath()) 59 c.Assert(err, jc.ErrorIsNil) 60 c.Assert(string(current), gc.Equals, "fubar\n") 61 } 62 63 func (s *filesSuite) TestWriteSystemAddsNewline(c *gc.C) { 64 err := envcmd.WriteCurrentSystem("fubar") 65 c.Assert(err, jc.ErrorIsNil) 66 current, err := ioutil.ReadFile(envcmd.GetCurrentSystemFilePath()) 67 c.Assert(err, jc.ErrorIsNil) 68 c.Assert(string(current), gc.Equals, "fubar\n") 69 } 70 71 func (s *filesSuite) TestWriteEnvironmentRemovesSystemFile(c *gc.C) { 72 err := envcmd.WriteCurrentSystem("baz") 73 c.Assert(err, jc.ErrorIsNil) 74 err = envcmd.WriteCurrentEnvironment("fubar") 75 c.Assert(err, jc.ErrorIsNil) 76 c.Assert(envcmd.GetCurrentSystemFilePath(), jc.DoesNotExist) 77 } 78 79 func (s *filesSuite) TestWriteSystemRemovesEnvironmentFile(c *gc.C) { 80 err := envcmd.WriteCurrentEnvironment("fubar") 81 c.Assert(err, jc.ErrorIsNil) 82 err = envcmd.WriteCurrentSystem("baz") 83 c.Assert(err, jc.ErrorIsNil) 84 c.Assert(envcmd.GetCurrentEnvironmentFilePath(), jc.DoesNotExist) 85 } 86 87 func (*filesSuite) TestErrorWritingCurrentEnvironment(c *gc.C) { 88 // Can't write a file over a directory. 89 os.MkdirAll(envcmd.GetCurrentEnvironmentFilePath(), 0777) 90 err := envcmd.WriteCurrentEnvironment("fubar") 91 c.Assert(err, gc.ErrorMatches, "unable to write to the environment file: .*") 92 } 93 94 func (*filesSuite) TestErrorWritingCurrentSystem(c *gc.C) { 95 // Can't write a file over a directory. 96 os.MkdirAll(envcmd.GetCurrentSystemFilePath(), 0777) 97 err := envcmd.WriteCurrentSystem("fubar") 98 c.Assert(err, gc.ErrorMatches, "unable to write to the system file: .*") 99 } 100 101 func (*filesSuite) TestCurrentCommenctionNameMissing(c *gc.C) { 102 name, isSystem, err := envcmd.CurrentConnectionName() 103 c.Assert(err, jc.ErrorIsNil) 104 c.Assert(isSystem, jc.IsFalse) 105 c.Assert(name, gc.Equals, "") 106 } 107 108 func (*filesSuite) TestCurrentCommenctionNameEnvironment(c *gc.C) { 109 err := envcmd.WriteCurrentEnvironment("fubar") 110 c.Assert(err, jc.ErrorIsNil) 111 name, isSystem, err := envcmd.CurrentConnectionName() 112 c.Assert(err, jc.ErrorIsNil) 113 c.Assert(isSystem, jc.IsFalse) 114 c.Assert(name, gc.Equals, "fubar") 115 } 116 117 func (*filesSuite) TestCurrentCommenctionNameSystem(c *gc.C) { 118 err := envcmd.WriteCurrentSystem("baz") 119 c.Assert(err, jc.ErrorIsNil) 120 name, isSystem, err := envcmd.CurrentConnectionName() 121 c.Assert(err, jc.ErrorIsNil) 122 c.Assert(isSystem, jc.IsTrue) 123 c.Assert(name, gc.Equals, "baz") 124 } 125 126 func (s *filesSuite) TestSetCurrentEnvironment(c *gc.C) { 127 ctx := testing.Context(c) 128 err := envcmd.SetCurrentEnvironment(ctx, "new-env") 129 c.Assert(err, jc.ErrorIsNil) 130 s.assertCurrentEnvironment(c, "new-env") 131 c.Assert(testing.Stderr(ctx), gc.Equals, "-> new-env\n") 132 } 133 134 func (s *filesSuite) TestSetCurrentEnvironmentExistingEnv(c *gc.C) { 135 err := envcmd.WriteCurrentEnvironment("fubar") 136 c.Assert(err, jc.ErrorIsNil) 137 ctx := testing.Context(c) 138 err = envcmd.SetCurrentEnvironment(ctx, "new-env") 139 c.Assert(err, jc.ErrorIsNil) 140 s.assertCurrentEnvironment(c, "new-env") 141 c.Assert(testing.Stderr(ctx), gc.Equals, "fubar -> new-env\n") 142 } 143 144 func (s *filesSuite) TestSetCurrentEnvironmentExistingSystem(c *gc.C) { 145 err := envcmd.WriteCurrentSystem("fubar") 146 c.Assert(err, jc.ErrorIsNil) 147 ctx := testing.Context(c) 148 err = envcmd.SetCurrentEnvironment(ctx, "new-env") 149 c.Assert(err, jc.ErrorIsNil) 150 s.assertCurrentEnvironment(c, "new-env") 151 c.Assert(testing.Stderr(ctx), gc.Equals, "fubar (system) -> new-env\n") 152 } 153 154 func (s *filesSuite) TestSetCurrentSystem(c *gc.C) { 155 ctx := testing.Context(c) 156 err := envcmd.SetCurrentSystem(ctx, "new-sys") 157 c.Assert(err, jc.ErrorIsNil) 158 s.assertCurrentSystem(c, "new-sys") 159 c.Assert(testing.Stderr(ctx), gc.Equals, "-> new-sys (system)\n") 160 } 161 162 func (s *filesSuite) TestSetCurrentSystemExistingEnv(c *gc.C) { 163 err := envcmd.WriteCurrentEnvironment("fubar") 164 c.Assert(err, jc.ErrorIsNil) 165 ctx := testing.Context(c) 166 err = envcmd.SetCurrentSystem(ctx, "new-sys") 167 c.Assert(err, jc.ErrorIsNil) 168 s.assertCurrentSystem(c, "new-sys") 169 c.Assert(testing.Stderr(ctx), gc.Equals, "fubar -> new-sys (system)\n") 170 } 171 172 func (s *filesSuite) TestSetCurrentSystemExistingSystem(c *gc.C) { 173 err := envcmd.WriteCurrentSystem("fubar") 174 c.Assert(err, jc.ErrorIsNil) 175 ctx := testing.Context(c) 176 err = envcmd.SetCurrentSystem(ctx, "new-sys") 177 c.Assert(err, jc.ErrorIsNil) 178 s.assertCurrentSystem(c, "new-sys") 179 c.Assert(testing.Stderr(ctx), gc.Equals, "fubar (system) -> new-sys (system)\n") 180 }