1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the LGPLv3, see LICENCE file for details.
7
"github.com/juju/errors"
8
jc "github.com/juju/testing/checkers"
11
"gopkg.in/juju/charm.v6-unstable/resource"
14
var fingerprint = []byte("123456789012345678901234567890123456789012345678")
16
var _ = gc.Suite(&ResourceSuite{})
18
type ResourceSuite struct{}
20
func (s *ResourceSuite) TestValidateFull(c *gc.C) {
21
fp, err := resource.NewFingerprint(fingerprint)
22
c.Assert(err, jc.ErrorIsNil)
23
res := resource.Resource{
26
Type: resource.TypeFile,
28
Description: "One line that is useful when operators need to push it.",
30
Origin: resource.OriginStore,
37
c.Check(err, jc.ErrorIsNil)
40
func (s *ResourceSuite) TestValidateZeroValue(c *gc.C) {
41
var res resource.Resource
44
c.Check(err, jc.Satisfies, errors.IsNotValid)
47
func (s *ResourceSuite) TestValidateBadMetadata(c *gc.C) {
48
var meta resource.Meta
49
c.Assert(meta.Validate(), gc.NotNil)
51
fp, err := resource.NewFingerprint(fingerprint)
52
c.Assert(err, jc.ErrorIsNil)
53
res := resource.Resource{
55
Origin: resource.OriginStore,
61
c.Check(err, jc.Satisfies, errors.IsNotValid)
62
c.Check(err, gc.ErrorMatches, `bad metadata: .*`)
65
func (s *ResourceSuite) TestValidateBadOrigin(c *gc.C) {
66
var origin resource.Origin
67
c.Assert(origin.Validate(), gc.NotNil)
68
fp, err := resource.NewFingerprint(fingerprint)
69
c.Assert(err, jc.ErrorIsNil)
70
res := resource.Resource{
73
Type: resource.TypeFile,
75
Description: "One line that is useful when operators need to push it.",
83
c.Check(err, jc.Satisfies, errors.IsNotValid)
84
c.Check(err, gc.ErrorMatches, `bad origin: .*`)
87
func (s *ResourceSuite) TestValidateUploadNegativeRevision(c *gc.C) {
88
fp, err := resource.NewFingerprint(fingerprint)
89
c.Assert(err, jc.ErrorIsNil)
90
res := resource.Resource{
93
Type: resource.TypeFile,
95
Description: "One line that is useful when operators need to push it.",
97
Origin: resource.OriginUpload,
104
c.Check(err, jc.ErrorIsNil)
107
func (s *ResourceSuite) TestValidateStoreNegativeRevisionNoFile(c *gc.C) {
108
res := resource.Resource{
111
Type: resource.TypeFile,
112
Path: "filename.tgz",
113
Description: "One line that is useful when operators need to push it.",
115
Origin: resource.OriginStore,
118
err := res.Validate()
120
c.Check(err, jc.ErrorIsNil)
123
func (s *ResourceSuite) TestValidateBadRevision(c *gc.C) {
124
fp, err := resource.NewFingerprint(fingerprint)
125
c.Assert(err, jc.ErrorIsNil)
126
res := resource.Resource{
129
Type: resource.TypeFile,
130
Path: "filename.tgz",
131
Description: "One line that is useful when operators need to push it.",
133
Origin: resource.OriginStore,
139
c.Check(err, jc.Satisfies, errors.IsNotValid)
140
c.Check(err, gc.ErrorMatches, `bad revision: must be non-negative, got -1`)
143
func (s *ResourceSuite) TestValidateZeroValueFingerprint(c *gc.C) {
144
var fp resource.Fingerprint
145
c.Assert(fp.Validate(), gc.NotNil)
147
res := resource.Resource{
150
Type: resource.TypeFile,
151
Path: "filename.tgz",
152
Description: "One line that is useful when operators need to push it.",
154
Origin: resource.OriginStore,
158
err := res.Validate()
160
c.Check(err, jc.ErrorIsNil)
163
func (s *ResourceSuite) TestValidateMissingFingerprint(c *gc.C) {
164
var fp resource.Fingerprint
165
c.Assert(fp.Validate(), gc.NotNil)
167
res := resource.Resource{
170
Type: resource.TypeFile,
171
Path: "filename.tgz",
172
Description: "One line that is useful when operators need to push it.",
174
Origin: resource.OriginStore,
179
err := res.Validate()
181
c.Check(err, jc.Satisfies, errors.IsNotValid)
182
c.Check(err, gc.ErrorMatches, `bad file info: missing fingerprint`)
185
func (s *ResourceSuite) TestValidateBadSize(c *gc.C) {
186
fp, err := resource.NewFingerprint(fingerprint)
187
c.Assert(err, jc.ErrorIsNil)
188
res := resource.Resource{
191
Type: resource.TypeFile,
192
Path: "filename.tgz",
193
Description: "One line that is useful when operators need to push it.",
195
Origin: resource.OriginStore,
202
c.Check(err, jc.Satisfies, errors.IsNotValid)
203
c.Check(err, gc.ErrorMatches, `bad file info: negative size`)