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