mirror of
https://github.com/Telecominfraproject/wlan-testing.git
synced 2025-12-27 16:04:56 +00:00
300 lines
11 KiB
YAML
300 lines
11 KiB
YAML
name: performance testing
|
|
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_EKS_NAME: tip-wlan-main
|
|
AWS_DEFAULT_OUTPUT: json
|
|
AWS_DEFAULT_REGION: us-east-2
|
|
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
|
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_CLIENT_ID }}
|
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_CLIENT_KEY }}
|
|
# Cloud SDK certs
|
|
CACERT: ${{ secrets.CACERT }}
|
|
CAKEY: ${{ secrets.CAKEY }}
|
|
ALLURE_CLI_VERSION: 2.14.0
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
testbed:
|
|
default: 'basic-01'
|
|
description: 'Testbed to test'
|
|
required: false
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
# checkout needed repositories
|
|
- name: Checkout Testing repo
|
|
uses: actions/checkout@v2
|
|
with:
|
|
path: wlan-testing
|
|
|
|
- name: Checkout LANforge scripts
|
|
uses: actions/checkout@v2
|
|
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: [ self-hosted, small ]
|
|
needs: [ build ]
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
marker:
|
|
- dataplane_throughput_test
|
|
- single_station_dual_band_throughput
|
|
- wifi_capacity_test
|
|
|
|
outputs:
|
|
testbed: ${{ steps.testbed.outputs.name }}
|
|
|
|
steps:
|
|
- name: install aws CLI tool
|
|
run: |
|
|
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
|
unzip awscliv2.zip
|
|
sudo ./aws/install
|
|
|
|
- name: install kubectl
|
|
run: |
|
|
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
|
|
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
|
|
|
|
- name: get EKS access credentials
|
|
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }}
|
|
|
|
- name: install Allure CLI tool
|
|
run: |
|
|
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::perf-${{ github.run_id }}"
|
|
|
|
- name: set testbed
|
|
id: testbed
|
|
run: echo "::set-output name=name::${{ github.event.inputs.testbed || 'basic-01' }}"
|
|
|
|
- name: prepare namespace
|
|
id: namespace
|
|
run: |
|
|
NAMESPACE="testing-${{ github.run_id }}-${{ steps.testbed.outputs.name }}"
|
|
kubectl create ns $NAMESPACE
|
|
kubectl config set-context --current --namespace=$NAMESPACE
|
|
echo "::set-output name=name::${NAMESPACE}"
|
|
|
|
- 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: run perf tests
|
|
run: |
|
|
cat <<EOF | kubectl apply -f -
|
|
apiVersion: batch/v1
|
|
kind: Job
|
|
metadata:
|
|
name: "${{ steps.job.outputs.name }}"
|
|
spec:
|
|
template:
|
|
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 "performance and ${{ matrix.marker }}" -s -vvv --testbed="${{ steps.testbed.outputs.name }}" --alluredir=/tmp/allure-results
|
|
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
|
|
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
|
|
#sleep 30 # wait for the pod to come up
|
|
until [ -s test_everything.xml ]
|
|
do
|
|
sleep 10
|
|
echo "waiting for tests to complete..."
|
|
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: print logs
|
|
if: always()
|
|
run: |
|
|
podname=$(kubectl get pods --no-headers -o custom-columns=":metadata.name" -l job-name="${{ steps.job.outputs.name }}" | sed "s/pod\///")
|
|
kubectl logs $podname
|
|
|
|
- name: upload Allure results as artifact
|
|
if: always()
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: allure-results-${{ matrix.marker }}
|
|
path: allure-results
|
|
|
|
- name: cleanup
|
|
if: always()
|
|
run: |
|
|
kubectl delete ns "${{ steps.namespace.outputs.name }}" --wait=true
|
|
report:
|
|
runs-on: ubuntu-latest
|
|
needs: [ test ]
|
|
if: always()
|
|
steps:
|
|
- name: install Allure CLI tool
|
|
run: |
|
|
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
|
|
- uses: actions/download-artifact@v2
|
|
with:
|
|
name: allure-results-dataplane_throughput_test
|
|
path: allure-results-dataplane_throughput_test
|
|
|
|
- uses: actions/download-artifact@v2
|
|
with:
|
|
name: allure-results-single_station_dual_band_throughput
|
|
path: allure-results-single_station_dual_band_throughput
|
|
|
|
- uses: actions/download-artifact@v2
|
|
with:
|
|
name: allure-results-wifi_capacity_test
|
|
path: allure-results-wifi_capacity_test
|
|
|
|
- name: checkout testing repo
|
|
uses: actions/checkout@v2
|
|
with:
|
|
path: wlan-testing
|
|
|
|
- name: get reports branch
|
|
uses: actions/checkout@v2
|
|
continue-on-error: true
|
|
with:
|
|
ref: gh-pages
|
|
path: reports
|
|
|
|
- name: copy history into results
|
|
run: |
|
|
if [ -e "reports/performance/${{ needs.test.outputs.testbed }}/latest" ] ; then
|
|
cp -r reports/performance/${{ needs.test.outputs.testbed }}/latest/history/ allure-results-dataplane_throughput_test/history
|
|
cp -r reports/performance/${{ needs.test.outputs.testbed }}/latest/history/ allure-results-single_station_dual_band_throughput/history
|
|
cp -r reports/performance/${{ needs.test.outputs.testbed }}/latest/history/ allure-results-wifi_capacity_test/history
|
|
fi
|
|
- name: add report metadata
|
|
run: |
|
|
cat << EOF >> allure-results-dataplane_throughput_test/environment.properties
|
|
|
|
Testbed=${{ needs.test.outputs.testbed }}
|
|
Tests.CommitId=$(cd wlan-testing && git rev-parse --short HEAD)
|
|
CiRun.Id=${{ github.run_id }}
|
|
CiRun.Number=${{ github.run_number }}
|
|
CiRun.Url=https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}
|
|
EOF
|
|
- name: generate Allure report
|
|
run: allure-${{ env.ALLURE_CLI_VERSION }}/bin/allure generate allure-results-dataplane_throughput_test allure-results-single_station_dual_band_throughput allure-results-wifi_capacity_test
|
|
|
|
- name: upload Allure report as artifact
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: allure-report-${{ needs.test.outputs.testbed }}
|
|
path: allure-report
|
|
|
|
# doing this to be able to aggregate multiple reports together later on
|
|
- name: copy results into report
|
|
run: |
|
|
mkdir -p allure-report/results
|
|
cp -r allure-results-dataplane_throughput_test allure-report/results
|
|
cp -r allure-results-single_station_dual_band_throughput allure-report/results
|
|
cp -r allure-results-wifi_capacity_test allure-report/results
|
|
- name: copy new report
|
|
run: |
|
|
mkdir -p reports/performance/${{ needs.test.outputs.testbed }}
|
|
cp -Tr allure-report reports/performance/${{ needs.test.outputs.testbed }}/${{ github.run_number }}
|
|
- name: update latest symlink
|
|
working-directory: reports/performance/${{ needs.test.outputs.testbed }}
|
|
run: ln -fns ${{ github.run_number }} latest
|
|
|
|
- name: generate new index.html
|
|
run: python wlan-testing/.github/tools/generate_directory_index.py -r reports
|
|
|
|
- name: commit reports update
|
|
working-directory: reports
|
|
run: |
|
|
git config --global user.name "github-actions[bot]"
|
|
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
git add .
|
|
git commit -m "Automated deployment: $(date -u)"
|
|
- name: push
|
|
if: github.ref == 'refs/heads/master'
|
|
uses: ad-m/github-push-action@v0.6.0
|
|
with:
|
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
branch: gh-pages
|
|
directory: reports
|
|
|
|
cleanup:
|
|
needs: [ test ]
|
|
runs-on: ubuntu-latest
|
|
if: always()
|
|
steps:
|
|
- 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 }}"
|