func (s *EnvironmentCommandSuite) TestWriteAddsNewline(c *gc.C) { err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, gc.IsNil) current, err := ioutil.ReadFile(envcmd.GetCurrentEnvironmentFilePath()) c.Assert(err, gc.IsNil) c.Assert(string(current), gc.Equals, "fubar\n") }
func (s *EnvironmentCommandSuite) TestGetDefaultEnvironmentBothSet(c *gc.C) { os.Setenv(osenv.JujuEnvEnvKey, "magic") err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, gc.IsNil) env := envcmd.GetDefaultEnvironment() c.Assert(env, gc.Equals, "magic") }
func (s *EnvironmentCommandSuite) TestEnsureEnvName(c *gc.C) { // Take environment name from command line arg. cmd := initEnvCommandBase(c, "explicit") err := cmd.EnsureEnvName() c.Assert(err, gc.IsNil) c.Assert(cmd.EnvName, gc.Equals, "explicit") // Take environment name from the default. defer coretesting.MakeFakeHome(c, coretesting.MultipleEnvConfig).Restore() testEnsureEnvName(c, coretesting.SampleEnvName) // Take environment name from the one and only environment, // even if it is not explicitly marked as default. defer coretesting.MakeFakeHome(c, coretesting.SingleEnvConfigNoDefault).Restore() testEnsureEnvName(c, coretesting.SampleEnvName) // If there is a current-environment file, use that. err = envcmd.WriteCurrentEnvironment("fubar") testEnsureEnvName(c, "fubar") }
func (c *SwitchCommand) Run(ctx *cmd.Context) error { // Switch is an alternative way of dealing with environments than using // the JUJU_ENV environment setting, and as such, doesn't play too well. // If JUJU_ENV is set we should report that as the current environment, // and not allow switching when it is set. // Passing through the empty string reads the default environments.yaml file. environments, err := environs.ReadEnvirons("") if err != nil { return errors.New("couldn't read the environment") } names := environments.Names() sort.Strings(names) if c.List { // List all environments. if c.EnvName != "" { return errors.New("cannot switch and list at the same time") } for _, name := range names { fmt.Fprintf(ctx.Stdout, "%s\n", name) } return nil } jujuEnv := os.Getenv("JUJU_ENV") if jujuEnv != "" { if c.EnvName == "" { fmt.Fprintf(ctx.Stdout, "%s\n", jujuEnv) return nil } else { return fmt.Errorf("cannot switch when JUJU_ENV is overriding the environment (set to %q)", jujuEnv) } } currentEnv := envcmd.ReadCurrentEnvironment() if currentEnv == "" { currentEnv = environments.Default } // Handle the different operation modes. switch { case c.EnvName == "" && currentEnv == "": // Nothing specified and nothing to switch to. return errors.New("no currently specified environment") case c.EnvName == "": // Simply print the current environment. fmt.Fprintf(ctx.Stdout, "%s\n", currentEnv) default: // Switch the environment. if !validEnvironmentName(c.EnvName, names) { return fmt.Errorf("%q is not a name of an existing defined environment", c.EnvName) } if err := envcmd.WriteCurrentEnvironment(c.EnvName); err != nil { return err } if currentEnv == "" { fmt.Fprintf(ctx.Stdout, "-> %s\n", c.EnvName) } else { fmt.Fprintf(ctx.Stdout, "%s -> %s\n", currentEnv, c.EnvName) } } return nil }
func (*EnvironmentCommandSuite) TestErrorWritingFile(c *gc.C) { // Can't write a file over a directory. os.MkdirAll(envcmd.GetCurrentEnvironmentFilePath(), 0777) err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, gc.ErrorMatches, "unable to write to the environment file: .*") }
func (s *EnvironmentCommandSuite) TestGetDefaultEnvironmentCurrentEnvironmentSet(c *gc.C) { err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, gc.IsNil) env := envcmd.GetDefaultEnvironment() c.Assert(env, gc.Equals, "fubar") }