github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/logsender/logsendermetrics/logsendermetrics_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENSE file for details. 3 4 package logsendermetrics_test 5 6 import ( 7 "github.com/juju/loggo" 8 "github.com/juju/testing" 9 jc "github.com/juju/testing/checkers" 10 "github.com/prometheus/client_golang/prometheus" 11 dto "github.com/prometheus/client_model/go" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/worker/logsender" 15 "github.com/juju/juju/worker/logsender/logsendermetrics" 16 "github.com/juju/juju/worker/logsender/logsendertest" 17 ) 18 19 const maxLen = 3 20 21 type bufferedLogWriterSuite struct { 22 testing.IsolationSuite 23 writer *logsender.BufferedLogWriter 24 collector logsendermetrics.BufferedLogWriterMetrics 25 } 26 27 var _ = gc.Suite(&bufferedLogWriterSuite{}) 28 29 func (s *bufferedLogWriterSuite) SetUpTest(c *gc.C) { 30 s.IsolationSuite.SetUpTest(c) 31 s.writer = logsender.NewBufferedLogWriter(maxLen) 32 s.collector = logsendermetrics.BufferedLogWriterMetrics{s.writer} 33 s.AddCleanup(func(*gc.C) { s.writer.Close() }) 34 } 35 36 func (s *bufferedLogWriterSuite) TestDescribe(c *gc.C) { 37 ch := make(chan *prometheus.Desc) 38 go func() { 39 defer close(ch) 40 s.collector.Describe(ch) 41 }() 42 var descs []*prometheus.Desc 43 for desc := range ch { 44 descs = append(descs, desc) 45 } 46 c.Assert(descs, gc.HasLen, 4) 47 c.Assert(descs[0].String(), gc.Matches, `.*fqName: "juju_logsender_capacity".*`) 48 c.Assert(descs[1].String(), gc.Matches, `.*fqName: "juju_logsender_enqueued_total".*`) 49 c.Assert(descs[2].String(), gc.Matches, `.*fqName: "juju_logsender_sent_total".*`) 50 c.Assert(descs[3].String(), gc.Matches, `.*fqName: "juju_logsender_dropped_total".*`) 51 } 52 53 func (s *bufferedLogWriterSuite) TestCollect(c *gc.C) { 54 s.writer.Write(loggo.Entry{}) 55 s.writer.Write(loggo.Entry{}) 56 s.writer.Write(loggo.Entry{}) 57 s.writer.Write(loggo.Entry{}) 58 s.writer.Write(loggo.Entry{}) // causes first to be dropped 59 60 for i := 0; i < maxLen; i++ { 61 <-s.writer.Logs() 62 } 63 64 logsendertest.ExpectLogStats(c, s.writer, logsender.LogStats{ 65 Enqueued: 5, 66 Sent: 3, 67 Dropped: 1, 68 }) 69 70 ch := make(chan prometheus.Metric) 71 go func() { 72 defer close(ch) 73 s.collector.Collect(ch) 74 }() 75 76 var metrics []prometheus.Metric 77 for metric := range ch { 78 metrics = append(metrics, metric) 79 } 80 c.Assert(metrics, gc.HasLen, 4) 81 82 var dtoMetrics [4]dto.Metric 83 for i, metric := range metrics { 84 err := metric.Write(&dtoMetrics[i]) 85 c.Assert(err, jc.ErrorIsNil) 86 } 87 88 float64ptr := func(v float64) *float64 { 89 return &v 90 } 91 c.Assert(dtoMetrics, jc.DeepEquals, [4]dto.Metric{ 92 {Counter: &dto.Counter{Value: float64ptr(3)}}, 93 {Counter: &dto.Counter{Value: float64ptr(5)}}, 94 {Counter: &dto.Counter{Value: float64ptr(3)}}, 95 {Counter: &dto.Counter{Value: float64ptr(1)}}, 96 }) 97 }