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  }