Browse Source
ci: add S3 mutation regression coverage (#8804)
ci: add S3 mutation regression coverage (#8804)
* test/s3: stabilize distributed lock regression * ci: add S3 mutation regression workflow * test: fix delete regression readiness probe * test: address mutation regression review commentspull/8822/head
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 289 additions and 27 deletions
-
133.github/workflows/s3-mutation-regression-tests.yml
-
98test/s3/delete/Makefile
-
20test/s3/delete/test_s3.json
-
48test/s3/distributed_lock/distributed_lock_test.go
-
17test/s3/versioning/Makefile
@ -0,0 +1,133 @@ |
|||||
|
name: "S3 Mutation Regression Tests" |
||||
|
|
||||
|
on: |
||||
|
pull_request: |
||||
|
paths: |
||||
|
- 'weed/s3api/**' |
||||
|
- 'test/s3/delete/**' |
||||
|
- 'test/s3/distributed_lock/**' |
||||
|
- 'test/s3/versioning/**' |
||||
|
- 'test/volume_server/framework/**' |
||||
|
- 'docker/compose/s3.json' |
||||
|
- '.github/workflows/s3-mutation-regression-tests.yml' |
||||
|
|
||||
|
concurrency: |
||||
|
group: ${{ github.head_ref }}/s3-mutation-regression-tests |
||||
|
cancel-in-progress: true |
||||
|
|
||||
|
permissions: |
||||
|
contents: read |
||||
|
|
||||
|
jobs: |
||||
|
s3-versioning-regressions: |
||||
|
name: S3 Versioning Regression Tests |
||||
|
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' |
||||
|
|
||||
|
- name: Run S3 versioning regression tests |
||||
|
timeout-minutes: 20 |
||||
|
working-directory: test/s3/versioning |
||||
|
run: | |
||||
|
set -x |
||||
|
make test-with-server TEST_PATTERN="TestVersioningCompleteMultipartUploadIsIdempotent|TestVersioningSelfCopyMetadataReplaceCreatesNewVersion|TestVersioningSelfCopyMetadataReplaceSuspendedKeepsNullVersion|TestSuspendedDeleteCreatesDeleteMarker" |
||||
|
|
||||
|
- name: Show server logs on failure |
||||
|
if: failure() |
||||
|
working-directory: test/s3/versioning |
||||
|
run: | |
||||
|
echo "=== Server Logs ===" |
||||
|
if [ -f weed-test.log ]; then |
||||
|
tail -100 weed-test.log |
||||
|
fi |
||||
|
|
||||
|
- name: Upload versioning logs on failure |
||||
|
if: failure() |
||||
|
uses: actions/upload-artifact@v7 |
||||
|
with: |
||||
|
name: s3-versioning-regression-logs |
||||
|
path: test/s3/versioning/weed-test*.log |
||||
|
retention-days: 3 |
||||
|
|
||||
|
s3-delete-regressions: |
||||
|
name: S3 Delete Regression Tests |
||||
|
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' |
||||
|
|
||||
|
- name: Run S3 delete regression tests |
||||
|
timeout-minutes: 15 |
||||
|
working-directory: test/s3/delete |
||||
|
run: | |
||||
|
set -x |
||||
|
make test-with-server |
||||
|
|
||||
|
- name: Show server logs on failure |
||||
|
if: failure() |
||||
|
working-directory: test/s3/delete |
||||
|
run: | |
||||
|
echo "=== Server Logs ===" |
||||
|
if [ -f weed-test.log ]; then |
||||
|
tail -100 weed-test.log |
||||
|
fi |
||||
|
|
||||
|
- name: Upload delete logs on failure |
||||
|
if: failure() |
||||
|
uses: actions/upload-artifact@v7 |
||||
|
with: |
||||
|
name: s3-delete-regression-logs |
||||
|
path: test/s3/delete/weed-test*.log |
||||
|
retention-days: 3 |
||||
|
|
||||
|
s3-distributed-lock-regressions: |
||||
|
name: S3 Distributed Lock Regression Tests |
||||
|
runs-on: ubuntu-22.04 |
||||
|
timeout-minutes: 30 |
||||
|
|
||||
|
steps: |
||||
|
- name: Check out code |
||||
|
uses: actions/checkout@v6 |
||||
|
|
||||
|
- name: Set up Go |
||||
|
uses: actions/setup-go@v6 |
||||
|
with: |
||||
|
go-version-file: 'go.mod' |
||||
|
|
||||
|
- name: Build SeaweedFS |
||||
|
run: | |
||||
|
go build -o weed/weed -buildvcs=false ./weed |
||||
|
|
||||
|
- name: Run distributed lock regressions |
||||
|
timeout-minutes: 25 |
||||
|
env: |
||||
|
TMPDIR: ${{ github.workspace }}/test/s3/distributed_lock/tmp |
||||
|
S3_DISTRIBUTED_LOCK_KEEP_LOGS: "1" |
||||
|
WEED_BINARY: ${{ github.workspace }}/weed/weed |
||||
|
run: | |
||||
|
set -x |
||||
|
mkdir -p "$TMPDIR" |
||||
|
go test -v -count=1 -timeout=20m ./test/s3/distributed_lock |
||||
|
|
||||
|
- name: Upload distributed lock logs on failure |
||||
|
if: failure() |
||||
|
uses: actions/upload-artifact@v7 |
||||
|
with: |
||||
|
name: s3-distributed-lock-regression-logs |
||||
|
path: test/s3/distributed_lock/tmp/seaweedfs_s3_distributed_lock_* |
||||
|
retention-days: 3 |
||||
@ -0,0 +1,98 @@ |
|||||
|
# S3 delete regression test harness
|
||||
|
|
||||
|
.PHONY: all test help build-weed check-deps start-server stop-server test-delete test-with-server clean logs |
||||
|
|
||||
|
WEED_BINARY := ../../../weed/weed_binary |
||||
|
S3_PORT := 8333 |
||||
|
TEST_TIMEOUT := 10m |
||||
|
SERVER_DIR := ./test-volume-data |
||||
|
S3_CONFIG := ./test_s3.json |
||||
|
|
||||
|
.DEFAULT_GOAL := help |
||||
|
|
||||
|
all: test |
||||
|
|
||||
|
test: test-with-server |
||||
|
|
||||
|
help: |
||||
|
@echo "S3 delete regression test harness" |
||||
|
@echo "" |
||||
|
@echo "Available targets:" |
||||
|
@echo " build-weed - Build the SeaweedFS binary" |
||||
|
@echo " start-server - Start SeaweedFS with S3 enabled" |
||||
|
@echo " stop-server - Stop the test server" |
||||
|
@echo " test-delete - Run delete regression tests" |
||||
|
@echo " test-with-server - Start server, run tests, stop server" |
||||
|
@echo " logs - Show server logs" |
||||
|
@echo " clean - Remove test artifacts" |
||||
|
|
||||
|
build-weed: |
||||
|
@echo "Building SeaweedFS binary..." |
||||
|
@cd ../../../weed && go build -o weed_binary . |
||||
|
@chmod +x $(WEED_BINARY) |
||||
|
|
||||
|
check-deps: build-weed |
||||
|
@command -v go >/dev/null 2>&1 || (echo "Go is required but not installed" && exit 1) |
||||
|
@test -f $(WEED_BINARY) || (echo "SeaweedFS binary not found at $(WEED_BINARY)" && exit 1) |
||||
|
@test -f $(S3_CONFIG) || (echo "S3 config not found at $(S3_CONFIG)" && exit 1) |
||||
|
|
||||
|
start-server: check-deps |
||||
|
@echo "Starting SeaweedFS server for delete regression tests..." |
||||
|
@rm -f weed-server.pid |
||||
|
@mkdir -p $(SERVER_DIR) |
||||
|
@$(WEED_BINARY) mini \
|
||||
|
-dir=$(SERVER_DIR) \
|
||||
|
-s3 \
|
||||
|
-s3.port=$(S3_PORT) \
|
||||
|
-s3.config=$(S3_CONFIG) \
|
||||
|
-master.peers=none \
|
||||
|
> weed-test.log 2>&1 & echo $$! > weed-server.pid |
||||
|
@for i in $$(seq 1 60); do \
|
||||
|
if curl -sS -o /dev/null http://127.0.0.1:$(S3_PORT)/ >/dev/null 2>&1; then \
|
||||
|
echo "SeaweedFS S3 server is ready on port $(S3_PORT)"; \
|
||||
|
exit 0; \
|
||||
|
fi; \
|
||||
|
sleep 1; \
|
||||
|
done; \
|
||||
|
echo "SeaweedFS S3 server failed to start"; \
|
||||
|
echo "=== Server logs ==="; \
|
||||
|
test -f weed-test.log && cat weed-test.log || true; \
|
||||
|
exit 1 |
||||
|
|
||||
|
stop-server: |
||||
|
@echo "Stopping SeaweedFS server..." |
||||
|
@if [ -f weed-server.pid ]; then \
|
||||
|
SERVER_PID=$$(cat weed-server.pid); \
|
||||
|
kill -TERM $$SERVER_PID 2>/dev/null || true; \
|
||||
|
for i in $$(seq 1 20); do \
|
||||
|
if ! kill -0 $$SERVER_PID >/dev/null 2>&1; then \
|
||||
|
break; \
|
||||
|
fi; \
|
||||
|
sleep 0.1; \
|
||||
|
done; \
|
||||
|
if kill -0 $$SERVER_PID >/dev/null 2>&1; then \
|
||||
|
kill -KILL $$SERVER_PID 2>/dev/null || true; \
|
||||
|
fi; \
|
||||
|
rm -f weed-server.pid; \
|
||||
|
fi |
||||
|
|
||||
|
test-delete: check-deps |
||||
|
@echo "Running delete regression tests..." |
||||
|
@go test -v -timeout=$(TEST_TIMEOUT) . |
||||
|
|
||||
|
test-with-server: start-server |
||||
|
@trap "$(MAKE) stop-server" EXIT; \
|
||||
|
$(MAKE) test-delete || (echo "=== Last 100 lines of server logs ===" && tail -100 weed-test.log && exit 1) |
||||
|
@$(MAKE) stop-server |
||||
|
|
||||
|
logs: |
||||
|
@if test -f weed-test.log; then \
|
||||
|
tail -f weed-test.log; \
|
||||
|
else \
|
||||
|
echo "No server log file found."; \
|
||||
|
fi |
||||
|
|
||||
|
clean: |
||||
|
@$(MAKE) stop-server |
||||
|
@rm -f weed-test.log weed-server.pid |
||||
|
@rm -rf $(SERVER_DIR) |
||||
@ -0,0 +1,20 @@ |
|||||
|
{ |
||||
|
"identities": [ |
||||
|
{ |
||||
|
"name": "admin", |
||||
|
"credentials": [ |
||||
|
{ |
||||
|
"accessKey": "admin", |
||||
|
"secretKey": "admin" |
||||
|
} |
||||
|
], |
||||
|
"actions": [ |
||||
|
"Admin", |
||||
|
"Read", |
||||
|
"List", |
||||
|
"Tagging", |
||||
|
"Write" |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue