1
// Copyright 2014 Canonical Ltd.
2
// Licensed under the LGPLv3, see LICENCE file for details.
10
"github.com/juju/testing"
11
gc "gopkg.in/check.v1"
13
"github.com/juju/utils/hash"
16
var _ = gc.Suite(&WriterSuite{})
18
type WriterSuite struct {
19
testing.IsolationSuite
22
type errorWriter struct {
26
func (w *errorWriter) Write(data []byte) (int, error) {
30
type fakeHasher struct {
35
func (h *fakeHasher) Sum(b []byte) []byte {
40
func (h *fakeHasher) Reset() {}
41
func (h *fakeHasher) Size() int { return -1 }
42
func (h *fakeHasher) BlockSize() int { return -1 }
44
func (s *WriterSuite) TestHashingWriterWriteEmpty(c *gc.C) {
46
hasher := fakeHasher{}
47
w := hash.NewHashingWriter(&buf, &hasher)
48
n, err := w.Write(nil)
50
c.Check(err, gc.IsNil)
51
c.Check(n, gc.Equals, 0)
52
c.Check(buf.String(), gc.Equals, "")
53
c.Check(hasher.String(), gc.Equals, "")
56
func (s *WriterSuite) TestHashingWriterWriteSmall(c *gc.C) {
58
hasher := fakeHasher{}
59
w := hash.NewHashingWriter(&buf, &hasher)
60
n, err := w.Write([]byte("spam"))
62
c.Check(err, gc.IsNil)
63
c.Check(n, gc.Equals, 4)
64
c.Check(buf.String(), gc.Equals, "spam")
65
c.Check(hasher.String(), gc.Equals, "spam")
68
func (s *WriterSuite) TestHashingWriterWriteFileError(c *gc.C) {
69
file := errorWriter{err: errors.New("failed!")}
70
hasher := fakeHasher{}
71
w := hash.NewHashingWriter(&file, &hasher)
72
_, err := w.Write([]byte("spam"))
74
c.Check(err, gc.ErrorMatches, "failed!")
77
func (s *WriterSuite) TestHashingWriterSum(c *gc.C) {
79
hasher := fakeHasher{sum: []byte("spam")}
80
w := hash.NewHashingWriter(&buf, &hasher)
81
b64hash := string(w.Sum())
83
c.Check(b64hash, gc.Equals, "spam")
86
func (s *WriterSuite) TestHashingWriterBase64Sum(c *gc.C) {
88
hasher := fakeHasher{sum: []byte("spam")}
89
w := hash.NewHashingWriter(&buf, &hasher)
90
b64hash := w.Base64Sum()
92
c.Check(b64hash, gc.Equals, "c3BhbQ==")
95
func (s *WriterSuite) TestHashingWriterHexSum(c *gc.C) {
97
hasher := fakeHasher{sum: []byte("spam")}
98
w := hash.NewHashingWriter(&buf, &hasher)
101
c.Check(rawhash, gc.Equals, "7370616d")