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
220 lines
7.8 KiB
Makefile
220 lines
7.8 KiB
Makefile
# Remote Storage Cache Integration Tests
|
|
# Tests the remote object caching functionality with singleflight deduplication
|
|
# Uses two SeaweedFS instances: primary (with caching) and secondary (as remote storage)
|
|
|
|
.PHONY: all help build-weed check-deps start-remote stop-remote start-primary stop-primary \
|
|
setup-remote test test-with-server clean logs logs-primary logs-remote health
|
|
|
|
all: test-with-server
|
|
|
|
# Configuration
|
|
WEED_BINARY := ../../../weed/weed_binary
|
|
|
|
ACCESS_KEY ?= some_access_key1
|
|
SECRET_KEY ?= some_secret_key1
|
|
|
|
# Primary SeaweedFS (the one being tested - has remote caching)
|
|
PRIMARY_S3_PORT := 8333
|
|
PRIMARY_MASTER_PORT := 9333
|
|
PRIMARY_FILER_PORT := 8888
|
|
PRIMARY_VOLUME_PORT := 9340
|
|
PRIMARY_WEBDAV_PORT := 7333
|
|
PRIMARY_METRICS_PORT := 9324
|
|
PRIMARY_DIR := ./test-primary-data
|
|
|
|
# Secondary SeaweedFS (acts as "remote" S3 storage)
|
|
REMOTE_S3_PORT := 8334
|
|
REMOTE_MASTER_PORT := 9334
|
|
REMOTE_FILER_PORT := 8889
|
|
REMOTE_VOLUME_PORT := 9341
|
|
REMOTE_WEBDAV_PORT := 7334
|
|
REMOTE_METRICS_PORT := 9325
|
|
REMOTE_DIR := ./test-remote-data
|
|
|
|
# Test configuration
|
|
TEST_TIMEOUT := 15m
|
|
TEST_PATTERN := .
|
|
|
|
# Buckets
|
|
REMOTE_BUCKET := remotesourcebucket
|
|
|
|
# Default target
|
|
help:
|
|
@echo "Remote Storage Cache Integration Tests"
|
|
@echo ""
|
|
@echo "Uses two SeaweedFS instances:"
|
|
@echo " - Primary (port $(PRIMARY_S3_PORT)): Being tested, has remote caching"
|
|
@echo " - Remote (port $(REMOTE_S3_PORT)): Acts as remote S3 storage"
|
|
@echo ""
|
|
@echo "Available targets:"
|
|
@echo " help - Show this help message"
|
|
@echo " build-weed - Build the SeaweedFS binary"
|
|
@echo " check-deps - Check dependencies"
|
|
@echo " start-remote - Start remote SeaweedFS (secondary)"
|
|
@echo " stop-remote - Stop remote SeaweedFS"
|
|
@echo " start-primary - Start primary SeaweedFS"
|
|
@echo " stop-primary - Stop primary SeaweedFS"
|
|
@echo " setup-remote - Configure remote storage mount"
|
|
@echo " test - Run tests (assumes servers are running)"
|
|
@echo " test-with-server - Start servers, run tests, stop servers"
|
|
@echo " clean - Clean up all resources"
|
|
@echo " logs - Show server logs"
|
|
@echo " health - Check server health"
|
|
|
|
# Build the SeaweedFS binary
|
|
build-weed:
|
|
@echo "Building SeaweedFS binary..."
|
|
@cd ../../../weed && go build -o weed_binary .
|
|
@chmod +x $(WEED_BINARY)
|
|
@echo "SeaweedFS binary built"
|
|
|
|
check-deps: build-weed
|
|
@echo "Checking dependencies..."
|
|
@command -v go >/dev/null 2>&1 || (echo "Go is required" && exit 1)
|
|
@test -f $(WEED_BINARY) || (echo "SeaweedFS binary not found" && exit 1)
|
|
@echo "All dependencies available"
|
|
|
|
# Start remote SeaweedFS (acts as the "remote" S3 storage)
|
|
start-remote: check-deps
|
|
@echo "Starting remote SeaweedFS (secondary instance)..."
|
|
@rm -f remote-server.pid
|
|
@mkdir -p $(REMOTE_DIR)
|
|
@$(WEED_BINARY) mini \
|
|
-s3.port=$(REMOTE_S3_PORT) \
|
|
-master.port=$(REMOTE_MASTER_PORT) \
|
|
-filer.port=$(REMOTE_FILER_PORT) \
|
|
-volume.port=$(REMOTE_VOLUME_PORT) \
|
|
-webdav.port=$(REMOTE_WEBDAV_PORT) \
|
|
-s3.allowDeleteBucketNotEmpty=true \
|
|
-s3.config=s3_config.json \
|
|
-dir=$(REMOTE_DIR) \
|
|
-ip=127.0.0.1 \
|
|
-ip.bind=127.0.0.1 \
|
|
-metricsPort=$(REMOTE_METRICS_PORT) \
|
|
> remote-weed.log 2>&1 & echo $$! > remote-server.pid
|
|
@echo "Waiting for remote SeaweedFS to start..."
|
|
@for i in $$(seq 1 60); do \
|
|
if curl -s http://localhost:$(REMOTE_S3_PORT) >/dev/null 2>&1; then \
|
|
echo "Remote SeaweedFS started on port $(REMOTE_S3_PORT)"; \
|
|
exit 0; \
|
|
fi; \
|
|
sleep 3; \
|
|
done; \
|
|
echo "ERROR: Remote SeaweedFS failed to start"; \
|
|
cat remote-weed.log; \
|
|
exit 1
|
|
|
|
stop-remote:
|
|
@echo "Stopping remote SeaweedFS..."
|
|
@if [ -f remote-server.pid ]; then \
|
|
kill -TERM $$(cat remote-server.pid) 2>/dev/null || true; \
|
|
sleep 2; \
|
|
kill -KILL $$(cat remote-server.pid) 2>/dev/null || true; \
|
|
rm -f remote-server.pid; \
|
|
fi
|
|
@echo "Remote SeaweedFS stopped"
|
|
|
|
# Start primary SeaweedFS (the one being tested)
|
|
start-primary: check-deps
|
|
@echo "Starting primary SeaweedFS..."
|
|
@rm -f primary-server.pid
|
|
@mkdir -p $(PRIMARY_DIR)
|
|
@$(WEED_BINARY) mini \
|
|
-s3.port=$(PRIMARY_S3_PORT) \
|
|
-master.port=$(PRIMARY_MASTER_PORT) \
|
|
-filer.port=$(PRIMARY_FILER_PORT) \
|
|
-volume.port=$(PRIMARY_VOLUME_PORT) \
|
|
-webdav.port=$(PRIMARY_WEBDAV_PORT) \
|
|
-s3.allowDeleteBucketNotEmpty=true \
|
|
-s3.config=s3_config.json \
|
|
-volume.allowUntrustedRemoteEndpoints \
|
|
-filer.allowUntrustedRemoteEndpoints \
|
|
-s3.allowUntrustedRemoteEndpoints \
|
|
-dir=$(PRIMARY_DIR) \
|
|
-ip=127.0.0.1 \
|
|
-ip.bind=127.0.0.1 \
|
|
-metricsPort=$(PRIMARY_METRICS_PORT) \
|
|
> primary-weed.log 2>&1 & echo $$! > primary-server.pid
|
|
@echo "Waiting for primary SeaweedFS to start..."
|
|
@for i in $$(seq 1 60); do \
|
|
if curl -s http://localhost:$(PRIMARY_S3_PORT) >/dev/null 2>&1; then \
|
|
echo "Primary SeaweedFS started on port $(PRIMARY_S3_PORT)"; \
|
|
exit 0; \
|
|
fi; \
|
|
sleep 3; \
|
|
done; \
|
|
echo "ERROR: Primary SeaweedFS failed to start"; \
|
|
cat primary-weed.log; \
|
|
exit 1
|
|
|
|
stop-primary:
|
|
@echo "Stopping primary SeaweedFS..."
|
|
@if [ -f primary-server.pid ]; then \
|
|
kill -TERM $$(cat primary-server.pid) 2>/dev/null || true; \
|
|
sleep 2; \
|
|
kill -KILL $$(cat primary-server.pid) 2>/dev/null || true; \
|
|
rm -f primary-server.pid; \
|
|
fi
|
|
@echo "Primary SeaweedFS stopped"
|
|
|
|
# Create bucket on remote and configure remote storage mount on primary
|
|
setup-remote:
|
|
@echo "Creating bucket on remote SeaweedFS..."
|
|
@go run utils/create_bucket.go http://localhost:$(REMOTE_S3_PORT) $(ACCESS_KEY) $(SECRET_KEY) $(REMOTE_BUCKET)
|
|
@sleep 3
|
|
@echo "Configuring remote storage on primary..."
|
|
@printf 'remote.configure -name=seaweedremote -type=s3 -s3.access_key=$(ACCESS_KEY) -s3.secret_key=$(SECRET_KEY) -s3.endpoint=http://localhost:$(REMOTE_S3_PORT) -s3.region=us-east-1\nexit\n' | $(WEED_BINARY) shell -master=localhost:$(PRIMARY_MASTER_PORT)
|
|
@sleep 2
|
|
@echo "Mounting remote bucket on primary..."
|
|
@printf 'remote.mount -dir=/buckets/remotemounted -remote=seaweedremote/$(REMOTE_BUCKET) -nonempty\nexit\n' | $(WEED_BINARY) shell -master=localhost:$(PRIMARY_MASTER_PORT)
|
|
@sleep 5
|
|
@printf 'remote.mount\nexit\n' | $(WEED_BINARY) shell -master=localhost:$(PRIMARY_MASTER_PORT) | grep -q "/buckets/remotemounted" || (echo "Mount failed" && exit 1)
|
|
@echo "Remote storage configured and verified"
|
|
|
|
# Run tests
|
|
test: build-weed
|
|
@echo "Running remote cache tests..."
|
|
@go test -v -timeout=$(TEST_TIMEOUT) -run "$(TEST_PATTERN)" .
|
|
@echo "Tests completed"
|
|
|
|
# Full test workflow
|
|
test-with-server: start-remote start-primary
|
|
@sleep 5
|
|
@$(MAKE) setup-remote || (echo "Remote setup failed" && $(MAKE) stop-primary stop-remote && exit 1)
|
|
@sleep 5
|
|
@echo "Running remote cache tests..."
|
|
@$(MAKE) test || (echo "Tests failed" && tail -50 primary-weed.log && $(MAKE) stop-primary stop-remote && exit 1)
|
|
@$(MAKE) stop-primary stop-remote
|
|
@echo "All tests passed"
|
|
|
|
|
|
# Show logs
|
|
logs:
|
|
@echo "=== Primary SeaweedFS Logs ==="
|
|
@if [ -f primary-weed.log ]; then tail -50 primary-weed.log; else echo "No log file"; fi
|
|
@echo ""
|
|
@echo "=== Remote SeaweedFS Logs ==="
|
|
@if [ -f remote-weed.log ]; then tail -50 remote-weed.log; else echo "No log file"; fi
|
|
|
|
logs-primary:
|
|
@if [ -f primary-weed.log ]; then tail -f primary-weed.log; else echo "No log file"; fi
|
|
|
|
logs-remote:
|
|
@if [ -f remote-weed.log ]; then tail -f remote-weed.log; else echo "No log file"; fi
|
|
|
|
# Clean up
|
|
clean:
|
|
@$(MAKE) stop-primary
|
|
@$(MAKE) stop-remote
|
|
@rm -f primary-weed.log remote-weed.log primary-server.pid remote-server.pid
|
|
@rm -rf $(PRIMARY_DIR) $(REMOTE_DIR)
|
|
@rm -f remote_cache.test
|
|
@go clean -testcache
|
|
@echo "Cleanup completed"
|
|
|
|
# Health check
|
|
health:
|
|
@echo "Checking server status..."
|
|
@curl -s http://localhost:$(PRIMARY_S3_PORT) >/dev/null 2>&1 && echo "Primary S3 ($(PRIMARY_S3_PORT)): UP" || echo "Primary S3 ($(PRIMARY_S3_PORT)): DOWN"
|
|
@curl -s http://localhost:$(REMOTE_S3_PORT) >/dev/null 2>&1 && echo "Remote S3 ($(REMOTE_S3_PORT)): UP" || echo "Remote S3 ($(REMOTE_S3_PORT)): DOWN"
|