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  }