Skip to content

virus file test case #132

virus file test case

virus file test case #132

name: Single Tenant Integration Test πŸš€

Check failure on line 1 in .github/workflows/singleTenant_integration_test.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/singleTenant_integration_test.yml

Invalid workflow file

(Line: 793, Col: 5): 'runs-on' is already defined, (Line: 796, Col: 5): 'env' is already defined, (Line: 800, Col: 5): 'steps' is already defined
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"