github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/worker/uniter/runner/env_test.go (about) 1 // Copyright 2012-2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package runner_test 5 6 import ( 7 "os" 8 "strings" 9 10 envtesting "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/worker/uniter/runner" 15 ) 16 17 type MergeEnvSuite struct { 18 envtesting.IsolationSuite 19 } 20 21 var _ = gc.Suite(&MergeEnvSuite{}) 22 23 func (e *MergeEnvSuite) TestMergeEnviron(c *gc.C) { 24 // environment does not get fully cleared on Windows 25 // when using testing.IsolationSuite 26 origEnv := os.Environ() 27 extraExpected := []string{ 28 "DUMMYVAR=foo", 29 "DUMMYVAR2=bar", 30 "NEWVAR=ImNew", 31 } 32 expectEnv := make([]string, 0, len(origEnv)+len(extraExpected)) 33 34 // os.Environ prepends some garbage on Windows that we need to strip out. 35 // All the garbage starts and ends with = (for example "=C:="). 36 for _, v := range origEnv { 37 if !(strings.HasPrefix(v, "=") && strings.HasSuffix(v, "=")) { 38 expectEnv = append(expectEnv, v) 39 } 40 } 41 expectEnv = append(expectEnv, extraExpected...) 42 os.Setenv("DUMMYVAR2", "ChangeMe") 43 os.Setenv("DUMMYVAR", "foo") 44 45 newEnv := make([]string, 0, len(expectEnv)) 46 for _, v := range runner.MergeWindowsEnvironment([]string{"dummyvar2=bar", "NEWVAR=ImNew"}, os.Environ()) { 47 if !(strings.HasPrefix(v, "=") && strings.HasSuffix(v, "=")) { 48 newEnv = append(newEnv, v) 49 } 50 } 51 c.Assert(expectEnv, jc.SameContents, newEnv) 52 } 53 54 func (s *MergeEnvSuite) TestMergeEnvWin(c *gc.C) { 55 initial := []string{"a=foo", "b=bar", "foo=val"} 56 newValues := []string{"a=baz", "c=omg", "FOO=val2", "d=another"} 57 58 created := runner.MergeWindowsEnvironment(newValues, initial) 59 expected := []string{"a=baz", "b=bar", "c=omg", "foo=val2", "d=another"} 60 c.Check(created, jc.SameContents, expected) 61 }