720b75ad73
* docs/testplan: add object versioning testplan
7.7 KiB
7.7 KiB
Object Versioning
Background
This testplan covers Object Versioning
Test Scenario | Test Case | Description | Comments |
---|---|---|---|
Copy | To a bucket that has versioning enabled | Should add one version to it(make a new version and make in latest) | check the column "versioning_state" in "bucket_metainfo" |
To a bucket that has version disabled | Make sure GE was not initiated for the disqualified node. | ||
Copy object | Should support copying a specific version, should copy the latest version of an object if not specified | ||
Move | To a bucket that has versioning enabled | Should add one version to it | check the column "versioning_state" in "bucket_metainfo" |
To a bucket that has version disabled | Perform GE on node with less then 50% of score. Node should fail to GE | ||
Delete | Delete one from many versions | Create 3 versions of the same file and delete the middle one indicating the version id | |
All versions | Unconditionally deletes all versions of an object | ||
Delete bucket | Force delete bucket with files that has versioning. We should keep all versions of the files unless manually deleted | ||
Restore | Delete and restore | Delete version of the file and restore from that version | |
Restore | Create few versions of the file and restore from latest to older version | ||
Create | Create new bucket | Versioning should be inherited from project level | |
Suspend | Suspend versioning | Suspend versioning on a bucket that had versioning enabled. 3 versions of a file exists. Try to upload the same file again. -> the newest file gets overriden. The older 2 versions stay intact | |
Update | Update metadata | Metadata update should not create new version. Takes the version as input but does not use it. Only updates the metadata for the highest committed object version. | |
List | all versions | Unconditionally returns all object versions. Listing all versions should include delete markers. Versions come out created last to first | |
UI | UI | UI should always show the latest version of each object | |
Buckets | Old | Old buckets created before the feature should be in "unsupported" state | |
Enable versioning after upload | Upload obj to a bucket with versioning disabled and then enable versioning. Check version of the object | ||
PutObject | Versioning enabled | When object with same name uploaded to a bucket we should create new unique version of the object | |
Versioning disabled | Latest version of the object is overwritten by the new object, new object has a version ID of null | ||
Multipart | Multipart upload with versioning enabled | ||
Expiration | Create object with expiration in versioned bucket, delete marker should be applied to it |
Third-party test suite
These test suites have good tests inside, so we should run all versioning related tests in them
- https://github.com/ceph/s3-tests/blob/master/s3tests_boto3/functional/test_s3.py
- https://github.com/snowflakedb/snowflake-s3compat-api-test-suite
Questions
- Can a customer set a maximum number of versions?
- Can a customer pin specific versions to make sure they can't be deleted by malware?
- Can a project member with a restricted access grant modify the version flag on a bucket? Which permissions does the access grant need?