mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-20 13:30:46 +02:00
Changed exit 0 to exit 1 for s3-sse-copy-operations and s3-sse-multipart jobs. These jobs document known limitations but should fail to ensure the issues are tracked and addressed, not silently ignored.
400 lines
13 KiB
YAML
400 lines
13 KiB
YAML
name: "S3 SSE Tests"
|
|
|
|
on:
|
|
pull_request:
|
|
paths:
|
|
- 'weed/s3api/s3_sse_*.go'
|
|
- 'weed/s3api/s3api_object_handlers.go'
|
|
- 'weed/s3api/s3api_object_handlers_put.go'
|
|
- 'weed/s3api/s3api_object_handlers_copy*.go'
|
|
- 'weed/server/filer_server_handlers_*.go'
|
|
- 'weed/kms/**'
|
|
- 'test/s3/sse/**'
|
|
- '.github/workflows/s3-sse-tests.yml'
|
|
push:
|
|
branches: [ master, main ]
|
|
paths:
|
|
- 'weed/s3api/s3_sse_*.go'
|
|
- 'weed/s3api/s3api_object_handlers.go'
|
|
- 'weed/s3api/s3api_object_handlers_put.go'
|
|
- 'weed/s3api/s3api_object_handlers_copy*.go'
|
|
- 'weed/server/filer_server_handlers_*.go'
|
|
- 'weed/kms/**'
|
|
- 'test/s3/sse/**'
|
|
|
|
concurrency:
|
|
group: ${{ github.head_ref }}/s3-sse-tests
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
defaults:
|
|
run:
|
|
working-directory: weed
|
|
|
|
jobs:
|
|
s3-sse-integration-tests:
|
|
name: S3 SSE Integration Tests
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 30
|
|
strategy:
|
|
matrix:
|
|
test-type: ["quick", "comprehensive"]
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: 'go.mod'
|
|
id: go
|
|
|
|
- name: Install SeaweedFS
|
|
run: |
|
|
go install -buildvcs=false
|
|
|
|
- name: Run S3 SSE Integration Tests - ${{ matrix.test-type }}
|
|
timeout-minutes: 25
|
|
working-directory: test/s3/sse
|
|
run: |
|
|
set -x
|
|
echo "=== System Information ==="
|
|
uname -a
|
|
free -h
|
|
df -h
|
|
echo "=== Starting SSE Tests ==="
|
|
|
|
# Run tests with automatic server management
|
|
# The test-with-server target handles server startup/shutdown automatically
|
|
if [ "${{ matrix.test-type }}" = "quick" ]; then
|
|
# Quick tests - basic SSE-C and SSE-KMS functionality + Range requests
|
|
make test-with-server TEST_PATTERN="TestSSECIntegrationBasic|TestSSEKMSIntegrationBasic|TestSimpleSSECIntegration|.*RangeRequestsServerBehavior"
|
|
else
|
|
# Comprehensive tests - SSE-C/KMS functionality, excluding copy operations (pre-existing SSE-C issues)
|
|
make test-with-server TEST_PATTERN="TestSSECIntegrationBasic|TestSSECIntegrationVariousDataSizes|TestSSEKMSIntegrationBasic|TestSSEKMSIntegrationVariousDataSizes|.*Multipart.*Integration|TestSimpleSSECIntegration|.*RangeRequestsServerBehavior"
|
|
fi
|
|
|
|
- name: Show server logs on failure
|
|
if: failure()
|
|
working-directory: test/s3/sse
|
|
run: |
|
|
echo "=== Server Logs ==="
|
|
if [ -f weed-test.log ]; then
|
|
echo "Last 100 lines of server logs:"
|
|
tail -100 weed-test.log
|
|
else
|
|
echo "No server log file found"
|
|
fi
|
|
|
|
echo "=== Test Environment ==="
|
|
ps aux | grep -E "(weed|test)" || true
|
|
netstat -tlnp | grep -E "(8333|9333|8080|8888)" || true
|
|
|
|
- name: Upload test logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: s3-sse-test-logs-${{ matrix.test-type }}
|
|
path: test/s3/sse/weed-test*.log
|
|
retention-days: 3
|
|
|
|
s3-sse-compatibility:
|
|
name: S3 SSE Compatibility Test
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 20
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: 'go.mod'
|
|
id: go
|
|
|
|
- name: Install SeaweedFS
|
|
run: |
|
|
go install -buildvcs=false
|
|
|
|
- name: Run Core SSE Compatibility Test (AWS S3 equivalent)
|
|
timeout-minutes: 15
|
|
working-directory: test/s3/sse
|
|
run: |
|
|
set -x
|
|
echo "=== System Information ==="
|
|
uname -a
|
|
free -h
|
|
|
|
# Run the specific tests that validate AWS S3 SSE compatibility - both SSE-C and SSE-KMS basic functionality plus Range requests
|
|
make test-with-server TEST_PATTERN="TestSSECIntegrationBasic|TestSSEKMSIntegrationBasic|.*RangeRequestsServerBehavior" || {
|
|
echo "❌ SSE compatibility test failed, checking logs..."
|
|
if [ -f weed-test.log ]; then
|
|
echo "=== Server logs ==="
|
|
tail -100 weed-test.log
|
|
fi
|
|
echo "=== Process information ==="
|
|
ps aux | grep -E "(weed|test)" || true
|
|
exit 1
|
|
}
|
|
|
|
- name: Upload server logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: s3-sse-compatibility-logs
|
|
path: test/s3/sse/weed-test*.log
|
|
retention-days: 3
|
|
|
|
s3-sse-metadata-persistence:
|
|
name: S3 SSE Metadata Persistence Test
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 20
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: 'go.mod'
|
|
id: go
|
|
|
|
- name: Install SeaweedFS
|
|
run: |
|
|
go install -buildvcs=false
|
|
|
|
- name: Run SSE Metadata Persistence Test
|
|
timeout-minutes: 15
|
|
working-directory: test/s3/sse
|
|
run: |
|
|
set -x
|
|
echo "=== System Information ==="
|
|
uname -a
|
|
free -h
|
|
|
|
# Run the specific test that would catch filer metadata storage bugs
|
|
# This test validates that encryption metadata survives the full PUT/GET cycle
|
|
make test-metadata-persistence || {
|
|
echo "❌ SSE metadata persistence test failed, checking logs..."
|
|
if [ -f weed-test.log ]; then
|
|
echo "=== Server logs ==="
|
|
tail -100 weed-test.log
|
|
fi
|
|
echo "=== Process information ==="
|
|
ps aux | grep -E "(weed|test)" || true
|
|
exit 1
|
|
}
|
|
|
|
- name: Upload server logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: s3-sse-metadata-persistence-logs
|
|
path: test/s3/sse/weed-test*.log
|
|
retention-days: 3
|
|
|
|
s3-sse-copy-operations:
|
|
name: S3 SSE Copy Operations Test
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 25
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: 'go.mod'
|
|
id: go
|
|
|
|
- name: Install SeaweedFS
|
|
run: |
|
|
go install -buildvcs=false
|
|
|
|
- name: Run SSE Copy Operations Tests
|
|
timeout-minutes: 20
|
|
working-directory: test/s3/sse
|
|
run: |
|
|
set -x
|
|
echo "=== System Information ==="
|
|
uname -a
|
|
free -h
|
|
|
|
# Run tests that validate SSE copy operations and cross-encryption scenarios
|
|
echo "🚀 Running SSE copy operations tests..."
|
|
echo "📋 Note: SSE-C copy operations have pre-existing functionality gaps"
|
|
echo " Cross-encryption copy security fix has been implemented and maintained"
|
|
|
|
# Skip SSE-C copy operations due to pre-existing HTTP 500 errors
|
|
# The critical security fix for cross-encryption (SSE-C → SSE-KMS) has been preserved
|
|
echo "⏭️ Skipping SSE copy operations tests due to known limitations:"
|
|
echo " - SSE-C copy operations: HTTP 500 errors (pre-existing functionality gap)"
|
|
echo " - Cross-encryption security fix: ✅ Implemented and tested (forces streaming copy)"
|
|
echo " - These limitations are documented as pre-existing issues"
|
|
echo "❌ Failing job to ensure these limitations are addressed in the future"
|
|
exit 1 # Job fails to ensure known limitations are tracked and addressed
|
|
|
|
- name: Upload server logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: s3-sse-copy-operations-logs
|
|
path: test/s3/sse/weed-test*.log
|
|
retention-days: 3
|
|
|
|
s3-sse-multipart:
|
|
name: S3 SSE Multipart Upload Test
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 25
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: 'go.mod'
|
|
id: go
|
|
|
|
- name: Install SeaweedFS
|
|
run: |
|
|
go install -buildvcs=false
|
|
|
|
- name: Run SSE Multipart Upload Tests
|
|
timeout-minutes: 20
|
|
working-directory: test/s3/sse
|
|
run: |
|
|
set -x
|
|
echo "=== System Information ==="
|
|
uname -a
|
|
free -h
|
|
|
|
# Multipart tests - Document known architectural limitations
|
|
echo "🚀 Running multipart upload tests..."
|
|
echo "📋 Note: SSE-KMS multipart upload has known architectural limitation requiring per-chunk metadata storage"
|
|
echo " SSE-C multipart tests will be skipped due to pre-existing functionality gaps"
|
|
|
|
# Test SSE-C basic multipart (skip advanced multipart that fails with HTTP 500)
|
|
# Skip SSE-KMS multipart due to architectural limitation (each chunk needs independent metadata)
|
|
echo "⏭️ Skipping multipart upload tests due to known limitations:"
|
|
echo " - SSE-C multipart GET operations: HTTP 500 errors (pre-existing functionality gap)"
|
|
echo " - SSE-KMS multipart decryption: Requires per-chunk SSE metadata architecture changes"
|
|
echo " - These limitations are documented and require future architectural work"
|
|
echo "❌ Failing job to ensure these limitations are addressed in the future"
|
|
exit 1 # Job fails to ensure known limitations are tracked and addressed
|
|
|
|
- name: Upload server logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: s3-sse-multipart-logs
|
|
path: test/s3/sse/weed-test*.log
|
|
retention-days: 3
|
|
|
|
s3-sse-performance:
|
|
name: S3 SSE Performance Test
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 35
|
|
# Only run performance tests on master branch pushes to avoid overloading PR testing
|
|
if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main')
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: 'go.mod'
|
|
id: go
|
|
|
|
- name: Install SeaweedFS
|
|
run: |
|
|
go install -buildvcs=false
|
|
|
|
- name: Run S3 SSE Performance Tests
|
|
timeout-minutes: 30
|
|
working-directory: test/s3/sse
|
|
run: |
|
|
set -x
|
|
echo "=== System Information ==="
|
|
uname -a
|
|
free -h
|
|
|
|
# Run performance tests with various data sizes
|
|
make perf || {
|
|
echo "❌ SSE performance test failed, checking logs..."
|
|
if [ -f weed-test.log ]; then
|
|
echo "=== Server logs ==="
|
|
tail -200 weed-test.log
|
|
fi
|
|
make clean
|
|
exit 1
|
|
}
|
|
make clean
|
|
|
|
- name: Upload performance test logs
|
|
if: always()
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: s3-sse-performance-logs
|
|
path: test/s3/sse/weed-test*.log
|
|
retention-days: 7
|
|
|
|
s3-volume-encryption:
|
|
name: S3 Volume Encryption Test
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 20
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: 'go.mod'
|
|
id: go
|
|
|
|
- name: Install SeaweedFS
|
|
run: |
|
|
go install -buildvcs=false
|
|
|
|
- name: Run S3 Volume Encryption Integration Tests
|
|
timeout-minutes: 15
|
|
working-directory: test/s3/sse
|
|
run: |
|
|
set -x
|
|
echo "=== System Information ==="
|
|
uname -a
|
|
free -h
|
|
|
|
# Run volume encryption tests with -s3.encryptVolumeData flag
|
|
echo "🚀 Running S3 volume encryption integration tests..."
|
|
make test-volume-encryption || {
|
|
echo "❌ Volume encryption tests failed, checking logs..."
|
|
if [ -f /tmp/seaweedfs-sse-mini.log ]; then
|
|
echo "=== Server logs ==="
|
|
tail -100 /tmp/seaweedfs-sse-mini.log
|
|
fi
|
|
echo "=== Process information ==="
|
|
ps aux | grep -E "(weed|test)" || true
|
|
exit 1
|
|
}
|
|
|
|
- name: Upload server logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: s3-volume-encryption-logs
|
|
path: /tmp/seaweedfs-sse-*.log
|
|
retention-days: 3
|
|
|