Skip to content

Commit

Permalink
core: Modify Putobject to use PutObjectOptions (#1290)
Browse files Browse the repository at this point in the history
Replacing ObjectOptions, used in gateway and other places
  • Loading branch information
BigUstad authored May 22, 2020
1 parent d3e246d commit e9bc14b
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 65 deletions.
28 changes: 3 additions & 25 deletions core.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
"context"
"io"
"net/http"
"strings"

"github.com/minio/minio-go/v6/pkg/encrypt"
)
Expand Down Expand Up @@ -85,34 +84,13 @@ func (c Core) CopyObjectPart(srcBucket, srcObject, destBucket, destObject string
}

// PutObjectWithContext - Upload object. Uploads using single PUT call.
func (c Core) PutObjectWithContext(ctx context.Context, bucket, object string, data io.Reader, size int64, md5Base64, sha256Hex string, metadata map[string]string, sse encrypt.ServerSide) (ObjectInfo, error) {
opts := PutObjectOptions{}
m := make(map[string]string)
for k, v := range metadata {
if strings.ToLower(k) == "content-encoding" {
opts.ContentEncoding = v
} else if strings.ToLower(k) == "content-disposition" {
opts.ContentDisposition = v
} else if strings.ToLower(k) == "content-language" {
opts.ContentLanguage = v
} else if strings.ToLower(k) == "content-type" {
opts.ContentType = v
} else if strings.ToLower(k) == "cache-control" {
opts.CacheControl = v
} else if strings.EqualFold(k, amzWebsiteRedirectLocation) {
opts.WebsiteRedirectLocation = v
} else {
m[k] = metadata[k]
}
}
opts.UserMetadata = m
opts.ServerSideEncryption = sse
func (c Core) PutObjectWithContext(ctx context.Context, bucket, object string, data io.Reader, size int64, md5Base64, sha256Hex string, opts PutObjectOptions) (ObjectInfo, error) {
return c.putObjectDo(ctx, bucket, object, data, md5Base64, sha256Hex, size, opts)
}

// PutObject - Upload object. Uploads using single PUT call.
func (c Core) PutObject(bucket, object string, data io.Reader, size int64, md5Base64, sha256Hex string, metadata map[string]string, sse encrypt.ServerSide) (ObjectInfo, error) {
return c.PutObjectWithContext(context.Background(), bucket, object, data, size, md5Base64, sha256Hex, metadata, sse)
func (c Core) PutObject(bucket, object string, data io.Reader, size int64, md5Base64, sha256Hex string, opts PutObjectOptions) (ObjectInfo, error) {
return c.PutObjectWithContext(context.Background(), bucket, object, data, size, md5Base64, sha256Hex, opts)
}

// NewMultipartUpload - Initiates new multipart upload and returns the new uploadID.
Expand Down
34 changes: 23 additions & 11 deletions core_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -434,9 +434,13 @@ func TestCoreCopyObject(t *testing.T) {

// Save the data
objectName := randString(60, rand.NewSource(time.Now().UnixNano()), "")
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", map[string]string{
"Content-Type": "binary/octet-stream",
}, nil)

putopts := PutObjectOptions{
UserMetadata: map[string]string{
"Content-Type": "binary/octet-stream",
},
}
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", putopts)
if err != nil {
t.Fatal("Error:", err, bucketName, objectName)
}
Expand Down Expand Up @@ -546,12 +550,15 @@ func TestCoreCopyObjectPart(t *testing.T) {

// Make a buffer with 5MB of data
buf := bytes.Repeat([]byte("abcde"), 1024*1024)

metadata := map[string]string{
"Content-Type": "binary/octet-stream",
}
putopts := PutObjectOptions{
UserMetadata: metadata,
}
// Save the data
objectName := randString(60, rand.NewSource(time.Now().UnixNano()), "")
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", map[string]string{
"Content-Type": "binary/octet-stream",
}, nil)
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", putopts)
if err != nil {
t.Fatal("Error:", err, bucketName, objectName)
}
Expand Down Expand Up @@ -697,13 +704,15 @@ func TestCorePutObject(t *testing.T) {
objectContentType := "binary/octet-stream"
metadata := make(map[string]string)
metadata["Content-Type"] = objectContentType

objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "1B2M2Y8AsgTpgAmY7PhCfg==", "", metadata, nil)
putopts := PutObjectOptions{
UserMetadata: metadata,
}
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "1B2M2Y8AsgTpgAmY7PhCfg==", "", putopts)
if err == nil {
t.Fatal("Error expected: error, got: nil(success)")
}

