Documentation in literate-programming-style is available at:
https://redhatinsights.github.io/insights-operator-utils/packages/s3/copier_test.html
|
import (
"errors"
"testing"
s3util "github.com/RedHatInsights/insights-operator-utils/s3"
s3mocks "github.com/RedHatInsights/insights-operator-utils/s3/mocks"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/stretchr/testify/assert"
)
var newFile = "a_new_path"
func getTestCases ( ) [ ] testCase {
return [ ] testCase {
{
description : "bucket exists and file exists" ,
errorExpected : false ,
mockErrorValue : nil ,
mockContents : s3mocks . MockContents {
testFile : [ ] byte ( fileContent ) } ,
file : testFile ,
} ,
{
description : "bucket exists and file does not exist" ,
errorExpected : true ,
file : "this does not exist" ,
} ,
{
description : "bucket doesn't exist" ,
errorExpected : true ,
mockErrorValue : awserr . New ( s3 . ErrCodeNoSuchBucket , "" , nil ) ,
errorMsg : s3 . ErrCodeNoSuchBucket ,
file : testFile ,
} ,
{
description : "empty key input" ,
errorExpected : true ,
errorMsg : s3 . ErrCodeNoSuchKey ,
file : "" ,
} ,
{
description : "unknown aws error" ,
errorExpected : true ,
mockErrorValue : awserr . New ( randomError , "" , nil ) ,
errorMsg : randomError ,
} ,
{
description : "unknown error" ,
errorExpected : true ,
mockErrorValue : errors . New ( randomError ) ,
errorMsg : randomError ,
} ,
}
}
func TestCopyObject ( t * testing . T ) {
want := s3mocks . MockContents {
testFile : [ ] byte ( fileContent ) ,
newFile : [ ] byte ( fileContent ) }
testCases := getTestCases ( )
mockClient := & s3mocks . MockS3Client {
Contents : make ( s3mocks . MockContents ) ,
}
for _ , tc := range testCases {
t . Run ( tc . description , func ( t * testing . T ) {
mockClient . Err = tc . mockErrorValue
mockClient . Contents = tc . mockContents
err := s3util . CopyObject ( mockClient , testBucket , tc . file , testBucket , newFile )
if tc . errorExpected {
assert . Error ( t , err )
assert . Contains ( t , err . Error ( ) , tc . errorMsg )
} else {
assert . NoError ( t , err )
assert . Equal ( t , want , mockClient . Contents )
}
} )
}
}
func TestRenameObject ( t * testing . T ) {
want := s3mocks . MockContents {
newFile : [ ] byte ( fileContent ) }
testCases := getTestCases ( )
mockClient := & s3mocks . MockS3Client {
Contents : make ( s3mocks . MockContents ) ,
}
for _ , tc := range testCases {
t . Run ( tc . description , func ( t * testing . T ) {
mockClient . Err = tc . mockErrorValue
mockClient . Contents = tc . mockContents
err := s3util . RenameObject ( mockClient , testBucket , tc . file , newFile )
if tc . errorExpected {
assert . Error ( t , err )
assert . Contains ( t , err . Error ( ) , tc . errorMsg )
} else {
assert . NoError ( t , err )
assert . Equal ( t , want , mockClient . Contents )
}
} )
}
}
|