github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/worker/metrics/sender/manifold_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package sender_test 5 6 import ( 7 "github.com/juju/names" 8 "github.com/juju/testing" 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/api/base" 13 "github.com/juju/juju/api/metricsadder" 14 "github.com/juju/juju/worker" 15 "github.com/juju/juju/worker/dependency" 16 dt "github.com/juju/juju/worker/dependency/testing" 17 "github.com/juju/juju/worker/metrics/sender" 18 "github.com/juju/juju/worker/metrics/spool" 19 ) 20 21 type ManifoldSuite struct { 22 testing.IsolationSuite 23 factory spool.MetricFactory 24 client metricsadder.MetricsAdderClient 25 manifold dependency.Manifold 26 getResource dependency.GetResourceFunc 27 } 28 29 var _ = gc.Suite(&ManifoldSuite{}) 30 31 func (s *ManifoldSuite) SetUpTest(c *gc.C) { 32 spoolDir := c.MkDir() 33 s.IsolationSuite.SetUpTest(c) 34 s.factory = &stubMetricFactory{ 35 &testing.Stub{}, 36 spoolDir, 37 } 38 39 testAPIClient := func(apiCaller base.APICaller) metricsadder.MetricsAdderClient { 40 return newTestAPIMetricSender() 41 } 42 s.PatchValue(&sender.NewMetricAdderClient, testAPIClient) 43 44 s.manifold = sender.Manifold(sender.ManifoldConfig{ 45 APICallerName: "api-caller", 46 MetricSpoolName: "metric-spool", 47 }) 48 s.getResource = dt.StubGetResource(dt.StubResources{ 49 "api-caller": dt.StubResource{Output: &stubAPICaller{&testing.Stub{}}}, 50 "metric-spool": dt.StubResource{Output: s.factory}, 51 }) 52 } 53 54 func (s *ManifoldSuite) TestInputs(c *gc.C) { 55 c.Check(s.manifold.Inputs, jc.DeepEquals, []string{"api-caller", "metric-spool"}) 56 } 57 58 func (s *ManifoldSuite) TestStartMissingAPICaller(c *gc.C) { 59 getResource := dt.StubGetResource(dt.StubResources{ 60 "api-caller": dt.StubResource{Error: dependency.ErrMissing}, 61 "metric-spool": dt.StubResource{Output: s.factory}, 62 }) 63 worker, err := s.manifold.Start(getResource) 64 c.Check(worker, gc.IsNil) 65 c.Check(err, gc.ErrorMatches, dependency.ErrMissing.Error()) 66 } 67 68 func (s *ManifoldSuite) TestStartSuccess(c *gc.C) { 69 s.setupWorkerTest(c) 70 } 71 72 func (s *ManifoldSuite) setupWorkerTest(c *gc.C) worker.Worker { 73 worker, err := s.manifold.Start(s.getResource) 74 c.Check(err, jc.ErrorIsNil) 75 s.AddCleanup(func(c *gc.C) { 76 worker.Kill() 77 err := worker.Wait() 78 c.Check(err, jc.ErrorIsNil) 79 }) 80 return worker 81 } 82 83 type stubAPICaller struct { 84 *testing.Stub 85 } 86 87 func (s *stubAPICaller) APICall(objType string, version int, id, request string, params, response interface{}) error { 88 s.MethodCall(s, "APICall", objType, version, id, request, params, response) 89 return nil 90 } 91 92 func (s *stubAPICaller) BestFacadeVersion(facade string) int { 93 s.MethodCall(s, "BestFacadeVersion", facade) 94 return 42 95 } 96 97 func (s *stubAPICaller) EnvironTag() (names.EnvironTag, error) { 98 s.MethodCall(s, "EnvironTag") 99 return names.NewEnvironTag("foobar"), nil 100 }