feat: implements integration tests for the new advanced router

This commit is contained in:
niksis02
2025-07-22 21:00:24 +04:00
parent 394675a5a8
commit dc16c0448f
15 changed files with 289 additions and 122 deletions
+1 -22
View File
@@ -15,13 +15,10 @@
package controllers
import (
"encoding/json"
"encoding/xml"
"fmt"
"net/http"
"strings"
"github.com/aws/aws-sdk-go-v2/service/s3/types"
"github.com/gofiber/fiber/v2"
"github.com/versity/versitygw/auth"
"github.com/versity/versitygw/backend"
@@ -149,25 +146,7 @@ func (c AdminController) ChangeBucketOwner(ctx *fiber.Ctx) (*Response, error) {
}, s3err.GetAPIError(s3err.ErrAdminUserNotFound)
}
acl := auth.ACL{
Owner: owner,
Grantees: []auth.Grantee{
{
Permission: auth.PermissionFullControl,
Access: owner,
Type: types.TypeCanonicalUser,
},
},
}
aclParsed, err := json.Marshal(acl)
if err != nil {
return &Response{
MetaOpts: &MetaOptions{},
}, fmt.Errorf("failed to marshal the bucket acl: %w", err)
}
err = c.be.ChangeBucketOwner(ctx.Context(), bucket, aclParsed)
err = c.be.ChangeBucketOwner(ctx.Context(), bucket, owner)
return &Response{
MetaOpts: &MetaOptions{},
}, err
+1 -1
View File
@@ -490,7 +490,7 @@ func TestAdminController_ChangeBucketOwner(t *testing.T) {
},
}
be := &BackendMock{
ChangeBucketOwnerFunc: func(contextMoqParam context.Context, bucket string, acl []byte) error {
ChangeBucketOwnerFunc: func(contextMoqParam context.Context, bucket, owner string) error {
return tt.input.beErr
},
}
+4 -2
View File
@@ -69,8 +69,10 @@ func New(be backend.Backend, iam auth.IAMService, logger s3log.AuditLogger, evs
}
// Returns MethodNotAllowed for unmatched routes
func (c S3ApiController) HandleUnmatch(ctx *fiber.Ctx) (*Response, error) {
return &Response{}, s3err.GetAPIError(s3err.ErrMethodNotAllowed)
func (c S3ApiController) HandleErrorRoute(err error) Controller {
return func(ctx *fiber.Ctx) (*Response, error) {
return &Response{}, err
}
}
// MetaOptions holds the metadata for metrics, audit logs and s3 events
+9 -6
View File
@@ -201,27 +201,30 @@ func TestNew(t *testing.T) {
}
}
func TestS3ApiController_HandleUnmatch(t *testing.T) {
func TestS3ApiController_HandleErrorRoute(t *testing.T) {
tests := []struct {
name string
input testInput
output testOutput
}{
{
name: "return method not allowed",
name: "should return the passed error",
input: testInput{
extraMockErr: s3err.GetAPIError(s3err.ErrAnonymousCreateMp),
},
output: testOutput{
response: &Response{},
err: s3err.GetAPIError(s3err.ErrMethodNotAllowed),
err: s3err.GetAPIError(s3err.ErrAnonymousCreateMp),
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctrl := S3ApiController{}
s3Ctrl := S3ApiController{}
ctrl := s3Ctrl.HandleErrorRoute(tt.input.extraMockErr)
testController(
t,
ctrl.HandleUnmatch,
ctrl,
tt.output.response,
tt.output.err,
ctxInputs{})
+3 -2
View File
@@ -15,6 +15,7 @@
package controllers
import (
"bytes"
"encoding/xml"
"fmt"
"io"
@@ -266,7 +267,7 @@ func (c S3ApiController) UploadPart(ctx *fiber.Ctx) (*Response, error) {
if bodyi != nil {
body = bodyi.(io.Reader)
} else {
body = ctx.Request().BodyStream()
body = bytes.NewReader([]byte{})
}
res, err := c.be.UploadPart(ctx.Context(),
@@ -690,7 +691,7 @@ func (c S3ApiController) PutObject(ctx *fiber.Ctx) (*Response, error) {
if bodyi != nil {
body = bodyi.(io.Reader)
} else {
body = ctx.Request().BodyStream()
body = bytes.NewReader([]byte{})
}
res, err := c.be.PutObject(ctx.Context(),