1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the LGPLv3, see LICENCE file for details.
14
"github.com/juju/errors"
15
"github.com/juju/testing"
18
type StubReader struct {
24
func NewStubReader(stub *testing.Stub, content string) io.Reader {
27
ReturnRead: strings.NewReader(content),
31
func (s *StubReader) Read(data []byte) (int, error) {
32
s.Stub.AddCall("Read", data)
33
if err := s.Stub.NextErr(); err != nil {
34
return 0, errors.Trace(err)
37
if s.ReturnRead == nil {
40
return s.ReturnRead.Read(data)
43
type StubWriter struct {
49
func NewStubWriter(stub *testing.Stub) (io.Writer, *bytes.Buffer) {
50
buf := new(bytes.Buffer)
58
func (s *StubWriter) Write(data []byte) (int, error) {
59
s.Stub.AddCall("Write", data)
60
if err := s.Stub.NextErr(); err != nil {
61
return 0, errors.Trace(err)
64
if s.ReturnWrite == nil {
67
return s.ReturnWrite.Write(data)
70
type StubSeeker struct {
76
func (s *StubSeeker) Seek(offset int64, whence int) (int64, error) {
77
s.Stub.AddCall("Seek", offset, whence)
78
if err := s.Stub.NextErr(); err != nil {
79
return 0, errors.Trace(err)
82
return s.ReturnSeek, nil
85
type StubCloser struct {
89
func (s *StubCloser) Close() error {
90
s.Stub.AddCall("Close")
91
if err := s.Stub.NextErr(); err != nil {
92
return errors.Trace(err)
98
type StubFile struct {
108
func NewStubFile(stub *testing.Stub, raw io.ReadWriter) *StubFile {
110
Reader: &StubReader{Stub: stub, ReturnRead: raw},
111
Writer: &StubWriter{Stub: stub, ReturnWrite: raw},
112
Seeker: &StubSeeker{Stub: stub},
113
Closer: &StubCloser{Stub: stub},
118
func (s *StubFile) Name() string {
119
s.Stub.AddCall("Name")
120
s.Stub.NextErr() // Pop one off.
122
return s.Info.Info.Name
125
func (s *StubFile) Stat() (os.FileInfo, error) {
126
s.Stub.AddCall("Stat")
127
if err := s.Stub.NextErr(); err != nil {
128
return nil, errors.Trace(err)
134
func (s *StubFile) Sync() error {
135
s.Stub.AddCall("Sync")
136
if err := s.Stub.NextErr(); err != nil {
137
return errors.Trace(err)
143
func (s *StubFile) Truncate(size int64) error {
144
s.Stub.AddCall("Truncate", size)
145
if err := s.Stub.NextErr(); err != nil {
146
return errors.Trace(err)
152
type FileInfo struct {
159
var _ os.FileInfo = (*StubFileInfo)(nil)
161
type StubFileInfo struct {
165
ReturnSys interface{}
168
func NewStubFileInfo(stub *testing.Stub, name, content string) *StubFileInfo {
169
return &StubFileInfo{
173
Size: int64(len(content)),
180
func (s StubFileInfo) Name() string {
181
s.Stub.AddCall("Name")
182
s.Stub.NextErr() // Pop one off.
187
func (s StubFileInfo) Size() int64 {
188
s.Stub.AddCall("Size")
189
s.Stub.NextErr() // Pop one off.
194
func (s StubFileInfo) Mode() os.FileMode {
195
s.Stub.AddCall("Mode")
196
s.Stub.NextErr() // Pop one off.
201
func (s StubFileInfo) ModTime() time.Time {
202
s.Stub.AddCall("ModTime")
203
s.Stub.NextErr() // Pop one off.
205
return s.Info.ModTime
208
func (s StubFileInfo) IsDir() bool {
209
s.Stub.AddCall("IsDir")
210
s.Stub.NextErr() // Pop one off.
212
return s.Info.Mode.IsDir()
215
func (s StubFileInfo) Sys() interface{} {
216
s.Stub.AddCall("Sys")
217
s.Stub.NextErr() // Pop one off.
222
var _ hash.Hash = (*StubHash)(nil)
224
type StubHash struct {
233
func NewStubHash(stub *testing.Stub, raw io.Writer) *StubHash {
235
Writer: &StubWriter{Stub: stub, ReturnWrite: raw},
240
func (s *StubHash) Sum(b []byte) []byte {
241
s.Stub.AddCall("Sum", b)
242
s.Stub.NextErr() // Pop one off.
247
func (s *StubHash) Reset() {
248
s.Stub.AddCall("Reset")
249
s.Stub.NextErr() // Pop one off.
252
func (s *StubHash) Size() int {
253
s.Stub.AddCall("Size")
254
s.Stub.NextErr() // Pop one off.
259
func (s *StubHash) BlockSize() int {
260
s.Stub.AddCall("BlockSize")
261
s.Stub.NextErr() // Pop one off.
263
return s.ReturnBlockSize