github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/apiserver/service/service_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/apiserver/params"
    11  	"github.com/juju/juju/apiserver/service"
    12  	apiservertesting "github.com/juju/juju/apiserver/testing"
    13  	jujutesting "github.com/juju/juju/juju/testing"
    14  	"github.com/juju/juju/state"
    15  	"github.com/juju/juju/testing/factory"
    16  )
    17  
    18  type serviceSuite struct {
    19  	jujutesting.JujuConnSuite
    20  
    21  	serviceApi *service.API
    22  	service    *state.Service
    23  	authorizer apiservertesting.FakeAuthorizer
    24  }
    25  
    26  var _ = gc.Suite(&serviceSuite{})
    27  
    28  var _ service.Service = (*service.API)(nil)
    29  
    30  func (s *serviceSuite) SetUpTest(c *gc.C) {
    31  	s.JujuConnSuite.SetUpTest(c)
    32  	s.service = s.Factory.MakeService(c, nil)
    33  
    34  	s.authorizer = apiservertesting.FakeAuthorizer{
    35  		Tag: s.AdminUserTag(c),
    36  	}
    37  	var err error
    38  	s.serviceApi, err = service.NewAPI(s.State, nil, s.authorizer)
    39  	c.Assert(err, jc.ErrorIsNil)
    40  }
    41  
    42  func (s *serviceSuite) TestSetMetricCredentials(c *gc.C) {
    43  	charm := s.Factory.MakeCharm(c, &factory.CharmParams{Name: "wordpress"})
    44  	wordpress := s.Factory.MakeService(c, &factory.ServiceParams{
    45  		Charm: charm,
    46  	})
    47  	tests := []struct {
    48  		about   string
    49  		args    params.ServiceMetricCredentials
    50  		results params.ErrorResults
    51  	}{
    52  		{
    53  			"test one argument and it passes",
    54  			params.ServiceMetricCredentials{[]params.ServiceMetricCredential{{
    55  				s.service.Name(),
    56  				[]byte("creds 1234"),
    57  			}}},
    58  			params.ErrorResults{[]params.ErrorResult{{Error: nil}}},
    59  		},
    60  		{
    61  			"test two arguments and both pass",
    62  			params.ServiceMetricCredentials{[]params.ServiceMetricCredential{
    63  				{
    64  					s.service.Name(),
    65  					[]byte("creds 1234"),
    66  				},
    67  				{
    68  					wordpress.Name(),
    69  					[]byte("creds 4567"),
    70  				},
    71  			}},
    72  			params.ErrorResults{[]params.ErrorResult{
    73  				{Error: nil},
    74  				{Error: nil},
    75  			}},
    76  		},
    77  		{
    78  			"test two arguments and second one fails",
    79  			params.ServiceMetricCredentials{[]params.ServiceMetricCredential{
    80  				{
    81  					s.service.Name(),
    82  					[]byte("creds 1234"),
    83  				},
    84  				{
    85  					"not-a-service",
    86  					[]byte("creds 4567"),
    87  				},
    88  			}},
    89  			params.ErrorResults{[]params.ErrorResult{
    90  				{Error: nil},
    91  				{Error: &params.Error{`service "not-a-service" not found`, "not found"}},
    92  			}},
    93  		},
    94  	}
    95  	for i, t := range tests {
    96  		c.Logf("Running test %d %v", i, t.about)
    97  		results, err := s.serviceApi.SetMetricCredentials(t.args)
    98  		c.Assert(err, jc.ErrorIsNil)
    99  		c.Assert(results.Results, gc.HasLen, len(t.results.Results))
   100  		c.Assert(results, gc.DeepEquals, t.results)
   101  
   102  		for i, a := range t.args.Creds {
   103  			if t.results.Results[i].Error == nil {
   104  				svc, err := s.State.Service(a.ServiceName)
   105  				c.Assert(err, jc.ErrorIsNil)
   106  				creds := svc.MetricCredentials()
   107  				c.Assert(creds, gc.DeepEquals, a.MetricCredentials)
   108  			}
   109  		}
   110  	}
   111  }