You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							161 lines
						
					
					
						
							4.8 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							161 lines
						
					
					
						
							4.8 KiB
						
					
					
				
								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
							 |