github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/observer/metricobserver/observer_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package metricobserver_test 5 6 import ( 7 "strconv" 8 "time" 9 10 "github.com/juju/clock/testclock" 11 "github.com/juju/testing" 12 jc "github.com/juju/testing/checkers" 13 "github.com/prometheus/client_golang/prometheus" 14 gc "gopkg.in/check.v1" 15 16 "github.com/juju/juju/apiserver/observer" 17 "github.com/juju/juju/apiserver/observer/metricobserver" 18 "github.com/juju/juju/rpc" 19 ) 20 21 type observerSuite struct { 22 testing.IsolationSuite 23 clock *testclock.Clock 24 } 25 26 var _ = gc.Suite(&observerSuite{}) 27 28 func (s *observerSuite) SetUpTest(c *gc.C) { 29 s.IsolationSuite.SetUpTest(c) 30 s.clock = testclock.NewClock(time.Time{}) 31 } 32 33 func (s *observerSuite) TestObserver(c *gc.C) { 34 factory, finish := s.createFactory(c) 35 defer finish() 36 37 o := factory() 38 c.Assert(o, gc.NotNil) 39 } 40 41 func (s *observerSuite) TestRPCObserver(c *gc.C) { 42 factory, finish := s.createFactory(c) 43 defer finish() 44 45 o := factory().RPCObserver() 46 c.Assert(o, gc.NotNil) 47 48 latencies := []time.Duration{ 49 1000 * time.Millisecond, 50 1500 * time.Millisecond, 51 2000 * time.Millisecond, 52 } 53 for _, latency := range latencies { 54 req := rpc.Request{ 55 Type: "api-facade", 56 Version: 42, 57 Action: "api-method", 58 } 59 o.ServerRequest(&rpc.Header{Request: req}, nil) 60 s.clock.Advance(latency) 61 o.ServerReply(req, &rpc.Header{ErrorCode: "badness"}, nil) 62 } 63 } 64 65 func (s *observerSuite) createFactory(c *gc.C) (observer.ObserverFactory, func()) { 66 metricsCollector, finish := createMockMetrics(c, prometheus.Labels{ 67 metricobserver.MetricLabelFacade: "api-facade", 68 metricobserver.MetricLabelVersion: strconv.Itoa(42), 69 metricobserver.MetricLabelMethod: "api-method", 70 metricobserver.MetricLabelErrorCode: "badness", 71 }) 72 73 factory, err := metricobserver.NewObserverFactory(metricobserver.Config{ 74 Clock: s.clock, 75 MetricsCollector: metricsCollector, 76 }) 77 c.Assert(err, jc.ErrorIsNil) 78 return factory, finish 79 }