mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-26 01:44:48 +00:00
* s3api: add Snowflake s3compat API integration tests Run the upstream snowflakedb/snowflake-s3compat-api-test-suite against a local SeaweedFS server in CI. test/s3/snowflake/run.sh starts weed server with S3 (-s3.autoCreateBucket=false so missing-bucket PUTs return NoSuchBucket), prepares the fixtures the suite needs (versioned bucket, deny-all-policy bucket, >1000-object prefix), clones the suite, patches it to path-style addressing, and runs mvn -Dtest=S3CompatApiTest. The suite also exposed that GetBucketLocation returned 404 NoSuchBucket for a malformed bucket name; validate the name first and return 400 InvalidBucketName like AWS. * test: harden snowflake s3compat runner per review - Pin the upstream suite to a tested commit (SUITE_REV) instead of the moving default branch - Bind the test server to loopback only - Require the AccessDenied error code when verifying the denied bucket - Fix README so go install runs in a subshell - checkout with persist-credentials: false - Make the concurrency group unique per PR, and widen path filters to the storage/operation/wdclient/cluster/pb packages the S3 stack uses * test: advertise loopback ip for snowflake test server -ip.bind 127.0.0.1 alone left the volume server advertising the host's primary address, so chunk uploads were refused. Also set -ip 127.0.0.1 and disable the Iceberg/Lance listeners so the harness is loopback-only and does not collide with other local services.
34 lines
1.5 KiB
Markdown
34 lines
1.5 KiB
Markdown
# Snowflake S3Compat API test suite
|
|
|
|
Integration tests that run the upstream
|
|
[Snowflake s3compat API test suite](https://github.com/snowflakedb/snowflake-s3compat-api-test-suite)
|
|
against SeaweedFS. The suite covers `getBucketLocation`, `getObject` (including
|
|
range reads), `getObjectMetadata`, `putObject` (including a 5 GB upload),
|
|
`listObjectsV2` (including paged listing of >1000 objects), `deleteObject`,
|
|
`deleteObjects`, `copyObject`, and `generatePresignedUrl`.
|
|
|
|
## Running locally
|
|
|
|
Requires `weed` (or `WEED_BIN`), the `aws` CLI, `mvn`, and JDK 11+ on `PATH`.
|
|
|
|
```sh
|
|
(cd weed && go install -buildvcs=false) # build weed first
|
|
bash test/s3/snowflake/run.sh
|
|
```
|
|
|
|
`run.sh` starts a `weed server` with S3 enabled, calls `prepare.sh` to create
|
|
the fixtures, clones the suite into a scratch dir, and runs
|
|
`mvn -Dtest=S3CompatApiTest`. Set `WORK_DIR` to keep the server log and suite
|
|
clone around, `SKIP_SERVER_START=1` with `ENDPOINT_URL` to run against an
|
|
already-running server, and see the top of `run.sh` for the other overrides.
|
|
|
|
## Notes
|
|
|
|
- The server runs with `-s3.autoCreateBucket=false` so PUTs to a missing bucket
|
|
return `NoSuchBucket` like AWS; the suite asserts this.
|
|
- The suite forces virtual-hosted-style bucket addressing, which requires
|
|
wildcard DNS that does not exist for a local endpoint. `run.sh` switches it
|
|
to path-style access with a `sed` patch.
|
|
- `NOT_ACCESSIBLE_BUCKET` is a real bucket carrying a deny-all bucket policy,
|
|
which is how the suite's `AccessDenied` negative tests are satisfied.
|