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  }