Files
upstream-mirror 89f5be005d
Some checks failed
go: build dev binaries / cleanup (push) Successful in 4s
Codespell / Check for spelling errors (push) Failing after 3s
docker: build dev containers / build-rust-binaries (amd64, x86_64-unknown-linux-musl) (push) Failing after 3s
docker: build dev containers / build-dev-containers (push) Has been skipped
docker: build dev containers / build-rust-binaries (arm64, true, aarch64-unknown-linux-musl) (push) Failing after 3s
End to End / FUSE Mount (push) Failing after 2s
EC Integration Tests / EC Integration Tests (push) Failing after 30s
FUSE DLM Integration Tests / FUSE DLM Integration Tests (push) Failing after 3s
FUSE Volume Server Failover Tests / FUSE Volume Server Failover (push) Failing after 3s
FUSE Integration Tests / FUSE Integration Testing (push) Failing after 2s
FUSE P2P Peer Chunk Sharing Integration Tests / FUSE P2P Peer Chunk Sharing (push) Failing after 3s
go: build binary / Go Vet (push) Failing after 2s
go: build binary / Go Vet 32-bit (push) Failing after 3s
go: build binary / Build (push) Failing after 4s
go: build binary / Build cross-platform (freebsd/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (darwin/arm64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/arm64) (push) Failing after 3s
go: build binary / Test (push) Failing after 2s
go: build binary / Test 32-bit (push) Failing after 3s
helm: lint and test charts / lint-test (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (11) (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (17) (push) Failing after 3s
go: build dev binaries / build_dev_linux_windows (amd64, linux) (push) Failing after 2s
go: build dev binaries / build_dev_linux_windows (amd64, windows) (push) Failing after 3s
go: build dev binaries / build_dev_darwin (amd64, darwin) (push) Has been skipped
go: build dev binaries / build_dev_darwin (arm64, darwin) (push) Has been skipped
Java Client Unit Tests / Java Unit Tests (11) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (17) (push) Failing after 2s
Java Client Unit Tests / Java Unit Tests (21) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (8) (push) Failing after 3s
Kafka Quick Test (Load Test with Schema Registry) / Kafka Client Load Test (Quick) (push) Failing after 3s
Kafka Gateway Tests / Kafka Unit Tests (unit-tests-1) (push) Failing after 11s
Kafka Gateway Tests / Kafka Integration Tests (Critical) (integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka End-to-End Tests (with SMQ) (e2e-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Consumer Group Tests (Highly Isolated) (consumer-group-1) (push) Failing after 2s
Kafka Gateway Tests / Kafka Client Compatibility (with SMQ) (client-compat-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka SMQ Integration Tests (Full Stack) (smq-integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Protocol Tests (Isolated) (protocol-1) (push) Failing after 3s
KMS Tests / KMS Provider Integration Tests (push) Failing after 2s
KMS Tests / S3 KMS End-to-End Tests (push) Failing after 3s
Master Cold Start Tests / Master Cold Start Tests (push) Failing after 4s
Metadata Subscribe Integration Tests / Metadata Subscribe Integration Tests (push) Failing after 3s
Multi-Master Tests / Multi-Master Failover Tests (push) Failing after 3s
Performance / CPU and Heap Profile (push) Failing after 2s
Performance / S3 Read/Write Benchmark (rust volume) (push) Failing after 3s
pjdfstest POSIX Compliance / pjdfstest (push) Failing after 2s
Plugin Worker Integration Tests / Plugin Worker: erasure_coding (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: vacuum (push) Failing after 3s
Rust Volume Server Tests / Rust Integration Tests (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 1) (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 1) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 3) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Distributed Tests (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Performance Tests (push) Failing after 3s
Performance / Throughput Benchmark (go volume) (push) Failing after 3s
Performance / Throughput Benchmark (rust volume) (push) Failing after 2s
Performance / S3 Read/Write Benchmark (go volume) (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: volume_balance (push) Failing after 3s
PostgreSQL Gateway Tests / PostgreSQL Basic Tests (push) Failing after 3s
Rust Volume Server Tests / Rust Unit Tests (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 3) (push) Failing after 3s
Rust Plugin Worker Tests / Rust Plugin Worker Build and Unit Tests (push) Failing after 3s
rust: build dev volume server binaries / cleanup (push) Successful in 3s
S3 ETag and ACL Tests / S3 ETag + ACL Integration Tests (push) Failing after 3s
S3 IAM Integration Tests / IAM Unit Tests (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (advanced) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (basic) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (group) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (policy-enforcement) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (sts) (push) Failing after 4s
S3 Keycloak Integration Tests / S3 Keycloak Integration Tests (push) Failing after 3s
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.11) (push) Failing after 3s
S3 PyArrow Parquet Tests / Go Unit Tests (Implicit Directory) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.12) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-amd64, x86_64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-arm64, aarch64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-linux (linux-amd64, x86_64-unknown-linux-gnu) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.9) (push) Has been cancelled
S3 Proxy Signature Tests / S3 Proxy Signature Verification Tests (push) Has been cancelled
S3 SDK V2 Route Disambiguation Tests / S3 SDK V2 Routing Tests (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (quick) (push) Has been cancelled
S3 SSE Tests / S3 SSE Compatibility Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Metadata Persistence Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Copy Operations Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Multipart Upload Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Performance Test (push) Has been cancelled
S3 SSE Tests / S3 Volume Encryption Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (comprehensive) (push) Has been cancelled
Spark Integration Tests / Spark Integration Tests (push) Failing after 2s
Telemetry Integration Tests / telemetry-integration-test (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 1) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 1) (push) Failing after 3s
Ceph S3 tests / Basic S3 tests (KV store) (push) Has been cancelled
Ceph S3 tests / S3 Versioning & Object Lock tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Unit Tests (push) Failing after 3s
Ceph S3 tests / S3 CORS tests (push) Has been cancelled
Ceph S3 tests / SeaweedFS Custom S3 Copy tests (push) Has been cancelled
Ceph S3 tests / Basic S3 tests (SQL store) (push) Has been cancelled
test s3 over https using aws-cli / awscli-tests (push) Has been cancelled
TLS Rotation Integration Tests / TLS Rotation Integration Tests (push) Has been cancelled
Vacuum Integration Tests / Vacuum Integration Tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Variables Integration Tests (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (advanced-policy) (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (basic-policy) (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (contextual-policy) (push) Failing after 4s
S3 Policy Integration Tests / Trusted Proxy Detection Tests (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Shell Integration Tests (push) Failing after 3s
Samba on FUSE Integration / samba-integration (push) Failing after 2s
SFTP Integration Tests / SFTP Integration Testing (push) Failing after 3s
terraform: validate and test modules / fmt, validate, plan-level tests (push) Failing after 3s
terraform: validate and test modules / local cluster smoke test (real weed) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 3) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 2) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 2) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 3) (push) Failing after 5s
mount: windows conformance / WinFsp conformance (push) Has been cancelled
mount: windows / Mount on Windows (push) Has been cancelled
snapshot of https://github.com/seaweedfs/seaweedfs.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 03:23:42 +05:00

10 KiB

SeaweedFS S3 Copying Tests

This directory contains comprehensive Go tests for SeaweedFS S3 copying functionality, converted from the failing Python tests in the s3-tests repository.

Overview

These tests verify that SeaweedFS correctly implements S3 operations, starting with basic put/get operations and progressing to advanced copy operations, including:

  • Basic S3 Operations: Put/Get operations, bucket management, and metadata handling
  • Basic object copying: within the same bucket
  • Cross-bucket copying: across different buckets
  • Multipart copy operations: for large files
  • Conditional copy operations: ETag-based conditional copying
  • Metadata handling: during copy operations
  • ACL handling: during copy operations

Test Coverage

Basic S3 Operations (Run First)

  • TestBasicPutGet: Tests fundamental S3 put/get operations with various object types
  • TestBasicBucketOperations: Tests bucket creation, listing, and deletion
  • TestBasicLargeObject: Tests handling of larger objects (up to 10MB)

Basic Copy Operations

  • TestObjectCopySameBucket: Tests copying objects within the same bucket
  • TestObjectCopyDiffBucket: Tests copying objects to different buckets
  • TestObjectCopyCannedAcl: Tests copying with ACL settings
  • TestObjectCopyRetainingMetadata: Tests metadata preservation during copy

Multipart Copy Operations

  • TestMultipartCopySmall: Tests multipart copying of small files
  • TestMultipartCopyWithoutRange: Tests multipart copying without range specification
  • TestMultipartCopySpecialNames: Tests multipart copying with special character names
  • TestMultipartCopyMultipleSizes: Tests multipart copying with various file sizes

Conditional Copy Operations

  • TestCopyObjectIfMatchGood: Tests copying with matching ETag condition
  • TestCopyObjectIfMatchFailed: Tests copying with non-matching ETag condition (should fail)
  • TestCopyObjectIfNoneMatchFailed: Tests copying with non-matching ETag condition (should succeed)
  • TestCopyObjectIfNoneMatchGood: Tests copying with matching ETag condition (should fail)

Requirements

  1. Go 1.19+: Required for AWS SDK v2 and modern Go features
  2. SeaweedFS Binary: Built from source (../../../weed/weed)
  3. Free Ports: 8333 (S3), 8888 (Filer), 8080 (Volume), 9333 (Master)
  4. Dependencies: Uses the main repository's go.mod with existing AWS SDK v2 and testify dependencies

Quick Start

1. Build SeaweedFS

cd ../../../
make

2. Run Tests

# Run basic S3 operations first (recommended)
make test-basic

# Run all tests (starts with basic, then copy tests)
make test

# Run quick tests only
make test-quick

# Run multipart tests only
make test-multipart

# Run conditional tests only
make test-conditional

Available Make Targets

Basic Test Execution

  • make test-basic - Run basic S3 put/get operations (recommended first)
  • make test - Run all S3 tests (starts with basic, then copying)
  • make test-quick - Run quick tests only (basic copying)
  • make test-full - Run full test suite including large files
  • make test-multipart - Run multipart copying tests only
  • make test-conditional - Run conditional copying tests only

Server Management

  • make start-seaweedfs - Start SeaweedFS server for testing
  • make stop-seaweedfs - Stop SeaweedFS server
  • make manual-start - Start server for manual testing
  • make manual-stop - Stop server and clean up

Debugging

  • make debug-logs - Show recent log entries from all services
  • make debug-status - Show process and port status
  • make check-binary - Verify SeaweedFS binary exists

Performance Testing

  • make benchmark - Run performance benchmarks
  • make stress - Run stress tests with multiple iterations
  • make perf - Run performance tests with large files

Cleanup

  • make clean - Clean up test artifacts and temporary files

Configuration

The tests use the following default configuration:

{
  "endpoint": "http://localhost:8333",
  "access_key": "some_access_key1",
  "secret_key": "some_secret_key1",
  "region": "us-east-1",
  "bucket_prefix": "test-copying-",
  "use_ssl": false,
  "skip_verify_ssl": true
}

You can modify these values in test_config.json or by setting environment variables:

export SEAWEEDFS_BINARY=/path/to/weed
export S3_PORT=8333
export FILER_PORT=8888
export VOLUME_PORT=8080
export MASTER_PORT=9333
export TEST_TIMEOUT=10m
export VOLUME_MAX_SIZE_MB=50

Note: The volume size limit is set to 50MB to ensure proper testing of volume boundaries and multipart operations.

Test Details

TestBasicPutGet

  • Tests fundamental S3 put/get operations with various object types:
    • Simple text objects
    • Empty objects
    • Binary objects (1KB random data)
    • Objects with metadata and content-type
  • Verifies ETag consistency between put and get operations
  • Tests metadata preservation

TestBasicBucketOperations

  • Tests bucket creation and existence verification
  • Tests object listing in buckets
  • Tests object creation and listing with directory-like prefixes
  • Tests bucket deletion and cleanup
  • Verifies proper error handling for operations on non-existent buckets

TestBasicLargeObject

  • Tests handling of progressively larger objects:
    • 1KB, 10KB, 100KB, 1MB, 5MB, 10MB
  • Verifies data integrity for large objects
  • Tests memory handling and streaming for large files
  • Ensures proper handling up to the 50MB volume limit

TestObjectCopySameBucket

  • Creates a bucket with a source object
  • Copies the object to a different key within the same bucket
  • Verifies the copied object has the same content

TestObjectCopyDiffBucket

  • Creates source and destination buckets
  • Copies an object from source to destination bucket
  • Verifies the copied object has the same content

TestObjectCopyCannedAcl

  • Tests copying with ACL settings (public-read)
  • Tests metadata replacement during copy with ACL
  • Verifies both basic copying and metadata handling

TestObjectCopyRetainingMetadata

  • Tests with different file sizes (3 bytes, 1MB)
  • Verifies metadata and content-type preservation
  • Checks that all metadata is correctly copied

TestMultipartCopySmall

  • Tests multipart copy with 1-byte files
  • Uses range-based copying (bytes=0-0)
  • Verifies multipart upload completion

TestMultipartCopyWithoutRange

  • Tests multipart copy without specifying range
  • Should copy entire source object
  • Verifies correct content length and data

TestMultipartCopySpecialNames

  • Tests with special character names: " ", "_", "__", "?versionId"
  • Verifies proper URL encoding and handling
  • Each special name is tested in isolation

TestMultipartCopyMultipleSizes

  • Tests with various copy sizes:
    • 5MB (single part)
    • 5MB + 100KB (multi-part)
    • 5MB + 600KB (multi-part)
    • 10MB + 100KB (multi-part)
    • 10MB + 600KB (multi-part)
    • 10MB (exact multi-part boundary)
  • Uses 5MB part size for all copies
  • Verifies data integrity across all sizes

TestCopyObjectIfMatchGood

  • Tests conditional copy with matching ETag
  • Should succeed when ETag matches
  • Verifies successful copy operation

TestCopyObjectIfMatchFailed

  • Tests conditional copy with non-matching ETag
  • Should fail with precondition error
  • Verifies proper error handling

TestCopyObjectIfNoneMatchFailed

  • Tests conditional copy with non-matching ETag for IfNoneMatch
  • Should succeed when ETag doesn't match
  • Verifies successful copy operation

TestCopyObjectIfNoneMatchGood

  • Tests conditional copy with matching ETag for IfNoneMatch
  • Should fail with precondition error
  • Verifies proper error handling

Expected Behavior

These tests verify that SeaweedFS correctly implements:

  1. Basic S3 Operations: Standard PutObject, GetObject, ListBuckets, ListObjects APIs
  2. Bucket Management: Bucket creation, deletion, and listing
  3. Object Storage: Binary and text data storage with metadata
  4. Large Object Handling: Efficient storage and retrieval of large files
  5. Basic S3 Copy Operations: Standard CopyObject API
  6. Multipart Copy Operations: UploadPartCopy API with range support
  7. Conditional Operations: ETag-based conditional copying
  8. Metadata Handling: Proper metadata preservation and replacement
  9. ACL Handling: Access control list management during copy
  10. Error Handling: Proper error responses for invalid operations

Troubleshooting

Common Issues

  1. Port Already in Use

    make stop-seaweedfs
    make clean
    
  2. SeaweedFS Binary Not Found

    cd ../../../
    make
    
  3. Test Timeouts

    export TEST_TIMEOUT=30m
    make test
    
  4. Permission Denied

    sudo make clean
    

Debug Information

# Check server status
make debug-status

# View recent logs
make debug-logs

# Manual server start for investigation
make manual-start
# ... perform manual testing ...
make manual-stop

Log Locations

When running tests, logs are stored in:

  • Master: /tmp/seaweedfs-master.log
  • Volume: /tmp/seaweedfs-volume.log
  • Filer: /tmp/seaweedfs-filer.log
  • S3: /tmp/seaweedfs-s3.log

Contributing

When adding new tests:

  1. Follow the existing naming convention (TestXxxYyy)
  2. Use the helper functions for common operations
  3. Add cleanup with defer deleteBucket(t, client, bucketName)
  4. Include error checking with require.NoError(t, err)
  5. Use assertions with assert.Equal(t, expected, actual)
  6. Add the test to the appropriate Make target

Performance Notes

  • TestMultipartCopyMultipleSizes is the most resource-intensive test
  • Large file tests may take several minutes to complete
  • Memory usage scales with file sizes being tested
  • Network latency affects multipart copy performance

Integration with CI/CD

For automated testing:

# Basic validation (recommended first)
make test-basic

# Quick validation
make ci-test

# Full validation
make test-full

# Performance validation
make perf

The tests are designed to be self-contained and can run in containerized environments.