objInfo, err = c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", metadata, nil)
objInfo, err = c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", putopts)
if err != nil {
t.Fatal("Error:", err, bucketName, objectName)
}
Expand Down Expand Up @@ -777,9 +786,12 @@ func TestCoreGetObjectMetadata(t *testing.T) {
metadata := map[string]string{
"X-Amz-Meta-Key-1": "Val-1",
}
putopts := PutObjectOptions{
UserMetadata: metadata,
}

_, err = core.PutObject(bucketName, "my-objectname",
bytes.NewReader([]byte("hello")), 5, "", "", metadata, nil)
bytes.NewReader([]byte("hello")), 5, "", "", putopts)
if err != nil {
log.Fatalln(err)
}
Expand Down
90 changes: 61 additions & 29 deletions functional_tests.go
Original file line number Diff line number Diff line change
Expand Up @@ -6966,10 +6966,14 @@ func testSSECEncryptedToSSECCopyObjectPart() {
objectName := randString(60, rand.NewSource(time.Now().UnixNano()), "")
password := "correct horse battery staple"
srcencryption := encrypt.DefaultPBKDF([]byte(password), []byte(bucketName+objectName))

objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", map[string]string{
putmetadata := map[string]string{
"Content-Type": "binary/octet-stream",
}, srcencryption)
}
opts := minio.PutObjectOptions{
UserMetadata: putmetadata,
ServerSideEncryption: srcencryption,
}
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", opts)
if err != nil {
logError(testName, function, args, startTime, "", "PutObject call failed", err)
}
Expand Down Expand Up @@ -7118,9 +7122,13 @@ func testSSECEncryptedToUnencryptedCopyPart() {
password := "correct horse battery staple"
srcencryption := encrypt.DefaultPBKDF([]byte(password), []byte(bucketName+objectName))

objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", map[string]string{
"Content-Type": "binary/octet-stream",
}, srcencryption)
opts := minio.PutObjectOptions{
UserMetadata: map[string]string{
"Content-Type": "binary/octet-stream",
},
ServerSideEncryption: srcencryption,
}
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", opts)
if err != nil {
logError(testName, function, args, startTime, "", "PutObject call failed", err)
}
Expand Down Expand Up @@ -7267,10 +7275,15 @@ func testSSECEncryptedToSSES3CopyObjectPart() {
objectName := randString(60, rand.NewSource(time.Now().UnixNano()), "")
password := "correct horse battery staple"
srcencryption := encrypt.DefaultPBKDF([]byte(password), []byte(bucketName+objectName))

objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", map[string]string{
putmetadata := map[string]string{
"Content-Type": "binary/octet-stream",
}, srcencryption)
}
opts := minio.PutObjectOptions{
UserMetadata: putmetadata,
ServerSideEncryption: srcencryption,
}

objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", opts)
if err != nil {
logError(testName, function, args, startTime, "", "PutObject call failed", err)
}
Expand Down Expand Up @@ -7418,10 +7431,13 @@ func testUnencryptedToSSECCopyObjectPart() {
// Save the data
objectName := randString(60, rand.NewSource(time.Now().UnixNano()), "")
password := "correct horse battery staple"

objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", map[string]string{
putmetadata := map[string]string{
"Content-Type": "binary/octet-stream",
}, nil)
}
opts := minio.PutObjectOptions{
UserMetadata: putmetadata,
}
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", opts)
if err != nil {
logError(testName, function, args, startTime, "", "PutObject call failed", err)
}
Expand Down Expand Up @@ -7566,10 +7582,13 @@ func testUnencryptedToUnencryptedCopyPart() {

// Save the data
objectName := randString(60, rand.NewSource(time.Now().UnixNano()), "")

objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", map[string]string{
putmetadata := map[string]string{
"Content-Type": "binary/octet-stream",
}, nil)
}
opts := minio.PutObjectOptions{
UserMetadata: putmetadata,
}
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", opts)
if err != nil {
logError(testName, function, args, startTime, "", "PutObject call failed", err)
}
Expand Down Expand Up @@ -7712,10 +7731,12 @@ func testUnencryptedToSSES3CopyObjectPart() {

// Save the data
objectName := randString(60, rand.NewSource(time.Now().UnixNano()), "")

objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", map[string]string{
"Content-Type": "binary/octet-stream",
}, nil)
opts := minio.PutObjectOptions{
UserMetadata: map[string]string{
"Content-Type": "binary/octet-stream",
},
}
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", opts)
if err != nil {
logError(testName, function, args, startTime, "", "PutObject call failed", err)
}
Expand Down Expand Up @@ -7863,9 +7884,13 @@ func testSSES3EncryptedToSSECCopyObjectPart() {
objectName := randString(60, rand.NewSource(time.Now().UnixNano()), "")
password := "correct horse battery staple"
srcEncryption := encrypt.NewSSE()
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", map[string]string{
"Content-Type": "binary/octet-stream",
}, srcEncryption)
opts := minio.PutObjectOptions{
UserMetadata: map[string]string{
"Content-Type": "binary/octet-stream",
},
ServerSideEncryption: srcEncryption,
}
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", opts)
if err != nil {
logError(testName, function, args, startTime, "", "PutObject call failed", err)
}
Expand Down Expand Up @@ -8011,10 +8036,13 @@ func testSSES3EncryptedToUnencryptedCopyPart() {
// Save the data
objectName := randString(60, rand.NewSource(time.Now().UnixNano()), "")
srcEncryption := encrypt.NewSSE()

objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", map[string]string{
"Content-Type": "binary/octet-stream",
}, srcEncryption)
opts := minio.PutObjectOptions{
UserMetadata: map[string]string{
"Content-Type": "binary/octet-stream",
},
ServerSideEncryption: srcEncryption,
}
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", opts)
if err != nil {
logError(testName, function, args, startTime, "", "PutObject call failed", err)
}
Expand Down Expand Up @@ -8158,10 +8186,14 @@ func testSSES3EncryptedToSSES3CopyObjectPart() {
// Save the data
objectName := randString(60, rand.NewSource(time.Now().UnixNano()), "")
srcEncryption := encrypt.NewSSE()
opts := minio.PutObjectOptions{
UserMetadata: map[string]string{
"Content-Type": "binary/octet-stream",
},
ServerSideEncryption: srcEncryption,
}

objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", map[string]string{
"Content-Type": "binary/octet-stream",
}, srcEncryption)
objInfo, err := c.PutObject(bucketName, objectName, bytes.NewReader(buf), int64(len(buf)), "", "", opts)
if err != nil {
logError(testName, function, args, startTime, "", "PutObject call failed", err)
}
Expand Down

0 comments on commit e9bc14b

Please sign in to comment.