1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the LGPLv3, see LICENCE file for details.
11
"github.com/juju/errors"
12
jc "github.com/juju/testing/checkers"
13
gc "gopkg.in/check.v1"
15
"gopkg.in/juju/charm.v6-unstable/resource"
18
func newFingerprint(c *gc.C, data string) ([]byte, string) {
19
hash := sha512.New384()
20
_, err := hash.Write([]byte(data))
21
c.Assert(err, jc.ErrorIsNil)
24
hexStr := hex.EncodeToString(raw)
28
var _ = gc.Suite(&FingerprintSuite{})
30
type FingerprintSuite struct{}
32
func (s *FingerprintSuite) TestNewFingerprintOkay(c *gc.C) {
33
expected, _ := newFingerprint(c, "spamspamspam")
35
fp, err := resource.NewFingerprint(expected)
36
c.Assert(err, jc.ErrorIsNil)
39
c.Check(raw, jc.DeepEquals, expected)
42
func (s *FingerprintSuite) TestNewFingerprintTooSmall(c *gc.C) {
43
expected, _ := newFingerprint(c, "spamspamspam")
45
_, err := resource.NewFingerprint(expected[:10])
47
c.Check(err, jc.Satisfies, errors.IsNotValid)
48
c.Check(err, gc.ErrorMatches, `.*too small.*`)
51
func (s *FingerprintSuite) TestNewFingerprintTooBig(c *gc.C) {
52
expected, _ := newFingerprint(c, "spamspamspam")
54
_, err := resource.NewFingerprint(append(expected, 1, 2, 3))
56
c.Check(err, jc.Satisfies, errors.IsNotValid)
57
c.Check(err, gc.ErrorMatches, `.*too big.*`)
60
func (s *FingerprintSuite) TestParseFingerprintOkay(c *gc.C) {
61
_, expected := newFingerprint(c, "spamspamspam")
63
fp, err := resource.ParseFingerprint(expected)
64
c.Assert(err, jc.ErrorIsNil)
67
c.Check(hex, jc.DeepEquals, expected)
70
func (s *FingerprintSuite) TestParseFingerprintNonHex(c *gc.C) {
71
_, err := resource.ParseFingerprint("XYZ") // not hex
73
c.Check(err, gc.ErrorMatches, `.*odd length hex string.*`)
76
func (s *FingerprintSuite) TestGenerateFingerprint(c *gc.C) {
77
expected, _ := newFingerprint(c, "spamspamspam")
78
data := strings.NewReader("spamspamspam")
80
fp, err := resource.GenerateFingerprint(data)
81
c.Assert(err, jc.ErrorIsNil)
84
c.Check(raw, jc.DeepEquals, expected)
87
func (s *FingerprintSuite) TestString(c *gc.C) {
88
raw, expected := newFingerprint(c, "spamspamspam")
89
fp, err := resource.NewFingerprint(raw)
90
c.Assert(err, jc.ErrorIsNil)
94
c.Check(hex, gc.Equals, expected)
97
func (s *FingerprintSuite) TestRoundtripString(c *gc.C) {
98
_, expected := newFingerprint(c, "spamspamspam")
100
fp, err := resource.ParseFingerprint(expected)
101
c.Assert(err, jc.ErrorIsNil)
104
c.Check(hex, gc.Equals, expected)
107
func (s *FingerprintSuite) TestBytes(c *gc.C) {
108
expected, _ := newFingerprint(c, "spamspamspam")
109
fp, err := resource.NewFingerprint(expected)
110
c.Assert(err, jc.ErrorIsNil)
114
c.Check(raw, jc.DeepEquals, expected)
117
func (s *FingerprintSuite) TestRoundtripBytes(c *gc.C) {
118
expected, _ := newFingerprint(c, "spamspamspam")
120
fp, err := resource.NewFingerprint(expected)
121
c.Assert(err, jc.ErrorIsNil)
124
c.Check(raw, jc.DeepEquals, expected)
127
func (s *FingerprintSuite) TestValidateOkay(c *gc.C) {
128
raw, _ := newFingerprint(c, "spamspamspam")
129
fp, err := resource.NewFingerprint(raw)
130
c.Assert(err, jc.ErrorIsNil)
134
c.Check(err, jc.ErrorIsNil)
137
func (s *FingerprintSuite) TestValidateZero(c *gc.C) {
138
var fp resource.Fingerprint
141
c.Check(err, jc.Satisfies, errors.IsNotValid)
142
c.Check(err, gc.ErrorMatches, `zero-value fingerprint not valid`)