mirror of https://github.com/minio/minio.git
Add CreateBucketError, ListMultipartUploads functional test (#8886)
This commit is contained in:
parent
f98616dce7
commit
f6a7d4d29b
|
@ -609,6 +609,122 @@ func testObjectTagging(s3Client *s3.S3) {
|
|||
}
|
||||
}
|
||||
|
||||
// Tests bucket re-create errors.
|
||||
func testCreateBucketError(s3Client *s3.S3) {
|
||||
region := s3Client.Config.Region
|
||||
// Amazon S3 returns error in all AWS Regions except in the North Virginia Region.
|
||||
// More details in https://docs.aws.amazon.com/sdk-for-go/api/service/s3/#S3.CreateBucket
|
||||
s3Client.Config.Region = aws.String("us-west-1")
|
||||
|
||||
// initialize logging params
|
||||
startTime := time.Now()
|
||||
function := "testMakeBucketError"
|
||||
bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "aws-sdk-go-test-")
|
||||
args := map[string]interface{}{
|
||||
"bucketName": bucketName,
|
||||
}
|
||||
_, err := s3Client.CreateBucket(&s3.CreateBucketInput{
|
||||
Bucket: aws.String(bucketName),
|
||||
})
|
||||
if err != nil {
|
||||
failureLog(function, args, startTime, "", "AWS SDK Go CreateBucket Failed", err).Fatal()
|
||||
return
|
||||
}
|
||||
defer cleanup(s3Client, bucketName, "", function, args, startTime, true)
|
||||
|
||||
_, errCreating := s3Client.CreateBucket(&s3.CreateBucketInput{
|
||||
Bucket: aws.String(bucketName),
|
||||
})
|
||||
if errCreating == nil {
|
||||
failureLog(function, args, startTime, "", "AWS SDK Go CreateBucket Should Return Error for Existing bucket", err).Fatal()
|
||||
return
|
||||
}
|
||||
// Verify valid error response from server.
|
||||
if errCreating.(s3.RequestFailure).Code() != "BucketAlreadyExists" &&
|
||||
errCreating.(s3.RequestFailure).Code() != "BucketAlreadyOwnedByYou" {
|
||||
failureLog(function, args, startTime, "", "Invalid error returned by server", err).Fatal()
|
||||
return
|
||||
}
|
||||
|
||||
// Restore region in s3Client
|
||||
s3Client.Config.Region = region
|
||||
successLogger(function, args, startTime).Info()
|
||||
}
|
||||
|
||||
func testListMultipartUploads(s3Client *s3.S3) {
|
||||
startTime := time.Now()
|
||||
function := "testListMultipartUploads"
|
||||
bucket := randString(60, rand.NewSource(time.Now().UnixNano()), "aws-sdk-go-test-")
|
||||
object := randString(60, rand.NewSource(time.Now().UnixNano()), "")
|
||||
args := map[string]interface{}{
|
||||
"bucketName": bucket,
|
||||
"objectName": object,
|
||||
}
|
||||
_, errCreating := s3Client.CreateBucket(&s3.CreateBucketInput{
|
||||
Bucket: aws.String(bucket),
|
||||
})
|
||||
if errCreating != nil {
|
||||
failureLog(function, args, startTime, "", "AWS SDK Go CreateBucket Failed", errCreating).Fatal()
|
||||
return
|
||||
}
|
||||
defer cleanup(s3Client, bucket, object, function, args, startTime, true)
|
||||
|
||||
multipartUpload, err := s3Client.CreateMultipartUpload(&s3.CreateMultipartUploadInput{
|
||||
Bucket: aws.String(bucket),
|
||||
Key: aws.String(object),
|
||||
})
|
||||
if err != nil {
|
||||
failureLog(function, args, startTime, "", "AWS SDK Go createMultipartupload API failed", err).Fatal()
|
||||
return
|
||||
}
|
||||
parts := make(map[*int64]*string)
|
||||
for i := 0; i < 5; i++ {
|
||||
result, errUpload := s3Client.UploadPart(&s3.UploadPartInput{
|
||||
Bucket: aws.String(bucket),
|
||||
Key: aws.String(object),
|
||||
UploadId: multipartUpload.UploadId,
|
||||
PartNumber: aws.Int64(int64(i + 1)),
|
||||
Body: aws.ReadSeekCloser(strings.NewReader("fileToUpload")),
|
||||
})
|
||||
if errUpload != nil {
|
||||
_, _ = s3Client.AbortMultipartUpload(&s3.AbortMultipartUploadInput{
|
||||
Bucket: aws.String(bucket),
|
||||
Key: aws.String(object),
|
||||
UploadId: multipartUpload.UploadId,
|
||||
})
|
||||
failureLog(function, args, startTime, "", "AWS SDK Go uploadPart API failed for", errUpload).Fatal()
|
||||
return
|
||||
}
|
||||
parts[aws.Int64(int64(i+1))] = result.ETag
|
||||
}
|
||||
|
||||
listParts, errParts := s3Client.ListParts(&s3.ListPartsInput{
|
||||
Bucket: aws.String(bucket),
|
||||
Key: aws.String(object),
|
||||
UploadId: multipartUpload.UploadId,
|
||||
})
|
||||
if errParts != nil {
|
||||
failureLog(function, args, startTime, "", "AWS SDK Go ListPartsInput API failed for", err).Fatal()
|
||||
return
|
||||
}
|
||||
|
||||
if len(parts) != len(listParts.Parts) {
|
||||
failureLog(function, args, startTime, "", fmt.Sprintf("AWS SDK Go ListParts.Parts len mismatch want: %v got: %v", len(parts), len(listParts.Parts)), err).Fatal()
|
||||
return
|
||||
}
|
||||
|
||||
for _, part := range listParts.Parts {
|
||||
if tag, ok := parts[part.PartNumber]; ok {
|
||||
if tag != part.ETag {
|
||||
failureLog(function, args, startTime, "", fmt.Sprintf("AWS SDK Go ListParts.Parts output mismatch want: %v got: %v", tag, part.ETag), err).Fatal()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
successLogger(function, args, startTime).Info()
|
||||
}
|
||||
|
||||
func main() {
|
||||
endpoint := os.Getenv("SERVER_ENDPOINT")
|
||||
accessKey := os.Getenv("ACCESS_KEY")
|
||||
|
@ -643,6 +759,8 @@ func main() {
|
|||
testPresignedPutInvalidHash(s3Client)
|
||||
testListObjects(s3Client)
|
||||
testSelectObject(s3Client)
|
||||
testCreateBucketError(s3Client)
|
||||
testListMultipartUploads(s3Client)
|
||||
if isObjectTaggingImplemented(s3Client) {
|
||||
testObjectTagging(s3Client)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue