github.com/Pankov404/juju@v0.0.0-20150703034450-be266991dceb/worker/uniter/runner/metrics_test.go (about) 1 // Copyright 2012-2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package runner_test 5 6 import ( 7 "time" 8 9 "github.com/juju/testing" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 jujutesting "github.com/juju/juju/testing" 14 "github.com/juju/juju/worker/uniter/runner" 15 ) 16 17 type MetricsRecorderSuite struct { 18 testing.IsolationSuite 19 20 paths RealPaths 21 } 22 23 var _ = gc.Suite(&MetricsRecorderSuite{}) 24 25 func (s *MetricsRecorderSuite) SetUpTest(c *gc.C) { 26 s.IsolationSuite.SetUpTest(c) 27 s.paths = NewRealPaths(c) 28 s.PatchValue(&runner.LockTimeout, jujutesting.ShortWait) 29 } 30 31 func (s *MetricsRecorderSuite) TestMetricRecorderInit(c *gc.C) { 32 w, err := runner.NewJSONMetricsRecorder(s.paths.GetMetricsSpoolDir(), "local:precise/wordpress") 33 c.Assert(err, jc.ErrorIsNil) 34 c.Assert(w, gc.NotNil) 35 err = w.AddMetric("pings", "5", time.Now()) 36 c.Assert(err, jc.ErrorIsNil) 37 err = w.Close() 38 c.Assert(err, jc.ErrorIsNil) 39 40 r, err := runner.NewJSONMetricsReader(s.paths.GetMetricsSpoolDir()) 41 c.Assert(err, jc.ErrorIsNil) 42 batches, err := r.Open() 43 c.Assert(err, jc.ErrorIsNil) 44 c.Assert(batches, gc.HasLen, 1) 45 batch := batches[0] 46 c.Assert(batch.CharmURL, gc.Equals, "local:precise/wordpress") 47 c.Assert(batch.UUID, gc.Not(gc.Equals), "") 48 c.Assert(batch.Metrics, gc.HasLen, 1) 49 c.Assert(batch.Metrics[0].Key, gc.Equals, "pings") 50 c.Assert(batch.Metrics[0].Value, gc.Equals, "5") 51 52 err = r.Close() 53 c.Assert(err, jc.ErrorIsNil) 54 } 55 56 type MetricsReaderSuite struct { 57 paths RealPaths 58 59 w runner.MetricsRecorder 60 } 61 62 var _ = gc.Suite(&MetricsReaderSuite{}) 63 64 func (s *MetricsReaderSuite) SetUpTest(c *gc.C) { 65 s.paths = NewRealPaths(c) 66 67 var err error 68 s.w, err = runner.NewJSONMetricsRecorder(s.paths.GetMetricsSpoolDir(), "local:precise/wordpress") 69 c.Assert(err, jc.ErrorIsNil) 70 err = s.w.AddMetric("pings", "5", time.Now()) 71 c.Assert(err, jc.ErrorIsNil) 72 err = s.w.Close() 73 c.Assert(err, jc.ErrorIsNil) 74 } 75 76 func (s *MetricsReaderSuite) TestTwoSimultaneousReaders(c *gc.C) { 77 r, err := runner.NewJSONMetricsReader(s.paths.GetMetricsSpoolDir()) 78 c.Assert(err, jc.ErrorIsNil) 79 80 r2, err := runner.NewJSONMetricsReader(c.MkDir()) 81 c.Assert(err, jc.ErrorIsNil) 82 c.Assert(r2, gc.NotNil) 83 err = r2.Close() 84 c.Assert(err, jc.ErrorIsNil) 85 err = r.Close() 86 c.Assert(err, jc.ErrorIsNil) 87 88 } 89 90 func (s *MetricsReaderSuite) TestBlockedReaders(c *gc.C) { 91 r, err := runner.NewJSONMetricsReader(s.paths.GetMetricsSpoolDir()) 92 c.Assert(err, jc.ErrorIsNil) 93 _, err = r.Open() 94 c.Assert(err, jc.ErrorIsNil) 95 96 r2, err := runner.NewJSONMetricsReader(s.paths.GetMetricsSpoolDir()) 97 c.Assert(err, jc.ErrorIsNil) 98 _, err = r2.Open() 99 c.Assert(err, gc.ErrorMatches, `lock timeout exceeded`) 100 err = r.Close() 101 c.Assert(err, jc.ErrorIsNil) 102 103 } 104 105 func (s *MetricsReaderSuite) TestUnblockedReaders(c *gc.C) { 106 r, err := runner.NewJSONMetricsReader(s.paths.GetMetricsSpoolDir()) 107 c.Assert(err, jc.ErrorIsNil) 108 err = r.Close() 109 c.Assert(err, jc.ErrorIsNil) 110 111 r2, err := runner.NewJSONMetricsReader(s.paths.GetMetricsSpoolDir()) 112 c.Assert(err, jc.ErrorIsNil) 113 c.Assert(r2, gc.NotNil) 114 err = r2.Close() 115 c.Assert(err, jc.ErrorIsNil) 116 } 117 118 func (s *MetricsReaderSuite) TestRemoval(c *gc.C) { 119 r, err := runner.NewJSONMetricsReader(s.paths.GetMetricsSpoolDir()) 120 c.Assert(err, jc.ErrorIsNil) 121 122 batches, err := r.Open() 123 c.Assert(err, jc.ErrorIsNil) 124 for _, batch := range batches { 125 err := r.Remove(batch.UUID) 126 c.Assert(err, jc.ErrorIsNil) 127 } 128 err = r.Close() 129 c.Assert(err, jc.ErrorIsNil) 130 131 batches, err = r.Open() 132 c.Assert(err, jc.ErrorIsNil) 133 c.Assert(batches, gc.HasLen, 0) 134 err = r.Close() 135 c.Assert(err, jc.ErrorIsNil) 136 137 }