2 changed files with 165 additions and 55 deletions
@ -0,0 +1,161 @@ |
|||
name: "S3 Keycloak Integration Tests" |
|||
|
|||
on: |
|||
pull_request: |
|||
paths: |
|||
- 'weed/iam/**' |
|||
- 'weed/s3api/**' |
|||
- 'test/s3/iam/**' |
|||
- '.github/workflows/s3-keycloak-tests.yml' |
|||
push: |
|||
branches: [ master ] |
|||
paths: |
|||
- 'weed/iam/**' |
|||
- 'weed/s3api/**' |
|||
- 'test/s3/iam/**' |
|||
- '.github/workflows/s3-keycloak-tests.yml' |
|||
|
|||
concurrency: |
|||
group: ${{ github.head_ref }}/s3-keycloak-tests |
|||
cancel-in-progress: true |
|||
|
|||
permissions: |
|||
contents: read |
|||
|
|||
defaults: |
|||
run: |
|||
working-directory: weed |
|||
|
|||
jobs: |
|||
# Dedicated job for Keycloak integration tests |
|||
s3-keycloak-integration-tests: |
|||
name: S3 Keycloak Integration Tests |
|||
runs-on: ubuntu-22.04 |
|||
timeout-minutes: 30 |
|||
|
|||
steps: |
|||
- name: Check out code |
|||
uses: actions/checkout@v5 |
|||
|
|||
- name: Set up Go |
|||
uses: actions/setup-go@v5 |
|||
with: |
|||
go-version-file: 'go.mod' |
|||
id: go |
|||
|
|||
- name: Install SeaweedFS |
|||
working-directory: weed |
|||
run: | |
|||
go install -buildvcs=false |
|||
|
|||
- name: Run Keycloak Integration Tests |
|||
timeout-minutes: 25 |
|||
working-directory: test/s3/iam |
|||
run: | |
|||
set -x |
|||
echo "=== System Information ===" |
|||
uname -a |
|||
free -h |
|||
df -h |
|||
echo "=== Starting S3 Keycloak Integration Tests ===" |
|||
|
|||
# Set WEED_BINARY to use the installed version |
|||
export WEED_BINARY=$(which weed) |
|||
export TEST_TIMEOUT=20m |
|||
|
|||
echo "Running Keycloak integration tests..." |
|||
# Start Keycloak container first |
|||
docker run -d \ |
|||
--name keycloak \ |
|||
-p 8080:8080 \ |
|||
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin \ |
|||
-e KC_BOOTSTRAP_ADMIN_PASSWORD=admin \ |
|||
-e KC_HTTP_ENABLED=true \ |
|||
-e KC_HOSTNAME_STRICT=false \ |
|||
-e KC_HOSTNAME_STRICT_HTTPS=false \ |
|||
quay.io/keycloak/keycloak:26.0 \ |
|||
start-dev |
|||
|
|||
# Wait for Keycloak with better health checking |
|||
timeout 300 bash -c ' |
|||
while true; do |
|||
if curl -s http://localhost:8080/health/ready > /dev/null 2>&1; then |
|||
echo "✅ Keycloak health check passed" |
|||
break |
|||
fi |
|||
echo "... waiting for Keycloak to be ready" |
|||
sleep 5 |
|||
done |
|||
' |
|||
|
|||
# Setup Keycloak configuration |
|||
./setup_keycloak.sh |
|||
|
|||
# Start SeaweedFS services |
|||
make clean setup start-services wait-for-services |
|||
|
|||
# Verify service accessibility |
|||
echo "=== Verifying Service Accessibility ===" |
|||
curl -f http://localhost:8080/realms/master |
|||
curl -s http://localhost:8333 |
|||
echo "✅ SeaweedFS S3 API is responding (IAM-protected endpoint)" |
|||
|
|||
# Run Keycloak-specific tests |
|||
echo "=== Running Keycloak Tests ===" |
|||
export KEYCLOAK_URL=http://localhost:8080 |
|||
export S3_ENDPOINT=http://localhost:8333 |
|||
|
|||
# Wait for realm to be properly configured |
|||
timeout 120 bash -c 'until curl -fs http://localhost:8080/realms/seaweedfs-test/.well-known/openid-configuration > /dev/null; do echo "... waiting for realm"; sleep 3; done' |
|||
|
|||
# Run the Keycloak integration tests |
|||
go test -v -timeout 20m -run "TestKeycloak" ./... |
|||
|
|||
- name: Show server logs on failure |
|||
if: failure() |
|||
working-directory: test/s3/iam |
|||
run: | |
|||
echo "=== Service Logs ===" |
|||
echo "--- Keycloak logs ---" |
|||
docker logs keycloak --tail=100 || echo "No Keycloak container logs" |
|||
|
|||
echo "--- SeaweedFS Master logs ---" |
|||
if [ -f weed-master.log ]; then |
|||
tail -100 weed-master.log |
|||
fi |
|||
|
|||
echo "--- SeaweedFS S3 logs ---" |
|||
if [ -f weed-s3.log ]; then |
|||
tail -100 weed-s3.log |
|||
fi |
|||
|
|||
echo "--- SeaweedFS Filer logs ---" |
|||
if [ -f weed-filer.log ]; then |
|||
tail -100 weed-filer.log |
|||
fi |
|||
|
|||
echo "=== System Status ===" |
|||
ps aux | grep -E "(weed|keycloak)" || true |
|||
netstat -tlnp | grep -E "(8333|9333|8080|8888)" || true |
|||
docker ps -a || true |
|||
|
|||
- name: Cleanup |
|||
if: always() |
|||
working-directory: test/s3/iam |
|||
run: | |
|||
# Stop Keycloak container |
|||
docker stop keycloak || true |
|||
docker rm keycloak || true |
|||
|
|||
# Stop SeaweedFS services |
|||
make clean || true |
|||
|
|||
- name: Upload test logs on failure |
|||
if: failure() |
|||
uses: actions/upload-artifact@v4 |
|||
with: |
|||
name: s3-keycloak-test-logs |
|||
path: | |
|||
test/s3/iam/*.log |
|||
test/s3/iam/test-volume-data/ |
|||
retention-days: 3 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue