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" for _, tc := range []struct { name string target string host string domains []string expectedType ReqType expectedBktName string expectedObjName string }{ { name: "bucket request, path-style", target: "/" + bkt, expectedType: bucketType, expectedBktName: bkt, }, { name: "bucket request with slash, path-style", target: "/" + bkt + "/", expectedType: bucketType, expectedBktName: bkt, }, { name: "object request, path-style", target: "/" + bkt + "/" + obj, expectedType: objectType, expectedBktName: bkt, expectedObjName: obj, }, { name: "object request with slash, path-style", target: "/" + bkt + "/" + obj + "/", expectedType: objectType, expectedBktName: bkt, expectedObjName: obj + "/", }, { name: "none type request", target: "/", expectedType: noneType, }, { name: "bucket request, virtual-hosted style", target: "/", host: bkt + "." + domain, domains: []string{"some-domain", domain}, expectedType: bucketType, expectedBktName: bkt, }, { name: "object request, virtual-hosted style", target: "/" + obj, host: bkt + "." + domain, domains: []string{"some-domain", domain}, expectedType: objectType, expectedBktName: bkt, expectedObjName: obj, }, } { t.Run(tc.name, func(t *testing.T) { r := httptest.NewRequest(http.MethodPut, tc.target, nil) r.Host = tc.host reqType, bktName, objName := getBucketObject(r, tc.domains) require.Equal(t, tc.expectedType, reqType) require.Equal(t, tc.expectedBktName, bktName) require.Equal(t, tc.expectedObjName, objName) }) } }