diff --git a/.github/workflows/interop.yml b/.github/workflows/interop.yml index aafb3c17f..076f2b581 100644 --- a/.github/workflows/interop.yml +++ b/.github/workflows/interop.yml @@ -32,6 +32,11 @@ jobs: outputs: devices: ${{ steps.vars.outputs.devices }} marker_overwrite: ${{ steps.vars.outputs.marker_overwrite }} + openwifi_revision: ${{ steps.vars.outputs.openwifi}} + ap_models: ${{ steps.vars.outputs.ap_models}} + ap_version: ${{ steps.vars.outputs.ap_version}} + marker_expression: ${{ steps.vars.outputs.marker_expression }} + existing_controller: ${{ steps.vars.outputs.existing_controller }} steps: - name: set variables @@ -42,6 +47,11 @@ jobs: DEVICES="${{ github.event.inputs.devices || 'galaxy-s9,galaxy-s10,galaxy-s20,pixel-4,iphone-7,iphone-11,iphone-xr,iphone-12' }}" DEVICES=$(echo $DEVICES | sed "s/,/\",\"/g" | sed 's/^/[\"/g' | sed 's/$/\"]/g') echo "::set-output name=devices::${DEVICES}" + echo ::set-output name=openwifi::$(echo "${{ github.event.inputs.openwifi_revision || 'main' }}") + echo ::set-output name=ap_models::$(echo "${{ github.event.inputs.ap_models || 'edgecore_ecw5410,edgecore_eap101,tp-link_ec420-g1,edgecore_ecw5211,cig_wf188n,edgecore_eap102,cig_wf194c,hfcl_ion4' }}") + echo ::set-output name=ap_version::$(echo "${{ github.event.inputs.ap_version || 'next-latest' }}") + echo ::set-output name=marker_expression::$(echo "${{ github.event.inputs.marker_expression || 'uc_sanity' }}") + echo ::set-output name=existing_controller::$(echo "${{ github.event.inputs.existing_controller || 'qa01' }}") build: runs-on: ubuntu-latest @@ -62,26 +72,80 @@ jobs: steps: - uses: actions/checkout@v2 + - name: install dependencies + run: | + pip install -r .quali/requirements.txt +# curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" +# unzip awscliv2.zip +# sudo ./aws/install + + - name: start reservation + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + python .quali/start_reservation.py --global-inputs '{"Phone ID(s)":"1","AP ID(s)":"1","Optional Existing SDK Namespace":"${{ needs.vars.outputs.existing_controller }}","Include a LANForge?":"Yes","securityToken":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MzI4Mzc2NDEsImp0aSI6IjAwZGRiYWY5LWQwYjMtNDRjNS1hYjVlLTkyNzFlNzc5ZGUzNiIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiODNkNjUxMWQtNTBmZS00ZWM5LThkNzAtYTA0ZjBkNTdiZDUyIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI2ZjE1YzYxNy01YTU5LTQyOWEtODc2Yi1jOTQxMTQ1ZDFkZTIiLCJzZXNzaW9uX3N0YXRlIjoiYmRjZTFmYTMtMjlkYi00MmFmLWI5YWMtYjZjZmJkMDEyOTFhIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.5R85_1R38ZFXv_wIjjCIsj8NJm1p66dCsLJI5DBEmks"}' --reservation-duration 480 "InterOp Lab - Specific Selection" + + - name: set reservation outputs + if: always() + id: reservation + run: | + echo ::set-output name=identifier::"$(cat ./reservation_id.txt)" + echo ::set-output name=namespace::"$(cat ./reservation_id.txt | cut -d "-" -f 1)" + - name: get EKS access credentials run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side - name: install kubectl run: | curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + - name: prepare configuration + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_CONFIGURATION_JSON }} + EOF + + DYN_CONFIG="$(python .quali/get_configuration.py --json ${{ steps.reservation.outputs.identifier }})" + + jq ".CONFIGURATION.interop=$DYN_CONFIG" lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + jq --arg git_run "${{ github.run_number }}" '.PERFECTO_DETAILS."Galaxy S9".jobNumber=$git_run' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + + if [ ${{ needs.vars.outputs.existing_controller }} != '' ] + then + jq '.CONFIGURATION.interop.controller.url="https://sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build:16001"' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + fi + + - name: run tests uses: ./.github/actions/run-tests with: namespace: interop-${{ github.run_id }}-galaxy-s9 - testbed: interop-01 + testbed: interop marker_expression: "${{ needs.vars.outputs.marker_overwrite || 'interop_uc_sanity and client_connect and android and not wpa3_personal' }}" - configuration: "${{ secrets.LAB_CONFIGURATION_JSON }}" + configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} - additional_args: "-o model-android='Galaxy S9' -o 'jobName=Github-Interop-galaxy-s9' -o 'jobNumber=${{ github.run_number }}' --skip-lanforge" + additional_args: "--device='Galaxy S9' --skip-lanforge" allure_results_artifact_name: allure-results-galaxy-s9 + - name: stop reservation + if: always() + run: python .quali/stop_reservation.py ${{ steps.reservation.outputs.identifier }} + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + # necessary because if conditionals in composite actions are currently not respected - name: delete namespace if: always() @@ -95,6 +159,29 @@ jobs: steps: - uses: actions/checkout@v2 + - name: install dependencies + run: | + pip install -r .quali/requirements.txt + # curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + # unzip awscliv2.zip + # sudo ./aws/install + + - name: start reservation + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + python .quali/start_reservation.py --global-inputs '{"Phone ID(s)":"6","AP ID(s)":"1","Optional Existing SDK Namespace":"${{ needs.vars.outputs.existing_controller }}","Include a LANForge?":"Yes","securityToken":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MzI4Mzc2NDEsImp0aSI6IjAwZGRiYWY5LWQwYjMtNDRjNS1hYjVlLTkyNzFlNzc5ZGUzNiIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiODNkNjUxMWQtNTBmZS00ZWM5LThkNzAtYTA0ZjBkNTdiZDUyIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI2ZjE1YzYxNy01YTU5LTQyOWEtODc2Yi1jOTQxMTQ1ZDFkZTIiLCJzZXNzaW9uX3N0YXRlIjoiYmRjZTFmYTMtMjlkYi00MmFmLWI5YWMtYjZjZmJkMDEyOTFhIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.5R85_1R38ZFXv_wIjjCIsj8NJm1p66dCsLJI5DBEmks"}' "InterOp Lab - Specific Selection" + + - name: set reservation outputs + if: always() + id: reservation + run: | + echo ::set-output name=identifier::"$(cat ./reservation_id.txt)" + echo ::set-output name=namespace::"$(cat ./reservation_id.txt | cut -d "-" -f 1)" + + - name: get EKS access credentials run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} @@ -104,17 +191,48 @@ jobs: curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + - name: prepare configuration + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_CONFIGURATION_JSON }} + EOF + + DYN_CONFIG="$(python .quali/get_configuration.py --json ${{ steps.reservation.outputs.identifier }})" + + jq ".CONFIGURATION.interop=$DYN_CONFIG" lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + + jq --arg git_run "${{ github.run_number }}" '.PERFECTO_DETAILS."iPhone-11".jobNumber=$git_run' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + if [ ${{ needs.vars.outputs.existing_controller }} != '' ] + then + jq '.CONFIGURATION.interop.controller.url="https://sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build:16001"' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + fi + + - name: run tests uses: ./.github/actions/run-tests with: namespace: interop-${{ github.run_id }}-iphone-11 - testbed: interop-01 + testbed: interop marker_expression: "${{ needs.vars.outputs.marker_overwrite || 'interop_uc_sanity and client_connect and ios' }}" - configuration: "${{ secrets.LAB_CONFIGURATION_JSON }}" + configuration_file: "$./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} - additional_args: "-o model-iOS='iPhone-11' -o 'jobName=Github-Interop-iphone-11' -o 'jobNumber=${{ github.run_number }}' --skip-lanforge" + additional_args: "--device='iPhone-11' --skip-lanforge" allure_results_artifact_name: allure-results-iphone-11 + - name: stop reservation + if: always() + run: python .quali/stop_reservation.py ${{ steps.reservation.outputs.identifier }} + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + # necessary because if conditionals in composite actions are currently not respected - name: delete namespace if: always() @@ -129,26 +247,80 @@ jobs: steps: - uses: actions/checkout@v2 + - name: install dependencies + run: | + pip install -r .quali/requirements.txt + # curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + # unzip awscliv2.zip + # sudo ./aws/install + + - name: start reservation + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + python .quali/start_reservation.py --global-inputs '{"Phone ID(s)":"2","AP ID(s)":"2","Optional Existing SDK Namespace":"${{ needs.vars.outputs.existing_controller }}","Include a LANForge?":"Yes","securityToken":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MzI4Mzc2NDEsImp0aSI6IjAwZGRiYWY5LWQwYjMtNDRjNS1hYjVlLTkyNzFlNzc5ZGUzNiIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiODNkNjUxMWQtNTBmZS00ZWM5LThkNzAtYTA0ZjBkNTdiZDUyIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI2ZjE1YzYxNy01YTU5LTQyOWEtODc2Yi1jOTQxMTQ1ZDFkZTIiLCJzZXNzaW9uX3N0YXRlIjoiYmRjZTFmYTMtMjlkYi00MmFmLWI5YWMtYjZjZmJkMDEyOTFhIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.5R85_1R38ZFXv_wIjjCIsj8NJm1p66dCsLJI5DBEmks"}' --reservation-duration 480 "InterOp Lab - Specific Selection" + + - name: set reservation outputs + if: always() + id: reservation + run: | + echo ::set-output name=identifier::"$(cat ./reservation_id.txt)" + echo ::set-output name=namespace::"$(cat ./reservation_id.txt | cut -d "-" -f 1)" + + - name: get EKS access credentials run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side - name: install kubectl run: | curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + - name: prepare configuration + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_CONFIGURATION_JSON }} + EOF + + DYN_CONFIG="$(python .quali/get_configuration.py --json ${{ steps.reservation.outputs.identifier }})" + + jq ".CONFIGURATION.interop=$DYN_CONFIG" lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + jq --arg git_run "${{ github.run_number }}" '.PERFECTO_DETAILS."Galaxy S10.*".jobNumber=$git_run' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + + if [ ${{ needs.vars.outputs.existing_controller }} != '' ] + then + jq '.CONFIGURATION.interop.controller.url="https://sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build:16001"' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + fi + + - name: run tests uses: ./.github/actions/run-tests with: namespace: interop-${{ github.run_id }}-galaxy-s10 - testbed: interop-02 + testbed: interop marker_expression: "${{ needs.vars.outputs.marker_overwrite || 'interop_uc_sanity and client_connect and android' }}" - configuration: "${{ secrets.LAB_CONFIGURATION_JSON }}" + configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} - additional_args: "-o model-android='Galaxy S10.*' -o 'jobName=Github-Interop-galaxy-s10' -o 'jobNumber=${{ github.run_number }}' --skip-lanforge" + additional_args: "--device='Galaxy S10.*' --skip-lanforge" allure_results_artifact_name: allure-results-galaxy-s10 + - name: stop reservation + if: always() + run: python .quali/stop_reservation.py ${{ steps.reservation.outputs.identifier }} + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + # necessary because if conditionals in composite actions are currently not respected - name: delete namespace if: always() @@ -162,26 +334,82 @@ jobs: steps: - uses: actions/checkout@v2 + - name: install dependencies + run: | + pip install -r .quali/requirements.txt + # curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + # unzip awscliv2.zip + # sudo ./aws/install + + - name: start reservation + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + python .quali/start_reservation.py --global-inputs '{"Phone ID(s)":"5","AP ID(s)":"2","Optional Existing SDK Namespace":"${{ needs.vars.outputs.existing_controller }}","Include a LANForge?":"Yes","securityToken":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MzI4Mzc2NDEsImp0aSI6IjAwZGRiYWY5LWQwYjMtNDRjNS1hYjVlLTkyNzFlNzc5ZGUzNiIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiODNkNjUxMWQtNTBmZS00ZWM5LThkNzAtYTA0ZjBkNTdiZDUyIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI2ZjE1YzYxNy01YTU5LTQyOWEtODc2Yi1jOTQxMTQ1ZDFkZTIiLCJzZXNzaW9uX3N0YXRlIjoiYmRjZTFmYTMtMjlkYi00MmFmLWI5YWMtYjZjZmJkMDEyOTFhIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.5R85_1R38ZFXv_wIjjCIsj8NJm1p66dCsLJI5DBEmks"}' --reservation-duration 480 "InterOp Lab - Specific Selection" + + - name: set reservation outputs + if: always() + id: reservation + run: | + echo ::set-output name=identifier::"$(cat ./reservation_id.txt)" + echo ::set-output name=namespace::"$(cat ./reservation_id.txt | cut -d "-" -f 1)" + + - name: get EKS access credentials run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side - name: install kubectl run: | curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + - name: prepare configuration + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_CONFIGURATION_JSON }} + EOF + + DYN_CONFIG="$(python .quali/get_configuration.py --json ${{ steps.reservation.outputs.identifier }})" + + jq ".CONFIGURATION.interop=$DYN_CONFIG" lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + jq --arg git_run "${{ github.run_number }}" '.PERFECTO_DETAILS."iPhone-7".jobNumber=$git_run' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + + + if [ ${{ needs.vars.outputs.existing_controller }} != '' ] + then + jq '.CONFIGURATION.interop.controller.url="https://sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build:16001"' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + fi + + - name: run tests uses: ./.github/actions/run-tests with: namespace: interop-${{ github.run_id }}-iphone-7 - testbed: interop-02 + testbed: interop marker_expression: "${{ needs.vars.outputs.marker_overwrite || 'interop_uc_sanity and client_connect and ios' }}" - configuration: "${{ secrets.LAB_CONFIGURATION_JSON }}" + configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} - additional_args: "-o model-iOS='iPhone-7' -o 'jobName=Github-Interop-iphone-7' -o 'jobNumber=${{ github.run_number }}' --skip-lanforge" + additional_args: "--device='iPhone-7' --skip-lanforge" allure_results_artifact_name: allure-results-iphone-7 + - name: stop reservation + if: always() + run: python .quali/stop_reservation.py ${{ steps.reservation.outputs.identifier }} + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + # necessary because if conditionals in composite actions are currently not respected - name: delete namespace if: always() @@ -196,26 +424,79 @@ jobs: steps: - uses: actions/checkout@v2 + - name: install dependencies + run: | + pip install -r .quali/requirements.txt + # curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + # unzip awscliv2.zip + # sudo ./aws/install + + - name: start reservation + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + python .quali/start_reservation.py --global-inputs '{"Phone ID(s)":"3","AP ID(s)":"4","Optional Existing SDK Namespace":"${{ needs.vars.outputs.existing_controller }}","Include a LANForge?":"Yes","securityToken":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MzI4Mzc2NDEsImp0aSI6IjAwZGRiYWY5LWQwYjMtNDRjNS1hYjVlLTkyNzFlNzc5ZGUzNiIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiODNkNjUxMWQtNTBmZS00ZWM5LThkNzAtYTA0ZjBkNTdiZDUyIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI2ZjE1YzYxNy01YTU5LTQyOWEtODc2Yi1jOTQxMTQ1ZDFkZTIiLCJzZXNzaW9uX3N0YXRlIjoiYmRjZTFmYTMtMjlkYi00MmFmLWI5YWMtYjZjZmJkMDEyOTFhIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.5R85_1R38ZFXv_wIjjCIsj8NJm1p66dCsLJI5DBEmks"}' --reservation-duration 480 "InterOp Lab - Specific Selection" + + - name: set reservation outputs + if: always() + id: reservation + run: | + echo ::set-output name=identifier::"$(cat ./reservation_id.txt)" + echo ::set-output name=namespace::"$(cat ./reservation_id.txt | cut -d "-" -f 1)" + + - name: get EKS access credentials run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side - name: install kubectl run: | curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + - name: prepare configuration + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_CONFIGURATION_JSON }} + EOF + + DYN_CONFIG="$(python .quali/get_configuration.py --json ${{ steps.reservation.outputs.identifier }})" + + jq ".CONFIGURATION.interop=$DYN_CONFIG" lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + jq --arg git_run "${{ github.run_number }}" '.PERFECTO_DETAILS."Galaxy S20".jobNumber=$git_run' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + + if [ ${{ needs.vars.outputs.existing_controller }} != '' ] + then + jq '.CONFIGURATION.interop.controller.url="https://sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build:16001"' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + fi + - name: run tests uses: ./.github/actions/run-tests with: namespace: interop-${{ github.run_id }}-galaxy-s20 - testbed: interop-03 + testbed: interop marker_expression: "${{ needs.vars.outputs.marker_overwrite || 'interop_uc_sanity and client_connect and android' }}" - configuration: "${{ secrets.LAB_CONFIGURATION_JSON }}" + configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} - additional_args: "-o model-android='Galaxy S20' -o 'jobName=Github-Interop-galaxy-s20' -o 'jobNumber=${{ github.run_number }}' --skip-lanforge" + additional_args: "--device='Galaxy S20' --skip-lanforge" allure_results_artifact_name: allure-results-galaxy-s20 + - name: stop reservation + if: always() + run: python .quali/stop_reservation.py ${{ steps.reservation.outputs.identifier }} + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + # necessary because if conditionals in composite actions are currently not respected - name: delete namespace if: always() @@ -229,6 +510,29 @@ jobs: steps: - uses: actions/checkout@v2 + - name: install dependencies + run: | + pip install -r .quali/requirements.txt + # curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + # unzip awscliv2.zip + # sudo ./aws/install + + - name: start reservation + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + python .quali/start_reservation.py --global-inputs '{"Phone ID(s)":"8","AP ID(s)":"4","Optional Existing SDK Namespace":"${{ needs.vars.outputs.existing_controller }}","Include a LANForge?":"Yes","securityToken":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MzI4Mzc2NDEsImp0aSI6IjAwZGRiYWY5LWQwYjMtNDRjNS1hYjVlLTkyNzFlNzc5ZGUzNiIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiODNkNjUxMWQtNTBmZS00ZWM5LThkNzAtYTA0ZjBkNTdiZDUyIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI2ZjE1YzYxNy01YTU5LTQyOWEtODc2Yi1jOTQxMTQ1ZDFkZTIiLCJzZXNzaW9uX3N0YXRlIjoiYmRjZTFmYTMtMjlkYi00MmFmLWI5YWMtYjZjZmJkMDEyOTFhIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.5R85_1R38ZFXv_wIjjCIsj8NJm1p66dCsLJI5DBEmks"}' --reservation-duration 480 "InterOp Lab - Specific Selection" + + - name: set reservation outputs + if: always() + id: reservation + run: | + echo ::set-output name=identifier::"$(cat ./reservation_id.txt)" + echo ::set-output name=namespace::"$(cat ./reservation_id.txt | cut -d "-" -f 1)" + + - name: get EKS access credentials run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} @@ -238,17 +542,47 @@ jobs: curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + - name: prepare configuration + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_CONFIGURATION_JSON }} + EOF + + DYN_CONFIG="$(python .quali/get_configuration.py --json ${{ steps.reservation.outputs.identifier }})" + + jq ".CONFIGURATION.interop=$DYN_CONFIG" lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + jq --arg git_run "${{ github.run_number }}" '.PERFECTO_DETAILS."iPhone-XR".jobNumber=$git_run' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + if [ ${{ needs.vars.outputs.existing_controller }} != '' ] + then + jq '.CONFIGURATION.interop.controller.url="https://sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build:16001"' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + fi + + - name: run tests uses: ./.github/actions/run-tests with: namespace: interop-${{ github.run_id }}-iphone-xr - testbed: interop-03 + testbed: interop marker_expression: "${{ needs.vars.outputs.marker_overwrite || 'interop_uc_sanity and client_connect and ios' }}" - configuration: "${{ secrets.LAB_CONFIGURATION_JSON }}" + configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} - additional_args: "-o model-iOS='iPhone-XR' -o 'jobName=Github-Interop-iphone-xr' -o 'jobNumber=${{ github.run_number }}' --skip-lanforge" + additional_args: "--device='iPhone-XR' --skip-lanforge" allure_results_artifact_name: allure-results-iphone-xr + - name: stop reservation + if: always() + run: python .quali/stop_reservation.py ${{ steps.reservation.outputs.identifier }} + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + # necessary because if conditionals in composite actions are currently not respected - name: delete namespace if: always() @@ -263,6 +597,28 @@ jobs: steps: - uses: actions/checkout@v2 + - name: install dependencies + run: | + pip install -r .quali/requirements.txt + # curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + # unzip awscliv2.zip + # sudo ./aws/install + + - name: start reservation + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + python .quali/start_reservation.py --global-inputs '{"Phone ID(s)":"4","AP ID(s)":"3","Optional Existing SDK Namespace":"${{ needs.vars.outputs.existing_controller }}","Include a LANForge?":"Yes","securityToken":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MzI4Mzc2NDEsImp0aSI6IjAwZGRiYWY5LWQwYjMtNDRjNS1hYjVlLTkyNzFlNzc5ZGUzNiIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiODNkNjUxMWQtNTBmZS00ZWM5LThkNzAtYTA0ZjBkNTdiZDUyIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI2ZjE1YzYxNy01YTU5LTQyOWEtODc2Yi1jOTQxMTQ1ZDFkZTIiLCJzZXNzaW9uX3N0YXRlIjoiYmRjZTFmYTMtMjlkYi00MmFmLWI5YWMtYjZjZmJkMDEyOTFhIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.5R85_1R38ZFXv_wIjjCIsj8NJm1p66dCsLJI5DBEmks"}' --reservation-duration 480 "InterOp Lab - Specific Selection" + + - name: set reservation outputs + if: always() + id: reservation + run: | + echo ::set-output name=identifier::"$(cat ./reservation_id.txt)" + echo ::set-output name=namespace::"$(cat ./reservation_id.txt | cut -d "-" -f 1)" + - name: get EKS access credentials run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} @@ -272,17 +628,49 @@ jobs: curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + - name: prepare configuration + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_CONFIGURATION_JSON }} + EOF + + DYN_CONFIG="$(python .quali/get_configuration.py --json ${{ steps.reservation.outputs.identifier }})" + + jq ".CONFIGURATION.interop=$DYN_CONFIG" lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + jq --arg git_run "${{ github.run_number }}" '.PERFECTO_DETAILS."Pixel 4".jobNumber=$git_run' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + + + if [ ${{ needs.vars.outputs.existing_controller }} != '' ] + then + jq '.CONFIGURATION.interop.controller.url="https://sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build:16001"' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + fi + + + - name: run tests uses: ./.github/actions/run-tests with: namespace: interop-${{ github.run_id }}-pixel-4 - testbed: interop-04 + testbed: interop marker_expression: "${{ needs.vars.outputs.marker_overwrite || 'interop_uc_sanity and client_connect and android' }}" - configuration: "${{ secrets.LAB_CONFIGURATION_JSON }}" + configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} - additional_args: "-o model-android='Pixel 4' -o 'jobName=Github-Interop-pixel-4' -o 'jobNumber=${{ github.run_number }}' --skip-lanforge" + additional_args: "--device='Pixel 4' --skip-lanforge" allure_results_artifact_name: allure-results-pixel-4 + - name: stop reservation + if: always() + run: python .quali/stop_reservation.py ${{ steps.reservation.outputs.identifier }} + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + # necessary because if conditionals in composite actions are currently not respected - name: delete namespace if: always() @@ -296,6 +684,28 @@ jobs: steps: - uses: actions/checkout@v2 + - name: install dependencies + run: | + pip install -r .quali/requirements.txt + # curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + # unzip awscliv2.zip + # sudo ./aws/install + + - name: start reservation + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + python .quali/start_reservation.py --global-inputs '{"Phone ID(s)":"7","AP ID(s)":"3","Optional Existing SDK Namespace":"${{ needs.vars.outputs.existing_controller }}","Include a LANForge?":"Yes","securityToken":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MzI4Mzc2NDEsImp0aSI6IjAwZGRiYWY5LWQwYjMtNDRjNS1hYjVlLTkyNzFlNzc5ZGUzNiIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiODNkNjUxMWQtNTBmZS00ZWM5LThkNzAtYTA0ZjBkNTdiZDUyIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI2ZjE1YzYxNy01YTU5LTQyOWEtODc2Yi1jOTQxMTQ1ZDFkZTIiLCJzZXNzaW9uX3N0YXRlIjoiYmRjZTFmYTMtMjlkYi00MmFmLWI5YWMtYjZjZmJkMDEyOTFhIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.5R85_1R38ZFXv_wIjjCIsj8NJm1p66dCsLJI5DBEmks"}' --reservation-duration 480 "InterOp Lab - Specific Selection" + + - name: set reservation outputs + if: always() + id: reservation + run: | + echo ::set-output name=identifier::"$(cat ./reservation_id.txt)" + echo ::set-output name=namespace::"$(cat ./reservation_id.txt | cut -d "-" -f 1)" + - name: get EKS access credentials run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} @@ -305,17 +715,47 @@ jobs: curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + - name: prepare configuration + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_CONFIGURATION_JSON }} + EOF + + DYN_CONFIG="$(python .quali/get_configuration.py --json ${{ steps.reservation.outputs.identifier }})" + + jq ".CONFIGURATION.interop=$DYN_CONFIG" lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + jq --arg git_run "${{ github.run_number }}" '.PERFECTO_DETAILS."iPhone-12".jobNumber=$git_run' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + + if [ ${{ needs.vars.outputs.existing_controller }} != '' ] + then + jq '.CONFIGURATION.interop.controller.url="https://sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build:16001"' lab_info.json > lab_info.json.tmp && mv lab_info.json.tmp lab_info.json + fi + + - name: run tests uses: ./.github/actions/run-tests with: namespace: interop-${{ github.run_id }}-iphone-12 - testbed: interop-04 + testbed: interop marker_expression: "${{ needs.vars.outputs.marker_overwrite || 'interop_uc_sanity and client_connect and ios' }}" - configuration: "${{ secrets.LAB_CONFIGURATION_JSON }}" + configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} - additional_args: "-o model-iOS='iPhone-12' -o 'jobName=Github-Interop-iphone-12' -o 'jobNumber=${{ github.run_number }}' --skip-lanforge" + additional_args: "--device='iPhone-12' --skip-lanforge" allure_results_artifact_name: allure-results-iphone-12 + - name: stop reservation + if: always() + run: python .quali/stop_reservation.py ${{ steps.reservation.outputs.identifier }} + env: + CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build + CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }} + CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }} + # necessary because if conditionals in composite actions are currently not respected - name: delete namespace if: always() diff --git a/.quali/get_configuration.py b/.quali/get_configuration.py index bd4480e51..dd55e2d61 100644 --- a/.quali/get_configuration.py +++ b/.quali/get_configuration.py @@ -57,7 +57,9 @@ def main(): key = 'username' if key == 'uname' else key key = 'password' if key == 'passkey' else key - ap_config[key] = get_attribute_value(session, attribute) + if get_attribute_value(session, attribute) != "": + ap_config[key] = get_attribute_value(session, attribute) + #ap_config[key] = get_attribute_value(session, attribute) config['access_point'].append(ap_config) @@ -96,4 +98,4 @@ def main(): if __name__ == '__main__': - main() + main() \ No newline at end of file diff --git a/tests/configuration.py b/tests/configuration.py index 38a399365..d25ff8d1a 100644 --- a/tests/configuration.py +++ b/tests/configuration.py @@ -37,6 +37,7 @@ with open('lab_info.json', 'r') as f: CONFIGURATION = data["CONFIGURATION"] +PERFECTO_DETAILS = data["PERFECTO_DETAILS"] RADIUS_SERVER_DATA = data["RADIUS_SERVER_DATA"] diff --git a/tests/conftest.py b/tests/conftest.py index b40e272a8..e5a605405 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -39,6 +39,7 @@ import pytest from lanforge.lf_tests import RunTest from cv_test_manager import cv_test from configuration import CONFIGURATION +from configuration import PERFECTO_DETAILS from configuration import open_flow from configuration import RADIUS_SERVER_DATA from configuration import RADIUS_ACCOUNTING_DATA @@ -147,6 +148,12 @@ def pytest_addoption(parser): default=False, help="skip cloud controller and AP, run only lanforge tests on a ssid preconfigured" ) + parser.addoption( + "--device", + default="iPhone-11", + help="Device Model which is needed to test" + ) + # Perfecto Parameters parser.addini("perfectoURL", "Cloud URL") @@ -196,6 +203,11 @@ def testbed(request): var = request.config.getoption("--testbed") yield var +@pytest.fixture(scope="session") +def device(request): + """yields the device option selection""" + var = request.config.getoption("--device") + yield var @pytest.fixture(scope="session") def should_upload_firmware(request): @@ -259,6 +271,14 @@ def get_configuration(testbed, request): LOGGER.info("Selected the lab Info data: " + str((CONFIGURATION[testbed]))) yield CONFIGURATION[testbed] +@pytest.fixture(scope="session") +def get_device_configuration(device, request): + """yields the selected device information from lab info file (configuration.py)""" + + LOGGER.info("Selected the lab Info data: " + str((PERFECTO_DETAILS[device]))) + print(PERFECTO_DETAILS[device]) + yield PERFECTO_DETAILS[device] + @pytest.fixture(scope="session") def get_apnos(): diff --git a/tests/e2e/interOp/conftest.py b/tests/e2e/interOp/conftest.py index 726fd0667..679dde2ba 100644 --- a/tests/e2e/interOp/conftest.py +++ b/tests/e2e/interOp/conftest.py @@ -41,6 +41,7 @@ if "tests" not in sys.path: sys.path.append(f'../tests') from configuration import CONFIGURATION +from configuration import PERFECTO_DETAILS from urllib3 import exceptions @@ -52,68 +53,68 @@ testCaseReportURL = [] @pytest.fixture(scope="function") -def get_PassPointConniOS_data(request): +def get_PassPointConniOS_data(request, get_device_configuration): passPoint_data = { "netAnalyzer-inter-Con-Xpath": "//*[@label='Network Connected']/parent::*/XCUIElementTypeButton", - "bundleId-iOS-Settings": request.config.getini("bundleId-iOS-Settings"), - "bundleId-iOS-Ping": request.config.getini("bundleId-iOS-Ping") + "bundleId-iOS-Settings": get_device_configuration["bundleId-iOS-Settings"], + "bundleId-iOS-Ping": get_device_configuration["bundleId-iOS-Ping"] } yield passPoint_data @pytest.fixture(scope="function") -def get_APToMobileDevice_data(request): +def get_APToMobileDevice_data(request, get_device_configuration): passPoint_data = { "webURL": "https://www.google.com", "lblSearch": "//*[@class='gLFyf']", "elelSearch": "(//*[@class='sbic sb43'])[1]", "BtnRunSpeedTest": "//*[text()='RUN SPEED TEST']", - "bundleId-iOS-Settings": request.config.getini("bundleId-iOS-Settings"), - "bundleId-iOS-Safari": request.config.getini("bundleId-iOS-Safari"), + "bundleId-iOS-Settings": get_device_configuration["bundleId-iOS-Settings"], + "bundleId-iOS-Safari": get_device_configuration["bundleId-iOS-Safari"], "downloadMbps": "//*[@id='knowledge-verticals-internetspeedtest__download']/P[@class='spiqle']", "UploadMbps": "//*[@id='knowledge-verticals-internetspeedtest__upload']/P[@class='spiqle']", # Android - "platformName-android": request.config.getini("platformName-android"), - "appPackage-android": request.config.getini("appPackage-android") + "platformName-android": get_device_configuration["platformName-android"], + "appPackage-android": get_device_configuration["appPackage-android"] } yield passPoint_data @pytest.fixture(scope="function") -def get_AccessPointConn_data(request): +def get_AccessPointConn_data(request, get_device_configuration): passPoint_data = { - "bundleId-iOS-Settings": request.config.getini("bundleId-iOS-Settings"), - "bundleId-iOS-Ping": request.config.getini("bundleId-iOS-Ping") + "bundleId-iOS-Settings": get_device_configuration["bundleId-iOS-Settings"], + "bundleId-iOS-Ping": get_device_configuration["bundleId-iOS-Ping"] } yield passPoint_data @pytest.fixture(scope="function") -def get_ToggleAirplaneMode_data(request): +def get_ToggleAirplaneMode_data(request, get_device_configuration): passPoint_data = { "webURL": "https://www.google.com", "lblSearch": "//*[@class='gLFyf']", "elelSearch": "(//*[@class='sbic sb43'])[1]", "BtnRunSpeedTest": "//*[text()='RUN SPEED TEST']", - "bundleId-iOS-Settings": request.config.getini("bundleId-iOS-Settings"), - "bundleId-iOS-Safari": request.config.getini("bundleId-iOS-Safari"), + "bundleId-iOS-Settings": get_device_configuration["bundleId-iOS-Settings"], + "bundleId-iOS-Safari": get_device_configuration["bundleId-iOS-Safari"], "downloadMbps": "//*[@id='knowledge-verticals-internetspeedtest__download']/P[@class='spiqle']", "UploadMbps": "//*[@id='knowledge-verticals-internetspeedtest__upload']/P[@class='spiqle']", # Android - "platformName-android": request.config.getini("platformName-android"), - "appPackage-android": request.config.getini("appPackage-android") + "platformName-android": get_device_configuration["platformName-android"], + "appPackage-android": get_device_configuration["appPackage-android"] } yield passPoint_data @pytest.fixture(scope="function") -def get_ToggleWifiMode_data(request): +def get_ToggleWifiMode_data(request,get_device_configuration): passPoint_data = { # iOS - "bundleId-iOS-Settings": request.config.getini("bundleId-iOS-Settings"), + "bundleId-iOS-Settings": get_device_configuration["bundleId-iOS-Settings"], # Android - "platformName-android": request.config.getini("platformName-android"), - "appPackage-android": request.config.getini("appPackage-android") + "platformName-android": get_device_configuration["platformName-android"], + "appPackage-android": get_device_configuration["appPackage-android"] } yield passPoint_data @@ -394,7 +395,7 @@ def pytest_sessionfinish(session, exitstatus): @pytest.fixture(scope="function") -def setup_perfectoMobile_android(request): +def setup_perfectoMobile_android(request, get_device_configuration): from appium import webdriver driver = None reporting_client = None @@ -403,11 +404,11 @@ def setup_perfectoMobile_android(request): urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) capabilities = { - 'platformName': request.config.getini("platformName-android"), - 'model': request.config.getini("model-android"), + 'platformName': get_device_configuration["platformName-android"], + 'model': get_device_configuration["model-android"], 'browserName': 'mobileOS', # 'automationName' : 'Appium', - 'securityToken': request.config.getini("securityToken"), + 'securityToken': PERFECTO_DETAILS["securityToken"], 'useAppiumForWeb': 'false', 'useAppiumForHybrid': 'false', # 'bundleId' : request.config.getini("appPackage-android"), @@ -418,7 +419,7 @@ def setup_perfectoMobile_android(request): pytest.exit("Exiting Pytest") driver = webdriver.Remote( - 'https://' + request.config.getini("perfectoURL") + '.perfectomobile.com/nexperience/perfectomobile/wd/hub', + 'https://' + PERFECTO_DETAILS["perfectoURL"] + '.perfectomobile.com/nexperience/perfectomobile/wd/hub', capabilities) driver.implicitly_wait(2) @@ -433,11 +434,11 @@ def setup_perfectoMobile_android(request): print("\nUpgrade Python to 3.9 to avoid test_ string in your test case name, see below URL") # print("https://www.andreagrandi.it/2020/10/11/python39-introduces-removeprefix-removesuffix/") - projectname = request.config.getini("projectName") - projectversion = request.config.getini("projectVersion") - jobname = request.config.getini("jobName") - jobnumber = request.config.getini("jobNumber") - tags = request.config.getini("reportTags") + projectname = PERFECTO_DETAILS["projectName"] + projectversion = PERFECTO_DETAILS["projectVersion"] + jobname = get_device_configuration["jobName"] + jobnumber = get_device_configuration["jobNumber"] + tags = PERFECTO_DETAILS["reportTags"] testCaseName = TestCaseName # print("\nSetting Perfecto ReportClient....") @@ -506,7 +507,7 @@ def reportPerfecto(testCaseName, testCaseStatus, testErrorMsg, reportURL): @pytest.fixture(scope="class") -def setup_perfectoMobileWeb(request): +def setup_perfectoMobileWeb(request, get_device_configuration): from selenium import webdriver rdriver = None reporting_client = None @@ -515,10 +516,10 @@ def setup_perfectoMobileWeb(request): urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) capabilities = { - 'platformName': request.config.getini("platformName-iOS"), - 'model': request.config.getini("model-iOS"), - 'browserName': request.config.getini("browserType-iOS"), - 'securityToken': request.config.getini("securityToken"), + 'platformName': get_device_configuration["platformName-iOS"], + 'model': get_device_configuration["model-iOS"], + 'browserName': get_device_configuration["browserType-iOS"], + 'securityToken': get_device_configuration["securityToken"], } if not is_device_Available_timeout(request, capabilities['model']): @@ -526,16 +527,16 @@ def setup_perfectoMobileWeb(request): pytest.exit("Exiting Pytest") rdriver = webdriver.Remote( - 'https://' + request.config.getini("perfectoURL") + '.perfectomobile.com/nexperience/perfectomobile/wd/hub', + 'https://' + PERFECTO_DETAILS["perfectoURL"] + '.perfectomobile.com/nexperience/perfectomobile/wd/hub', capabilities) rdriver.implicitly_wait(2) - projectname = request.config.getini("projectName") - projectversion = request.config.getini("projectVersion") - jobname = request.config.getini("jobName") - jobnumber = request.config.getini("jobNumber") - tags = request.config.getini("reportTags") - testCaseName = request.config.getini("jobName") + projectname = PERFECTO_DETAILS["projectName"] + projectversion = PERFECTO_DETAILS["projectVersion"] + jobname = get_device_configuration["jobName"] + jobnumber = get_device_configuration["jobNumber"] + tags = PERFECTO_DETAILS["reportTags"] + testCaseName = get_device_configuration["jobName"] print("Setting Perfecto ReportClient....") perfecto_execution_context = PerfectoExecutionContext(rdriver, tags, Job(jobname, jobnumber), @@ -568,7 +569,7 @@ def setup_perfectoMobileWeb(request): @pytest.fixture(scope="function") -def setup_perfectoMobile_iOS(request): +def setup_perfectoMobile_iOS(request, get_device_configuration): from appium import webdriver driver = None reporting_client = None @@ -577,11 +578,11 @@ def setup_perfectoMobile_iOS(request): urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) capabilities = { - 'platformName': request.config.getini("platformName-iOS"), - 'model': request.config.getini("model-iOS"), + 'platformName': get_device_configuration["platformName-iOS"], + 'model': get_device_configuration["model-iOS"], 'browserName': 'safari', # 'automationName' : 'Appium', - 'securityToken': request.config.getini("securityToken"), + 'securityToken': PERFECTO_DETAILS["securityToken"], 'useAppiumForWeb': 'false', 'autoAcceptAlerts': 'true', # 'bundleId' : request.config.getini("bundleId-iOS"), @@ -594,7 +595,7 @@ def setup_perfectoMobile_iOS(request): pytest.exit("Exiting Pytest") driver = webdriver.Remote( - 'https://' + request.config.getini("perfectoURL") + '.perfectomobile.com/nexperience/perfectomobile/wd/hub', + 'https://' + PERFECTO_DETAILS["perfectoURL"] + '.perfectomobile.com/nexperience/perfectomobile/wd/hub', capabilities) driver.implicitly_wait(2) @@ -609,11 +610,11 @@ def setup_perfectoMobile_iOS(request): print("\nUpgrade Python to 3.9 to avoid test_ string in your test case name, see below URL") # print("https://www.andreagrandi.it/2020/10/11/python39-introduces-removeprefix-removesuffix/") - projectname = request.config.getini("projectName") - projectversion = request.config.getini("projectVersion") - jobname = request.config.getini("jobName") - jobnumber = request.config.getini("jobNumber") - tags = request.config.getini("reportTags") + projectname = PERFECTO_DETAILS["projectName"] + projectversion = PERFECTO_DETAILS["projectVersion"] + jobname = get_device_configuration["jobName"] + jobnumber = get_device_configuration["jobNumber"] + tags = PERFECTO_DETAILS["reportTags"] testCaseName = TestCaseName print("\nSetting Perfecto ReportClient....") @@ -659,8 +660,8 @@ def setup_perfectoMobile_iOS(request): yield driver, reporting_client # Does a HTTP GET request to Perfecto cloud and gets response and information related to a headset def response_device(request, model): - securityToken = request.config.getini("securityToken") - perfectoURL = request.config.getini("perfectoURL") + securityToken = PERFECTO_DETAILS["securityToken"] + perfectoURL = PERFECTO_DETAILS["perfectoURL"] url = f"https://{perfectoURL}.perfectomobile.com/services/handsets?operation=list&securityToken={securityToken}&model={model}" resp = requests.get(url=url) return ET.fromstring(resp.content) diff --git a/tests/e2e/interOp/validation_of_operating_modes/vlan_mode/client_connect_test/iOS/test_general_security_mode.py b/tests/e2e/interOp/validation_of_operating_modes/vlan_mode/client_connect_test/iOS/test_general_security_mode.py index 2ed5a0fc2..2e8e6093f 100644 --- a/tests/e2e/interOp/validation_of_operating_modes/vlan_mode/client_connect_test/iOS/test_general_security_mode.py +++ b/tests/e2e/interOp/validation_of_operating_modes/vlan_mode/client_connect_test/iOS/test_general_security_mode.py @@ -35,7 +35,7 @@ setup_params_general = { "wpa2_personal": [ {"ssid_name": "ssid_wpa2_2g_vlan", "appliedRadios": ["2G"], "security_key": "something", "vlan": 100}, {"ssid_name": "ssid_wpa2_5g_vlan", "appliedRadios": ["5G"], - "security_key": "something_vlan", "vlan": 100}]}, + "security_key": "something", "vlan": 100}]}, "rf": {}, "radius": False } diff --git a/tests/lab_info.json b/tests/lab_info.json index 7d21d8215..7a05ba9a1 100644 --- a/tests/lab_info.json +++ b/tests/lab_info.json @@ -759,6 +759,102 @@ } }, +"PERFECTO_DETAILS" : { + "securityToken":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MzI4Mzc2NDEsImp0aSI6IjAwZGRiYWY5LWQwYjMtNDRjNS1hYjVlLTkyNzFlNzc5ZGUzNiIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiODNkNjUxMWQtNTBmZS00ZWM5LThkNzAtYTA0ZjBkNTdiZDUyIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI2ZjE1YzYxNy01YTU5LTQyOWEtODc2Yi1jOTQxMTQ1ZDFkZTIiLCJzZXNzaW9uX3N0YXRlIjoiYmRjZTFmYTMtMjlkYi00MmFmLWI5YWMtYjZjZmJkMDEyOTFhIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.5R85_1R38ZFXv_wIjjCIsj8NJm1p66dCsLJI5DBEmks", + "projectName": "TIP-PyTest-Execution", + "projectVersion": "1.0", + "reportTags": "TestTag", + "perfectoURL":"tip", + "iPhone-11": { + "model-iOS": "iPhone-11", + "bundleId-iOS": "com.apple.Preferences", + "platformName-iOS": "iOS", + "bundleId-iOS-Settings": "com.apple.Preferences", + "bundleId-iOS-Ping": "com.deftapps.ping", + "browserType-iOS": "Safari", + "bundleId-iOS-Safari": "com.apple.mobilesafari", + "platformName-android": "Android", + "appPackage-android": "com.android.settings", + "jobName": "Interop-iphone-11", + "jobNumber": 38 + }, + "iPhone-12": { + "model-iOS": "iPhone-12", + "bundleId-iOS": "com.apple.Preferences", + "platformName-iOS": "iOS", + "bundleId-iOS-Settings": "com.apple.Preferences", + "bundleId-iOS-Ping": "com.deftapps.ping", + "browserType-iOS": "Safari", + "bundleId-iOS-Safari": "com.apple.mobilesafari", + "platformName-android": "Android", + "appPackage-android": "com.android.settings", + "jobName": "Interop-iphone-12", + "jobNumber": 38 + }, + "iPhone-7": { + "model-iOS": "iPhone-7", + "bundleId-iOS": "com.apple.Preferences", + "platformName-iOS": "iOS", + "bundleId-iOS-Settings": "com.apple.Preferences", + "bundleId-iOS-Ping": "com.deftapps.ping", + "browserType-iOS": "Safari", + "bundleId-iOS-Safari": "com.apple.mobilesafari", + "platformName-android": "Android", + "appPackage-android": "com.android.settings", + "jobName": "Interop-iphone-7", + "jobNumber": 38 + }, + "iPhone-XR": { + "model-iOS": "iPhone-XR", + "bundleId-iOS": "com.apple.Preferences", + "platformName-iOS": "iOS", + "bundleId-iOS-Settings": "com.apple.Preferences", + "bundleId-iOS-Ping": "com.deftapps.ping", + "browserType-iOS": "Safari", + "bundleId-iOS-Safari": "com.apple.mobilesafari", + "platformName-android": "Android", + "appPackage-android": "com.android.settings", + "jobName": "Interop-iphone-XR", + "jobNumber": 38 + }, + "Galaxy S20": { + "platformName-android": "Android", + "model-android": "Galaxy S20", + "appPackage-android": "com.android.settings", + "bundleId-iOS-Settings": "com.apple.Preferences", + "bundleId-iOS-Safari": "com.apple.mobilesafari", + "jobName": "Interop-Galaxy-S20", + "jobNumber": 38 + }, + "Galaxy S10.*": { + "platformName-android": "Android", + "model-android": "Galaxy S10.*", + "appPackage-android": "com.android.settings", + "bundleId-iOS-Settings": "com.apple.Preferences", + "bundleId-iOS-Safari": "com.apple.mobilesafari", + "jobName": "Interop-Galaxy-S10", + "jobNumber": 38 + }, + "Galaxy S9": { + "platformName-android": "Android", + "model-android": "Galaxy S9", + "appPackage-android": "com.android.settings", + "bundleId-iOS-Settings": "com.apple.Preferences", + "bundleId-iOS-Safari": "com.apple.mobilesafari", + "jobName": "Interop-Galaxy-S9", + "jobNumber": 38 + }, + "Pixel 4": { + "platformName-android": "Android", + "model-android": "Pixel 4", + "appPackage-android": "com.android.settings", + "bundleId-iOS-Settings": "com.apple.Preferences", + "bundleId-iOS-Safari": "com.apple.mobilesafari", + "jobName": "Interop-pixel-4", + "jobNumber": 38 + } +}, + "RADIUS_SERVER_DATA" : { "ip": "10.10.1.221", "port": 1812, diff --git a/tests/pytest.ini b/tests/pytest.ini index 6dd1d3fb4..075e20c43 100644 --- a/tests/pytest.ini +++ b/tests/pytest.ini @@ -36,38 +36,6 @@ tr_project_id=WLAN tr_prefix=TIP_ milestone=29 -#--- Perfecto parameters ----- -perfectoURL=tip -securityToken=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MzI4Mzc2NDEsImp0aSI6IjAwZGRiYWY5LWQwYjMtNDRjNS1hYjVlLTkyNzFlNzc5ZGUzNiIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiODNkNjUxMWQtNTBmZS00ZWM5LThkNzAtYTA0ZjBkNTdiZDUyIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI2ZjE1YzYxNy01YTU5LTQyOWEtODc2Yi1jOTQxMTQ1ZDFkZTIiLCJzZXNzaW9uX3N0YXRlIjoiYmRjZTFmYTMtMjlkYi00MmFmLWI5YWMtYjZjZmJkMDEyOTFhIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.5R85_1R38ZFXv_wIjjCIsj8NJm1p66dCsLJI5DBEmks -#PS Token -#securityToken=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIyODhhNDIyNS1jOTE1LTQwZDctOTc2YS04MDhiMWE3YTFmODYifQ.eyJpYXQiOjE2MjA4NTU1NTcsImp0aSI6IjNiMWJiNWNhLTkzOTgtNDViOC04YmZkLTAxNjdhNGZjNDY1NCIsImlzcyI6Imh0dHBzOi8vYXV0aC5wZXJmZWN0b21vYmlsZS5jb20vYXV0aC9yZWFsbXMvcHMtcGVyZmVjdG9tb2JpbGUtY29tIiwiYXVkIjoiaHR0cHM6Ly9hdXRoLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy9wcy1wZXJmZWN0b21vYmlsZS1jb20iLCJzdWIiOiIzOTNiMzFhNC00MmJlLTQ2YjEtODkwZS1iZGU3NjdlYTNiNDYiLCJ0eXAiOiJPZmZsaW5lIiwiYXpwIjoib2ZmbGluZS10b2tlbi1nZW5lcmF0b3IiLCJub25jZSI6IjI3MTY4ZjBmLTdlMmItNGI3YS1hZjNjLWFhMGE1NjhkZjE2ZCIsInNlc3Npb25fc3RhdGUiOiJlOWZjZTQ5Mi05NDA3LTQ1ZDItYjU4NS02ZDFiNTAzYzM4ZTUiLCJzY29wZSI6Im9wZW5pZCBvZmZsaW5lX2FjY2VzcyJ9.Z_rJHVkrmR26fZ366yLUSkt2oZX4a8KN7IRCd_QG3qo -#demo Cloud -#securityToken=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI4YmI4YmZmZS1kMzBjLTQ2MjctYmMxMS0zNTYyMmY1ZDkyMGYifQ.eyJpYXQiOjE2MjA5MTMzMjAsImp0aSI6ImRkOWI3OTFiLTA5NzUtNGVhMC05NDczLWU2MjEzOThhN2U0NyIsImlzcyI6Imh0dHBzOi8vYXV0aC5wZXJmZWN0b21vYmlsZS5jb20vYXV0aC9yZWFsbXMvZGVtby1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL2RlbW8tcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiZjAyNGVkZGItODZkMy00OTA5LThhZjQtOGY1OTA1Yzc5ZjA4IiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI5ZDdkMjI5Ny1lYzk1LTQ5NjUtYmRmMC1mZWJiYTk4NzI1MzUiLCJzZXNzaW9uX3N0YXRlIjoiMTI1NjFlMDQtMGUwMS00ZTYxLWE4NjMtMGQ2N2RhNzc1NjhiIiwic2NvcGUiOiJvcGVuaWQgb2ZmbGluZV9hY2Nlc3MifQ.voz1Fca_tOlPDMbIMsoPvTmZHBioeMUetA2sVsQ_SWw - -# Perfecto CI Report -projectName=TIP-PyTest-Execution -projectVersion=1.0 -jobName=Tip-RajTest-Android -jobNumber=2 -reportTags=TestTag - -# iOS Device Capabilities -#manufacturer-iOS=Apple -model-iOS=iPhone-11 -bundleId-iOS=com.apple.Preferences -platformName-iOS=iOS -#default iOS settings app -bundleId-iOS-Settings=com.apple.Preferences -bundleId-iOS-Ping=com.deftapps.ping -#browserType-iOS=Safari -browserType-iOS=Safari -bundleId-iOS-Safari=com.apple.mobilesafari - -# Android Device Capabilities -platformName-android=Android -model-android=Galaxy S20 - -appPackage-android=com.android.settings filterwarnings=ignore::UserWarning