2 changed files with 109 additions and 6 deletions
@ -0,0 +1,90 @@ |
|||
package s3api |
|||
|
|||
import ( |
|||
"testing" |
|||
|
|||
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" |
|||
"github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants" |
|||
"github.com/stretchr/testify/assert" |
|||
) |
|||
|
|||
// TestVeeamObjectLockBugFix tests the fix for the bug where GetObjectLockConfigurationHandler
|
|||
// would return NoSuchObjectLockConfiguration for buckets with no extended attributes,
|
|||
// even when Object Lock was enabled. This caused Veeam to think Object Lock wasn't supported.
|
|||
func TestVeeamObjectLockBugFix(t *testing.T) { |
|||
|
|||
t.Run("Bug case: bucket with no extended attributes", func(t *testing.T) { |
|||
// This simulates the bug case where a bucket has no extended attributes at all
|
|||
// The old code would immediately return NoSuchObjectLockConfiguration
|
|||
// The new code correctly checks if Object Lock is enabled before returning an error
|
|||
|
|||
bucketConfig := &BucketConfig{ |
|||
Name: "test-bucket", |
|||
Entry: &filer_pb.Entry{ |
|||
Name: "test-bucket", |
|||
Extended: nil, // This is the key - no extended attributes
|
|||
}, |
|||
} |
|||
|
|||
// Simulate the isObjectLockEnabledForBucket logic
|
|||
enabled := false |
|||
if bucketConfig.Entry.Extended != nil { |
|||
if enabledBytes, exists := bucketConfig.Entry.Extended[s3_constants.ExtObjectLockEnabledKey]; exists { |
|||
enabled = string(enabledBytes) == s3_constants.ObjectLockEnabled || string(enabledBytes) == "true" |
|||
} |
|||
} |
|||
|
|||
// Should correctly return false (not enabled) - this would trigger 404 correctly
|
|||
assert.False(t, enabled, "Object Lock should not be enabled when no extended attributes exist") |
|||
}) |
|||
|
|||
t.Run("Fix verification: bucket with Object Lock enabled via boolean flag", func(t *testing.T) { |
|||
// This verifies the fix works when Object Lock is enabled via boolean flag
|
|||
|
|||
bucketConfig := &BucketConfig{ |
|||
Name: "test-bucket", |
|||
Entry: &filer_pb.Entry{ |
|||
Name: "test-bucket", |
|||
Extended: map[string][]byte{ |
|||
s3_constants.ExtObjectLockEnabledKey: []byte("true"), |
|||
}, |
|||
}, |
|||
} |
|||
|
|||
// Simulate the isObjectLockEnabledForBucket logic
|
|||
enabled := false |
|||
if bucketConfig.Entry.Extended != nil { |
|||
if enabledBytes, exists := bucketConfig.Entry.Extended[s3_constants.ExtObjectLockEnabledKey]; exists { |
|||
enabled = string(enabledBytes) == s3_constants.ObjectLockEnabled || string(enabledBytes) == "true" |
|||
} |
|||
} |
|||
|
|||
// Should correctly return true (enabled) - this would generate minimal XML response
|
|||
assert.True(t, enabled, "Object Lock should be enabled when boolean flag is set") |
|||
}) |
|||
|
|||
t.Run("Fix verification: bucket with Object Lock enabled via Enabled constant", func(t *testing.T) { |
|||
// Test using the s3_constants.ObjectLockEnabled constant
|
|||
|
|||
bucketConfig := &BucketConfig{ |
|||
Name: "test-bucket", |
|||
Entry: &filer_pb.Entry{ |
|||
Name: "test-bucket", |
|||
Extended: map[string][]byte{ |
|||
s3_constants.ExtObjectLockEnabledKey: []byte(s3_constants.ObjectLockEnabled), |
|||
}, |
|||
}, |
|||
} |
|||
|
|||
// Simulate the isObjectLockEnabledForBucket logic
|
|||
enabled := false |
|||
if bucketConfig.Entry.Extended != nil { |
|||
if enabledBytes, exists := bucketConfig.Entry.Extended[s3_constants.ExtObjectLockEnabledKey]; exists { |
|||
enabled = string(enabledBytes) == s3_constants.ObjectLockEnabled || string(enabledBytes) == "true" |
|||
} |
|||
} |
|||
|
|||
// Should correctly return true (enabled)
|
|||
assert.True(t, enabled, "Object Lock should be enabled when constant is used") |
|||
}) |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue