github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/meterstatus/context_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package meterstatus_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 "github.com/juju/utils/v3/keyvalues" 9 gc "gopkg.in/check.v1" 10 11 "github.com/juju/juju/juju/sockets" 12 "github.com/juju/juju/worker/meterstatus" 13 "github.com/juju/juju/worker/uniter/runner/context" 14 ) 15 16 type ContextSuite struct{} 17 18 var _ = gc.Suite(&ContextSuite{}) 19 20 type dummyPaths struct{} 21 22 func (*dummyPaths) GetToolsDir() string { return "/dummy/tools" } 23 func (*dummyPaths) GetCharmDir() string { return "/dummy/charm" } 24 func (*dummyPaths) GetResourcesDir() string { return "/dummy/resource" } 25 func (*dummyPaths) GetBaseDir() string { return "/dummy/" } 26 func (*dummyPaths) GetJujucServerSocket(remote bool) sockets.Socket { 27 return sockets.Socket{Network: "unix", Address: "/dummy/jujuc.sock"} 28 } 29 func (*dummyPaths) GetJujucClientSocket(remote bool) sockets.Socket { 30 return sockets.Socket{Network: "unix", Address: "/dummy/jujuc.sock"} 31 } 32 func (*dummyPaths) GetMetricsSpoolDir() string { return "/dummy/spool" } 33 func (*dummyPaths) ComponentDir(name string) string { return "/dummy/" + name } 34 35 func (s *ContextSuite) TestHookContextEnv(c *gc.C) { 36 ctx := meterstatus.NewLimitedContext("u/0") 37 paths := &dummyPaths{} 38 vars, err := ctx.HookVars(paths, false, context.NewRemoteEnvironmenter( 39 func() []string { return []string{} }, 40 func(k string) string { 41 switch k { 42 case "PATH", "Path": 43 return "pathy" 44 default: 45 c.Errorf("unexpected get env call for %q", k) 46 } 47 return "" 48 }, 49 func(k string) (string, bool) { 50 switch k { 51 case "PATH", "Path": 52 return "pathy", true 53 default: 54 c.Errorf("unexpected get env call for %q", k) 55 } 56 return "", false 57 }, 58 )) 59 c.Assert(err, jc.ErrorIsNil) 60 varMap, err := keyvalues.Parse(vars, true) 61 c.Assert(err, jc.ErrorIsNil) 62 c.Assert(varMap["JUJU_AGENT_SOCKET_ADDRESS"], gc.Equals, "/dummy/jujuc.sock") 63 c.Assert(varMap["JUJU_UNIT_NAME"], gc.Equals, "u/0") 64 c.Assert(varMap["JUJU_CHARM_DIR"], gc.Equals, "/dummy/charm") 65 c.Assert(varMap["CHARM_DIR"], gc.Equals, "/dummy/charm") 66 key := "PATH" 67 c.Assert(varMap[key], gc.Not(gc.Equals), "") 68 } 69 70 func (s *ContextSuite) TestHookContextSetEnv(c *gc.C) { 71 ctx := meterstatus.NewLimitedContext("u/0") 72 setVars := map[string]string{ 73 "somekey": "somevalue", 74 "anotherkey": "anothervalue", 75 } 76 ctx.SetEnvVars(setVars) 77 paths := &dummyPaths{} 78 vars, err := ctx.HookVars(paths, false, context.NewRemoteEnvironmenter( 79 func() []string { return []string{} }, 80 func(k string) string { 81 switch k { 82 case "PATH", "Path": 83 return "pathy" 84 default: 85 c.Errorf("unexpected get env call for %q", k) 86 } 87 return "" 88 }, 89 func(k string) (string, bool) { 90 switch k { 91 case "PATH", "Path": 92 return "pathy", true 93 default: 94 c.Errorf("unexpected get env call for %q", k) 95 } 96 return "", false 97 }, 98 )) 99 c.Assert(err, jc.ErrorIsNil) 100 varMap, err := keyvalues.Parse(vars, true) 101 c.Assert(err, jc.ErrorIsNil) 102 for key, value := range setVars { 103 c.Assert(varMap[key], gc.Equals, value) 104 } 105 c.Assert(varMap["JUJU_AGENT_SOCKET_ADDRESS"], gc.Equals, "/dummy/jujuc.sock") 106 c.Assert(varMap["JUJU_UNIT_NAME"], gc.Equals, "u/0") 107 }