mirror of
https://github.com/minio/minio.git
synced 2025-01-12 15:33:22 -05:00
Append "-1" to etag when it is not MD5 (#4641)
* gateway-azure: append "-1" to ETag so that clients do not interpret it as MD5. fixes #4537. Added unit tests.
This commit is contained in:
parent
cc8a8cb877
commit
1b92c5136b
@ -67,6 +67,11 @@ func azureToS3Metadata(meta map[string]string) (newMeta map[string]string) {
|
|||||||
return newMeta
|
return newMeta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Append "-1" to etag so that clients do not interpret it as MD5.
|
||||||
|
func azureToS3ETag(etag string) string {
|
||||||
|
return canonicalizeETag(etag) + "-1"
|
||||||
|
}
|
||||||
|
|
||||||
// To store metadata during NewMultipartUpload which will be used after
|
// To store metadata during NewMultipartUpload which will be used after
|
||||||
// CompleteMultipartUpload to call SetBlobMetadata.
|
// CompleteMultipartUpload to call SetBlobMetadata.
|
||||||
type azureMultipartMetaInfo struct {
|
type azureMultipartMetaInfo struct {
|
||||||
@ -270,7 +275,7 @@ func (a *azureObjects) ListObjects(bucket, prefix, marker, delimiter string, max
|
|||||||
Name: object.Name,
|
Name: object.Name,
|
||||||
ModTime: t,
|
ModTime: t,
|
||||||
Size: object.Properties.ContentLength,
|
Size: object.Properties.ContentLength,
|
||||||
ETag: canonicalizeETag(object.Properties.Etag),
|
ETag: azureToS3ETag(object.Properties.Etag),
|
||||||
ContentType: object.Properties.ContentType,
|
ContentType: object.Properties.ContentType,
|
||||||
ContentEncoding: object.Properties.ContentEncoding,
|
ContentEncoding: object.Properties.ContentEncoding,
|
||||||
})
|
})
|
||||||
@ -305,7 +310,7 @@ func (a *azureObjects) ListObjectsV2(bucket, prefix, continuationToken string, f
|
|||||||
Name: object.Name,
|
Name: object.Name,
|
||||||
ModTime: t,
|
ModTime: t,
|
||||||
Size: object.Properties.ContentLength,
|
Size: object.Properties.ContentLength,
|
||||||
ETag: canonicalizeETag(object.Properties.Etag),
|
ETag: azureToS3ETag(object.Properties.Etag),
|
||||||
ContentType: object.Properties.ContentType,
|
ContentType: object.Properties.ContentType,
|
||||||
ContentEncoding: object.Properties.ContentEncoding,
|
ContentEncoding: object.Properties.ContentEncoding,
|
||||||
})
|
})
|
||||||
@ -368,7 +373,7 @@ func (a *azureObjects) GetObjectInfo(bucket, object string) (objInfo ObjectInfo,
|
|||||||
objInfo = ObjectInfo{
|
objInfo = ObjectInfo{
|
||||||
Bucket: bucket,
|
Bucket: bucket,
|
||||||
UserDefined: meta,
|
UserDefined: meta,
|
||||||
ETag: canonicalizeETag(prop.Etag),
|
ETag: azureToS3ETag(prop.Etag),
|
||||||
ModTime: t,
|
ModTime: t,
|
||||||
Name: object,
|
Name: object,
|
||||||
Size: prop.ContentLength,
|
Size: prop.ContentLength,
|
||||||
|
@ -25,15 +25,34 @@ import (
|
|||||||
"github.com/Azure/azure-sdk-for-go/storage"
|
"github.com/Azure/azure-sdk-for-go/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Test azureToS3ETag.
|
||||||
|
func TestAzureToS3ETag(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
etag string
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{`"etag"`, `etag-1`},
|
||||||
|
{"etag", "etag-1"},
|
||||||
|
}
|
||||||
|
for i, test := range tests {
|
||||||
|
got := azureToS3ETag(test.etag)
|
||||||
|
if got != test.expected {
|
||||||
|
t.Errorf("test %d: got:%s expected:%s", i+1, got, test.expected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Test canonical metadata.
|
// Test canonical metadata.
|
||||||
func TestS3ToAzureHeaders(t *testing.T) {
|
func TestS3ToAzureHeaders(t *testing.T) {
|
||||||
headers := map[string]string{
|
headers := map[string]string{
|
||||||
"accept-encoding": "gzip",
|
"accept-encoding": "gzip",
|
||||||
"content-encoding": "gzip",
|
"content-encoding": "gzip",
|
||||||
|
"X-Amz-Meta-Hdr": "value",
|
||||||
}
|
}
|
||||||
expectedHeaders := map[string]string{
|
expectedHeaders := map[string]string{
|
||||||
"Accept-Encoding": "gzip",
|
"Accept-Encoding": "gzip",
|
||||||
"Content-Encoding": "gzip",
|
"Content-Encoding": "gzip",
|
||||||
|
"X-Ms-Meta-Hdr": "value",
|
||||||
}
|
}
|
||||||
actualHeaders := s3ToAzureHeaders(headers)
|
actualHeaders := s3ToAzureHeaders(headers)
|
||||||
if !reflect.DeepEqual(actualHeaders, expectedHeaders) {
|
if !reflect.DeepEqual(actualHeaders, expectedHeaders) {
|
||||||
|
Loading…
Reference in New Issue
Block a user