mirror of
https://github.com/Telecominfraproject/wlan-testing.git
synced 2025-11-05 05:17:51 +00:00
Merge branch 'master' into WIFI-5733
This commit is contained in:
136
.github/actions/run-tests/action.yml
vendored
Normal file
136
.github/actions/run-tests/action.yml
vendored
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
name: run tests on Kubernetes
|
||||||
|
description: create Kubernetes job that executes pytest code
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
namespace:
|
||||||
|
description: a name for the Kubernetes namespace that will be used
|
||||||
|
required: true
|
||||||
|
testbed:
|
||||||
|
description: the testbed string that will be passed to the --testbed parameter
|
||||||
|
required: true
|
||||||
|
marker_expression:
|
||||||
|
description: the marker expression that will be passed to the -m parameter
|
||||||
|
required: true
|
||||||
|
configuration:
|
||||||
|
description: the configuration string that will be used to create the configuration secret
|
||||||
|
required: true
|
||||||
|
testing_docker_image:
|
||||||
|
description: Docker image to use when executing tests
|
||||||
|
required: true
|
||||||
|
additional_args:
|
||||||
|
description: additional arguments that will be passed to the pytest execution string
|
||||||
|
required: false
|
||||||
|
allure_results_artifact_name:
|
||||||
|
description: name of the artifact that the allure results will be uploaded to
|
||||||
|
required: false
|
||||||
|
default: allure-results
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: create and select namespace
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
kubectl create ns ${{ inputs.namespace }}
|
||||||
|
kubectl config set-context --current --namespace=${{ inputs.namespace }}
|
||||||
|
|
||||||
|
- name: set job name
|
||||||
|
shell: bash
|
||||||
|
id: job
|
||||||
|
run: echo "::set-output name=name::testing"
|
||||||
|
|
||||||
|
- name: create configuration.py secret
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cat << EOF > configuration.py
|
||||||
|
${{ inputs.configuration }}
|
||||||
|
EOF
|
||||||
|
kubectl create secret generic configuration --from-file=configuration=./configuration.py
|
||||||
|
|
||||||
|
- name: run tests
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cat <<EOF | kubectl apply -f -
|
||||||
|
apiVersion: batch/v1
|
||||||
|
kind: Job
|
||||||
|
metadata:
|
||||||
|
name: "${{ steps.job.outputs.name }}"
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: tests
|
||||||
|
image: ${{ inputs.testing_docker_image }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "512Mi"
|
||||||
|
cpu: "250m"
|
||||||
|
limits:
|
||||||
|
memory: "512Mi"
|
||||||
|
cpu: "250m"
|
||||||
|
command:
|
||||||
|
- /bin/bash
|
||||||
|
- -x
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
cd tests
|
||||||
|
pytest -m "${{ inputs.marker_expression }}" -s -vvv --testbed=${{ inputs.testbed }} --alluredir=/tmp/allure-results ${{ inputs.additional_args }}
|
||||||
|
ret=\$?
|
||||||
|
# sleep some time to be able to download the Allure results
|
||||||
|
sleep 60
|
||||||
|
exit \$ret
|
||||||
|
volumeMounts:
|
||||||
|
- name: configuration
|
||||||
|
mountPath: "/wlan-testing/tests/configuration.py"
|
||||||
|
subPath: configuration
|
||||||
|
readOnly: true
|
||||||
|
nodeSelector:
|
||||||
|
env: tests
|
||||||
|
tolerations:
|
||||||
|
- key: "tests"
|
||||||
|
operator: "Exists"
|
||||||
|
effect: "NoSchedule"
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: tip-docker-registry-key
|
||||||
|
restartPolicy: Never
|
||||||
|
volumes:
|
||||||
|
- name: configuration
|
||||||
|
secret:
|
||||||
|
secretName: configuration
|
||||||
|
backoffLimit: 0
|
||||||
|
EOF
|
||||||
|
# wait for pod to spawn
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
podname=$(kubectl get pods --no-headers -o custom-columns=":metadata.name" -l job-name="${{ steps.job.outputs.name }}" | sed "s/pod\///")
|
||||||
|
|
||||||
|
kubectl wait "pod/$podname" --for condition=ready --timeout=600s
|
||||||
|
kubectl logs -f $podname &
|
||||||
|
|
||||||
|
until [ -s test_everything.xml ]
|
||||||
|
do
|
||||||
|
sleep 10
|
||||||
|
kubectl cp $podname:/wlan-testing/tests/test_everything.xml test_everything.xml >/dev/null 2>&1
|
||||||
|
done
|
||||||
|
echo "tests completed"
|
||||||
|
echo "downloading allure results..."
|
||||||
|
kubectl cp $podname:/tmp/allure-results allure-results >/dev/null 2>&1
|
||||||
|
echo "waiting for pod to exit"
|
||||||
|
kubectl logs -f $podname >/dev/null 2>&1
|
||||||
|
exit $(kubectl get pod $podname --output="jsonpath={.status.containerStatuses[].state.terminated.exitCode}")
|
||||||
|
|
||||||
|
- name: upload Allure results as artifact
|
||||||
|
if: ${{ always() }}
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.allure_results_artifact_name }}
|
||||||
|
path: allure-results
|
||||||
|
|
||||||
|
- name: cleanup
|
||||||
|
if: ${{ always() }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
kubectl delete ns "${{ inputs.namespace }}" --wait=true
|
||||||
384
.github/workflows/interop.yml
vendored
384
.github/workflows/interop.yml
vendored
@@ -1,10 +1,6 @@
|
|||||||
name: interop testing
|
name: interop testing
|
||||||
|
|
||||||
env:
|
env:
|
||||||
# thirdparties
|
|
||||||
DOCKER_SERVER: tip-tip-wlan-cloud-docker-repo.jfrog.io
|
|
||||||
DOCKER_USER_NAME: wlan-testing-cicd
|
|
||||||
DOCKER_USER_PASSWORD: ${{ secrets.DOCKER_USER_PASSWORD }}
|
|
||||||
# AWS credentials
|
# AWS credentials
|
||||||
AWS_EKS_NAME: tip-wlan-main
|
AWS_EKS_NAME: tip-wlan-main
|
||||||
AWS_DEFAULT_OUTPUT: json
|
AWS_DEFAULT_OUTPUT: json
|
||||||
@@ -19,11 +15,6 @@ env:
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
|
||||||
additional_markers:
|
|
||||||
default: ''
|
|
||||||
description: 'Pass additional markers that will be and-combined with the interop marker, e.g. "twog or fiveg" -> "interop and twog or fiveg"'
|
|
||||||
required: false
|
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '30 20 * * *'
|
- cron: '30 20 * * *'
|
||||||
|
|
||||||
@@ -35,172 +26,203 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
# checkout needed repositories
|
- uses: actions/checkout@v2
|
||||||
- name: Checkout Testing repo
|
- name: build and push Docker image
|
||||||
uses: actions/checkout@v2
|
uses: ./.github/actions/build-and-push-docker
|
||||||
with:
|
with:
|
||||||
path: wlan-testing
|
registry: tip-tip-wlan-cloud-docker-repo.jfrog.io
|
||||||
|
registry_user: wlan-testing-cicd
|
||||||
|
registry_password: ${{ secrets.DOCKER_USER_PASSWORD }}
|
||||||
|
|
||||||
- name: Checkout LANforge scripts
|
# interop-01
|
||||||
uses: actions/checkout@v2
|
test-galaxy-s9:
|
||||||
with:
|
|
||||||
path: wlan-lanforge-scripts
|
|
||||||
repository: Telecominfraproject/wlan-lanforge-scripts
|
|
||||||
|
|
||||||
- name: import LANforge scripts
|
|
||||||
working-directory: wlan-testing
|
|
||||||
run: ./sync_repos.bash
|
|
||||||
|
|
||||||
# build and push docker image
|
|
||||||
- name: docker login
|
|
||||||
run: docker login ${{ env.DOCKER_SERVER }} -u ${{ env.DOCKER_USER_NAME }} -p ${{ env.DOCKER_USER_PASSWORD }}
|
|
||||||
- name: build docker image
|
|
||||||
working-directory: wlan-testing
|
|
||||||
run: docker build -t ${{ env.DOCKER_SERVER }}/cloud-sdk-nightly:${{ github.run_id }} -f docker/Dockerfile .
|
|
||||||
- name: push docker image
|
|
||||||
run: docker push ${{ env.DOCKER_SERVER }}/cloud-sdk-nightly:${{ github.run_id }}
|
|
||||||
|
|
||||||
|
|
||||||
test:
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [ build ]
|
needs: [ build ]
|
||||||
strategy:
|
continue-on-error: true
|
||||||
fail-fast: false
|
|
||||||
max-parallel: 1
|
|
||||||
matrix:
|
|
||||||
test_type: [android, ios]
|
|
||||||
|
|
||||||
outputs:
|
|
||||||
additional_markers: ${{ steps.marker.outputs.additional }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: get EKS access credentials
|
- name: get EKS access credentials
|
||||||
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }}
|
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }}
|
||||||
|
|
||||||
- name: install Allure CLI tool
|
- name: run tests
|
||||||
run: |
|
uses: ./.github/actions/run-tests
|
||||||
wget https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/${{ env.ALLURE_CLI_VERSION }}/allure-commandline-${{ env.ALLURE_CLI_VERSION }}.tgz
|
|
||||||
tar -xzf allure-commandline-${{ env.ALLURE_CLI_VERSION }}.tgz
|
|
||||||
|
|
||||||
- name: set job name
|
|
||||||
id: job
|
|
||||||
run: echo "::set-output name=name::interop-ci-${{ github.run_number }}-${{ matrix.test_type }}"
|
|
||||||
|
|
||||||
- name: create configuration.py secret
|
|
||||||
run: |
|
|
||||||
cat << EOF > configuration.py
|
|
||||||
${{ secrets.LAB_CONFIGURATION }}
|
|
||||||
EOF
|
|
||||||
kubectl create secret generic configuration --from-file=configuration=./configuration.py
|
|
||||||
|
|
||||||
- name: calculate marker expression
|
|
||||||
id: marker
|
|
||||||
run: |
|
|
||||||
if [ "${{ matrix.test_type }}" = "android" ]; then
|
|
||||||
MARKER_EXPRESSION="interop_and and interop_uc_sanity and client_connect"
|
|
||||||
else
|
|
||||||
MARKER_EXPRESSION="interop_ios and interop_uc_sanity and client_connect"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ADDITIONAL_MARKERS="${{ github.event.inputs.additional_markers || '' }}"
|
|
||||||
if [ ! -z "$ADDITIONAL_MARKERS" ]; then
|
|
||||||
MARKER_EXPRESSION="$MARKER_EXPRESSION and ${ADDITIONAL_MARKERS}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "::set-output name=additional::${ADDITIONAL_MARKERS}"
|
|
||||||
echo "::set-output name=expression::${MARKER_EXPRESSION}"
|
|
||||||
|
|
||||||
- name: run interop tests
|
|
||||||
run: |
|
|
||||||
cat <<EOF | kubectl apply -f -
|
|
||||||
apiVersion: batch/v1
|
|
||||||
kind: Job
|
|
||||||
metadata:
|
|
||||||
name: "${{ steps.job.outputs.name }}"
|
|
||||||
spec:
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: tests
|
|
||||||
image: ${{ env.DOCKER_SERVER }}/cloud-sdk-nightly:${{ github.run_id }}
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
memory: "512Mi"
|
|
||||||
cpu: "250m"
|
|
||||||
limits:
|
|
||||||
memory: "512Mi"
|
|
||||||
cpu: "250m"
|
|
||||||
command:
|
|
||||||
- /bin/bash
|
|
||||||
- -x
|
|
||||||
- -c
|
|
||||||
- |
|
|
||||||
cd tests
|
|
||||||
pytest -m "${{ steps.marker.outputs.expression }}" -s -vvv --testbed=interop-03 -o 'jobName=Github-Interop-${{ matrix.test_type }}' -o 'jobNumber=${{ github.run_number }}' --alluredir=/tmp/allure-results --skip-lanforge
|
|
||||||
ret=\$?
|
|
||||||
# sleep some time to be able to download the Allure results
|
|
||||||
sleep 60
|
|
||||||
exit \$ret
|
|
||||||
volumeMounts:
|
|
||||||
- name: configuration
|
|
||||||
mountPath: "/wlan-testing/tests/configuration.py"
|
|
||||||
subPath: configuration
|
|
||||||
readOnly: true
|
|
||||||
nodeSelector:
|
|
||||||
env: tests
|
|
||||||
tolerations:
|
|
||||||
- key: "tests"
|
|
||||||
operator: "Exists"
|
|
||||||
effect: "NoSchedule"
|
|
||||||
imagePullSecrets:
|
|
||||||
- name: tip-docker-registry-key
|
|
||||||
restartPolicy: Never
|
|
||||||
volumes:
|
|
||||||
- name: configuration
|
|
||||||
secret:
|
|
||||||
secretName: configuration
|
|
||||||
backoffLimit: 0
|
|
||||||
EOF
|
|
||||||
# wait for pod to spawn
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
podname=$(kubectl get pods --no-headers -o custom-columns=":metadata.name" -l job-name="${{ steps.job.outputs.name }}" | sed "s/pod\///")
|
|
||||||
|
|
||||||
kubectl wait "pod/$podname" --for condition=ready --timeout=600s
|
|
||||||
kubectl logs -f $podname &
|
|
||||||
|
|
||||||
until [ -s test_everything.xml ]
|
|
||||||
do
|
|
||||||
sleep 10
|
|
||||||
kubectl cp $podname:/wlan-testing/tests/test_everything.xml test_everything.xml >/dev/null 2>&1
|
|
||||||
done
|
|
||||||
echo "tests completed"
|
|
||||||
echo "downloading allure results..."
|
|
||||||
kubectl cp $podname:/tmp/allure-results allure-results >/dev/null 2>&1
|
|
||||||
echo "waiting for pod to exit"
|
|
||||||
kubectl logs -f $podname >/dev/null 2>&1
|
|
||||||
exit $(kubectl get pod $podname --output="jsonpath={.status.containerStatuses[].state.terminated.exitCode}")
|
|
||||||
|
|
||||||
- name: upload Allure results as artifact
|
|
||||||
if: ${{ always() }}
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
with:
|
with:
|
||||||
name: allure-results-${{ matrix.test_type }}
|
namespace: interop-${{ github.run_id }}-galaxy-s9
|
||||||
path: allure-results
|
testbed: interop-01
|
||||||
|
marker_expression: "interop_uc_sanity and client_connect and android"
|
||||||
|
configuration: "${{ secrets.LAB_CONFIGURATION }}"
|
||||||
|
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"
|
||||||
|
allure_results_artifact_name: allure-results-galaxy-s9
|
||||||
|
|
||||||
- name: cleanup
|
test-iphone-12:
|
||||||
if: ${{ always() }}
|
runs-on: ubuntu-latest
|
||||||
run: |
|
needs: [ test-galaxy-s9 ]
|
||||||
kubectl delete job "${{ steps.job.outputs.name }}" --wait=true --ignore-not-found=true
|
continue-on-error: true
|
||||||
kubectl delete secret configuration --wait=true --ignore-not-found=true
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: get EKS access credentials
|
||||||
|
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }}
|
||||||
|
|
||||||
|
- name: run tests
|
||||||
|
uses: ./.github/actions/run-tests
|
||||||
|
with:
|
||||||
|
namespace: interop-${{ github.run_id }}-iphone-12
|
||||||
|
testbed: interop-01
|
||||||
|
marker_expression: "interop_uc_sanity and client_connect and ios"
|
||||||
|
configuration: "${{ secrets.LAB_CONFIGURATION }}"
|
||||||
|
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"
|
||||||
|
allure_results_artifact_name: allure-results-iphone-12
|
||||||
|
|
||||||
|
test-pixel-4:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [ test-iphone-12 ]
|
||||||
|
continue-on-error: true
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: get EKS access credentials
|
||||||
|
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }}
|
||||||
|
|
||||||
|
- name: run tests
|
||||||
|
uses: ./.github/actions/run-tests
|
||||||
|
with:
|
||||||
|
namespace: interop-${{ github.run_id }}-pixel-4
|
||||||
|
testbed: interop-01
|
||||||
|
marker_expression: "interop_uc_sanity and client_connect and android"
|
||||||
|
configuration: "${{ secrets.LAB_CONFIGURATION }}"
|
||||||
|
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"
|
||||||
|
allure_results_artifact_name: allure-results-pixel-4
|
||||||
|
|
||||||
|
# interop-02
|
||||||
|
test-galaxy-s10:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [ build ]
|
||||||
|
continue-on-error: true
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: get EKS access credentials
|
||||||
|
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }}
|
||||||
|
|
||||||
|
- name: run tests
|
||||||
|
uses: ./.github/actions/run-tests
|
||||||
|
with:
|
||||||
|
namespace: interop-${{ github.run_id }}-galaxy-s10
|
||||||
|
testbed: interop-02
|
||||||
|
marker_expression: "interop_uc_sanity and client_connect and android"
|
||||||
|
configuration: "${{ secrets.LAB_CONFIGURATION }}"
|
||||||
|
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"
|
||||||
|
allure_results_artifact_name: allure-results-galaxy-s10
|
||||||
|
|
||||||
|
test-iphone-7:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [ test-galaxy-s10 ]
|
||||||
|
continue-on-error: true
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: get EKS access credentials
|
||||||
|
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }}
|
||||||
|
|
||||||
|
- name: run tests
|
||||||
|
uses: ./.github/actions/run-tests
|
||||||
|
with:
|
||||||
|
namespace: interop-${{ github.run_id }}-iphone-7
|
||||||
|
testbed: interop-02
|
||||||
|
marker_expression: "interop_uc_sanity and client_connect and ios"
|
||||||
|
configuration: "${{ secrets.LAB_CONFIGURATION }}"
|
||||||
|
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"
|
||||||
|
allure_results_artifact_name: allure-results-iphone-7
|
||||||
|
|
||||||
|
test-iphone-11:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [ test-iphone-7 ]
|
||||||
|
continue-on-error: true
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: get EKS access credentials
|
||||||
|
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }}
|
||||||
|
|
||||||
|
- name: run tests
|
||||||
|
uses: ./.github/actions/run-tests
|
||||||
|
with:
|
||||||
|
namespace: interop-${{ github.run_id }}-iphone-11
|
||||||
|
testbed: interop-02
|
||||||
|
marker_expression: "interop_uc_sanity and client_connect and ios"
|
||||||
|
configuration: "${{ secrets.LAB_CONFIGURATION }}"
|
||||||
|
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"
|
||||||
|
allure_results_artifact_name: allure-results-iphone-11
|
||||||
|
|
||||||
|
# interop-03
|
||||||
|
test-galaxy-s20:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [ build ]
|
||||||
|
continue-on-error: true
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: get EKS access credentials
|
||||||
|
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }}
|
||||||
|
|
||||||
|
- name: run tests
|
||||||
|
uses: ./.github/actions/run-tests
|
||||||
|
with:
|
||||||
|
namespace: interop-${{ github.run_id }}-galaxy-s20
|
||||||
|
testbed: interop-03
|
||||||
|
marker_expression: "interop_uc_sanity and client_connect and android"
|
||||||
|
configuration: "${{ secrets.LAB_CONFIGURATION }}"
|
||||||
|
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"
|
||||||
|
allure_results_artifact_name: allure-results-galaxy-s20
|
||||||
|
|
||||||
|
test-iphone-xr:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [ test-galaxy-s20 ]
|
||||||
|
continue-on-error: true
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: get EKS access credentials
|
||||||
|
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }}
|
||||||
|
|
||||||
|
- name: run tests
|
||||||
|
uses: ./.github/actions/run-tests
|
||||||
|
with:
|
||||||
|
namespace: interop-${{ github.run_id }}-iphone-xr
|
||||||
|
testbed: interop-03
|
||||||
|
marker_expression: "interop_uc_sanity and client_connect and ios"
|
||||||
|
configuration: "${{ secrets.LAB_CONFIGURATION }}"
|
||||||
|
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"
|
||||||
|
allure_results_artifact_name: allure-results-iphone-xr
|
||||||
|
|
||||||
report:
|
report:
|
||||||
needs: [ test ]
|
needs: [ test-iphone-11, test-iphone-xr, test-pixel-4 ]
|
||||||
if: always()
|
if: always()
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
max-parallel: 1
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
device:
|
||||||
|
- galaxy-s9
|
||||||
|
- galaxy-s10
|
||||||
|
- galaxy-s20
|
||||||
|
- pixel-4
|
||||||
|
- iphone-7
|
||||||
|
- iphone-xr
|
||||||
|
- iphone-11
|
||||||
|
- iphone-12
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: install Allure CLI tool
|
- name: install Allure CLI tool
|
||||||
run: |
|
run: |
|
||||||
@@ -209,13 +231,8 @@ jobs:
|
|||||||
|
|
||||||
- uses: actions/download-artifact@v2
|
- uses: actions/download-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: allure-results-android
|
name: allure-results-${{ matrix.device }}
|
||||||
path: allure-results-android
|
path: allure-results
|
||||||
|
|
||||||
- uses: actions/download-artifact@v2
|
|
||||||
with:
|
|
||||||
name: allure-results-ios
|
|
||||||
path: allure-results-ios
|
|
||||||
|
|
||||||
- name: checkout testing repo
|
- name: checkout testing repo
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@@ -231,14 +248,14 @@ jobs:
|
|||||||
|
|
||||||
- name: copy history into results
|
- name: copy history into results
|
||||||
run: |
|
run: |
|
||||||
if [ -e "reports/interop/interop/latest" ] ; then
|
if [ -e "reports/interop/${{ matrix.device }}/latest" ] ; then
|
||||||
cp -r reports/interop/interop/latest/history/ allure-results-ios/history
|
cp -r reports/interop/${{ matrix.device }}/latest/history/ allure-results/history
|
||||||
cp -r reports/interop/interop/latest/history/ allure-results-android/history
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: add report metadata
|
- name: add report metadata
|
||||||
run: |
|
run: |
|
||||||
cat << EOF >> allure-results-android/environment.properties
|
cat << EOF >> allure-results/environment.properties
|
||||||
|
|
||||||
Testbed=interop
|
Testbed=interop
|
||||||
Tests.CommitId=$(cd wlan-testing && git rev-parse --short HEAD)
|
Tests.CommitId=$(cd wlan-testing && git rev-parse --short HEAD)
|
||||||
CiRun.Id=${{ github.run_id }}
|
CiRun.Id=${{ github.run_id }}
|
||||||
@@ -247,28 +264,27 @@ jobs:
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
- name: generate Allure report
|
- name: generate Allure report
|
||||||
run: allure-${{ env.ALLURE_CLI_VERSION }}/bin/allure generate allure-results-android allure-results-ios
|
run: allure-${{ env.ALLURE_CLI_VERSION }}/bin/allure generate allure-results
|
||||||
|
|
||||||
- name: upload Allure report as artifact
|
- name: upload Allure report as artifact
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: allure-report
|
name: allure-report-${{ matrix.device }}
|
||||||
path: allure-report
|
path: allure-report
|
||||||
|
|
||||||
# doing this to be able to aggregate multiple reports together later on
|
# doing this to be able to aggregate multiple reports together later on
|
||||||
- name: copy results into report
|
- name: copy results into report
|
||||||
run: |
|
run: |
|
||||||
mkdir -p allure-report/results
|
mkdir -p allure-report/results
|
||||||
cp -r allure-results-android/* allure-report/results
|
cp -r allure-results/* allure-report/results
|
||||||
cp -r allure-results-ios/* allure-report/results
|
|
||||||
|
|
||||||
- name: copy new report
|
- name: copy new report
|
||||||
run: |
|
run: |
|
||||||
mkdir -p reports/interop/interop
|
mkdir -p reports/interop/${{ matrix.device }}
|
||||||
cp -Tr allure-report reports/interop/interop/${{ github.run_number }}
|
cp -Tr allure-report reports/interop/${{ matrix.device }}/${{ github.run_number }}
|
||||||
|
|
||||||
- name: update latest symlink
|
- name: update latest symlink
|
||||||
working-directory: reports/interop/interop
|
working-directory: reports/interop/${{ matrix.device }}
|
||||||
run: ln -fns ${{ github.run_number }} latest
|
run: ln -fns ${{ github.run_number }} latest
|
||||||
|
|
||||||
- name: generate new index.html
|
- name: generate new index.html
|
||||||
@@ -296,15 +312,19 @@ jobs:
|
|||||||
uses: ./wlan-testing/.github/actions/allure-report-to-s3
|
uses: ./wlan-testing/.github/actions/allure-report-to-s3
|
||||||
with:
|
with:
|
||||||
test_type: interop
|
test_type: interop
|
||||||
testbed: interop
|
testbed: ${{ matrix.device }}
|
||||||
report_path: allure-report
|
report_path: allure-report
|
||||||
s3_access_key_id: ${{ secrets.ALLURE_S3_ACCESS_KEY_ID }}
|
s3_access_key_id: ${{ secrets.ALLURE_S3_ACCESS_KEY_ID }}
|
||||||
s3_access_key_secret: ${{ secrets.ALLURE_S3_ACCESS_KEY_SECRET }}
|
s3_access_key_secret: ${{ secrets.ALLURE_S3_ACCESS_KEY_SECRET }}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
needs: [ test ]
|
needs: [ test-iphone-11, test-iphone-xr, test-pixel-4 ]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: always()
|
if: always()
|
||||||
steps:
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
- name: cleanup Docker image
|
- name: cleanup Docker image
|
||||||
run: curl -u${{ env.DOCKER_USER_NAME }}:${{ env.DOCKER_USER_PASSWORD }} -X DELETE "https://tip.jfrog.io/artifactory/tip-wlan-cloud-docker-repo/cloud-sdk-nightly/${{ github.run_id }}"
|
uses: ./.github/actions/cleanup-docker
|
||||||
|
with:
|
||||||
|
registry_user: wlan-testing-cicd
|
||||||
|
registry_password: ${{ secrets.DOCKER_USER_PASSWORD }}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ from cloudshell.api.cloudshell_api import UpdateTopologyGlobalInputsRequest, Upd
|
|||||||
|
|
||||||
from common import get_session
|
from common import get_session
|
||||||
|
|
||||||
|
|
||||||
def get_attribute_value(cloudshell_session, attribute):
|
def get_attribute_value(cloudshell_session, attribute):
|
||||||
if attribute.Type == 'Boolean':
|
if attribute.Type == 'Boolean':
|
||||||
return True if attribute.Value == 'True' else False
|
return True if attribute.Value == 'True' else False
|
||||||
@@ -26,7 +27,7 @@ def main():
|
|||||||
|
|
||||||
config = {
|
config = {
|
||||||
'controller': {},
|
'controller': {},
|
||||||
'access_point':[],
|
'access_point': [],
|
||||||
'traffic_generator': {}
|
'traffic_generator': {}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,8 +36,9 @@ def main():
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
config['controller']['url'] = f'https://sec-{res_id.split("-")[0]}.cicd.lab.wlan.tip.build:16001'
|
config['controller']['url'] = f'https://sec-{res_id.split("-")[0]}.cicd.lab.wlan.tip.build:16001'
|
||||||
config['controller']['username'] = next(attr.Value for attr in service.Attributes if attr.Name == f'{service.ServiceName}.User')
|
config['controller']['username'] = next(
|
||||||
#config['controller']['password'] = next(attr.Value for attr in service.Attributes if attr.Name == f'{service.ServiceName}.Password')
|
attr.Value for attr in service.Attributes if attr.Name == f'{service.ServiceName}.User')
|
||||||
|
# config['controller']['password'] = next(attr.Value for attr in service.Attributes if attr.Name == f'{service.ServiceName}.Password')
|
||||||
config['controller']['password'] = 'OpenWifi%123'
|
config['controller']['password'] = 'OpenWifi%123'
|
||||||
|
|
||||||
for resource in resources_in_reservation:
|
for resource in resources_in_reservation:
|
||||||
@@ -67,8 +69,8 @@ def main():
|
|||||||
'ip': tf_config['ip'],
|
'ip': tf_config['ip'],
|
||||||
'port': tf_config['port'],
|
'port': tf_config['port'],
|
||||||
'ssh_port': tf_config['ssh_port'],
|
'ssh_port': tf_config['ssh_port'],
|
||||||
'2.4G-Radio': [tf_config['lf_2dot4G_Radio']],
|
'2.4G-Radio': tf_config['lf_2dot4G_Radio'].replace(' ', '').split(','),
|
||||||
'5G-Radio': [tf_config['lf_5G_Radio']],
|
'5G-Radio': tf_config['lf_5G_Radio'].replace(' ', '').split(','),
|
||||||
'AX-Radio': tf_config['AX_Radio'].replace(' ', '').split(','),
|
'AX-Radio': tf_config['AX_Radio'].replace(' ', '').split(','),
|
||||||
'upstream': tf_config['Upstream'],
|
'upstream': tf_config['Upstream'],
|
||||||
'upstream_subnet': tf_config['upstream_subnet'],
|
'upstream_subnet': tf_config['upstream_subnet'],
|
||||||
@@ -83,5 +85,6 @@ def main():
|
|||||||
|
|
||||||
print(repr(config))
|
print(repr(config))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -920,12 +920,11 @@ def get_ip_address_ios(request, WifiName, WifiPass, setup_perfectoMobile, connDa
|
|||||||
openApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile)
|
openApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
time.sleep(2)
|
time.sleep(1)
|
||||||
driver.implicitly_wait(2)
|
|
||||||
try:
|
try:
|
||||||
print("Verifying Connected Wifi Connection")
|
print("Verifying Connected Wifi Connection")
|
||||||
report.step_start("Loading Wifi Page")
|
report.step_start("Loading Wifi Page")
|
||||||
element = driver.find_element_by_xpath("//XCUIElementTypeCell[@name='Wi-Fi']")
|
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((MobileBy.XPATH, "//XCUIElementTypeCell[@name='Wi-Fi']")))
|
||||||
element.click()
|
element.click()
|
||||||
except NoSuchElementException:
|
except NoSuchElementException:
|
||||||
print("Exception: Verify Xpath - unable to click on Wifi")
|
print("Exception: Verify Xpath - unable to click on Wifi")
|
||||||
@@ -948,7 +947,7 @@ def get_ip_address_ios(request, WifiName, WifiPass, setup_perfectoMobile, connDa
|
|||||||
get_wifi_switch_element = driver.find_element_by_xpath("//*[@label='Wi-Fi' and @value='1']")
|
get_wifi_switch_element = driver.find_element_by_xpath("//*[@label='Wi-Fi' and @value='1']")
|
||||||
get_wifi_switch_element_text = get_wifi_switch_element.text
|
get_wifi_switch_element_text = get_wifi_switch_element.text
|
||||||
except:
|
except:
|
||||||
print("switch is OFF")
|
print("Switch is OFF")
|
||||||
|
|
||||||
if get_wifi_switch_element_text == "1" or get_wifi_switch_element_text == 1:
|
if get_wifi_switch_element_text == "1" or get_wifi_switch_element_text == 1:
|
||||||
print("WIFI Switch is ON")
|
print("WIFI Switch is ON")
|
||||||
@@ -983,17 +982,16 @@ def get_ip_address_ios(request, WifiName, WifiPass, setup_perfectoMobile, connDa
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
print("getting in to Additional details")
|
print("getting in to Additional details")
|
||||||
additional_details_element = driver.find_element_by_xpath(
|
additional_details_element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@label='selected']/parent::*/parent::*/XCUIElementTypeButton[@label='More Info']")))
|
||||||
"//*[@label='selected']/parent::*/parent::*/XCUIElementTypeButton[@label='More Info']")
|
|
||||||
additional_details_element.click()
|
additional_details_element.click()
|
||||||
try:
|
try:
|
||||||
print("Forget Connected Network")
|
print("Forget Connected Network")
|
||||||
forget_ssid = driver.find_element_by_xpath("//*[@label='Forget This Network']")
|
forget_ssid = WebDriverWait(driver, 10).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@label='Forget This Network']")))
|
||||||
forget_ssid.click()
|
forget_ssid.click()
|
||||||
print("Forget old ssid")
|
print("Forget old ssid")
|
||||||
try:
|
try:
|
||||||
report.step_start("Forget SSID popup1")
|
report.step_start("Forget SSID popup1")
|
||||||
forget_ssid_popup = driver.find_element_by_xpath("//*[@label='Forget']")
|
forget_ssid_popup = WebDriverWait(driver, 10).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@label='Forget']")))
|
||||||
forget_ssid_popup.click()
|
forget_ssid_popup.click()
|
||||||
|
|
||||||
print("**alert** Forget SSID popup killed **alert**")
|
print("**alert** Forget SSID popup killed **alert**")
|
||||||
@@ -1053,7 +1051,6 @@ def get_ip_address_ios(request, WifiName, WifiPass, setup_perfectoMobile, connDa
|
|||||||
|
|
||||||
# ---------------------Set Password-------------------------------
|
# ---------------------Set Password-------------------------------
|
||||||
try:
|
try:
|
||||||
driver.implicitly_wait(5)
|
|
||||||
wifiPassword = driver.find_element_by_xpath("//*[@label='Password']")
|
wifiPassword = driver.find_element_by_xpath("//*[@label='Password']")
|
||||||
wifiPassword.send_keys(WifiPass)
|
wifiPassword.send_keys(WifiPass)
|
||||||
except NoSuchElementException:
|
except NoSuchElementException:
|
||||||
@@ -1062,8 +1059,7 @@ def get_ip_address_ios(request, WifiName, WifiPass, setup_perfectoMobile, connDa
|
|||||||
|
|
||||||
# ---------------------Click on join-------------------------------
|
# ---------------------Click on join-------------------------------
|
||||||
try:
|
try:
|
||||||
driver.implicitly_wait(5)
|
joinBTN = WebDriverWait(driver, 10).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@label='Join']")))
|
||||||
joinBTN = driver.find_element_by_xpath("//*[@label='Join']")
|
|
||||||
joinBTN.click()
|
joinBTN.click()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("Join Button Not Enabled...Password may not be needed")
|
print("Join Button Not Enabled...Password may not be needed")
|
||||||
@@ -1103,9 +1099,8 @@ def get_ip_address_ios(request, WifiName, WifiPass, setup_perfectoMobile, connDa
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
driver.implicitly_wait(2)
|
|
||||||
report.step_start("Forget Network")
|
report.step_start("Forget Network")
|
||||||
forget_ssid = driver.find_element_by_xpath("//*[@label='Forget This Network']")
|
forget_ssid = WebDriverWait(driver, 10).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@label='Forget This Network']")))
|
||||||
forget_ssid.click()
|
forget_ssid.click()
|
||||||
print("Forget old ssid")
|
print("Forget old ssid")
|
||||||
# time.sleep(2)
|
# time.sleep(2)
|
||||||
|
|||||||
Reference in New Issue
Block a user