All checks were successful
/ DCO (pull_request) Successful in 35s
/ Builds (pull_request) Successful in 1m8s
/ Vulncheck (pull_request) Successful in 1m8s
/ OCI image (pull_request) Successful in 2m5s
/ Lint (pull_request) Successful in 3m34s
/ Tests (pull_request) Successful in 1m18s
/ Vulncheck (push) Successful in 1m10s
/ Builds (push) Successful in 1m5s
/ OCI image (push) Successful in 1m52s
/ Lint (push) Successful in 3m3s
/ Tests (push) Successful in 1m24s
Signed-off-by: Marina Biryukova <m.biryukova@yadro.com>
113 lines
2.7 KiB
Go
113 lines
2.7 KiB
Go
package layer
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"io"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data"
|
|
apierr "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestCorsCopiesNumber(t *testing.T) {
|
|
tc := prepareCORSContext(t)
|
|
body := `
|
|
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
|
|
<CORSRule>
|
|
<AllowedMethod>GET</AllowedMethod>
|
|
<AllowedOrigin>http://www.example.com</AllowedOrigin>
|
|
<AllowedHeader>Authorization</AllowedHeader>
|
|
<ExposeHeader>x-amz-request-id</ExposeHeader>
|
|
</CORSRule>
|
|
</CORSConfiguration>
|
|
`
|
|
|
|
copies := []uint32{2, 0}
|
|
|
|
err := tc.layer.PutBucketCORS(tc.ctx, &PutCORSParams{
|
|
BktInfo: tc.bktInfo,
|
|
Reader: strings.NewReader(body),
|
|
CopiesNumbers: copies,
|
|
UserAgent: "",
|
|
NewDecoder: NewXMLDecoder,
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
objs := tc.testFrostFS.Objects()
|
|
require.Len(t, objs, 1)
|
|
|
|
require.EqualValues(t, copies, tc.testFrostFS.CopiesNumbers(addrFromObject(objs[0]).EncodeToString()))
|
|
}
|
|
|
|
func TestCheckCORS(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
cfg *data.CORSConfiguration
|
|
expectedCode apierr.ErrorCode
|
|
}{
|
|
{
|
|
name: "allowed origin wildcards",
|
|
cfg: &data.CORSConfiguration{
|
|
CORSRules: []data.CORSRule{
|
|
{
|
|
AllowedOrigins: []string{"https://*.example.*"},
|
|
AllowedMethods: []string{"GET"},
|
|
},
|
|
},
|
|
},
|
|
expectedCode: apierr.ErrCORSWildcardsAllowedOrigins,
|
|
},
|
|
{
|
|
name: "allowed header wildcards",
|
|
cfg: &data.CORSConfiguration{
|
|
CORSRules: []data.CORSRule{
|
|
{
|
|
AllowedOrigins: []string{"https://*.example.com"},
|
|
AllowedMethods: []string{"GET"},
|
|
AllowedHeaders: []string{"x-amz-*-*"},
|
|
},
|
|
},
|
|
},
|
|
expectedCode: apierr.ErrCORSWildcardsAllowedHeaders,
|
|
},
|
|
{
|
|
name: "invalid allowed method",
|
|
cfg: &data.CORSConfiguration{
|
|
CORSRules: []data.CORSRule{
|
|
{
|
|
AllowedOrigins: []string{"https://*.example.com"},
|
|
AllowedMethods: []string{"INVALID"},
|
|
AllowedHeaders: []string{"x-amz-*"},
|
|
},
|
|
},
|
|
},
|
|
expectedCode: apierr.ErrCORSUnsupportedMethod,
|
|
},
|
|
{
|
|
name: "expose header wildcard",
|
|
cfg: &data.CORSConfiguration{
|
|
CORSRules: []data.CORSRule{
|
|
{
|
|
AllowedOrigins: []string{"https://*.example.com"},
|
|
AllowedMethods: []string{"GET"},
|
|
AllowedHeaders: []string{"x-amz-*"},
|
|
ExposeHeaders: []string{"x-amz-*"},
|
|
},
|
|
},
|
|
},
|
|
expectedCode: apierr.ErrCORSWildcardExposeHeaders,
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
require.True(t, apierr.IsS3Error(checkCORS(tc.cfg), tc.expectedCode))
|
|
})
|
|
}
|
|
}
|
|
|
|
func NewXMLDecoder(r io.Reader, _ string) *xml.Decoder {
|
|
dec := xml.NewDecoder(r)
|
|
|
|
return dec
|
|
}
|