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  }