1
// Copyright 2014 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
jc "github.com/juju/testing/checkers"
9
"gopkg.in/juju/charm.v6-unstable"
11
"github.com/juju/juju/api/service"
12
"github.com/juju/juju/apiserver/common"
13
"github.com/juju/juju/apiserver/params"
14
"github.com/juju/juju/constraints"
15
"github.com/juju/juju/instance"
16
jujutesting "github.com/juju/juju/juju/testing"
17
"github.com/juju/juju/storage"
20
type serviceSuite struct {
21
jujutesting.JujuConnSuite
23
client *service.Client
26
var _ = gc.Suite(&serviceSuite{})
28
func (s *serviceSuite) SetUpTest(c *gc.C) {
29
s.JujuConnSuite.SetUpTest(c)
30
s.client = service.NewClient(s.APIState)
31
c.Assert(s.client, gc.NotNil)
34
func (s *serviceSuite) TestSetServiceMetricCredentials(c *gc.C) {
36
service.PatchFacadeCall(s, s.client, func(request string, a, response interface{}) error {
38
c.Assert(request, gc.Equals, "SetMetricCredentials")
39
args, ok := a.(params.ServiceMetricCredentials)
40
c.Assert(ok, jc.IsTrue)
41
c.Assert(args.Creds, gc.HasLen, 1)
42
c.Assert(args.Creds[0].ServiceName, gc.Equals, "serviceA")
43
c.Assert(args.Creds[0].MetricCredentials, gc.DeepEquals, []byte("creds 1"))
45
result := response.(*params.ErrorResults)
46
result.Results = make([]params.ErrorResult, 1)
49
err := s.client.SetMetricCredentials("serviceA", []byte("creds 1"))
50
c.Assert(err, jc.ErrorIsNil)
51
c.Assert(called, jc.IsTrue)
54
func (s *serviceSuite) TestSetServiceMetricCredentialsFails(c *gc.C) {
56
service.PatchFacadeCall(s, s.client, func(request string, args, response interface{}) error {
58
c.Assert(request, gc.Equals, "SetMetricCredentials")
59
result := response.(*params.ErrorResults)
60
result.Results = make([]params.ErrorResult, 1)
61
result.Results[0].Error = common.ServerError(common.ErrPerm)
62
return result.OneError()
64
err := s.client.SetMetricCredentials("service", []byte("creds"))
65
c.Assert(err, gc.ErrorMatches, "permission denied")
66
c.Assert(called, jc.IsTrue)
69
func (s *serviceSuite) TestSetServiceMetricCredentialsNoMocks(c *gc.C) {
70
service := s.Factory.MakeService(c, nil)
71
err := s.client.SetMetricCredentials(service.Name(), []byte("creds"))
72
c.Assert(err, jc.ErrorIsNil)
73
err = service.Refresh()
74
c.Assert(err, jc.ErrorIsNil)
75
c.Assert(service.MetricCredentials(), gc.DeepEquals, []byte("creds"))
78
func (s *serviceSuite) TestSetServiceDeploy(c *gc.C) {
80
service.PatchFacadeCall(s, s.client, func(request string, a, response interface{}) error {
82
c.Assert(request, gc.Equals, "Deploy")
83
args, ok := a.(params.ServicesDeploy)
84
c.Assert(ok, jc.IsTrue)
85
c.Assert(args.Services, gc.HasLen, 1)
86
c.Assert(args.Services[0].CharmUrl, gc.Equals, "charmURL")
87
c.Assert(args.Services[0].ServiceName, gc.Equals, "serviceA")
88
c.Assert(args.Services[0].Series, gc.Equals, "series")
89
c.Assert(args.Services[0].NumUnits, gc.Equals, 2)
90
c.Assert(args.Services[0].ConfigYAML, gc.Equals, "configYAML")
91
c.Assert(args.Services[0].Constraints, gc.DeepEquals, constraints.MustParse("mem=4G"))
92
c.Assert(args.Services[0].Placement, gc.DeepEquals, []*instance.Placement{{"scope", "directive"}})
93
c.Assert(args.Services[0].EndpointBindings, gc.DeepEquals, map[string]string{"foo": "bar"})
94
c.Assert(args.Services[0].Storage, gc.DeepEquals, map[string]storage.Constraints{"data": storage.Constraints{Pool: "pool"}})
95
c.Assert(args.Services[0].Resources, gc.DeepEquals, map[string]string{"foo": "bar"})
97
result := response.(*params.ErrorResults)
98
result.Results = make([]params.ErrorResult, 1)
102
args := service.DeployArgs{
103
CharmURL: "charmURL",
104
ServiceName: "serviceA",
107
ConfigYAML: "configYAML",
108
Cons: constraints.MustParse("mem=4G"),
109
Placement: []*instance.Placement{{"scope", "directive"}},
110
Networks: []string{"neta"},
111
Storage: map[string]storage.Constraints{"data": storage.Constraints{Pool: "pool"}},
112
Resources: map[string]string{"foo": "bar"},
113
EndpointBindings: map[string]string{"foo": "bar"},
115
err := s.client.Deploy(args)
116
c.Assert(err, jc.ErrorIsNil)
117
c.Assert(called, jc.IsTrue)
120
func (s *serviceSuite) TestServiceGetCharmURL(c *gc.C) {
122
service.PatchFacadeCall(s, s.client, func(request string, a, response interface{}) error {
124
c.Assert(request, gc.Equals, "GetCharmURL")
125
args, ok := a.(params.ServiceGet)
126
c.Assert(ok, jc.IsTrue)
127
c.Assert(args.ServiceName, gc.Equals, "service")
129
result := response.(*params.StringResult)
130
result.Result = "curl"
133
curl, err := s.client.GetCharmURL("service")
134
c.Assert(err, jc.ErrorIsNil)
135
c.Assert(curl, gc.DeepEquals, charm.MustParseURL("curl"))
136
c.Assert(called, jc.IsTrue)
139
func (s *serviceSuite) TestServiceSetCharm(c *gc.C) {
141
service.PatchFacadeCall(s, s.client, func(request string, a, response interface{}) error {
143
c.Assert(request, gc.Equals, "SetCharm")
144
args, ok := a.(params.ServiceSetCharm)
145
c.Assert(ok, jc.IsTrue)
146
c.Assert(args.ServiceName, gc.Equals, "service")
147
c.Assert(args.CharmUrl, gc.Equals, "charmURL")
148
c.Assert(args.ForceSeries, gc.Equals, true)
149
c.Assert(args.ForceUnits, gc.Equals, true)
152
cfg := service.SetCharmConfig{
153
ServiceName: "service",
154
CharmUrl: "charmURL",
158
err := s.client.SetCharm(cfg)
159
c.Assert(err, jc.ErrorIsNil)
160
c.Assert(called, jc.IsTrue)