forked from TrueCloudLab/frostfs-s3-gw
[#450] Add test for chunk-encoded object size
Signed-off-by: Alex Vanin <a.vanin@yadro.com>
This commit is contained in:
parent
f6d8271e5d
commit
c02f8b3ca3
1 changed files with 15 additions and 3 deletions
|
@ -28,6 +28,11 @@ import (
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
awsChunkedRequestExampleDecodedContentLength = 66560
|
||||||
|
awsChunkedRequestExampleContentLength = 66824
|
||||||
|
)
|
||||||
|
|
||||||
func TestCheckBucketName(t *testing.T) {
|
func TestCheckBucketName(t *testing.T) {
|
||||||
for _, tc := range []struct {
|
for _, tc := range []struct {
|
||||||
name string
|
name string
|
||||||
|
@ -274,7 +279,12 @@ func TestPutObjectWithStreamBodyAWSExample(t *testing.T) {
|
||||||
hc.Handler().PutObjectHandler(w, req)
|
hc.Handler().PutObjectHandler(w, req)
|
||||||
assertStatus(t, w, http.StatusOK)
|
assertStatus(t, w, http.StatusOK)
|
||||||
|
|
||||||
data := getObjectRange(t, hc, bktName, objName, 0, 66824)
|
w, req = prepareTestRequest(hc, bktName, objName, nil)
|
||||||
|
hc.Handler().HeadObjectHandler(w, req)
|
||||||
|
assertStatus(t, w, http.StatusOK)
|
||||||
|
require.Equal(t, strconv.Itoa(awsChunkedRequestExampleDecodedContentLength), w.Header().Get(api.ContentLength))
|
||||||
|
|
||||||
|
data := getObjectRange(t, hc, bktName, objName, 0, awsChunkedRequestExampleDecodedContentLength)
|
||||||
for i := range chunk {
|
for i := range chunk {
|
||||||
require.Equal(t, chunk[i], data[i])
|
require.Equal(t, chunk[i], data[i])
|
||||||
}
|
}
|
||||||
|
@ -310,6 +320,8 @@ func TestPutChunkedTestContentEncoding(t *testing.T) {
|
||||||
require.Equal(t, "gzip", resp.Header().Get(api.ContentEncoding))
|
require.Equal(t, "gzip", resp.Header().Get(api.ContentEncoding))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getChunkedRequest implements request example from
|
||||||
|
// https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-streaming.html
|
||||||
func getChunkedRequest(ctx context.Context, t *testing.T, bktName, objName string) (*httptest.ResponseRecorder, *http.Request, []byte) {
|
func getChunkedRequest(ctx context.Context, t *testing.T, bktName, objName string) (*httptest.ResponseRecorder, *http.Request, []byte) {
|
||||||
chunk := make([]byte, 65*1024)
|
chunk := make([]byte, 65*1024)
|
||||||
for i := range chunk {
|
for i := range chunk {
|
||||||
|
@ -337,9 +349,9 @@ func getChunkedRequest(ctx context.Context, t *testing.T, bktName, objName strin
|
||||||
req, err := http.NewRequest("PUT", "https://s3.amazonaws.com/"+bktName+"/"+objName, nil)
|
req, err := http.NewRequest("PUT", "https://s3.amazonaws.com/"+bktName+"/"+objName, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
req.Header.Set("content-encoding", "aws-chunked")
|
req.Header.Set("content-encoding", "aws-chunked")
|
||||||
req.Header.Set("content-length", "66824")
|
req.Header.Set("content-length", strconv.Itoa(awsChunkedRequestExampleContentLength))
|
||||||
req.Header.Set("x-amz-content-sha256", "STREAMING-AWS4-HMAC-SHA256-PAYLOAD")
|
req.Header.Set("x-amz-content-sha256", "STREAMING-AWS4-HMAC-SHA256-PAYLOAD")
|
||||||
req.Header.Set("x-amz-decoded-content-length", "66560")
|
req.Header.Set("x-amz-decoded-content-length", strconv.Itoa(awsChunkedRequestExampleDecodedContentLength))
|
||||||
req.Header.Set("x-amz-storage-class", "REDUCED_REDUNDANCY")
|
req.Header.Set("x-amz-storage-class", "REDUCED_REDUNDANCY")
|
||||||
|
|
||||||
signTime, err := time.Parse("20060102T150405Z", "20130524T000000Z")
|
signTime, err := time.Parse("20060102T150405Z", "20130524T000000Z")
|
||||||
|
|
Loading…
Reference in a new issue