github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/api/service/client_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package service_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/api/service"
    11  	"github.com/juju/juju/apiserver/common"
    12  	"github.com/juju/juju/apiserver/params"
    13  	"github.com/juju/juju/constraints"
    14  	jujutesting "github.com/juju/juju/juju/testing"
    15  	"github.com/juju/juju/storage"
    16  )
    17  
    18  type serviceSuite struct {
    19  	jujutesting.JujuConnSuite
    20  
    21  	client *service.Client
    22  }
    23  
    24  var _ = gc.Suite(&serviceSuite{})
    25  
    26  func (s *serviceSuite) SetUpTest(c *gc.C) {
    27  	s.JujuConnSuite.SetUpTest(c)
    28  	s.client = service.NewClient(s.APIState)
    29  	c.Assert(s.client, gc.NotNil)
    30  }
    31  
    32  func (s *serviceSuite) TestSetServiceMetricCredentials(c *gc.C) {
    33  	var called bool
    34  	service.PatchFacadeCall(s, s.client, func(request string, a, response interface{}) error {
    35  		called = true
    36  		c.Assert(request, gc.Equals, "SetMetricCredentials")
    37  		args, ok := a.(params.ServiceMetricCredentials)
    38  		c.Assert(ok, jc.IsTrue)
    39  		c.Assert(args.Creds, gc.HasLen, 1)
    40  		c.Assert(args.Creds[0].ServiceName, gc.Equals, "serviceA")
    41  		c.Assert(args.Creds[0].MetricCredentials, gc.DeepEquals, []byte("creds 1"))
    42  
    43  		result := response.(*params.ErrorResults)
    44  		result.Results = make([]params.ErrorResult, 1)
    45  		return nil
    46  	})
    47  	err := s.client.SetMetricCredentials("serviceA", []byte("creds 1"))
    48  	c.Assert(err, jc.ErrorIsNil)
    49  	c.Assert(called, jc.IsTrue)
    50  }
    51  
    52  func (s *serviceSuite) TestSetServiceMetricCredentialsFails(c *gc.C) {
    53  	var called bool
    54  	service.PatchFacadeCall(s, s.client, func(request string, args, response interface{}) error {
    55  		called = true
    56  		c.Assert(request, gc.Equals, "SetMetricCredentials")
    57  		result := response.(*params.ErrorResults)
    58  		result.Results = make([]params.ErrorResult, 1)
    59  		result.Results[0].Error = common.ServerError(common.ErrPerm)
    60  		return result.OneError()
    61  	})
    62  	err := s.client.SetMetricCredentials("service", []byte("creds"))
    63  	c.Assert(err, gc.ErrorMatches, "permission denied")
    64  	c.Assert(called, jc.IsTrue)
    65  }
    66  
    67  func (s *serviceSuite) TestSetServiceMetricCredentialsNoMocks(c *gc.C) {
    68  	service := s.Factory.MakeService(c, nil)
    69  	err := s.client.SetMetricCredentials(service.Name(), []byte("creds"))
    70  	c.Assert(err, jc.ErrorIsNil)
    71  	err = service.Refresh()
    72  	c.Assert(err, jc.ErrorIsNil)
    73  	c.Assert(service.MetricCredentials(), gc.DeepEquals, []byte("creds"))
    74  }
    75  
    76  func (s *serviceSuite) TestSetServiceDeploy(c *gc.C) {
    77  	var called bool
    78  	service.PatchFacadeCall(s, s.client, func(request string, a, response interface{}) error {
    79  		called = true
    80  		c.Assert(request, gc.Equals, "ServicesDeploy")
    81  		args, ok := a.(params.ServicesDeploy)
    82  		c.Assert(ok, jc.IsTrue)
    83  		c.Assert(args.Services, gc.HasLen, 1)
    84  		c.Assert(args.Services[0].CharmUrl, gc.Equals, "charmURL")
    85  		c.Assert(args.Services[0].ServiceName, gc.Equals, "serviceA")
    86  		c.Assert(args.Services[0].NumUnits, gc.Equals, 2)
    87  		c.Assert(args.Services[0].ConfigYAML, gc.Equals, "configYAML")
    88  		c.Assert(args.Services[0].Constraints, gc.DeepEquals, constraints.MustParse("mem=4G"))
    89  		c.Assert(args.Services[0].ToMachineSpec, gc.Equals, "machineSpec")
    90  		c.Assert(args.Services[0].Networks, gc.DeepEquals, []string{"neta"})
    91  		c.Assert(args.Services[0].Storage, gc.DeepEquals, map[string]storage.Constraints{"data": storage.Constraints{Pool: "pool"}})
    92  
    93  		result := response.(*params.ErrorResults)
    94  		result.Results = make([]params.ErrorResult, 1)
    95  		return nil
    96  	})
    97  	err := s.client.ServiceDeploy("charmURL", "serviceA", 2, "configYAML", constraints.MustParse("mem=4G"),
    98  		"machineSpec", nil, []string{"neta"}, map[string]storage.Constraints{"data": storage.Constraints{Pool: "pool"}})
    99  	c.Assert(err, jc.ErrorIsNil)
   100  	c.Assert(called, jc.IsTrue)
   101  }