tusd/pkg/s3store/s3store_util_test.go

105 lines
1.9 KiB
Go

package s3store
import (
"fmt"
"io/ioutil"
"reflect"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/golang/mock/gomock"
)
type UploadPartInputMatcher struct {
expect *s3.UploadPartInput
}
func NewUploadPartInputMatcher(expect *s3.UploadPartInput) gomock.Matcher {
return UploadPartInputMatcher{
expect: expect,
}
}
func (m UploadPartInputMatcher) Matches(x interface{}) bool {
input, ok := x.(*s3.UploadPartInput)
if !ok {
return false
}
inputBody := input.Body
expectBody := m.expect.Body
i, err := ioutil.ReadAll(inputBody)
if err != nil {
panic(err)
}
inputBody.Seek(0, 0)
e, err := ioutil.ReadAll(expectBody)
if err != nil {
panic(err)
}
m.expect.Body.Seek(0, 0)
if !reflect.DeepEqual(e, i) {
return false
}
input.Body = nil
m.expect.Body = nil
return reflect.DeepEqual(m.expect, input)
}
func (m UploadPartInputMatcher) String() string {
body, _ := ioutil.ReadAll(m.expect.Body)
m.expect.Body.Seek(0, 0)
return fmt.Sprintf("UploadPartInput(%d: %s)", *m.expect.PartNumber, body)
}
type PutObjectInputMatcher struct {
expect *s3.PutObjectInput
}
func NewPutObjectInputMatcher(expect *s3.PutObjectInput) gomock.Matcher {
return PutObjectInputMatcher{
expect: expect,
}
}
func (m PutObjectInputMatcher) Matches(x interface{}) bool {
input, ok := x.(*s3.PutObjectInput)
if !ok {
return false
}
inputBody := input.Body
expectBody := m.expect.Body
i, err := ioutil.ReadAll(inputBody)
if err != nil {
panic(err)
}
inputBody.Seek(0, 0)
e, err := ioutil.ReadAll(expectBody)
if err != nil {
panic(err)
}
m.expect.Body.Seek(0, 0)
if !reflect.DeepEqual(e, i) {
return false
}
input.Body = nil
m.expect.Body = nil
return reflect.DeepEqual(m.expect, input)
}
func (m PutObjectInputMatcher) String() string {
body, _ := ioutil.ReadAll(m.expect.Body)
m.expect.Body.Seek(0, 0)
return fmt.Sprintf(`PutObjectInput(Body: "%s")`, body)
}