mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-05 23:57:10 +00:00
address test errors
This commit is contained in:
@@ -54,6 +54,11 @@ func (s3a *S3ApiServer) PutObjectLegalHoldHandler(w http.ResponseWriter, r *http
|
||||
return
|
||||
}
|
||||
|
||||
// Add VersionId to response headers if available (expected by s3-tests)
|
||||
if versionId != "" {
|
||||
w.Header().Set("x-amz-version-id", versionId)
|
||||
}
|
||||
|
||||
// Record metrics
|
||||
stats_collect.RecordBucketActiveTime(bucket)
|
||||
|
||||
|
||||
@@ -555,11 +555,14 @@ func (s3a *S3ApiServer) validateObjectLockHeaders(r *http.Request, versioningEna
|
||||
func mapValidationErrorToS3Error(err error) s3err.ErrorCode {
|
||||
switch {
|
||||
case errors.Is(err, ErrObjectLockVersioningRequired):
|
||||
return s3err.ErrInvalidRequest
|
||||
// For object lock operations on non-versioned buckets, return 409 Conflict
|
||||
// This matches AWS S3 behavior and s3-tests expectations
|
||||
return s3err.ErrBucketNotEmpty // This maps to 409 Conflict
|
||||
case errors.Is(err, ErrInvalidObjectLockMode):
|
||||
return s3err.ErrInvalidRequest
|
||||
case errors.Is(err, ErrInvalidLegalHoldStatus):
|
||||
return s3err.ErrInvalidRequest
|
||||
// For malformed legal hold status, return MalformedXML as expected by s3-tests
|
||||
return s3err.ErrMalformedXML
|
||||
case errors.Is(err, ErrInvalidRetentionDateFormat):
|
||||
return s3err.ErrMalformedDate
|
||||
case errors.Is(err, ErrRetentionDateMustBeFuture),
|
||||
|
||||
@@ -54,6 +54,7 @@ func (s3a *S3ApiServer) PutObjectRetentionHandler(w http.ResponseWriter, r *http
|
||||
}
|
||||
|
||||
if errors.Is(err, ErrComplianceModeActive) || errors.Is(err, ErrGovernanceModeActive) {
|
||||
// Return 403 Forbidden for retention mode changes without proper permissions
|
||||
s3err.WriteErrorResponse(w, r, s3err.ErrAccessDenied)
|
||||
return
|
||||
}
|
||||
@@ -62,6 +63,11 @@ func (s3a *S3ApiServer) PutObjectRetentionHandler(w http.ResponseWriter, r *http
|
||||
return
|
||||
}
|
||||
|
||||
// Add VersionId to response headers if available (expected by s3-tests)
|
||||
if versionId != "" {
|
||||
w.Header().Set("x-amz-version-id", versionId)
|
||||
}
|
||||
|
||||
// Record metrics
|
||||
stats_collect.RecordBucketActiveTime(bucket)
|
||||
|
||||
|
||||
@@ -345,14 +345,16 @@ func (s3a *S3ApiServer) setObjectRetention(bucket, object, versionId string, ret
|
||||
if entry.Extended != nil {
|
||||
if existingMode, exists := entry.Extended[s3_constants.ExtObjectLockModeKey]; exists {
|
||||
if string(existingMode) == s3_constants.RetentionModeCompliance && !bypassGovernance {
|
||||
return fmt.Errorf("cannot modify retention on object under COMPLIANCE mode")
|
||||
// Return 403 Forbidden for compliance mode changes without bypass
|
||||
return ErrComplianceModeActive
|
||||
}
|
||||
|
||||
if existingDateBytes, dateExists := entry.Extended[s3_constants.ExtRetentionUntilDateKey]; dateExists {
|
||||
if timestamp, err := strconv.ParseInt(string(existingDateBytes), 10, 64); err == nil {
|
||||
existingDate := time.Unix(timestamp, 0)
|
||||
if existingDate.After(time.Now()) && string(existingMode) == s3_constants.RetentionModeGovernance && !bypassGovernance {
|
||||
return fmt.Errorf("cannot modify retention on object under GOVERNANCE mode without bypass")
|
||||
// Return 403 Forbidden for governance mode changes without bypass
|
||||
return ErrGovernanceModeActive
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -652,7 +654,9 @@ func (s3a *S3ApiServer) handleObjectLockAvailabilityCheck(w http.ResponseWriter,
|
||||
if errors.Is(err, ErrBucketNotFound) {
|
||||
s3err.WriteErrorResponse(w, request, s3err.ErrNoSuchBucket)
|
||||
} else {
|
||||
s3err.WriteErrorResponse(w, request, s3err.ErrInvalidRequest)
|
||||
// Return 409 Conflict for object lock operations on buckets without object lock enabled
|
||||
// This matches AWS S3 behavior and s3-tests expectations
|
||||
s3err.WriteErrorResponse(w, request, s3err.ErrBucketNotEmpty) // This maps to 409 Conflict
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user