1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
"github.com/juju/errors"
10
"github.com/juju/testing"
11
jc "github.com/juju/testing/checkers"
12
gc "gopkg.in/check.v1"
13
charmresource "gopkg.in/juju/charm.v6-unstable/resource"
15
"github.com/juju/juju/resource"
18
type ResourceSuite struct {
19
testing.IsolationSuite
22
var _ = gc.Suite(&ResourceSuite{})
24
func (ResourceSuite) TestValidateUploadUsed(c *gc.C) {
25
res := resource.Resource{
26
Resource: newFullCharmResource(c, "spam"),
27
ID: "a-application/spam",
28
ApplicationID: "a-application",
30
Timestamp: time.Now(),
35
c.Check(err, jc.ErrorIsNil)
38
func (ResourceSuite) TestValidateUploadNotUsed(c *gc.C) {
39
res := resource.Resource{
40
Resource: newFullCharmResource(c, "spam"),
41
ID: "a-application/spam",
42
ApplicationID: "a-application",
47
c.Check(err, jc.ErrorIsNil)
50
func (ResourceSuite) TestValidateUploadPending(c *gc.C) {
51
res := resource.Resource{
52
Resource: newFullCharmResource(c, "spam"),
53
ID: "a-application/spam",
54
PendingID: "some-unique-ID",
55
ApplicationID: "a-application",
57
Timestamp: time.Now(),
62
c.Check(err, jc.ErrorIsNil)
65
func (ResourceSuite) TestValidateZeroValue(c *gc.C) {
66
var res resource.Resource
70
c.Check(errors.Cause(err), jc.Satisfies, errors.IsNotValid)
71
c.Check(err, gc.ErrorMatches, `.*bad info.*`)
74
func (ResourceSuite) TestValidateBadInfo(c *gc.C) {
75
var charmRes charmresource.Resource
76
c.Assert(charmRes.Validate(), gc.NotNil)
78
res := resource.Resource{
84
c.Check(errors.Cause(err), jc.Satisfies, errors.IsNotValid)
85
c.Check(err, gc.ErrorMatches, `.*bad info.*`)
88
func (ResourceSuite) TestValidateMissingID(c *gc.C) {
89
res := resource.Resource{
90
Resource: newFullCharmResource(c, "spam"),
91
ApplicationID: "a-application",
93
Timestamp: time.Now(),
98
c.Check(err, jc.ErrorIsNil)
101
func (ResourceSuite) TestValidateMissingApplicationID(c *gc.C) {
102
res := resource.Resource{
103
Resource: newFullCharmResource(c, "spam"),
104
ID: "a-application/spam",
106
Timestamp: time.Now(),
109
err := res.Validate()
111
c.Check(errors.Cause(err), jc.Satisfies, errors.IsNotValid)
112
c.Check(err, gc.ErrorMatches, `.*missing application ID.*`)
115
func (ResourceSuite) TestValidateMissingUsername(c *gc.C) {
116
res := resource.Resource{
117
Resource: newFullCharmResource(c, "spam"),
118
ID: "a-application/spam",
119
ApplicationID: "a-application",
121
Timestamp: time.Now(),
124
err := res.Validate()
126
c.Check(err, jc.ErrorIsNil)
129
func (ResourceSuite) TestValidateMissingTimestamp(c *gc.C) {
130
res := resource.Resource{
131
Resource: newFullCharmResource(c, "spam"),
132
ID: "a-application/spam",
133
ApplicationID: "a-application",
135
Timestamp: time.Time{},
138
err := res.Validate()
140
c.Check(errors.Cause(err), jc.Satisfies, errors.IsNotValid)
141
c.Check(err, gc.ErrorMatches, `.*missing timestamp.*`)
144
func (ResourceSuite) TestRevisionStringNone(c *gc.C) {
145
res := resource.Resource{
146
Resource: charmresource.Resource{
147
Meta: charmresource.Meta{
149
Type: charmresource.TypeFile,
151
Description: "you need it",
153
Origin: charmresource.OriginUpload,
155
ApplicationID: "svc",
158
err := res.Validate()
159
c.Check(err, jc.ErrorIsNil)
161
c.Check(res.RevisionString(), gc.Equals, "-")
164
func (ResourceSuite) TestRevisionStringTime(c *gc.C) {
165
res := resource.Resource{
166
Resource: charmresource.Resource{
167
Meta: charmresource.Meta{
169
Type: charmresource.TypeFile,
171
Description: "you need it",
173
Origin: charmresource.OriginUpload,
175
ApplicationID: "svc",
177
Timestamp: time.Date(2012, 7, 8, 15, 59, 5, 5, time.UTC),
180
err := res.Validate()
181
c.Check(err, jc.ErrorIsNil)
183
c.Check(res.RevisionString(), gc.Equals, "2012-07-08 15:59:05 +0000 UTC")
186
func (ResourceSuite) TestRevisionStringNumber(c *gc.C) {
187
res := resource.Resource{
188
Resource: charmresource.Resource{
189
Meta: charmresource.Meta{
191
Type: charmresource.TypeFile,
193
Description: "you need it",
195
Origin: charmresource.OriginStore,
198
ApplicationID: "svc",
200
Timestamp: time.Date(2012, 7, 8, 15, 59, 5, 5, time.UTC),
203
err := res.Validate()
204
c.Check(err, jc.ErrorIsNil)
206
c.Check(res.RevisionString(), gc.Equals, "7")
209
func (s *ResourceSuite) TestAsMap(c *gc.C) {
210
spam := newStoreResource(c, "spam", "a-application", 2)
211
eggs := newStoreResource(c, "eggs", "a-application", 3)
212
resources := []resource.Resource{
217
resMap := resource.AsMap(resources)
219
c.Check(resMap, jc.DeepEquals, map[string]resource.Resource{