[#383] Fix request type determination
/ DCO (pull_request) Successful in 1m50s Details
/ Vulncheck (pull_request) Failing after 2m21s Details
/ Builds (1.20) (pull_request) Successful in 2m32s Details
/ Builds (1.21) (pull_request) Successful in 2m25s Details
/ Lint (pull_request) Successful in 4m26s Details
/ Tests (1.20) (pull_request) Successful in 2m53s Details
/ Tests (1.21) (pull_request) Successful in 2m45s Details

Signed-off-by: Marina Biryukova <m.biryukova@yadro.com>
Marina Biryukova 2024-05-06 13:08:48 +03:00
parent 0cf19d24ee
commit db924cc56e
2 changed files with 53 additions and 2 deletions

View File

@ -191,11 +191,11 @@ func getBucketObject(r *http.Request, domains []string) (reqType ReqType, bktNam
return noneType, "", ""
}
if ind := strings.IndexByte(bktObj, '/'); ind != -1 {
if ind := strings.IndexByte(bktObj, '/'); ind != -1 && bktObj[ind+1:] != "" {
return objectType, bktObj[:ind], bktObj[ind+1:]
}
return bucketType, bktObj, ""
return bucketType, strings.TrimSuffix(bktObj, "/"), ""
}
func determineOperation(r *http.Request, reqType ReqType) (operation string) {

View File

@ -0,0 +1,51 @@
package middleware
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/require"
)
func TestReqTypeDetermination(t *testing.T) {
bkt, obj, domain := "test-bucket", "test-object", "domain"
r := httptest.NewRequest(http.MethodPut, "/"+bkt, nil)
reqType, bktName, objName := getBucketObject(r, nil)
require.Equal(t, bucketType, reqType)
require.Equal(t, bkt, bktName)
require.Equal(t, "", objName)
r = httptest.NewRequest(http.MethodPut, "/"+bkt+"/", nil)
reqType, bktName, objName = getBucketObject(r, nil)
require.Equal(t, bucketType, reqType)
require.Equal(t, bkt, bktName)
require.Equal(t, "", objName)
r = httptest.NewRequest(http.MethodPut, "/"+bkt+"/"+obj, nil)
reqType, bktName, objName = getBucketObject(r, nil)
require.Equal(t, objectType, reqType)
require.Equal(t, bkt, bktName)
require.Equal(t, obj, objName)
r = httptest.NewRequest(http.MethodPut, "/", nil)
reqType, bktName, objName = getBucketObject(r, nil)
require.Equal(t, noneType, reqType)
require.Equal(t, "", bktName)
require.Equal(t, "", objName)
r = httptest.NewRequest(http.MethodPut, "/", nil)
r.Host = bkt + "." + domain
reqType, bktName, objName = getBucketObject(r, []string{"some-domain", domain})
require.Equal(t, bucketType, reqType)
require.Equal(t, bkt, bktName)
require.Equal(t, "", objName)
r = httptest.NewRequest(http.MethodPut, "/"+obj, nil)
r.Host = bkt + "." + domain
reqType, bktName, objName = getBucketObject(r, []string{"some-domain", domain})
require.Equal(t, objectType, reqType)
require.Equal(t, bkt, bktName)
require.Equal(t, obj, objName)
}