virus file test case #132
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Single Tenant Integration Test π | ||
|
Check failure on line 1 in .github/workflows/singleTenant_integration_test.yml
|
||
| on: | ||
| workflow_dispatch: | ||
| inputs: | ||
| cf_space: | ||
| description: 'Specify the Cloud Foundry space to run integration tests on' | ||
| required: true | ||
| branch_name: | ||
| description: 'Specify the branch to use for integration tests' | ||
| required: true | ||
| file_url: | ||
| description: 'URL of the file to download and verify' | ||
| required: true | ||
| default: 'http://www.eicar.org/download/eicar.com.txt' | ||
| type: string | ||
| download_path: | ||
| description: 'Local path/filename to save the downloaded file' | ||
| required: false | ||
| default: 'eicar.com.txt' | ||
| type: string | ||
| jobs: | ||
| integration-test: | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| tokenFlow: [namedUser] | ||
| testClass: | ||
| - IntegrationTest_SingleFacet_Virus | ||
| env: | ||
| FILE_URL: ${{ github.event.inputs.file_url || 'http://www.eicar.org/download/eicar.com.txt' }} | ||
| DOWNLOAD_PATH: ${{ github.event.inputs.download_path || 'eicar.com.txt' }} | ||
| steps: | ||
| - name: Checkout repository π | ||
| uses: actions/checkout@v6 | ||
| with: | ||
| ref: ${{ github.event.inputs.branch_name }} | ||
| - name: Set up Java 17 β | ||
| uses: actions/setup-java@v3 | ||
| with: | ||
| java-version: 17 | ||
| distribution: 'temurin' | ||
| cache: 'maven' | ||
| - name: Cache CF CLI π¦ | ||
| id: cache-cf-cli | ||
| uses: actions/cache@v4 | ||
| with: | ||
| path: /usr/bin/cf8 | ||
| key: cf-cli-v8-${{ runner.os }} | ||
| - name: Install Cloud Foundry CLI π§ | ||
| if: steps.cache-cf-cli.outputs.cache-hit != 'true' | ||
| run: | | ||
| echo "π Installing Cloud Foundry CLI..." | ||
| wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add - | ||
| echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list | ||
| sudo apt-get update | ||
| sudo apt-get install cf8-cli | ||
| - name: Install jq π¦ | ||
| run: | | ||
| if ! command -v jq &> /dev/null; then | ||
| sudo apt-get update && sudo apt-get install -y jq | ||
| fi | ||
| - name: Cache BTP CLI π¦ | ||
| id: cache-btp-cli | ||
| uses: actions/cache@v4 | ||
| with: | ||
| path: /usr/local/bin/btp | ||
| key: btp-cli-${{ runner.os }} | ||
| - name: Install BTP CLI π§ | ||
| if: steps.cache-btp-cli.outputs.cache-hit != 'true' | ||
| run: | | ||
| echo "π Installing SAP BTP CLI..." | ||
| curl -fsSL https://cli.btp.cloud.sap/btpcli-install.sh | bash | ||
| # The install script places the binary in ~/bin by default β make it system-wide | ||
| BTP_BIN=$(find "$HOME/bin" /usr/local/bin -maxdepth 1 -name 'btp' -type f 2>/dev/null | head -1) | ||
| if [ -z "$BTP_BIN" ]; then | ||
| echo "β btp binary not found after install script." | ||
| exit 1 | ||
| fi | ||
| if [ "$BTP_BIN" != "/usr/local/bin/btp" ]; then | ||
| sudo install -m 755 "$BTP_BIN" /usr/local/bin/btp | ||
| fi | ||
| btp --version | ||
| echo "β BTP CLI installed successfully!" | ||
| - name: Determine Cloud Foundry Space π | ||
| id: determine_space | ||
| run: | | ||
| if [ "${{ github.event.inputs.cf_space }}" == "developcap" ]; then | ||
| space="${{ secrets.CF_SPACE }}" | ||
| else | ||
| space="${{ github.event.inputs.cf_space }}" | ||
| fi | ||
| echo "π Space determined: $space" | ||
| echo "space=$space" >> $GITHUB_OUTPUT | ||
| - name: Login to Cloud Foundry π | ||
| run: | | ||
| echo "π Logging in to Cloud Foundry..." | ||
| echo "Space Name: ${{ steps.determine_space.outputs.space }}" | ||
| cf login -a ${{ secrets.CF_API }} \ | ||
| -u ${{ secrets.CF_USER }} \ | ||
| -p ${{ secrets.CF_PASSWORD }} \ | ||
| -o ${{ secrets.CF_ORG }} \ | ||
| -s ${{ steps.determine_space.outputs.space }} | ||
| echo "β Logged in successfully!" | ||
| - name: Fetch and Escape Client Details for single tenant π | ||
| id: fetch_credentials | ||
| run: | | ||
| echo "π Fetching client details for single tenant..." | ||
| service_instance_guid=$(cf service demoappjava-public-uaa --guid) | ||
| if [ -z "$service_instance_guid" ]; then | ||
| echo "β Error: Unable to retrieve service instance GUID"; exit 1; | ||
| fi | ||
| bindings_response=$(cf curl "/v3/service_credential_bindings?service_instance_guids=${service_instance_guid}") | ||
| binding_guid=$(echo "$bindings_response" | jq -r '.resources[0].guid') | ||
| if [ -z "$binding_guid" ]; then | ||
| echo "β Error: Unable to retrieve binding GUID"; exit 1; | ||
| fi | ||
| binding_details=$(cf curl "/v3/service_credential_bindings/${binding_guid}/details") | ||
| clientSecret=$(echo "$binding_details" | jq -r '.credentials.clientsecret') | ||
| if [ -z "$clientSecret" ] || [ "$clientSecret" == "null" ]; then | ||
| echo "β Error: clientSecret is not set or is null"; exit 1; | ||
| fi | ||
| escapedClientSecret=$(echo "$clientSecret" | sed 's/\$/\\$/g') | ||
| echo "::add-mask::$escapedClientSecret" | ||
| clientID=$(echo "$binding_details" | jq -r '.credentials.clientid') | ||
| if [ -z "$clientID" ] || [ "$clientID" == "null" ]; then | ||
| echo "β Error: clientID is not set or is null"; exit 1; | ||
| fi | ||
| echo "::add-mask::$clientID" | ||
| echo "CLIENT_SECRET=$escapedClientSecret" >> $GITHUB_OUTPUT | ||
| echo "CLIENT_ID=$clientID" >> $GITHUB_OUTPUT | ||
| echo "β Client details fetched successfully!" | ||
| - name: Download file from URL | ||
| run: | | ||
| curl -fSL "$FILE_URL" -o "$DOWNLOAD_PATH" | ||
| - name: Wait 5 seconds | ||
| run: sleep 5 | ||
| - name: Verify downloaded file | ||
| run: | | ||
| if [ -f "$DOWNLOAD_PATH" ]; then | ||
| FILE_NAME=$(basename "$DOWNLOAD_PATH") | ||
| FILE_SIZE=$(stat -c '%s' "$DOWNLOAD_PATH") | ||
| echo "File exists" | ||
| echo "Name : $FILE_NAME" | ||
| echo "Size : $FILE_SIZE bytes" | ||
| else | ||
| echo "File NOT found at path: $DOWNLOAD_PATH" | ||
| exit 1 | ||
| fi | ||
| - name: Run integration tests π― (${{ matrix.tokenFlow }} - ${{ matrix.testClass }}) | ||
| env: | ||
| CLIENT_SECRET: ${{ steps.fetch_credentials.outputs.CLIENT_SECRET }} | ||
| CLIENT_ID: ${{ steps.fetch_credentials.outputs.CLIENT_ID }} | ||
| _CAPAUTH_URL: ${{ secrets.CAPAUTH_URL }} | ||
| _CF_ORG: ${{ secrets.CF_ORG }} | ||
| _CF_USER: ${{ secrets.CF_USER }} | ||
| _CF_PASSWORD: ${{ secrets.CF_PASSWORD }} | ||
| _CF_API: ${{ secrets.CF_API }} | ||
| _NOSDMROLEUSERNAME: ${{ secrets.NOSDMROLEUSERNAME }} | ||
| _NOSDMROLEUSERPASSWORD: ${{ secrets.NOSDMROLEUSERPASSWORD }} | ||
| _CONSUMER_SUBACCOUNT_ID: ${{ secrets.CONSUMER_SUBACCOUNT_ID }} | ||
| _BTP_GLOBAL_ACCOUNT_SUBDOMAIN: ${{ secrets.BTP_GLOBAL_ACCOUNT_SUBDOMAIN }} | ||
| _CMIS_CLIENT_ID: ${{ secrets.CMIS_CLIENT_ID }} | ||
| _CMIS_CLIENT_SECRET: ${{ secrets.CMIS_CLIENT_SECRET }} | ||
| run: | | ||
| echo "π Starting integration tests for ${{ matrix.tokenFlow }} - ${{ matrix.testClass }}..." | ||
| set -e | ||
| PROPERTIES_FILE="sdm/src/test/resources/credentials.properties" | ||
| appUrl="${_CF_ORG}-${{ steps.determine_space.outputs.space }}-demoappjava-srv.cfapps.eu12.hana.ondemand.com" | ||
| authUrl="${_CAPAUTH_URL}" | ||
| clientID="${CLIENT_ID}" | ||
| clientSecret="${CLIENT_SECRET}" | ||
| username="${_CF_USER}" | ||
| password="${_CF_PASSWORD}" | ||
| noSDMRoleUsername="${_NOSDMROLEUSERNAME}" | ||
| noSDMRoleUserPassword="${_NOSDMROLEUSERPASSWORD}" | ||
| CF_ORG="${_CF_ORG}" | ||
| CF_API_ENDPOINT="${_CF_API}" | ||
| CF_SPACE="${{ steps.determine_space.outputs.space }}" | ||
| CF_USERNAME="${_CF_USER}" | ||
| CF_PASSWORD="${_CF_PASSWORD}" | ||
| CONSUMER_CF_API_ENDPOINT="${_CF_API}" | ||
| CONSUMER_CF_ORG="sdm-dev-consumer-eu12" | ||
| CONSUMER_CF_SPACE="ankush" | ||
| CONSUMER_CF_USERNAME="${_CF_USER}" | ||
| CONSUMER_CF_PASSWORD="${_CF_PASSWORD}" | ||
| CONSUMER_SUBACCOUNT_ID="${_CONSUMER_SUBACCOUNT_ID}" | ||
| BTP_GLOBAL_ACCOUNT_SUBDOMAIN="${_BTP_GLOBAL_ACCOUNT_SUBDOMAIN}" | ||
| SAAS_APP_NAME="bookshop-mt-sdmgoogleworkspacedev-akcap" | ||
| SAAS_APP_PLAN="" | ||
| ROLE_ASSIGNMENT_EMAILS="ankush.kumar.garg@sap.com" | ||
| ROLE_COLLECTION_NAME="ak-test" | ||
| APP_ROLE_FILTER="bookshop-mt-sdmgoogleworkspacedev-akcap" | ||
| BTP_CLI_URL="https://canary.cli.btp.int.sap" | ||
| APP_NAME="demoappjava-srv" | ||
| VAR_NAME="REPOSITORY_ID" | ||
| VAR_VALUE="SAMPLE-REPO" | ||
| CMIS_URL="https://api-sdm-di.cfapps.eu12.hana.ondemand.com/" | ||
| CMIS_REPOSITORY_ID="SAMPLE-REPO" | ||
| CMIS_TOKEN_URL="https://sdmgoogleworkspace.authentication.eu12.hana.ondemand.com" | ||
| CMIS_CLIENT_ID="${_CMIS_CLIENT_ID}" | ||
| CMIS_CLIENT_SECRET="${_CMIS_CLIENT_SECRET}" | ||
| CMIS_USERNAME="${_CF_USER}" | ||
| CMIS_PASSWORD="${_CF_PASSWORD}" | ||
| echo "::add-mask::$clientSecret" | ||
| echo "::add-mask::$clientID" | ||
| echo "::add-mask::$username" | ||
| echo "::add-mask::$password" | ||
| echo "::add-mask::$noSDMRoleUsername" | ||
| echo "::add-mask::$noSDMRoleUserPassword" | ||
| echo "::add-mask::$CF_ORG" | ||
| echo "::add-mask::$CF_USERNAME" | ||
| echo "::add-mask::$CF_PASSWORD" | ||
| echo "::add-mask::$CONSUMER_CF_API_ENDPOINT" | ||
| echo "::add-mask::$CONSUMER_CF_USERNAME" | ||
| echo "::add-mask::$CONSUMER_CF_PASSWORD" | ||
| echo "::add-mask::$CONSUMER_SUBACCOUNT_ID" | ||
| echo "::add-mask::$BTP_GLOBAL_ACCOUNT_SUBDOMAIN" | ||
| echo "::add-mask::$CMIS_CLIENT_ID" | ||
| echo "::add-mask::$CMIS_CLIENT_SECRET" | ||
| echo "::add-mask::$CMIS_USERNAME" | ||
| echo "::add-mask::$CMIS_PASSWORD" | ||
| if [ -z "$appUrl" ]; then echo "β Error: appUrl is not set"; exit 1; fi | ||
| if [ -z "$authUrl" ]; then echo "β Error: authUrl is not set"; exit 1; fi | ||
| if [ -z "$clientID" ]; then echo "β Error: clientID is not set"; exit 1; fi | ||
| if [ -z "$clientSecret" ]; then echo "β Error: clientSecret is not set"; exit 1; fi | ||
| if [ -z "$username" ]; then echo "β Error: username is not set"; exit 1; fi | ||
| if [ -z "$password" ]; then echo "β Error: password is not set"; exit 1; fi | ||
| if [ -z "$noSDMRoleUsername" ]; then echo "β Error: noSDMRoleUsername is not set"; exit 1; fi | ||
| if [ -z "$noSDMRoleUserPassword" ]; then echo "β Error: noSDMRoleUserPassword is not set"; exit 1; fi | ||
| if [ -z "$CF_ORG" ]; then echo "β Error: CF_ORG is not set"; exit 1; fi | ||
| if [ -z "$CF_USERNAME" ]; then echo "β Error: CF_USERNAME is not set"; exit 1; fi | ||
| if [ -z "$CF_PASSWORD" ]; then echo "β Error: CF_PASSWORD is not set"; exit 1; fi | ||
| if [ -z "$CONSUMER_CF_API_ENDPOINT" ]; then echo "β Error: CONSUMER_CF_API_ENDPOINT is not set"; exit 1; fi | ||
| if [ -z "$CONSUMER_CF_USERNAME" ]; then echo "β Error: CONSUMER_CF_USERNAME is not set"; exit 1; fi | ||
| if [ -z "$CONSUMER_CF_PASSWORD" ]; then echo "β Error: CONSUMER_CF_PASSWORD is not set"; exit 1; fi | ||
| if [ -z "$CONSUMER_SUBACCOUNT_ID" ]; then echo "β Error: CONSUMER_SUBACCOUNT_ID is not set"; exit 1; fi | ||
| if [ -z "$BTP_GLOBAL_ACCOUNT_SUBDOMAIN" ]; then echo "β Error: BTP_GLOBAL_ACCOUNT_SUBDOMAIN is not set"; exit 1; fi | ||
| if [ -z "$CMIS_URL" ]; then echo "β Error: CMIS_URL is not set"; exit 1; fi | ||
| if [ -z "$CMIS_REPOSITORY_ID" ]; then echo "β Error: CMIS_REPOSITORY_ID is not set"; exit 1; fi | ||
| if [ -z "$CMIS_TOKEN_URL" ]; then echo "β Error: CMIS_TOKEN_URL is not set"; exit 1; fi | ||
| if [ -z "$CMIS_CLIENT_ID" ]; then echo "β Error: CMIS_CLIENT_ID is not set"; exit 1; fi | ||
| if [ -z "$CMIS_CLIENT_SECRET" ]; then echo "β Error: CMIS_CLIENT_SECRET is not set"; exit 1; fi | ||
| if [ -z "$CMIS_USERNAME" ]; then echo "β Error: CMIS_USERNAME is not set"; exit 1; fi | ||
| if [ -z "$CMIS_PASSWORD" ]; then echo "β Error: CMIS_PASSWORD is not set"; exit 1; fi | ||
| cat > "$PROPERTIES_FILE" <<EOL | ||
| appUrl=$appUrl | ||
| authUrl=$authUrl | ||
| clientID=$clientID | ||
| clientSecret=$clientSecret | ||
| username=$username | ||
| password=$password | ||
| noSDMRoleUsername=$noSDMRoleUsername | ||
| noSDMRoleUserPassword=$noSDMRoleUserPassword | ||
| CF_API_ENDPOINT=$CF_API_ENDPOINT | ||
| CF_ORG=$CF_ORG | ||
| CF_SPACE=$CF_SPACE | ||
| CF_USERNAME=$CF_USERNAME | ||
| CF_PASSWORD=$CF_PASSWORD | ||
| APP_NAME=$APP_NAME | ||
| VAR_NAME=$VAR_NAME | ||
| VAR_VALUE=$VAR_VALUE | ||
| CONSUMER_CF_API_ENDPOINT=$CONSUMER_CF_API_ENDPOINT | ||
| CONSUMER_CF_ORG=$CONSUMER_CF_ORG | ||
| CONSUMER_CF_SPACE=$CONSUMER_CF_SPACE | ||
| CONSUMER_CF_USERNAME=$CONSUMER_CF_USERNAME | ||
| CONSUMER_CF_PASSWORD=$CONSUMER_CF_PASSWORD | ||
| CONSUMER_SUBACCOUNT_ID=$CONSUMER_SUBACCOUNT_ID | ||
| SAAS_APP_NAME=$SAAS_APP_NAME | ||
| SAAS_APP_PLAN=$SAAS_APP_PLAN | ||
| ROLE_ASSIGNMENT_EMAILS=$ROLE_ASSIGNMENT_EMAILS | ||
| ROLE_COLLECTION_NAME=$ROLE_COLLECTION_NAME | ||
| APP_ROLE_FILTER=$APP_ROLE_FILTER | ||
| BTP_CLI_URL=$BTP_CLI_URL | ||
| BTP_GLOBAL_ACCOUNT_SUBDOMAIN=$BTP_GLOBAL_ACCOUNT_SUBDOMAIN | ||
| CMIS_URL=$CMIS_URL | ||
| CMIS_REPOSITORY_ID=$CMIS_REPOSITORY_ID | ||
| CMIS_TOKEN_URL=$CMIS_TOKEN_URL | ||
| CMIS_CLIENT_ID=$CMIS_CLIENT_ID | ||
| CMIS_CLIENT_SECRET=$CMIS_CLIENT_SECRET | ||
| CMIS_USERNAME=$CMIS_USERNAME | ||
| CMIS_PASSWORD=$CMIS_PASSWORD | ||
| EOL | ||
| echo "π― Running Maven integration tests for ${{ matrix.tokenFlow }} - ${{ matrix.testClass }}..." | ||
| mvn clean verify -P integration-tests -DtokenFlow=${{ matrix.tokenFlow }} -DtenancyModel=single -DskipUnitTests -Dfailsafe.includes="**/${{ matrix.testClass }}.java" -Deicar.file.path=$(pwd)/$DOWNLOAD_PATH | ||
| # change-repository-id: | ||
| # runs-on: ubuntu-latest | ||
| # needs: integration-test | ||
| # if: always() | ||
| # env: | ||
| # FILE_URL: ${{ github.event.inputs.file_url || 'http://www.eicar.org/download/eicar.com.txt' }} | ||
| # DOWNLOAD_PATH: ${{ github.event.inputs.download_path || 'eicar.com.txt' }} | ||
| # steps: | ||
| # - name: Checkout repository π | ||
| # uses: actions/checkout@v6 | ||
| # with: | ||
| # ref: ${{ github.event.inputs.branch_name }} | ||
| # - name: Set up Java 17 β | ||
| # uses: actions/setup-java@v3 | ||
| # with: | ||
| # java-version: 17 | ||
| # distribution: 'temurin' | ||
| # cache: 'maven' | ||
| # - name: Cache CF CLI π¦ | ||
| # id: cache-cf-cli | ||
| # uses: actions/cache@v4 | ||
| # with: | ||
| # path: /usr/bin/cf8 | ||
| # key: cf-cli-v8-${{ runner.os }} | ||
| # - name: Install Cloud Foundry CLI π§ | ||
| # if: steps.cache-cf-cli.outputs.cache-hit != 'true' | ||
| # run: | | ||
| # echo "π Installing Cloud Foundry CLI..." | ||
| # wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add - | ||
| # echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list | ||
| # sudo apt-get update | ||
| # sudo apt-get install cf8-cli | ||
| # - name: Install jq π¦ | ||
| # run: | | ||
| # if ! command -v jq &> /dev/null; then | ||
| # sudo apt-get update && sudo apt-get install -y jq | ||
| # fi | ||
| # - name: Determine Cloud Foundry Space π | ||
| # id: determine_space | ||
| # run: | | ||
| # if [ "${{ github.event.inputs.cf_space }}" == "developcap" ]; then | ||
| # space="${{ secrets.CF_SPACE }}" | ||
| # else | ||
| # space="${{ github.event.inputs.cf_space }}" | ||
| # fi | ||
| # echo "π Space determined: $space" | ||
| # echo "space=$space" >> $GITHUB_OUTPUT | ||
| # - name: Login to Cloud Foundry π | ||
| # run: | | ||
| # echo "π Logging in to Cloud Foundry..." | ||
| # cf login -a ${{ secrets.CF_API }} \ | ||
| # -u ${{ secrets.CF_USER }} \ | ||
| # -p ${{ secrets.CF_PASSWORD }} \ | ||
| # -o ${{ secrets.CF_ORG }} \ | ||
| # -s ${{ steps.determine_space.outputs.space }} | ||
| # echo "β Logged in successfully!" | ||
| # - name: Fetch and Escape Client Details for single tenant π | ||
| # id: fetch_credentials | ||
| # run: | | ||
| # echo "π Fetching client details for single tenant..." | ||
| # service_instance_guid=$(cf service demoappjava-public-uaa --guid) | ||
| # if [ -z "$service_instance_guid" ]; then | ||
| # echo "β Error: Unable to retrieve service instance GUID"; exit 1; | ||
| # fi | ||
| # bindings_response=$(cf curl "/v3/service_credential_bindings?service_instance_guids=${service_instance_guid}") | ||
| # binding_guid=$(echo "$bindings_response" | jq -r '.resources[0].guid') | ||
| # if [ -z "$binding_guid" ]; then | ||
| # echo "β Error: Unable to retrieve binding GUID"; exit 1; | ||
| # fi | ||
| # binding_details=$(cf curl "/v3/service_credential_bindings/${binding_guid}/details") | ||
| # clientSecret=$(echo "$binding_details" | jq -r '.credentials.clientsecret') | ||
| # if [ -z "$clientSecret" ] || [ "$clientSecret" == "null" ]; then | ||
| # echo "β Error: clientSecret is not set or is null"; exit 1; | ||
| # fi | ||
| # escapedClientSecret=$(echo "$clientSecret" | sed 's/\$/\\$/g') | ||
| # echo "::add-mask::$escapedClientSecret" | ||
| # clientID=$(echo "$binding_details" | jq -r '.credentials.clientid') | ||
| # if [ -z "$clientID" ] || [ "$clientID" == "null" ]; then | ||
| # echo "β Error: clientID is not set or is null"; exit 1; | ||
| # fi | ||
| # echo "::add-mask::$clientID" | ||
| # echo "CLIENT_SECRET=$escapedClientSecret" >> $GITHUB_OUTPUT | ||
| # echo "CLIENT_ID=$clientID" >> $GITHUB_OUTPUT | ||
| # echo "β Client details fetched successfully!" | ||
| # - name: Run Change Repository ID Integration Test π― | ||
| # env: | ||
| # CLIENT_SECRET: ${{ steps.fetch_credentials.outputs.CLIENT_SECRET }} | ||
| # CLIENT_ID: ${{ steps.fetch_credentials.outputs.CLIENT_ID }} | ||
| # _CAPAUTH_URL: ${{ secrets.CAPAUTH_URL }} | ||
| # _CF_ORG: ${{ secrets.CF_ORG }} | ||
| # _CF_USER: ${{ secrets.CF_USER }} | ||
| # _CF_PASSWORD: ${{ secrets.CF_PASSWORD }} | ||
| # _CF_API: ${{ secrets.CF_API }} | ||
| # _NOSDMROLEUSERNAME: ${{ secrets.NOSDMROLEUSERNAME }} | ||
| # _NOSDMROLEUSERPASSWORD: ${{ secrets.NOSDMROLEUSERPASSWORD }} | ||
| # _CONSUMER_SUBACCOUNT_ID: ${{ secrets.CONSUMER_SUBACCOUNT_ID }} | ||
| # _BTP_GLOBAL_ACCOUNT_SUBDOMAIN: ${{ secrets.BTP_GLOBAL_ACCOUNT_SUBDOMAIN }} | ||
| # _CMIS_CLIENT_ID: ${{ secrets.CMIS_CLIENT_ID }} | ||
| # _CMIS_CLIENT_SECRET: ${{ secrets.CMIS_CLIENT_SECRET }} | ||
| # run: | | ||
| # echo "π Starting Change Repository ID integration test..." | ||
| # set -e | ||
| # PROPERTIES_FILE="sdm/src/test/resources/credentials.properties" | ||
| # appUrl="${_CF_ORG}-${{ steps.determine_space.outputs.space }}-demoappjava-srv.cfapps.eu12.hana.ondemand.com" | ||
| # authUrl="${_CAPAUTH_URL}" | ||
| # clientID="${CLIENT_ID}" | ||
| # clientSecret="${CLIENT_SECRET}" | ||
| # username="${_CF_USER}" | ||
| # password="${_CF_PASSWORD}" | ||
| # noSDMRoleUsername="${_NOSDMROLEUSERNAME}" | ||
| # noSDMRoleUserPassword="${_NOSDMROLEUSERPASSWORD}" | ||
| # CF_ORG="${_CF_ORG}" | ||
| # CF_API_ENDPOINT="${_CF_API}" | ||
| # CF_SPACE="${{ steps.determine_space.outputs.space }}" | ||
| # CF_USERNAME="${_CF_USER}" | ||
| # CF_PASSWORD="${_CF_PASSWORD}" | ||
| # CONSUMER_CF_API_ENDPOINT="${_CF_API}" | ||
| # CONSUMER_CF_ORG="sdm-dev-consumer-eu12" | ||
| # CONSUMER_CF_SPACE="ankush" | ||
| # CONSUMER_CF_USERNAME="${_CF_USER}" | ||
| # CONSUMER_CF_PASSWORD="${_CF_PASSWORD}" | ||
| # CONSUMER_SUBACCOUNT_ID="${_CONSUMER_SUBACCOUNT_ID}" | ||
| # BTP_GLOBAL_ACCOUNT_SUBDOMAIN="${_BTP_GLOBAL_ACCOUNT_SUBDOMAIN}" | ||
| # SAAS_APP_NAME="bookshop-mt-sdmgoogleworkspacedev-akcap" | ||
| # SAAS_APP_PLAN="" | ||
| # ROLE_ASSIGNMENT_EMAILS="ankush.kumar.garg@sap.com" | ||
| # ROLE_COLLECTION_NAME="ak-test" | ||
| # APP_ROLE_FILTER="bookshop-mt-sdmgoogleworkspacedev-akcap" | ||
| # BTP_CLI_URL="https://canary.cli.btp.int.sap" | ||
| # APP_NAME="demoappjava-srv" | ||
| # VAR_NAME="REPOSITORY_ID" | ||
| # VAR_VALUE="SAMPLE-REPO" | ||
| # CMIS_URL="https://api-sdm-di.cfapps.eu12.hana.ondemand.com/" | ||
| # CMIS_REPOSITORY_ID="SAMPLE-REPO" | ||
| # CMIS_TOKEN_URL="https://sdmgoogleworkspace.authentication.eu12.hana.ondemand.com" | ||
| # CMIS_CLIENT_ID="${_CMIS_CLIENT_ID}" | ||
| # CMIS_CLIENT_SECRET="${_CMIS_CLIENT_SECRET}" | ||
| # CMIS_USERNAME="${_CF_USER}" | ||
| # CMIS_PASSWORD="${_CF_PASSWORD}" | ||
| # echo "::add-mask::$clientSecret" | ||
| # echo "::add-mask::$clientID" | ||
| # echo "::add-mask::$username" | ||
| # echo "::add-mask::$password" | ||
| # echo "::add-mask::$noSDMRoleUsername" | ||
| # echo "::add-mask::$noSDMRoleUserPassword" | ||
| # echo "::add-mask::$CF_ORG" | ||
| # echo "::add-mask::$CF_USERNAME" | ||
| # echo "::add-mask::$CF_PASSWORD" | ||
| # echo "::add-mask::$CONSUMER_CF_API_ENDPOINT" | ||
| # echo "::add-mask::$CONSUMER_CF_USERNAME" | ||
| # echo "::add-mask::$CONSUMER_CF_PASSWORD" | ||
| # echo "::add-mask::$CONSUMER_SUBACCOUNT_ID" | ||
| # echo "::add-mask::$BTP_GLOBAL_ACCOUNT_SUBDOMAIN" | ||
| # echo "::add-mask::$CMIS_CLIENT_ID" | ||
| # echo "::add-mask::$CMIS_CLIENT_SECRET" | ||
| # echo "::add-mask::$CMIS_USERNAME" | ||
| # echo "::add-mask::$CMIS_PASSWORD" | ||
| # cat > "$PROPERTIES_FILE" <<EOL | ||
| # appUrl=$appUrl | ||
| # authUrl=$authUrl | ||
| # clientID=$clientID | ||
| # clientSecret=$clientSecret | ||
| # username=$username | ||
| # password=$password | ||
| # noSDMRoleUsername=$noSDMRoleUsername | ||
| # noSDMRoleUserPassword=$noSDMRoleUserPassword | ||
| # CF_API_ENDPOINT=$CF_API_ENDPOINT | ||
| # CF_ORG=$CF_ORG | ||
| # CF_SPACE=$CF_SPACE | ||
| # CF_USERNAME=$CF_USERNAME | ||
| # CF_PASSWORD=$CF_PASSWORD | ||
| # APP_NAME=$APP_NAME | ||
| # VAR_NAME=$VAR_NAME | ||
| # VAR_VALUE=$VAR_VALUE | ||
| # CONSUMER_CF_API_ENDPOINT=$CONSUMER_CF_API_ENDPOINT | ||
| # CONSUMER_CF_ORG=$CONSUMER_CF_ORG | ||
| # CONSUMER_CF_SPACE=$CONSUMER_CF_SPACE | ||
| # CONSUMER_CF_USERNAME=$CONSUMER_CF_USERNAME | ||
| # CONSUMER_CF_PASSWORD=$CONSUMER_CF_PASSWORD | ||
| # CONSUMER_SUBACCOUNT_ID=$CONSUMER_SUBACCOUNT_ID | ||
| # SAAS_APP_NAME=$SAAS_APP_NAME | ||
| # SAAS_APP_PLAN=$SAAS_APP_PLAN | ||
| # ROLE_ASSIGNMENT_EMAILS=$ROLE_ASSIGNMENT_EMAILS | ||
| # ROLE_COLLECTION_NAME=$ROLE_COLLECTION_NAME | ||
| # APP_ROLE_FILTER=$APP_ROLE_FILTER | ||
| # BTP_CLI_URL=$BTP_CLI_URL | ||
| # BTP_GLOBAL_ACCOUNT_SUBDOMAIN=$BTP_GLOBAL_ACCOUNT_SUBDOMAIN | ||
| # CMIS_URL=$CMIS_URL | ||
| # CMIS_REPOSITORY_ID=$CMIS_REPOSITORY_ID | ||
| # CMIS_TOKEN_URL=$CMIS_TOKEN_URL | ||
| # CMIS_CLIENT_ID=$CMIS_CLIENT_ID | ||
| # CMIS_CLIENT_SECRET=$CMIS_CLIENT_SECRET | ||
| # CMIS_USERNAME=$CMIS_USERNAME | ||
| # CMIS_PASSWORD=$CMIS_PASSWORD | ||
| # EOL | ||
| # echo "π― Running Maven integration tests for IntegrationTest_ChangeRepositoryId..." | ||
| # mvn clean verify -P integration-tests -DtokenFlow=namedUser -DtenancyModel=single -DskipUnitTests -Dfailsafe.includes="**/IntegrationTest_ChangeRepositoryId.java" | ||
| # integration-test-2: | ||
| # runs-on: ubuntu-latest | ||
| # needs: change-repository-id | ||
| # if: always() && needs.change-repository-id.result == 'success' | ||
| # strategy: | ||
| # fail-fast: false | ||
| # matrix: | ||
| # tokenFlow: [namedUser,technicalUser] | ||
| # testClass: | ||
| # - IntegrationTest_MultipleFacet | ||
| # env: | ||
| # FILE_URL: ${{ github.event.inputs.file_url || 'http://www.eicar.org/download/eicar.com.txt' }} | ||
| # DOWNLOAD_PATH: ${{ github.event.inputs.download_path || 'eicar.com.txt' }} | ||
| # steps: | ||
| # - name: Checkout repository π | ||
| # uses: actions/checkout@v6 | ||
| # with: | ||
| # ref: ${{ github.event.inputs.branch_name }} | ||
| # - name: Set up Java 17 β | ||
| # uses: actions/setup-java@v3 | ||
| # with: | ||
| # java-version: 17 | ||
| # distribution: 'temurin' | ||
| # cache: 'maven' | ||
| # - name: Cache CF CLI π¦ | ||
| # id: cache-cf-cli | ||
| # uses: actions/cache@v4 | ||
| # with: | ||
| # path: /usr/bin/cf8 | ||
| # key: cf-cli-v8-${{ runner.os }} | ||
| # - name: Install Cloud Foundry CLI π§ | ||
| # if: steps.cache-cf-cli.outputs.cache-hit != 'true' | ||
| # run: | | ||
| # echo "π Installing Cloud Foundry CLI..." | ||
| # wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add - | ||
| # echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list | ||
| # sudo apt-get update | ||
| # sudo apt-get install cf8-cli | ||
| # - name: Install jq π¦ | ||
| # run: | | ||
| # if ! command -v jq &> /dev/null; then | ||
| # sudo apt-get update && sudo apt-get install -y jq | ||
| # fi | ||
| # - name: Cache BTP CLI π¦ | ||
| # id: cache-btp-cli | ||
| # uses: actions/cache@v4 | ||
| # with: | ||
| # path: /usr/local/bin/btp | ||
| # key: btp-cli-${{ runner.os }} | ||
| # - name: Install BTP CLI π§ | ||
| # if: steps.cache-btp-cli.outputs.cache-hit != 'true' | ||
| # run: | | ||
| # echo "π Installing SAP BTP CLI..." | ||
| # curl -fsSL https://cli.btp.cloud.sap/btpcli-install.sh | bash | ||
| # # The install script places the binary in ~/bin by default β make it system-wide | ||
| # BTP_BIN=$(find "$HOME/bin" /usr/local/bin -maxdepth 1 -name 'btp' -type f 2>/dev/null | head -1) | ||
| # if [ -z "$BTP_BIN" ]; then | ||
| # echo "β btp binary not found after install script." | ||
| # exit 1 | ||
| # fi | ||
| # if [ "$BTP_BIN" != "/usr/local/bin/btp" ]; then | ||
| # sudo install -m 755 "$BTP_BIN" /usr/local/bin/btp | ||
| # fi | ||
| # btp --version | ||
| # echo "β BTP CLI installed successfully!" | ||
| # - name: Determine Cloud Foundry Space π | ||
| # id: determine_space | ||
| # run: | | ||
| # if [ "${{ github.event.inputs.cf_space }}" == "developcap" ]; then | ||
| # space="${{ secrets.CF_SPACE }}" | ||
| # else | ||
| # space="${{ github.event.inputs.cf_space }}" | ||
| # fi | ||
| # echo "π Space determined: $space" | ||
| # echo "space=$space" >> $GITHUB_OUTPUT | ||
| # - name: Login to Cloud Foundry π | ||
| # run: | | ||
| # echo "π Logging in to Cloud Foundry..." | ||
| # echo "Space Name: ${{ steps.determine_space.outputs.space }}" | ||
| # cf login -a ${{ secrets.CF_API }} \ | ||
| # -u ${{ secrets.CF_USER }} \ | ||
| # -p ${{ secrets.CF_PASSWORD }} \ | ||
| # -o ${{ secrets.CF_ORG }} \ | ||
| # -s ${{ steps.determine_space.outputs.space }} | ||
| # echo "β Logged in successfully!" | ||
| # - name: Fetch and Escape Client Details for single tenant π | ||
| # id: fetch_credentials | ||
| # run: | | ||
| # echo "π Fetching client details for single tenant..." | ||
| # service_instance_guid=$(cf service demoappjava-public-uaa --guid) | ||
| # if [ -z "$service_instance_guid" ]; then | ||
| # echo "β Error: Unable to retrieve service instance GUID"; exit 1; | ||
| # fi | ||
| # bindings_response=$(cf curl "/v3/service_credential_bindings?service_instance_guids=${service_instance_guid}") | ||
| # binding_guid=$(echo "$bindings_response" | jq -r '.resources[0].guid') | ||
| # if [ -z "$binding_guid" ]; then | ||
| # echo "β Error: Unable to retrieve binding GUID"; exit 1; | ||
| # fi | ||
| # binding_details=$(cf curl "/v3/service_credential_bindings/${binding_guid}/details") | ||
| # clientSecret=$(echo "$binding_details" | jq -r '.credentials.clientsecret') | ||
| # if [ -z "$clientSecret" ] || [ "$clientSecret" == "null" ]; then | ||
| # echo "β Error: clientSecret is not set or is null"; exit 1; | ||
| # fi | ||
| # escapedClientSecret=$(echo "$clientSecret" | sed 's/\$/\\$/g') | ||
| # echo "::add-mask::$escapedClientSecret" | ||
| # clientID=$(echo "$binding_details" | jq -r '.credentials.clientid') | ||
| # if [ -z "$clientID" ] || [ "$clientID" == "null" ]; then | ||
| # echo "β Error: clientID is not set or is null"; exit 1; | ||
| # fi | ||
| # echo "::add-mask::$clientID" | ||
| # echo "CLIENT_SECRET=$escapedClientSecret" >> $GITHUB_OUTPUT | ||
| # echo "CLIENT_ID=$clientID" >> $GITHUB_OUTPUT | ||
| # echo "β Client details fetched successfully!" | ||
| # - name: Download file from URL | ||
| # run: | | ||
| # curl -fSL "$FILE_URL" -o "$DOWNLOAD_PATH" | ||
| # - name: Wait 5 seconds | ||
| # run: sleep 5 | ||
| # - name: Verify downloaded file | ||
| # run: | | ||
| # if [ -f "$DOWNLOAD_PATH" ]; then | ||
| # FILE_NAME=$(basename "$DOWNLOAD_PATH") | ||
| # FILE_SIZE=$(stat -c '%s' "$DOWNLOAD_PATH") | ||
| # echo "File exists" | ||
| # echo "Name : $FILE_NAME" | ||
| # echo "Size : $FILE_SIZE bytes" | ||
| # else | ||
| # echo "File NOT found at path: $DOWNLOAD_PATH" | ||
| # exit 1 | ||
| # fi | ||
| # - name: Run integration tests π― (${{ matrix.tokenFlow }} - ${{ matrix.testClass }}) | ||
| # env: | ||
| # CLIENT_SECRET: ${{ steps.fetch_credentials.outputs.CLIENT_SECRET }} | ||
| # CLIENT_ID: ${{ steps.fetch_credentials.outputs.CLIENT_ID }} | ||
| # _CAPAUTH_URL: ${{ secrets.CAPAUTH_URL }} | ||
| # _CF_ORG: ${{ secrets.CF_ORG }} | ||
| # _CF_USER: ${{ secrets.CF_USER }} | ||
| # _CF_PASSWORD: ${{ secrets.CF_PASSWORD }} | ||
| # _CF_API: ${{ secrets.CF_API }} | ||
| # _NOSDMROLEUSERNAME: ${{ secrets.NOSDMROLEUSERNAME }} | ||
| # _NOSDMROLEUSERPASSWORD: ${{ secrets.NOSDMROLEUSERPASSWORD }} | ||
| # _CONSUMER_SUBACCOUNT_ID: ${{ secrets.CONSUMER_SUBACCOUNT_ID }} | ||
| # _BTP_GLOBAL_ACCOUNT_SUBDOMAIN: ${{ secrets.BTP_GLOBAL_ACCOUNT_SUBDOMAIN }} | ||
| # _CMIS_CLIENT_ID: ${{ secrets.CMIS_CLIENT_ID }} | ||
| # _CMIS_CLIENT_SECRET: ${{ secrets.CMIS_CLIENT_SECRET }} | ||
| # run: | | ||
| # echo "π Starting integration tests for ${{ matrix.tokenFlow }} - ${{ matrix.testClass }}..." | ||
| # set -e | ||
| # PROPERTIES_FILE="sdm/src/test/resources/credentials.properties" | ||
| # appUrl="${_CF_ORG}-${{ steps.determine_space.outputs.space }}-demoappjava-srv.cfapps.eu12.hana.ondemand.com" | ||
| # authUrl="${_CAPAUTH_URL}" | ||
| # clientID="${CLIENT_ID}" | ||
| # clientSecret="${CLIENT_SECRET}" | ||
| # username="${_CF_USER}" | ||
| # password="${_CF_PASSWORD}" | ||
| # noSDMRoleUsername="${_NOSDMROLEUSERNAME}" | ||
| # noSDMRoleUserPassword="${_NOSDMROLEUSERPASSWORD}" | ||
| # CF_ORG="${_CF_ORG}" | ||
| # CF_API_ENDPOINT="${_CF_API}" | ||
| # CF_SPACE="${{ steps.determine_space.outputs.space }}" | ||
| # CF_USERNAME="${_CF_USER}" | ||
| # CF_PASSWORD="${_CF_PASSWORD}" | ||
| # CONSUMER_CF_API_ENDPOINT="${_CF_API}" | ||
| # CONSUMER_CF_ORG="sdm-dev-consumer-eu12" | ||
| # CONSUMER_CF_SPACE="ankush" | ||
| # CONSUMER_CF_USERNAME="${_CF_USER}" | ||
| # CONSUMER_CF_PASSWORD="${_CF_PASSWORD}" | ||
| # CONSUMER_SUBACCOUNT_ID="${_CONSUMER_SUBACCOUNT_ID}" | ||
| # BTP_GLOBAL_ACCOUNT_SUBDOMAIN="${_BTP_GLOBAL_ACCOUNT_SUBDOMAIN}" | ||
| # SAAS_APP_NAME="bookshop-mt-sdmgoogleworkspacedev-akcap" | ||
| # SAAS_APP_PLAN="" | ||
| # ROLE_ASSIGNMENT_EMAILS="ankush.kumar.garg@sap.com" | ||
| # ROLE_COLLECTION_NAME="ak-test" | ||
| # APP_ROLE_FILTER="bookshop-mt-sdmgoogleworkspacedev-akcap" | ||
| # BTP_CLI_URL="https://canary.cli.btp.int.sap" | ||
| # APP_NAME="demoappjava-srv" | ||
| # VAR_NAME="REPOSITORY_ID" | ||
| # VAR_VALUE="SAMPLE-REPO" | ||
| # CMIS_URL="https://api-sdm-di.cfapps.eu12.hana.ondemand.com/" | ||
| # CMIS_REPOSITORY_ID="SAMPLE-REPO" | ||
| # CMIS_TOKEN_URL="https://sdmgoogleworkspace.authentication.eu12.hana.ondemand.com" | ||
| # CMIS_CLIENT_ID="${_CMIS_CLIENT_ID}" | ||
| # CMIS_CLIENT_SECRET="${_CMIS_CLIENT_SECRET}" | ||
| # CMIS_USERNAME="${_CF_USER}" | ||
| # CMIS_PASSWORD="${_CF_PASSWORD}" | ||
| # echo "::add-mask::$clientSecret" | ||
| # echo "::add-mask::$clientID" | ||
| # echo "::add-mask::$username" | ||
| # echo "::add-mask::$password" | ||
| # echo "::add-mask::$noSDMRoleUsername" | ||
| # echo "::add-mask::$noSDMRoleUserPassword" | ||
| # echo "::add-mask::$CF_ORG" | ||
| # echo "::add-mask::$CF_USERNAME" | ||
| # echo "::add-mask::$CF_PASSWORD" | ||
| # echo "::add-mask::$CONSUMER_CF_API_ENDPOINT" | ||
| # echo "::add-mask::$CONSUMER_CF_USERNAME" | ||
| # echo "::add-mask::$CONSUMER_CF_PASSWORD" | ||
| # echo "::add-mask::$CONSUMER_SUBACCOUNT_ID" | ||
| # echo "::add-mask::$BTP_GLOBAL_ACCOUNT_SUBDOMAIN" | ||
| # echo "::add-mask::$CMIS_CLIENT_ID" | ||
| # echo "::add-mask::$CMIS_CLIENT_SECRET" | ||
| # echo "::add-mask::$CMIS_USERNAME" | ||
| # echo "::add-mask::$CMIS_PASSWORD" | ||
| # if [ -z "$appUrl" ]; then echo "β Error: appUrl is not set"; exit 1; fi | ||
| # if [ -z "$authUrl" ]; then echo "β Error: authUrl is not set"; exit 1; fi | ||
| # if [ -z "$clientID" ]; then echo "β Error: clientID is not set"; exit 1; fi | ||
| # if [ -z "$clientSecret" ]; then echo "β Error: clientSecret is not set"; exit 1; fi | ||
| # if [ -z "$username" ]; then echo "β Error: username is not set"; exit 1; fi | ||
| # if [ -z "$password" ]; then echo "β Error: password is not set"; exit 1; fi | ||
| # if [ -z "$noSDMRoleUsername" ]; then echo "β Error: noSDMRoleUsername is not set"; exit 1; fi | ||
| # if [ -z "$noSDMRoleUserPassword" ]; then echo "β Error: noSDMRoleUserPassword is not set"; exit 1; fi | ||
| # if [ -z "$CF_ORG" ]; then echo "β Error: CF_ORG is not set"; exit 1; fi | ||
| # if [ -z "$CF_USERNAME" ]; then echo "β Error: CF_USERNAME is not set"; exit 1; fi | ||
| # if [ -z "$CF_PASSWORD" ]; then echo "β Error: CF_PASSWORD is not set"; exit 1; fi | ||
| # if [ -z "$CONSUMER_CF_API_ENDPOINT" ]; then echo "β Error: CONSUMER_CF_API_ENDPOINT is not set"; exit 1; fi | ||
| # if [ -z "$CONSUMER_CF_USERNAME" ]; then echo "β Error: CONSUMER_CF_USERNAME is not set"; exit 1; fi | ||
| # if [ -z "$CONSUMER_CF_PASSWORD" ]; then echo "β Error: CONSUMER_CF_PASSWORD is not set"; exit 1; fi | ||
| # if [ -z "$CONSUMER_SUBACCOUNT_ID" ]; then echo "β Error: CONSUMER_SUBACCOUNT_ID is not set"; exit 1; fi | ||
| # if [ -z "$BTP_GLOBAL_ACCOUNT_SUBDOMAIN" ]; then echo "β Error: BTP_GLOBAL_ACCOUNT_SUBDOMAIN is not set"; exit 1; fi | ||
| # if [ -z "$CMIS_URL" ]; then echo "β Error: CMIS_URL is not set"; exit 1; fi | ||
| # if [ -z "$CMIS_REPOSITORY_ID" ]; then echo "β Error: CMIS_REPOSITORY_ID is not set"; exit 1; fi | ||
| # if [ -z "$CMIS_TOKEN_URL" ]; then echo "β Error: CMIS_TOKEN_URL is not set"; exit 1; fi | ||
| # if [ -z "$CMIS_CLIENT_ID" ]; then echo "β Error: CMIS_CLIENT_ID is not set"; exit 1; fi | ||
| # if [ -z "$CMIS_CLIENT_SECRET" ]; then echo "β Error: CMIS_CLIENT_SECRET is not set"; exit 1; fi | ||
| # if [ -z "$CMIS_USERNAME" ]; then echo "β Error: CMIS_USERNAME is not set"; exit 1; fi | ||
| # if [ -z "$CMIS_PASSWORD" ]; then echo "β Error: CMIS_PASSWORD is not set"; exit 1; fi | ||
| # cat > "$PROPERTIES_FILE" <<EOL | ||
| # appUrl=$appUrl | ||
| # authUrl=$authUrl | ||
| # clientID=$clientID | ||
| # clientSecret=$clientSecret | ||
| # username=$username | ||
| # password=$password | ||
| # noSDMRoleUsername=$noSDMRoleUsername | ||
| # noSDMRoleUserPassword=$noSDMRoleUserPassword | ||
| # CF_API_ENDPOINT=$CF_API_ENDPOINT | ||
| # CF_ORG=$CF_ORG | ||
| # CF_SPACE=$CF_SPACE | ||
| # CF_USERNAME=$CF_USERNAME | ||
| # CF_PASSWORD=$CF_PASSWORD | ||
| # APP_NAME=$APP_NAME | ||
| # VAR_NAME=$VAR_NAME | ||
| # VAR_VALUE=$VAR_VALUE | ||
| # CONSUMER_CF_API_ENDPOINT=$CONSUMER_CF_API_ENDPOINT | ||
| # CONSUMER_CF_ORG=$CONSUMER_CF_ORG | ||
| # CONSUMER_CF_SPACE=$CONSUMER_CF_SPACE | ||
| # CONSUMER_CF_USERNAME=$CONSUMER_CF_USERNAME | ||
| # CONSUMER_CF_PASSWORD=$CONSUMER_CF_PASSWORD | ||
| # CONSUMER_SUBACCOUNT_ID=$CONSUMER_SUBACCOUNT_ID | ||
| # SAAS_APP_NAME=$SAAS_APP_NAME | ||
| # SAAS_APP_PLAN=$SAAS_APP_PLAN | ||
| # ROLE_ASSIGNMENT_EMAILS=$ROLE_ASSIGNMENT_EMAILS | ||
| # ROLE_COLLECTION_NAME=$ROLE_COLLECTION_NAME | ||
| # APP_ROLE_FILTER=$APP_ROLE_FILTER | ||
| # BTP_CLI_URL=$BTP_CLI_URL | ||
| # BTP_GLOBAL_ACCOUNT_SUBDOMAIN=$BTP_GLOBAL_ACCOUNT_SUBDOMAIN | ||
| # CMIS_URL=$CMIS_URL | ||
| # CMIS_REPOSITORY_ID=$CMIS_REPOSITORY_ID | ||
| # CMIS_TOKEN_URL=$CMIS_TOKEN_URL | ||
| # CMIS_CLIENT_ID=$CMIS_CLIENT_ID | ||
| # CMIS_CLIENT_SECRET=$CMIS_CLIENT_SECRET | ||
| # CMIS_USERNAME=$CMIS_USERNAME | ||
| # CMIS_PASSWORD=$CMIS_PASSWORD | ||
| # EOL | ||
| # echo "π― Running Maven integration tests for ${{ matrix.tokenFlow }} - ${{ matrix.testClass }}..." | ||
| # mvn clean verify -P integration-tests -DtokenFlow=${{ matrix.tokenFlow }} -DtenancyModel=single -DskipUnitTests -Dfailsafe.includes="**/${{ matrix.testClass }}.java" -Deicar.file.path=$(pwd)/$DOWNLOAD_PATH | ||
| # subscription-test: | ||
| runs-on: ubuntu-latest | ||
| needs: integration-test-2 | ||
| if: always() && needs.integration-test-2.result == 'success' | ||
| env: | ||
| FILE_URL: ${{ github.event.inputs.file_url || 'http://www.eicar.org/download/eicar.com.txt' }} | ||
| DOWNLOAD_PATH: ${{ github.event.inputs.download_path || 'eicar.com.txt' }} | ||
| steps: | ||
| - name: Checkout repository π | ||
| uses: actions/checkout@v6 | ||
| with: | ||
| ref: ${{ github.event.inputs.branch_name }} | ||
| - name: Set up Java 17 β | ||
| uses: actions/setup-java@v3 | ||
| with: | ||
| java-version: 17 | ||
| distribution: 'temurin' | ||
| cache: 'maven' | ||
| - name: Cache CF CLI π¦ | ||
| id: cache-cf-cli | ||
| uses: actions/cache@v4 | ||
| with: | ||
| path: /usr/bin/cf8 | ||
| key: cf-cli-v8-${{ runner.os }} | ||
| - name: Install Cloud Foundry CLI π§ | ||
| if: steps.cache-cf-cli.outputs.cache-hit != 'true' | ||
| run: | | ||
| echo "π Installing Cloud Foundry CLI..." | ||
| wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add - | ||
| echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list | ||
| sudo apt-get update | ||
| sudo apt-get install cf8-cli | ||
| - name: Install jq π¦ | ||
| run: | | ||
| if ! command -v jq &> /dev/null; then | ||
| sudo apt-get update && sudo apt-get install -y jq | ||
| fi | ||
| - name: Cache BTP CLI π¦ | ||
| id: cache-btp-cli | ||
| uses: actions/cache@v4 | ||
| with: | ||
| path: /usr/local/bin/btp | ||
| key: btp-cli-${{ runner.os }} | ||
| - name: Install BTP CLI π§ | ||
| if: steps.cache-btp-cli.outputs.cache-hit != 'true' | ||
| run: | | ||
| echo "π Installing SAP BTP CLI..." | ||
| curl -fsSL https://cli.btp.cloud.sap/btpcli-install.sh | bash | ||
| BTP_BIN=$(find "$HOME/bin" /usr/local/bin -maxdepth 1 -name 'btp' -type f 2>/dev/null | head -1) | ||
| if [ -z "$BTP_BIN" ]; then | ||
| echo "β btp binary not found after install script." | ||
| exit 1 | ||
| fi | ||
| if [ "$BTP_BIN" != "/usr/local/bin/btp" ]; then | ||
| sudo install -m 755 "$BTP_BIN" /usr/local/bin/btp | ||
| fi | ||
| btp --version | ||
| echo "β BTP CLI installed successfully!" | ||
| - name: Determine Cloud Foundry Space π | ||
| id: determine_space | ||
| run: | | ||
| if [ "${{ github.event.inputs.cf_space }}" == "developcap" ]; then | ||
| space="${{ secrets.CF_SPACE }}" | ||
| else | ||
| space="${{ github.event.inputs.cf_space }}" | ||
| fi | ||
| echo "π Space determined: $space" | ||
| echo "space=$space" >> $GITHUB_OUTPUT | ||
| - name: Login to Cloud Foundry π | ||
| run: | | ||
| echo "π Logging in to Cloud Foundry..." | ||
| cf login -a ${{ secrets.CF_API }} \ | ||
| -u ${{ secrets.CF_USER }} \ | ||
| -p ${{ secrets.CF_PASSWORD }} \ | ||
| -o ${{ secrets.CF_ORG }} \ | ||
| -s ${{ steps.determine_space.outputs.space }} | ||
| echo "β Logged in successfully!" | ||
| - name: Fetch and Escape Client Details for single tenant π | ||
| id: fetch_credentials | ||
| run: | | ||
| echo "π Fetching client details for single tenant..." | ||
| service_instance_guid=$(cf service demoappjava-public-uaa --guid) | ||
| if [ -z "$service_instance_guid" ]; then | ||
| echo "β Error: Unable to retrieve service instance GUID"; exit 1; | ||
| fi | ||
| bindings_response=$(cf curl "/v3/service_credential_bindings?service_instance_guids=${service_instance_guid}") | ||
| binding_guid=$(echo "$bindings_response" | jq -r '.resources[0].guid') | ||
| if [ -z "$binding_guid" ]; then | ||
| echo "β Error: Unable to retrieve binding GUID"; exit 1; | ||
| fi | ||
| binding_details=$(cf curl "/v3/service_credential_bindings/${binding_guid}/details") | ||
| clientSecret=$(echo "$binding_details" | jq -r '.credentials.clientsecret') | ||
| if [ -z "$clientSecret" ] || [ "$clientSecret" == "null" ]; then | ||
| echo "β Error: clientSecret is not set or is null"; exit 1; | ||
| fi | ||
| escapedClientSecret=$(echo "$clientSecret" | sed 's/\$/\\$/g') | ||
| echo "::add-mask::$escapedClientSecret" | ||
| clientID=$(echo "$binding_details" | jq -r '.credentials.clientid') | ||
| if [ -z "$clientID" ] || [ "$clientID" == "null" ]; then | ||
| echo "β Error: clientID is not set or is null"; exit 1; | ||
| fi | ||
| echo "::add-mask::$clientID" | ||
| echo "CLIENT_SECRET=$escapedClientSecret" >> $GITHUB_OUTPUT | ||
| echo "CLIENT_ID=$clientID" >> $GITHUB_OUTPUT | ||
| echo "β Client details fetched successfully!" | ||
| - name: Run Subscription Integration Test π― | ||
| env: | ||
| CLIENT_SECRET: ${{ steps.fetch_credentials.outputs.CLIENT_SECRET }} | ||
| CLIENT_ID: ${{ steps.fetch_credentials.outputs.CLIENT_ID }} | ||
| _CAPAUTH_URL: ${{ secrets.CAPAUTH_URL }} | ||
| _CF_ORG: ${{ secrets.CF_ORG }} | ||
| _CF_USER: ${{ secrets.CF_USER }} | ||
| _CF_PASSWORD: ${{ secrets.CF_PASSWORD }} | ||
| _CF_API: ${{ secrets.CF_API }} | ||
| _NOSDMROLEUSERNAME: ${{ secrets.NOSDMROLEUSERNAME }} | ||
| _NOSDMROLEUSERPASSWORD: ${{ secrets.NOSDMROLEUSERPASSWORD }} | ||
| _CONSUMER_SUBACCOUNT_ID: ${{ secrets.CONSUMER_SUBACCOUNT_ID }} | ||
| _BTP_GLOBAL_ACCOUNT_SUBDOMAIN: ${{ secrets.BTP_GLOBAL_ACCOUNT_SUBDOMAIN }} | ||
| _CMIS_CLIENT_ID: ${{ secrets.CMIS_CLIENT_ID }} | ||
| _CMIS_CLIENT_SECRET: ${{ secrets.CMIS_CLIENT_SECRET }} | ||
| run: | | ||
| echo "π Starting Subscription integration test..." | ||
| set -e | ||
| PROPERTIES_FILE="sdm/src/test/resources/credentials.properties" | ||
| appUrl="${_CF_ORG}-${{ steps.determine_space.outputs.space }}-demoappjava-srv.cfapps.eu12.hana.ondemand.com" | ||
| authUrl="${_CAPAUTH_URL}" | ||
| clientID="${CLIENT_ID}" | ||
| clientSecret="${CLIENT_SECRET}" | ||
| username="${_CF_USER}" | ||
| password="${_CF_PASSWORD}" | ||
| noSDMRoleUsername="${_NOSDMROLEUSERNAME}" | ||
| noSDMRoleUserPassword="${_NOSDMROLEUSERPASSWORD}" | ||
| CF_ORG="${_CF_ORG}" | ||
| CF_API_ENDPOINT="${_CF_API}" | ||
| CF_SPACE="${{ steps.determine_space.outputs.space }}" | ||
| CF_USERNAME="${_CF_USER}" | ||
| CF_PASSWORD="${_CF_PASSWORD}" | ||
| CONSUMER_CF_API_ENDPOINT="${_CF_API}" | ||
| CONSUMER_CF_ORG="sdm-dev-consumer-eu12" | ||
| CONSUMER_CF_SPACE="ankush" | ||
| CONSUMER_CF_USERNAME="${_CF_USER}" | ||
| CONSUMER_CF_PASSWORD="${_CF_PASSWORD}" | ||
| CONSUMER_SUBACCOUNT_ID="${_CONSUMER_SUBACCOUNT_ID}" | ||
| BTP_GLOBAL_ACCOUNT_SUBDOMAIN="${_BTP_GLOBAL_ACCOUNT_SUBDOMAIN}" | ||
| SAAS_APP_NAME="bookshop-mt-sdmgoogleworkspacedev-akcap" | ||
| SAAS_APP_PLAN="" | ||
| ROLE_ASSIGNMENT_EMAILS="ankush.kumar.garg@sap.com" | ||
| ROLE_COLLECTION_NAME="ak-test" | ||
| APP_ROLE_FILTER="bookshop-mt-sdmgoogleworkspacedev-akcap" | ||
| BTP_CLI_URL="https://canary.cli.btp.int.sap" | ||
| APP_NAME="demoappjava-srv" | ||
| VAR_NAME="REPOSITORY_ID" | ||
| VAR_VALUE="SAMPLE-REPO" | ||
| CMIS_URL="https://api-sdm-di.cfapps.eu12.hana.ondemand.com/" | ||
| CMIS_REPOSITORY_ID="SAMPLE-REPO" | ||
| CMIS_TOKEN_URL="https://sdmgoogleworkspace.authentication.eu12.hana.ondemand.com" | ||
| CMIS_CLIENT_ID="${_CMIS_CLIENT_ID}" | ||
| CMIS_CLIENT_SECRET="${_CMIS_CLIENT_SECRET}" | ||
| CMIS_USERNAME="${_CF_USER}" | ||
| CMIS_PASSWORD="${_CF_PASSWORD}" | ||
| echo "::add-mask::$clientSecret" | ||
| echo "::add-mask::$clientID" | ||
| echo "::add-mask::$username" | ||
| echo "::add-mask::$password" | ||
| echo "::add-mask::$noSDMRoleUsername" | ||
| echo "::add-mask::$noSDMRoleUserPassword" | ||
| echo "::add-mask::$CF_ORG" | ||
| echo "::add-mask::$CF_USERNAME" | ||
| echo "::add-mask::$CF_PASSWORD" | ||
| echo "::add-mask::$CONSUMER_CF_API_ENDPOINT" | ||
| echo "::add-mask::$CONSUMER_CF_USERNAME" | ||
| echo "::add-mask::$CONSUMER_CF_PASSWORD" | ||
| echo "::add-mask::$CONSUMER_SUBACCOUNT_ID" | ||
| echo "::add-mask::$BTP_GLOBAL_ACCOUNT_SUBDOMAIN" | ||
| echo "::add-mask::$CMIS_CLIENT_ID" | ||
| echo "::add-mask::$CMIS_CLIENT_SECRET" | ||
| echo "::add-mask::$CMIS_USERNAME" | ||
| echo "::add-mask::$CMIS_PASSWORD" | ||
| cat > "$PROPERTIES_FILE" <<EOL | ||
| appUrl=$appUrl | ||
| authUrl=$authUrl | ||
| clientID=$clientID | ||
| clientSecret=$clientSecret | ||
| username=$username | ||
| password=$password | ||
| noSDMRoleUsername=$noSDMRoleUsername | ||
| noSDMRoleUserPassword=$noSDMRoleUserPassword | ||
| CF_API_ENDPOINT=$CF_API_ENDPOINT | ||
| CF_ORG=$CF_ORG | ||
| CF_SPACE=$CF_SPACE | ||
| CF_USERNAME=$CF_USERNAME | ||
| CF_PASSWORD=$CF_PASSWORD | ||
| APP_NAME=$APP_NAME | ||
| VAR_NAME=$VAR_NAME | ||
| VAR_VALUE=$VAR_VALUE | ||
| CONSUMER_CF_API_ENDPOINT=$CONSUMER_CF_API_ENDPOINT | ||
| CONSUMER_CF_ORG=$CONSUMER_CF_ORG | ||
| CONSUMER_CF_SPACE=$CONSUMER_CF_SPACE | ||
| CONSUMER_CF_USERNAME=$CONSUMER_CF_USERNAME | ||
| CONSUMER_CF_PASSWORD=$CONSUMER_CF_PASSWORD | ||
| CONSUMER_SUBACCOUNT_ID=$CONSUMER_SUBACCOUNT_ID | ||
| SAAS_APP_NAME=$SAAS_APP_NAME | ||
| SAAS_APP_PLAN=$SAAS_APP_PLAN | ||
| ROLE_ASSIGNMENT_EMAILS=$ROLE_ASSIGNMENT_EMAILS | ||
| ROLE_COLLECTION_NAME=$ROLE_COLLECTION_NAME | ||
| APP_ROLE_FILTER=$APP_ROLE_FILTER | ||
| BTP_CLI_URL=$BTP_CLI_URL | ||
| BTP_GLOBAL_ACCOUNT_SUBDOMAIN=$BTP_GLOBAL_ACCOUNT_SUBDOMAIN | ||
| CMIS_URL=$CMIS_URL | ||
| CMIS_REPOSITORY_ID=$CMIS_REPOSITORY_ID | ||
| CMIS_TOKEN_URL=$CMIS_TOKEN_URL | ||
| CMIS_CLIENT_ID=$CMIS_CLIENT_ID | ||
| CMIS_CLIENT_SECRET=$CMIS_CLIENT_SECRET | ||
| CMIS_USERNAME=$CMIS_USERNAME | ||
| CMIS_PASSWORD=$CMIS_PASSWORD | ||
| EOL | ||
| echo "π― Running Maven integration tests for IntegrationTest_Subscription..." | ||
| mvn clean verify -P integration-tests -DtokenFlow=namedUser -DtenancyModel=single -DskipUnitTests -Dfailsafe.includes="**/IntegrationTest_Subscription.java" | ||