Skip to content

Single Tenant Integration Test πŸš€ #129

Single Tenant Integration Test πŸš€

Single Tenant Integration Test πŸš€ #129

name: Single Tenant Integration Test πŸš€
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,technicalUser]
testClass:
- IntegrationTest_SingleFacet
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
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
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: change-repository-id
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"