1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package application_test
10
jc "github.com/juju/testing/checkers"
11
gc "gopkg.in/check.v1"
12
charmresource "gopkg.in/juju/charm.v6-unstable/resource"
14
"github.com/juju/juju/cmd/juju/application"
15
"github.com/juju/juju/component/all"
16
"github.com/juju/juju/resource"
17
"github.com/juju/juju/testcharms"
21
if err := all.RegisterForServer(); err != nil {
26
type ResourcesBundleSuite struct {
27
application.BundleDeployCharmStoreSuite
30
var _ = gc.Suite(&ResourcesBundleSuite{})
32
func (s *ResourcesBundleSuite) TestDeployBundleResources(c *gc.C) {
33
testcharms.UploadCharm(c, s.Client(), "trusty/starsay-42", "starsay")
44
output, err := s.DeployBundleYAML(c, bundleMeta)
45
c.Assert(err, jc.ErrorIsNil)
47
lines := strings.Split(output, "\n")
48
expectedLines := strings.Split(strings.TrimSpace(`
49
added charm cs:trusty/starsay-42
50
application starsay deployed (charm cs:trusty/starsay-42 with the series "trusty" defined by the bundle)
51
added resource install-resource
52
added resource store-resource
53
added resource upload-resource
54
added starsay/0 unit to new machine
55
deployment of bundle "local:bundle/example-0" completed
57
c.Check(lines, gc.HasLen, len(expectedLines))
58
c.Check(lines[0], gc.Equals, expectedLines[0])
59
c.Check(lines[1], gc.Equals, expectedLines[1])
60
// The "added resource" lines are checked after we sort since
61
// the ordering of those lines is unknown.
62
c.Check(lines[5], gc.Equals, expectedLines[5])
63
c.Check(lines[6], gc.Equals, expectedLines[6])
65
sort.Strings(expectedLines)
66
c.Check(lines, jc.DeepEquals, expectedLines)
67
s.checkResources(c, "starsay", []resource.Resource{{
68
Resource: charmresource.Resource{
69
Meta: charmresource.Meta{
70
Name: "install-resource",
71
Type: charmresource.TypeFile,
72
Path: "gotta-have-it.txt",
73
Description: "get things started",
75
Origin: charmresource.OriginStore,
77
Fingerprint: resourceHash("install-resource content"),
78
Size: int64(len("install-resource content")),
80
ID: "starsay/install-resource",
81
ApplicationID: "starsay",
83
Resource: charmresource.Resource{
84
Meta: charmresource.Meta{
85
Name: "store-resource",
86
Type: charmresource.TypeFile,
88
Description: "One line that is useful when operators need to push it.",
90
Origin: charmresource.OriginStore,
91
Fingerprint: resourceHash("store-resource content"),
92
Size: int64(len("store-resource content")),
95
ID: "starsay/store-resource",
96
ApplicationID: "starsay",
98
Resource: charmresource.Resource{
99
Meta: charmresource.Meta{
100
Name: "upload-resource",
101
Type: charmresource.TypeFile,
102
Path: "somename.xml",
103
Description: "Who uses xml anymore?",
105
Origin: charmresource.OriginStore,
106
Fingerprint: resourceHash("upload-resource content"),
107
Size: int64(len("upload-resource content")),
110
ID: "starsay/upload-resource",
111
ApplicationID: "starsay",
115
func (s *ResourcesBundleSuite) checkResources(c *gc.C, serviceName string, expected []resource.Resource) {
116
_, err := s.State.Application("starsay")
117
c.Check(err, jc.ErrorIsNil)
118
st, err := s.State.Resources()
119
c.Assert(err, jc.ErrorIsNil)
120
svcResources, err := st.ListResources("starsay")
121
c.Assert(err, jc.ErrorIsNil)
122
resources := svcResources.Resources
123
resource.Sort(resources)
124
c.Assert(resources, jc.DeepEquals, expected)