mirror of
				https://github.com/Telecominfraproject/wlan-testing.git
				synced 2025-11-03 20:38:05 +00:00 
			
		
		
		
	Merge branch 'master' into WIFI-5691
This commit is contained in:
		
							
								
								
									
										45
									
								
								.github/actions/build-and-push-docker/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								.github/actions/build-and-push-docker/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					name: build and push Docker image
 | 
				
			||||||
 | 
					description: build and push the wlan-testing Docker image
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inputs:
 | 
				
			||||||
 | 
					  registry:
 | 
				
			||||||
 | 
					    description: the registry to push to
 | 
				
			||||||
 | 
					    required: true
 | 
				
			||||||
 | 
					  registry_user:
 | 
				
			||||||
 | 
					    description: the user to authenticate against the registry
 | 
				
			||||||
 | 
					    required: true
 | 
				
			||||||
 | 
					  registry_password:
 | 
				
			||||||
 | 
					    description: the password to authenticate against the registry
 | 
				
			||||||
 | 
					    required: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					runs:
 | 
				
			||||||
 | 
					  using: "composite"
 | 
				
			||||||
 | 
					  steps:
 | 
				
			||||||
 | 
					  - 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
 | 
				
			||||||
 | 
					    shell: bash
 | 
				
			||||||
 | 
					    working-directory: wlan-testing
 | 
				
			||||||
 | 
					    run: ./sync_repos.bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: docker login
 | 
				
			||||||
 | 
					    shell: bash
 | 
				
			||||||
 | 
					    run: docker login ${{ inputs.registry }} -u ${{ inputs.registry_user }} -p ${{ inputs.registry_password }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: build docker image
 | 
				
			||||||
 | 
					    working-directory: wlan-testing
 | 
				
			||||||
 | 
					    shell: bash
 | 
				
			||||||
 | 
					    run: docker build -t ${{ inputs.registry }}/cloud-sdk-nightly:${{ github.run_id }} -f docker/Dockerfile .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: push docker image
 | 
				
			||||||
 | 
					    shell: bash
 | 
				
			||||||
 | 
					    run: docker push ${{ inputs.registry }}/cloud-sdk-nightly:${{ github.run_id }}
 | 
				
			||||||
							
								
								
									
										17
									
								
								.github/actions/cleanup-docker/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								.github/actions/cleanup-docker/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					name: build and push Docker image
 | 
				
			||||||
 | 
					description: build and push the wlan-testing Docker image
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inputs:
 | 
				
			||||||
 | 
					  registry_user:
 | 
				
			||||||
 | 
					    description: the user to authenticate against the registry
 | 
				
			||||||
 | 
					    required: true
 | 
				
			||||||
 | 
					  registry_password:
 | 
				
			||||||
 | 
					    description: the password to authenticate against the registry
 | 
				
			||||||
 | 
					    required: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					runs:
 | 
				
			||||||
 | 
					  using: "composite"
 | 
				
			||||||
 | 
					  steps:
 | 
				
			||||||
 | 
					  - name: cleanup Docker image
 | 
				
			||||||
 | 
					    shell: bash
 | 
				
			||||||
 | 
					    run: curl -u ${{ inputs.registry_user }}:${{ inputs.registry_password }} -X DELETE "https://tip.jfrog.io/artifactory/tip-wlan-cloud-docker-repo/cloud-sdk-nightly/${{ github.run_id }}"
 | 
				
			||||||
							
								
								
									
										285
									
								
								.github/workflows/advanced.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										285
									
								
								.github/workflows/advanced.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,285 @@
 | 
				
			|||||||
 | 
					name: advanced testing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					env:
 | 
				
			||||||
 | 
					  ALLURE_CLI_VERSION: 2.14.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  workflow_dispatch:
 | 
				
			||||||
 | 
					  schedule:
 | 
				
			||||||
 | 
					  - cron: '30 20 * * *'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					defaults:
 | 
				
			||||||
 | 
					  run:
 | 
				
			||||||
 | 
					    shell: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  build:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					    - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					    - name: build and push Docker image
 | 
				
			||||||
 | 
					      uses: ./.github/actions/build-and-push-docker
 | 
				
			||||||
 | 
					      with:
 | 
				
			||||||
 | 
					        registry: tip-tip-wlan-cloud-docker-repo.jfrog.io
 | 
				
			||||||
 | 
					        registry_user: wlan-testing-cicd
 | 
				
			||||||
 | 
					        registry_password: ${{ secrets.DOCKER_USER_PASSWORD }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  test:
 | 
				
			||||||
 | 
					    runs-on: [ self-hosted, small ]
 | 
				
			||||||
 | 
					    needs: [ build ]
 | 
				
			||||||
 | 
					    timeout-minutes: 1440
 | 
				
			||||||
 | 
					    env:
 | 
				
			||||||
 | 
					      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 }}
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					    strategy:
 | 
				
			||||||
 | 
					      fail-fast: false
 | 
				
			||||||
 | 
					      matrix:
 | 
				
			||||||
 | 
					        testbed: 
 | 
				
			||||||
 | 
					        - advanced-01
 | 
				
			||||||
 | 
					        - advanced-02
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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::advanced-ci-${{ github.run_number }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: prepare namespace
 | 
				
			||||||
 | 
					      id: namespace
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        NAMESPACE="testing-${{ github.run_number }}-${{ matrix.testbed }}"
 | 
				
			||||||
 | 
					        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 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: tip-tip-wlan-cloud-docker-repo.jfrog.io/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 "advance" -s -vvv --testbed=${{ matrix.testbed }} --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
 | 
				
			||||||
 | 
					              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: allure-results-${{ matrix.testbed }}
 | 
				
			||||||
 | 
					        path: allure-results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: cleanup
 | 
				
			||||||
 | 
					      if: ${{ always() }}
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        kubectl delete ns "${{ steps.namespace.outputs.name }}" --wait=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  report:
 | 
				
			||||||
 | 
					    needs: [ test ]
 | 
				
			||||||
 | 
					    if: always()
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    strategy:
 | 
				
			||||||
 | 
					      fail-fast: false
 | 
				
			||||||
 | 
					      max-parallel: 1
 | 
				
			||||||
 | 
					      matrix:
 | 
				
			||||||
 | 
					        testbed:
 | 
				
			||||||
 | 
					        - advanced-01
 | 
				
			||||||
 | 
					        - advanced-02
 | 
				
			||||||
 | 
					    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-${{ matrix.testbed }}
 | 
				
			||||||
 | 
					        path: allure-results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - 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/advanced/${{ matrix.testbed }}/latest" ] ; then
 | 
				
			||||||
 | 
					          cp -r reports/advanced/${{ matrix.testbed }}/latest/history/ allure-results/history
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: add report metadata
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        cat << EOF >> allure-results/environment.properties
 | 
				
			||||||
 | 
					        Testbed=${{ matrix.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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: upload Allure report as artifact
 | 
				
			||||||
 | 
					      uses: actions/upload-artifact@v2
 | 
				
			||||||
 | 
					      with:
 | 
				
			||||||
 | 
					        name: allure-report-${{ matrix.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/* allure-report/results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: copy new report
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        mkdir -p reports/advanced/${{ matrix.testbed }}
 | 
				
			||||||
 | 
					        cp -Tr allure-report reports/advanced/${{ matrix.testbed }}/${{ github.run_number }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: update latest symlink
 | 
				
			||||||
 | 
					      working-directory: reports/advanced/${{ matrix.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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: upload to S3
 | 
				
			||||||
 | 
					      if: github.ref == 'refs/heads/master'
 | 
				
			||||||
 | 
					      uses: ./wlan-testing/.github/actions/allure-report-to-s3
 | 
				
			||||||
 | 
					      with:
 | 
				
			||||||
 | 
					        test_type: advanced
 | 
				
			||||||
 | 
					        testbed: ${{ matrix.testbed }}
 | 
				
			||||||
 | 
					        report_path: allure-report
 | 
				
			||||||
 | 
					        s3_access_key_id: ${{ secrets.ALLURE_S3_ACCESS_KEY_ID }}
 | 
				
			||||||
 | 
					        s3_access_key_secret: ${{ secrets.ALLURE_S3_ACCESS_KEY_SECRET }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  cleanup:
 | 
				
			||||||
 | 
					    needs: [ test ]
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    if: always()
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					    - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					    - name: cleanup Docker image
 | 
				
			||||||
 | 
					      uses: ./.github/actions/cleanup-docker
 | 
				
			||||||
 | 
					      with:
 | 
				
			||||||
 | 
					        registry_user: wlan-testing-cicd
 | 
				
			||||||
 | 
					        registry_password: ${{ secrets.DOCKER_USER_PASSWORD }}
 | 
				
			||||||
							
								
								
									
										6
									
								
								.github/workflows/interop.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/interop.yml
									
									
									
									
										vendored
									
									
								
							@@ -184,12 +184,6 @@ jobs:
 | 
				
			|||||||
        kubectl logs -f $podname >/dev/null 2>&1
 | 
					        kubectl logs -f $podname >/dev/null 2>&1
 | 
				
			||||||
        exit $(kubectl get pod $podname --output="jsonpath={.status.containerStatuses[].state.terminated.exitCode}")
 | 
					        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
 | 
					    - name: upload Allure results as artifact
 | 
				
			||||||
      if: ${{ always() }}
 | 
					      if: ${{ always() }}
 | 
				
			||||||
      uses: actions/upload-artifact@v2
 | 
					      uses: actions/upload-artifact@v2
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										200
									
								
								.github/workflows/ow_docker-compose.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										200
									
								
								.github/workflows/ow_docker-compose.yml
									
									
									
									
										vendored
									
									
								
							@@ -14,6 +14,8 @@ env:
 | 
				
			|||||||
  ALLURE_CLI_VERSION: 2.14.0
 | 
					  ALLURE_CLI_VERSION: 2.14.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
on:
 | 
					on:
 | 
				
			||||||
 | 
					  repository_dispatch:
 | 
				
			||||||
 | 
					    types: [openwifi-sdk-pr]
 | 
				
			||||||
  workflow_dispatch:
 | 
					  workflow_dispatch:
 | 
				
			||||||
    inputs:
 | 
					    inputs:
 | 
				
			||||||
      testbeds:
 | 
					      testbeds:
 | 
				
			||||||
@@ -27,27 +29,27 @@ on:
 | 
				
			|||||||
      owgw_version:
 | 
					      owgw_version:
 | 
				
			||||||
        default: 'master'
 | 
					        default: 'master'
 | 
				
			||||||
        description: 'OpenWIFI Gateway version to be deployed.'
 | 
					        description: 'OpenWIFI Gateway version to be deployed.'
 | 
				
			||||||
        required: true
 | 
					        required: false
 | 
				
			||||||
      owgwui_version:
 | 
					      owgwui_version:
 | 
				
			||||||
        default: 'main'
 | 
					        default: 'main'
 | 
				
			||||||
        description: 'OpenWIFI Web UI version to be deployed.'
 | 
					        description: 'OpenWIFI Web UI version to be deployed.'
 | 
				
			||||||
        required: true
 | 
					        required: false
 | 
				
			||||||
      owsec_version:
 | 
					      owsec_version:
 | 
				
			||||||
        default: 'main'
 | 
					        default: 'main'
 | 
				
			||||||
        description: 'OpenWIFI Security version to be deployed.'
 | 
					        description: 'OpenWIFI Security version to be deployed.'
 | 
				
			||||||
        required: true
 | 
					        required: false
 | 
				
			||||||
      owfms_version:
 | 
					      owfms_version:
 | 
				
			||||||
        default: 'main'
 | 
					        default: 'main'
 | 
				
			||||||
        description: 'OpenWIFI Firmware version to be deployed.'
 | 
					        description: 'OpenWIFI Firmware version to be deployed.'
 | 
				
			||||||
        required: true
 | 
					        required: false
 | 
				
			||||||
      owprov_version:
 | 
					      owprov_version:
 | 
				
			||||||
        default: 'main'
 | 
					        default: 'main'
 | 
				
			||||||
        description: 'OpenWIFI Provisioning version to be deployed.'
 | 
					        description: 'OpenWIFI Provisioning version to be deployed.'
 | 
				
			||||||
        required: true
 | 
					        required: false
 | 
				
			||||||
      owprovui_version:
 | 
					      owprovui_version:
 | 
				
			||||||
        default: 'main'
 | 
					        default: 'main'
 | 
				
			||||||
        description: 'OpenWIFI Provisioning Web UI version to be deployed.'
 | 
					        description: 'OpenWIFI Provisioning Web UI version to be deployed.'
 | 
				
			||||||
        required: true
 | 
					        required: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defaults:
 | 
					defaults:
 | 
				
			||||||
  run:
 | 
					  run:
 | 
				
			||||||
@@ -262,17 +264,17 @@ jobs:
 | 
				
			|||||||
            - name: DOCKER_CERT_PATH
 | 
					            - name: DOCKER_CERT_PATH
 | 
				
			||||||
              value: "/certs/client"
 | 
					              value: "/certs/client"
 | 
				
			||||||
            - name: OWGW_TAG
 | 
					            - name: OWGW_TAG
 | 
				
			||||||
              value: "${{ github.event.inputs.owgw_version }}"
 | 
					              value: "${{ github.event.inputs.owgw_version || github.event.client_payload.owgw_tag }}"
 | 
				
			||||||
            - name: OWGWUI_TAG
 | 
					            - name: OWGWUI_TAG
 | 
				
			||||||
              value: "${{ github.event.inputs.owgwui_version }}"
 | 
					              value: "${{ github.event.inputs.owgwui_version || github.event.client_payload.owgwui_tag }}"
 | 
				
			||||||
            - name: OWSEC_TAG
 | 
					            - name: OWSEC_TAG
 | 
				
			||||||
              value: "${{ github.event.inputs.owsec_version }}"
 | 
					              value: "${{ github.event.inputs.owsec_version || github.event.client_payload.owsec_tag }}"
 | 
				
			||||||
            - name: OWFMS_TAG
 | 
					            - name: OWFMS_TAG
 | 
				
			||||||
              value: "${{ github.event.inputs.owfms_version }}"
 | 
					              value: "${{ github.event.inputs.owfms_version || github.event.client_payload.owfms_tag }}"
 | 
				
			||||||
            - name: OWPROV_TAG
 | 
					            - name: OWPROV_TAG
 | 
				
			||||||
              value: "${{ github.event.inputs.owprov_version }}"
 | 
					              value: "${{ github.event.inputs.owprov_version || github.event.client_payload.owprov_tag }}"
 | 
				
			||||||
            - name: OWPROVUI_TAG
 | 
					            - name: OWPROVUI_TAG
 | 
				
			||||||
              value: "${{ github.event.inputs.owprovui_version }}"
 | 
					              value: "${{ github.event.inputs.owprovui_version || github.event.client_payload.owprovui_tag }}"
 | 
				
			||||||
            - name: INTERNAL_OWGW_HOSTNAME
 | 
					            - name: INTERNAL_OWGW_HOSTNAME
 | 
				
			||||||
              value: "owgw.wlan.local"
 | 
					              value: "owgw.wlan.local"
 | 
				
			||||||
            - name: INTERNAL_OWSEC_HOSTNAME
 | 
					            - name: INTERNAL_OWSEC_HOSTNAME
 | 
				
			||||||
@@ -361,92 +363,9 @@ jobs:
 | 
				
			|||||||
          -e OWSEC_NEW_PASSWORD \
 | 
					          -e OWSEC_NEW_PASSWORD \
 | 
				
			||||||
          tip-tip-wlan-cloud-ucentral.jfrog.io/clustersysteminfo:main
 | 
					          tip-tip-wlan-cloud-ucentral.jfrog.io/clustersysteminfo:main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  generate-matrix:
 | 
					 | 
				
			||||||
    name: generate testbed matrix
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    outputs:
 | 
					 | 
				
			||||||
      matrix: ${{ steps.set-matrix.outputs.matrix }}
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
    - name: generate-matrix
 | 
					 | 
				
			||||||
      id: set-matrix
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        TESTBEDS="${{ github.event.inputs.testbeds || 'basic-05' }}"
 | 
					 | 
				
			||||||
        TESTBEDS=$(echo $TESTBEDS | sed "s/,/\",\"/g" | sed 's/^/[\"/g' | sed 's/$/\"]/g')
 | 
					 | 
				
			||||||
        TESTBEDS=$(echo "$TESTBEDS" | jq -c 'map({"testbed":.})')
 | 
					 | 
				
			||||||
        echo "::set-output name=matrix::{\"include\":${TESTBEDS}}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  set-redirector-url:
 | 
					 | 
				
			||||||
    needs: [ deploy-controller, generate-matrix ]
 | 
					 | 
				
			||||||
    if: github.event.inputs.marker_expression == 'uc_sanity'
 | 
					 | 
				
			||||||
    strategy:
 | 
					 | 
				
			||||||
      fail-fast: false
 | 
					 | 
				
			||||||
      matrix: ${{ fromJson( needs.generate-matrix.outputs.matrix ) }}
 | 
					 | 
				
			||||||
    runs-on: self-hosted
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
    - name: checkout testing repo
 | 
					 | 
				
			||||||
      uses: actions/checkout@v2
 | 
					 | 
				
			||||||
      with:
 | 
					 | 
				
			||||||
        repository: Telecominfraproject/wlan-testing
 | 
					 | 
				
			||||||
        path: wlan-testing
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: checkout pki cert scripts repo
 | 
					 | 
				
			||||||
      uses: actions/checkout@v2
 | 
					 | 
				
			||||||
      with:
 | 
					 | 
				
			||||||
        repository: Telecominfraproject/wlan-pki-cert-scripts
 | 
					 | 
				
			||||||
        path: wlan-pki-cert-scripts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: install dependencies
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        sudo apt-get install -y python3-pip
 | 
					 | 
				
			||||||
        pip install paramiko scp allure-pytest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: create configuration.py file
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        cat << EOF > configuration.py
 | 
					 | 
				
			||||||
        ${{ secrets.LAB_CONFIGURATION }}
 | 
					 | 
				
			||||||
        EOF
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: set redirector URL
 | 
					 | 
				
			||||||
      env:
 | 
					 | 
				
			||||||
        DIGICERT_API_KEY: ${{ secrets.DIGICERT_API_KEY }}
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        for id in $(echo -e 'from configuration import CONFIGURATION\nfor ap in CONFIGURATION["${{ matrix.testbed }}"]["access_point"]: print(ap["serial"])' | python3)
 | 
					 | 
				
			||||||
        do
 | 
					 | 
				
			||||||
          ./wlan-pki-cert-scripts/digicert-change-ap-redirector.sh $id "${{ needs.deploy-controller.outputs.gateway_url }}"
 | 
					 | 
				
			||||||
          current_redirector=$(./wlan-pki-cert-scripts/digicert-get-ap-redirector.sh $id)
 | 
					 | 
				
			||||||
          if [[ "$current_redirector" != "${{ needs.deploy-controller.outputs.gateway_url }}" ]]; then
 | 
					 | 
				
			||||||
            echo "Current redirector in DigiCert ($current_redirector) is different from the required one (${{ needs.deploy-controller.outputs.gateway_url }})"
 | 
					 | 
				
			||||||
            exit 1
 | 
					 | 
				
			||||||
          fi
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: factory reset APs
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        set -x
 | 
					 | 
				
			||||||
        AP_LEN=$(echo -e "from configuration import CONFIGURATION\nprint(len(CONFIGURATION['${{ matrix.testbed }}']['access_point']) - 1)" | python3)
 | 
					 | 
				
			||||||
        for index in $(seq 0 $AP_LEN)
 | 
					 | 
				
			||||||
        do
 | 
					 | 
				
			||||||
          HOST=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['ip'])" | python3)
 | 
					 | 
				
			||||||
          JUMPHOST=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['jumphost'])" | python3)
 | 
					 | 
				
			||||||
          TTY=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['jumphost_tty'])" | python3)
 | 
					 | 
				
			||||||
          PORT=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['port'])" | python3)
 | 
					 | 
				
			||||||
          USERNAME=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['username'])" | python3)
 | 
					 | 
				
			||||||
          PASSWORD=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['password'])" | python3)
 | 
					 | 
				
			||||||
          cd wlan-testing/tools
 | 
					 | 
				
			||||||
          python3 ap_tools.py --host $HOST --jumphost $JUMPHOST --tty $TTY --port $PORT --username $USERNAME --password $PASSWORD --cmd "jffs2reset -y -r"
 | 
					 | 
				
			||||||
          cd ../..
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: wait for APs to come up again
 | 
					 | 
				
			||||||
      run: sleep 300
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  test:
 | 
					  test:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    needs: [ build, generate-matrix, deploy-controller, set-redirector-url ]
 | 
					    needs: [ build, deploy-controller ]
 | 
				
			||||||
    if: always()
 | 
					 | 
				
			||||||
    strategy:
 | 
					 | 
				
			||||||
      fail-fast: false
 | 
					 | 
				
			||||||
      matrix: ${{ fromJson( needs.generate-matrix.outputs.matrix ) }}
 | 
					 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
    - 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 }}
 | 
				
			||||||
@@ -507,7 +426,7 @@ jobs:
 | 
				
			|||||||
                  - -c
 | 
					                  - -c
 | 
				
			||||||
                  - |
 | 
					                  - |
 | 
				
			||||||
                    cd tests
 | 
					                    cd tests
 | 
				
			||||||
                    pytest -m "${{ github.event.inputs.marker_expression || 'sdk_restapi' }}" -s -vvv --testbed="${{ matrix.testbed }}" --alluredir=/tmp/allure-results
 | 
					                    pytest -m "${{ github.event.inputs.marker_expression || 'sdk_restapi' }}" -s -vvv --testbed="${{ github.event.inputs.testbeds || 'basic-05' }}" --alluredir=/tmp/allure-results
 | 
				
			||||||
                    ret=\$?
 | 
					                    ret=\$?
 | 
				
			||||||
                    # sleep some time to be able to download the Allure results
 | 
					                    # sleep some time to be able to download the Allure results
 | 
				
			||||||
                    sleep 60
 | 
					                    sleep 60
 | 
				
			||||||
@@ -560,7 +479,7 @@ jobs:
 | 
				
			|||||||
      if: always()
 | 
					      if: always()
 | 
				
			||||||
      uses: actions/upload-artifact@v2
 | 
					      uses: actions/upload-artifact@v2
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        name: allure-results-${{ matrix.testbed }}
 | 
					        name: allure-results-${{ github.event.inputs.testbeds || 'basic-05' }}
 | 
				
			||||||
        path: allure-results
 | 
					        path: allure-results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: cleanup
 | 
					    - name: cleanup
 | 
				
			||||||
@@ -570,12 +489,8 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  report:
 | 
					  report:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    needs: [ test, generate-matrix ]
 | 
					    needs: [ test ]
 | 
				
			||||||
    if: always()
 | 
					    if: always()
 | 
				
			||||||
    strategy:
 | 
					 | 
				
			||||||
      max-parallel: 1
 | 
					 | 
				
			||||||
      fail-fast: false
 | 
					 | 
				
			||||||
      matrix: ${{ fromJson( needs.generate-matrix.outputs.matrix ) }}
 | 
					 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
    - name: install Allure CLI tool
 | 
					    - name: install Allure CLI tool
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
@@ -584,7 +499,7 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    - uses: actions/download-artifact@v2
 | 
					    - uses: actions/download-artifact@v2
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        name: allure-results-${{ matrix.testbed }}
 | 
					        name: allure-results-${{ github.event.inputs.testbeds || 'basic-05' }}
 | 
				
			||||||
        path: allure-results
 | 
					        path: allure-results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: checkout testing repo
 | 
					    - name: checkout testing repo
 | 
				
			||||||
@@ -601,14 +516,14 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    - name: copy history into results
 | 
					    - name: copy history into results
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        if [ -e "reports/docker-compose/${{ github.event.inputs.marker_expression || 'sdk_restapi' }}/${{ matrix.testbed }}/latest" ] ; then
 | 
					        if [ -e "reports/docker-compose/${{ github.event.inputs.marker_expression || 'sdk_restapi' }}/${{ github.event.inputs.testbeds || 'basic-05' }} /latest" ] ; then
 | 
				
			||||||
          cp -r reports/docker-compose/${{ github.event.inputs.marker_expression || 'sdk_restapi' }}/${{ matrix.testbed }}/latest/history/ allure-results/history
 | 
					          cp -r reports/docker-compose/${{ github.event.inputs.marker_expression || 'sdk_restapi' }}/${{ github.event.inputs.testbeds || 'basic-05' }}/latest/history/ allure-results/history
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: add report metadata
 | 
					    - name: add report metadata
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        cat << EOF >> allure-results/environment.properties
 | 
					        cat << EOF >> allure-results/environment.properties
 | 
				
			||||||
        Testbed=${{ matrix.testbed }}
 | 
					        Testbed=${{ github.event.inputs.testbeds || 'basic-05' }}
 | 
				
			||||||
        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 }}
 | 
				
			||||||
        CiRun.Number=${{ github.run_number }}
 | 
					        CiRun.Number=${{ github.run_number }}
 | 
				
			||||||
@@ -621,7 +536,7 @@ jobs:
 | 
				
			|||||||
    - 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-${{ matrix.testbed }}
 | 
					        name: allure-report-${{ github.event.inputs.testbeds || 'basic-05' }}
 | 
				
			||||||
        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
 | 
				
			||||||
@@ -630,11 +545,11 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    - name: copy new report
 | 
					    - name: copy new report
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        mkdir -p reports/docker-compose/${{ github.event.inputs.marker_expression || 'sdk_restapi' }}/${{ matrix.testbed }}
 | 
					        mkdir -p reports/docker-compose/${{ github.event.inputs.marker_expression || 'sdk_restapi' }}/${{ github.event.inputs.testbeds || 'basic-05' }}
 | 
				
			||||||
        cp -Tr allure-report reports/docker-compose/${{ github.event.inputs.marker_expression || 'sdk_restapi' }}/${{ matrix.testbed }}/${{ github.run_number }}
 | 
					        cp -Tr allure-report reports/docker-compose/${{ github.event.inputs.marker_expression || 'sdk_restapi' }}/${{ github.event.inputs.testbeds || 'basic-05' }}/${{ github.run_number }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: update latest symlink
 | 
					    - name: update latest symlink
 | 
				
			||||||
      working-directory: reports/docker-compose/${{ github.event.inputs.marker_expression || 'sdk_restapi' }}/${{ matrix.testbed }}
 | 
					      working-directory: reports/docker-compose/${{ github.event.inputs.marker_expression || 'sdk_restapi' }}/${{ github.event.inputs.testbeds || 'basic-05' }}
 | 
				
			||||||
      run: ln -fns ${{ github.run_number }} latest
 | 
					      run: ln -fns ${{ github.run_number }} latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: generate new index.html
 | 
					    - name: generate new index.html
 | 
				
			||||||
@@ -683,66 +598,3 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    - name: Delete namespace
 | 
					    - name: Delete namespace
 | 
				
			||||||
      run: kubectl delete ns --ignore-not-found=true "ow-docker-compose-${{ github.run_id }}"
 | 
					      run: kubectl delete ns --ignore-not-found=true "ow-docker-compose-${{ github.run_id }}"
 | 
				
			||||||
 | 
					 | 
				
			||||||
  reset-redirector-url:
 | 
					 | 
				
			||||||
    needs: [ test, generate-matrix ]
 | 
					 | 
				
			||||||
    if: github.event.inputs.marker_expression == 'uc_sanity' && always()
 | 
					 | 
				
			||||||
    strategy:
 | 
					 | 
				
			||||||
      fail-fast: false
 | 
					 | 
				
			||||||
      matrix: ${{ fromJson( needs.generate-matrix.outputs.matrix ) }}
 | 
					 | 
				
			||||||
    runs-on: self-hosted
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
    - name: checkout testing repo
 | 
					 | 
				
			||||||
      uses: actions/checkout@v2
 | 
					 | 
				
			||||||
      with:
 | 
					 | 
				
			||||||
        repository: Telecominfraproject/wlan-testing
 | 
					 | 
				
			||||||
        path: wlan-testing
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: checkout pki cert scripts repo
 | 
					 | 
				
			||||||
      uses: actions/checkout@v2
 | 
					 | 
				
			||||||
      with:
 | 
					 | 
				
			||||||
        repository: Telecominfraproject/wlan-pki-cert-scripts
 | 
					 | 
				
			||||||
        path: wlan-pki-cert-scripts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: install dependencies
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        pip install paramiko scp allure-pytest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: create configuration.py file
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        cat << EOF > configuration.py
 | 
					 | 
				
			||||||
        ${{ secrets.LAB_CONFIGURATION }}
 | 
					 | 
				
			||||||
        EOF
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: reset redirector URL
 | 
					 | 
				
			||||||
      env:
 | 
					 | 
				
			||||||
        DIGICERT_API_KEY: ${{ secrets.DIGICERT_API_KEY }}
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        for id in $(echo -e 'from configuration import CONFIGURATION\nfor ap in CONFIGURATION["${{ matrix.testbed }}"]["access_point"]: print(ap["serial"])' | python3)
 | 
					 | 
				
			||||||
        do
 | 
					 | 
				
			||||||
          ./wlan-pki-cert-scripts/digicert-change-ap-redirector.sh $id gw-qa01.cicd.lab.wlan.tip.build
 | 
					 | 
				
			||||||
          current_redirector=$(./wlan-pki-cert-scripts/digicert-get-ap-redirector.sh $id)
 | 
					 | 
				
			||||||
          if [[ "$current_redirector" != "gw-qa01.cicd.lab.wlan.tip.build" ]]; then
 | 
					 | 
				
			||||||
            echo "Current redirector in DigiCert ($current_redirector) is different from the required one (gw-qa01.cicd.lab.wlan.tip.build)"
 | 
					 | 
				
			||||||
            exit 1
 | 
					 | 
				
			||||||
          fi
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: factory reset APs
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        AP_LEN=$(echo -e "from configuration import CONFIGURATION\nprint(len(CONFIGURATION['${{ matrix.testbed }}']['access_point']) - 1)" | python3)
 | 
					 | 
				
			||||||
        for index in $(seq 0 $AP_LEN)
 | 
					 | 
				
			||||||
        do
 | 
					 | 
				
			||||||
          HOST=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['ip'])" | python3)
 | 
					 | 
				
			||||||
          JUMPHOST=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['jumphost'])" | python3)
 | 
					 | 
				
			||||||
          TTY=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['jumphost_tty'])" | python3)
 | 
					 | 
				
			||||||
          PORT=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['port'])" | python3)
 | 
					 | 
				
			||||||
          USERNAME=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['username'])" | python3)
 | 
					 | 
				
			||||||
          PASSWORD=$(echo -e "from configuration import CONFIGURATION\nprint(CONFIGURATION['${{ matrix.testbed }}']['access_point'][$index]['password'])" | python3)
 | 
					 | 
				
			||||||
          cd wlan-testing/tools
 | 
					 | 
				
			||||||
          python3 ap_tools.py --host $HOST --jumphost $JUMPHOST --tty $TTY --port $PORT --username $USERNAME --password $PASSWORD --cmd "jffs2reset -y -r"
 | 
					 | 
				
			||||||
          cd ../..
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: wait for APs to come up again
 | 
					 | 
				
			||||||
      run: sleep 300
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										563
									
								
								.github/workflows/quali-basic-manual.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										563
									
								
								.github/workflows/quali-basic-manual.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,563 @@
 | 
				
			|||||||
 | 
					name: manual pytest execution against basic lab
 | 
				
			||||||
 | 
					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:
 | 
				
			||||||
 | 
					      openwifi_revision:
 | 
				
			||||||
 | 
					        required: true
 | 
				
			||||||
 | 
					        default: 'main'
 | 
				
			||||||
 | 
					        description: 'revision of the Open Wifi Helm chart'
 | 
				
			||||||
 | 
					      openwifi_gw_revision:
 | 
				
			||||||
 | 
					        required: true
 | 
				
			||||||
 | 
					        default: 'master'
 | 
				
			||||||
 | 
					        description: 'revision of the Open Wifi gateway service'
 | 
				
			||||||
 | 
					      openwifi_sec_revision:
 | 
				
			||||||
 | 
					        required: true
 | 
				
			||||||
 | 
					        default: 'main'
 | 
				
			||||||
 | 
					        description: 'revision of the Open Wifi security service'
 | 
				
			||||||
 | 
					      openwifi_fms_revision:
 | 
				
			||||||
 | 
					        required: true
 | 
				
			||||||
 | 
					        default: 'main'
 | 
				
			||||||
 | 
					        description: 'revision of the Open Wifi fms service'
 | 
				
			||||||
 | 
					      openwifi_ui_revision:
 | 
				
			||||||
 | 
					        required: true
 | 
				
			||||||
 | 
					        default: 'main'
 | 
				
			||||||
 | 
					        description: 'revision of the Open Wifi UI'
 | 
				
			||||||
 | 
					      ap_model:
 | 
				
			||||||
 | 
					        description: 'AP model to test, one of edgecore_ecw5410,edgecore_eap101,tp-link_ec420-g1,edgecore_ecw5211,cig_wf188n,edgecore_eap102,cig_wf194c,hfcl_ion4'
 | 
				
			||||||
 | 
					        required: true
 | 
				
			||||||
 | 
					      firmware:
 | 
				
			||||||
 | 
					        default: 'next-latest'
 | 
				
			||||||
 | 
					        description: 'Target firmware version to be specified <branch>-<commit | latest>'
 | 
				
			||||||
 | 
					        required: false
 | 
				
			||||||
 | 
					      marker_expression:
 | 
				
			||||||
 | 
					        description: "marker expression that will be passed to pytest's -m"
 | 
				
			||||||
 | 
					        required: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					    - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					    - name: Set up Python
 | 
				
			||||||
 | 
					      uses: actions/setup-python@v2
 | 
				
			||||||
 | 
					      with:
 | 
				
			||||||
 | 
					        python-version: '3.8'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: install dependencies
 | 
				
			||||||
 | 
					      run: pip install -r .quali/requirements.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: start reservation
 | 
				
			||||||
 | 
					      id: start
 | 
				
			||||||
 | 
					      env:
 | 
				
			||||||
 | 
					        CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build
 | 
				
			||||||
 | 
					        CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }}
 | 
				
			||||||
 | 
					        CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }}
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        RES_ID=$(python .quali/start_reservation.py --openwifi-version "${{ github.event.inputs.openwifi_revision }}" --openwifi-gw-version "${{ github.event.inputs.openwifi_gw_revision }}" --openwifi-sec-version "${{ github.event.inputs.openwifi_sec_revision }}" --openwifi-fms-version "${{ github.event.inputs.openwifi_fms_revision }}" --openwifi-ui-version "${{ github.event.inputs.openwifi_ui_revision }}" --ap-model "${{ github.event.inputs.ap_model }}")
 | 
				
			||||||
 | 
					        echo ::set-output name=res_id::"$RES_ID"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: set reservation identifier
 | 
				
			||||||
 | 
					      id: reservation
 | 
				
			||||||
 | 
					      run: echo ::set-output name=identifier::$(echo ${{ steps.start.outputs.res_id }} | cut -d "-" -f 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: install JRE
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        sudo apt-get update
 | 
				
			||||||
 | 
					        sudo apt-get install -y default-jre
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - 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: get EKS access credentials
 | 
				
			||||||
 | 
					      run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - 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: 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::manual-${{ github.run_id }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: prepare namespace
 | 
				
			||||||
 | 
					      id: namespace
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        NAMESPACE="testing-${{ github.run_id }}"
 | 
				
			||||||
 | 
					        kubectl create ns $NAMESPACE
 | 
				
			||||||
 | 
					        kubectl config set-context --current --namespace=$NAMESPACE
 | 
				
			||||||
 | 
					        echo "::set-output name=name::${NAMESPACE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - 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 > configuration.py
 | 
				
			||||||
 | 
					        Customer = ""
 | 
				
			||||||
 | 
					        server = ""
 | 
				
			||||||
 | 
					        CONFIGURATION = {
 | 
				
			||||||
 | 
					          "basic": $(python .quali/get_configuration.py ${{ steps.start.outputs.res_id }})
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        open_flow = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        RADIUS_SERVER_DATA = {
 | 
				
			||||||
 | 
					            "ip": "10.10.1.221",
 | 
				
			||||||
 | 
					            "port": 1812,
 | 
				
			||||||
 | 
					            "secret": "testing123",
 | 
				
			||||||
 | 
					            "user": "user",
 | 
				
			||||||
 | 
					            "password": "password",
 | 
				
			||||||
 | 
					            "pk_password": "whatever"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        RADIUS_ACCOUNTING_DATA = {
 | 
				
			||||||
 | 
					            "ip": "10.10.1.221",
 | 
				
			||||||
 | 
					            "port": 1813,
 | 
				
			||||||
 | 
					            "secret": "testing123",
 | 
				
			||||||
 | 
					            "user": "user",
 | 
				
			||||||
 | 
					            "password": "password",
 | 
				
			||||||
 | 
					            "pk_password": "whatever"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        PASSPOINT_RADIUS_SERVER_DATA = {
 | 
				
			||||||
 | 
					            "ip": "52.234.179.191",
 | 
				
			||||||
 | 
					            "port": 11812,
 | 
				
			||||||
 | 
					            "secret": "yeababy20!",
 | 
				
			||||||
 | 
					            "user": "nolaradius",
 | 
				
			||||||
 | 
					            "password": "nolastart",
 | 
				
			||||||
 | 
					            "pk_password": "whatever"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        PASSPOINT_RADIUS_ACCOUNTING_SERVER_DATA = {
 | 
				
			||||||
 | 
					            "ip": "52.234.179.191",
 | 
				
			||||||
 | 
					            "port": 11813,
 | 
				
			||||||
 | 
					            "secret": "yeababy20!"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        PASSPOINT_PROVIDER_INFO = {
 | 
				
			||||||
 | 
					            "mcc": None,
 | 
				
			||||||
 | 
					            "mnc": None,
 | 
				
			||||||
 | 
					            "network": None,
 | 
				
			||||||
 | 
					            "nai_realms": {
 | 
				
			||||||
 | 
					                "domain": "oss.ameriband.com",
 | 
				
			||||||
 | 
					                "encoding": 0,
 | 
				
			||||||
 | 
					                "eap_map": {"EAP-TTLS with username/password": ["Credential Type:username/password",
 | 
				
			||||||
 | 
					                                                                "Non-EAP Inner Authentication Type:MSCHAPV2"]}
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "osu_nai_standalone": "anonymous@ameriband.com",
 | 
				
			||||||
 | 
					            "osu_nai_shared": "anonymous@ameriband.com",
 | 
				
			||||||
 | 
					            "roaming_oi": []
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        PASSPOINT_OPERATOR_INFO = {
 | 
				
			||||||
 | 
					            "osen": "Disabled",
 | 
				
			||||||
 | 
					            "domain_name_list": ["telecominfraproject.atlassian.net"],
 | 
				
			||||||
 | 
					            "operator_names": [
 | 
				
			||||||
 | 
					                {"locale": "eng", "name": "Default friendly passpoint_operator name"},
 | 
				
			||||||
 | 
					                {"locale": "fra", "name": "Nom de l'opérateur convivial par défaut"}
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        PASSPOINT_VENUE_INFO = {
 | 
				
			||||||
 | 
					            "venue_type": {"group": "Business", "type": "Police Station"},
 | 
				
			||||||
 | 
					            "venue_names": [
 | 
				
			||||||
 | 
					                {"locale": "eng", "name": "Example passpoint_venue", "url": "http://www.example.com/info-eng"},
 | 
				
			||||||
 | 
					                {"locale": "fra", "name": "Exemple de lieu", "url": "http://www.example.com/info-fra"}
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        PASSPOINT_PROFILE_INFO = {
 | 
				
			||||||
 | 
					            "profile_download_url_ios": "https://onboard.almondlabs.net/ttls/AmeriBand-Profile.mobileconfig",
 | 
				
			||||||
 | 
					            "profile_download_url_android": "https://onboard.almondlabs.net/ttls/androidconfig.cfg",
 | 
				
			||||||
 | 
					            "profile_name_on_device": "AmeriBand",
 | 
				
			||||||
 | 
					            "radius_configuration": {
 | 
				
			||||||
 | 
					                "user_defined_nas_id": "FB001AP001",
 | 
				
			||||||
 | 
					                "operator_id": "AmeribandTIP",
 | 
				
			||||||
 | 
					                "radius_acounting_service_interval": 60
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "interworking_hs2dot0": "Enabled",
 | 
				
			||||||
 | 
					            "hessid": None,
 | 
				
			||||||
 | 
					            "access_network": {
 | 
				
			||||||
 | 
					                "Access Network Type": "Free Public Network",
 | 
				
			||||||
 | 
					                "Authentication Type": "Acceptance of Terms & Conditions",
 | 
				
			||||||
 | 
					                "Emergency Services Reachable": "Enabled",
 | 
				
			||||||
 | 
					                "Unauthenticated Emergency Service": "Disabled",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "ip_connectivity": {
 | 
				
			||||||
 | 
					                "Internet Connectivity": "Enabled",
 | 
				
			||||||
 | 
					                "IP Address Type": "Public IPv4 Address Available",
 | 
				
			||||||
 | 
					                "Connection Capability": [{"status": "open", "protocol": "TCP", "port": 8888}],
 | 
				
			||||||
 | 
					                "ANQP Domain ID": 1234,
 | 
				
			||||||
 | 
					                "GAS Address 3 Behaviour": "P2P Spec Workaround From Request",
 | 
				
			||||||
 | 
					                "Disable DGAF": False
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        TEST_CASES = {
 | 
				
			||||||
 | 
					            "ap_upgrade": 2233,
 | 
				
			||||||
 | 
					            "5g_wpa2_bridge": 2236,
 | 
				
			||||||
 | 
					            "2g_wpa2_bridge": 2237,
 | 
				
			||||||
 | 
					            "5g_wpa_bridge": 2419,
 | 
				
			||||||
 | 
					            "2g_wpa_bridge": 2420,
 | 
				
			||||||
 | 
					            "2g_wpa_nat": 4323,
 | 
				
			||||||
 | 
					            "5g_wpa_nat": 4324,
 | 
				
			||||||
 | 
					            "2g_wpa2_nat": 4325,
 | 
				
			||||||
 | 
					            "5g_wpa2_nat": 4326,
 | 
				
			||||||
 | 
					            "2g_wpa2_eap_ttls_bridge": 5214,
 | 
				
			||||||
 | 
					            "5g_wpa2_eap_ttls_bridge": 5215,
 | 
				
			||||||
 | 
					            "2g_wpa2_eap_ttls_nat": 5216,
 | 
				
			||||||
 | 
					            "5g_wpa2_eap_ttls_nat": 5217,
 | 
				
			||||||
 | 
					            "cloud_connection": 5222,
 | 
				
			||||||
 | 
					            "cloud_fw": 5247,
 | 
				
			||||||
 | 
					            "5g_wpa2_vlan": 5248,
 | 
				
			||||||
 | 
					            "5g_wpa_vlan": 5249,
 | 
				
			||||||
 | 
					            "5g_wpa2_eap_ttls_vlan": 5250,
 | 
				
			||||||
 | 
					            "2g_wpa2_vlan": 5251,
 | 
				
			||||||
 | 
					            "2g_wpa_vlan": 5252,
 | 
				
			||||||
 | 
					            "2g_wpa2_eap_ttls_vlan": 5253,
 | 
				
			||||||
 | 
					            "cloud_ver": 5540,
 | 
				
			||||||
 | 
					            "bridge_vifc": 5541,
 | 
				
			||||||
 | 
					            "nat_vifc": 5542,
 | 
				
			||||||
 | 
					            "vlan_vifc": 5543,
 | 
				
			||||||
 | 
					            "bridge_vifs": 5544,
 | 
				
			||||||
 | 
					            "nat_vifs": 5545,
 | 
				
			||||||
 | 
					            "vlan_vifs": 5546,
 | 
				
			||||||
 | 
					            "upgrade_api": 5547,
 | 
				
			||||||
 | 
					            "create_fw": 5548,
 | 
				
			||||||
 | 
					            "ap_profile_bridge": 5641,
 | 
				
			||||||
 | 
					            "ap_profile_nat": 5642,
 | 
				
			||||||
 | 
					            "ap_profile_vlan": 5643,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa2_eap_bridge": 5644,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa2_bridge": 5645,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa_bridge": 5646,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa2_eap_bridge": 5647,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa2_bridge": 5648,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa_bridge": 5649,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa2_eap_nat": 5650,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa2_nat": 5651,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa_nat": 5652,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa2_eap_nat": 5653,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa2_nat": 5654,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa_nat": 5655,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa2_eap_vlan": 5656,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa2_vlan": 5657,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa_vlan": 5658,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa2_eap_vlan": 5659,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa2_vlan": 5660,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa_vlan": 5661,
 | 
				
			||||||
 | 
					            "radius_profile": 5808,
 | 
				
			||||||
 | 
					            "bridge_ssid_update": 8742,
 | 
				
			||||||
 | 
					            "nat_ssid_update": 8743,
 | 
				
			||||||
 | 
					            "vlan_ssid_update": 8744,
 | 
				
			||||||
 | 
					            "2g_wpa3_bridge": 9740,
 | 
				
			||||||
 | 
					            "5g_wpa3_bridge": 9741,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_bridge": 9742,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_bridge": 9743,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_nat": 9744,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_nat": 9745,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_vlan": 9746,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_vlan": 9747,
 | 
				
			||||||
 | 
					            "2g_wpa3_nat": 9748,
 | 
				
			||||||
 | 
					            "5g_wpa3_nat": 9749,
 | 
				
			||||||
 | 
					            "2g_wpa3_vlan": 9750,
 | 
				
			||||||
 | 
					            "5g_wpa3_vlan": 9751,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_eap_bridge": 9752,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_eap_bridge": 9753,
 | 
				
			||||||
 | 
					            "2g_wpa3_eap_ttls_bridge": 9754,
 | 
				
			||||||
 | 
					            "5g_wpa3_eap_ttls_bridge": 9755,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_eap_nat": 9756,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_eap_nat": 9757,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_eap_vlan": 9758,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_eap_vlan": 9759,
 | 
				
			||||||
 | 
					            "2g_wpa3_eap_ttls_nat": 9760,
 | 
				
			||||||
 | 
					            "5g_wpa3_eap_ttls_nat": 9761,
 | 
				
			||||||
 | 
					            "2g_wpa3_eap_ttls_vlan": 9762,
 | 
				
			||||||
 | 
					            "5g_wpa3_eap_ttls_vlan": 9763,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_mixed_bridge": 9764,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_mixed_bridge": 9765,
 | 
				
			||||||
 | 
					            "2g_wpa3_mixed_eap_ttls_wpa3_bridge": 9766,
 | 
				
			||||||
 | 
					            "2g_wpa3_mixed_wpa3_bridge": 9767,
 | 
				
			||||||
 | 
					            "5g_wpa3_mixed_eap_ttls_wpa3_bridge": 9768,
 | 
				
			||||||
 | 
					            "5g_wpa3_mixed_wpa3_bridge": 9769,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_mixed_nat": 9770,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_mixed_nat": 9771,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_mixed_vlan": 9772,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_mixed_vlan": 9773,
 | 
				
			||||||
 | 
					            # "2g_wpa3_mixed_wpa2_nat": 9774,
 | 
				
			||||||
 | 
					            "2g_wpa3_mixed_wpa3_nat": 9775,
 | 
				
			||||||
 | 
					            # "5g_wpa3_mixed_wpa2_nat": 9776,
 | 
				
			||||||
 | 
					            "5g_wpa3_mixed_wpa3_nat": 9777,
 | 
				
			||||||
 | 
					            # "2g_wpa3_mixed_wpa2_vlan": 9778,
 | 
				
			||||||
 | 
					            "2g_wpa3_mixed_wpa3_vlan": 9779,
 | 
				
			||||||
 | 
					            # "5g_wpa3_mixed_wpa2_vlan": 9780,
 | 
				
			||||||
 | 
					            "5g_wpa3_mixed_wpa3_vlan": 9781,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_enterprise_mixed_bridge": 9782,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_enterprise_mixed_bridge": 9783,
 | 
				
			||||||
 | 
					            "2g_wpa2_mixed_eap_wpa2_bridge": 9784,
 | 
				
			||||||
 | 
					            "2g_wpa3_mixed_eap_wpa3_bridge": 9785,
 | 
				
			||||||
 | 
					            "5g_wpa3_mixed_eap_wpa2_bridge": 9786,
 | 
				
			||||||
 | 
					            "5g_wpa3_mixed_eap_wpa3_bridge": 9787,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_enterprise_mixed_nat": 9788,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_enterprise_mixed_nat": 9789,
 | 
				
			||||||
 | 
					            "2g_wpa3_mixed_eap_wpa2_nat": 9790,
 | 
				
			||||||
 | 
					            "2g_wpa3_mixed_eap_ttls_wpa3_nat": 9791,
 | 
				
			||||||
 | 
					            "5g_wpa3_mixed_eap_wpa2_nat": 9792,
 | 
				
			||||||
 | 
					            "5g_wpa3_mixed_eap_ttls_wpa3_nat": 9793,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa3_enterprise_mixed_vlan": 9794,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa3_enterprise_mixed_vlan": 9795,
 | 
				
			||||||
 | 
					            "2g_wpa3_mixed_eap_wpa2_vlan": 9796,
 | 
				
			||||||
 | 
					            "2g_wpa3_mixed_eap_ttls_wpa3_vlan": 9797,
 | 
				
			||||||
 | 
					            "5g_wpa3_mixed_eap_wpa2_vlan": 9798,
 | 
				
			||||||
 | 
					            "5g_wpa3_mixed_eap_ttls_wpa3_vlan": 9799,
 | 
				
			||||||
 | 
					            "ssid_2g_open_bridge": 9805,
 | 
				
			||||||
 | 
					            "ssid_5g_open_bridge": 9806,
 | 
				
			||||||
 | 
					            "ssid_2g_open_nat": 9807,
 | 
				
			||||||
 | 
					            "ssid_5g_open_nat": 9808,
 | 
				
			||||||
 | 
					            "ssid_2g_open_vlan": 9809,
 | 
				
			||||||
 | 
					            "ssid_5g_open_vlan": 9810,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa2_mixed_bridge": 9811,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa2_mixed_bridge": 9812,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa2_mixed_nat": 9813,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa2_mixed_nat": 9814,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa2_mixed_vlan": 9815,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa2_mixed_vlan": 9817,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa_wpa2_enterprise_mixed_bridge": 9818,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa_wpa2_enterprise_mixed_bridge": 9819,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa_wpa2_enterprise_mixed_nat": 9820,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa_wpa2_enterprise_mixed_nat": 9821,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa_wpa2_enterprise_mixed_vlan": 9822,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa_wpa2_enterprise_mixed_vlan": 9823,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa_eap_bridge": 9824,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa_eap_bridge": 9825,
 | 
				
			||||||
 | 
					            # "ssid_2g_wpa2_eap_bridge": 9824,
 | 
				
			||||||
 | 
					            # "ssid_5g_wpa2_eap_bridge": 9825,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa_eap_nat": 9826,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa_eap_nat": 9827,
 | 
				
			||||||
 | 
					            "ssid_2g_wpa_eap_vlan": 9828,
 | 
				
			||||||
 | 
					            "ssid_5g_wpa_eap_vlan": 9829,
 | 
				
			||||||
 | 
					            # "ap_update_bridge": 9856,
 | 
				
			||||||
 | 
					            # "ap_update_nat": 9857,
 | 
				
			||||||
 | 
					            # "ap_update_vlan": 9858,
 | 
				
			||||||
 | 
					            # "bridge_vifc_update": 9859,
 | 
				
			||||||
 | 
					            # "nat_vifc_update": 9860,
 | 
				
			||||||
 | 
					            # "vlan_vifc_update": 9861,
 | 
				
			||||||
 | 
					            # "bridge_vifs_update": 9862,
 | 
				
			||||||
 | 
					            # "nat_vifs_update": 9863,
 | 
				
			||||||
 | 
					            # "vlan_vifs_update": 9864,
 | 
				
			||||||
 | 
					            "2g_wpa_eap_ttls_bridge": 9867,
 | 
				
			||||||
 | 
					            "5g_wpa_eap_ttls_bridge": 9768,
 | 
				
			||||||
 | 
					            "2g_wpa_eap_ttls_nat": 9869,
 | 
				
			||||||
 | 
					            "5g_wpa_eap_ttls_nat": 9770,
 | 
				
			||||||
 | 
					            "2g_wpa_eap_ttls_vlan": 9871,
 | 
				
			||||||
 | 
					            "5g_wpa_eap_ttls_vlan": 9872,
 | 
				
			||||||
 | 
					            # "2g_wpa2_mixed_eap_wpa_bridge": 9873,
 | 
				
			||||||
 | 
					            "2g_wpa2_mixed_eap_ttls_wpa2_bridge": 9874,
 | 
				
			||||||
 | 
					            # "5g_wpa2_mixed_eap_wpa_bridge": 9875,
 | 
				
			||||||
 | 
					            "5g_wpa2_mixed_eap_ttls_wpa2_bridge": 9876,
 | 
				
			||||||
 | 
					            # "2g_wpa2_mixed_eap_wpa_nat": 9877,
 | 
				
			||||||
 | 
					            "2g_wpa2_mixed_eap_ttls_wpa2_nat": 9878,
 | 
				
			||||||
 | 
					            # "5g_wpa2_mixed_eap_wpa_nat": 9879,
 | 
				
			||||||
 | 
					            "5g_wpa2_mixed_eap_ttls_wpa2_nat": 9880,
 | 
				
			||||||
 | 
					            # "2g_wpa2_mixed_eap_wpa_vlan": 9881,
 | 
				
			||||||
 | 
					            "2g_wpa2_mixed_eap_ttls_wpa2_vlan": 9882,
 | 
				
			||||||
 | 
					            # "5g_wpa2_mixed_eap_wpa_vlan": 9883,
 | 
				
			||||||
 | 
					            "5g_wpa2_mixed_eap_ttls_wpa2_vlan": 9884,
 | 
				
			||||||
 | 
					            # "2g_wpa2_mixed_wpa_bridge": 9885,
 | 
				
			||||||
 | 
					            "2g_wpa2_mixed_wpa2_bridge": 9886,
 | 
				
			||||||
 | 
					            # "5g_wpa2_mixed_wpa_bridge": 9887,
 | 
				
			||||||
 | 
					            "5g_wpa2_mixed_wpa2_bridge": 9888,
 | 
				
			||||||
 | 
					            # "2g_wpa2_mixed_wpa_nat": 9889,
 | 
				
			||||||
 | 
					            "2g_wpa2_mixed_wpa2_nat": 9890,
 | 
				
			||||||
 | 
					            # "5g_wpa2_mixed_wpa_nat": 9891,
 | 
				
			||||||
 | 
					            "5g_wpa2_mixed_wpa2_nat": 9892,
 | 
				
			||||||
 | 
					            # "2g_wpa2_mixed_wpa_vlan": 9893,
 | 
				
			||||||
 | 
					            "2g_wpa2_mixed_wpa2_vlan": 9894,
 | 
				
			||||||
 | 
					            # "5g_wpa2_mixed_wpa_vlan": 9895,
 | 
				
			||||||
 | 
					            "5g_wpa2_mixed_wpa2_vlan": 9896,
 | 
				
			||||||
 | 
					            "2g_open_bridge": 2234,
 | 
				
			||||||
 | 
					            "5g_open_bridge": 2235,
 | 
				
			||||||
 | 
					            "2g_open_nat": 4321,
 | 
				
			||||||
 | 
					            "5g_open_nat": 4322,
 | 
				
			||||||
 | 
					            "2g_open_vlan": 9897,
 | 
				
			||||||
 | 
					            "5g_open_vlan": 9898
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        kubectl create secret generic configuration --from-file=configuration=./configuration.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: run 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
 | 
				
			||||||
 | 
					                  - |
 | 
				
			||||||
 | 
					                    HOSTS="sec-${{ steps.reservation.outputs.identifier }}.cicd.lab.wlan.tip.build gw-${{ steps.reservation.outputs.identifier }}.cicd.lab.wlan.tip.build fms-${{ steps.reservation.outputs.identifier }}.cicd.lab.wlan.tip.build"
 | 
				
			||||||
 | 
					                    for HOST in \$HOSTS; do
 | 
				
			||||||
 | 
					                      HOST_ENTRY=""
 | 
				
			||||||
 | 
					                      until [[ ! -z "\$HOST_ENTRY" ]]; do sleep 1; HOST_ENTRY=\$(getent hosts \$HOST); done;
 | 
				
			||||||
 | 
					                      echo "\$HOST_ENTRY" >> /etc/hosts
 | 
				
			||||||
 | 
					                      echo "DNS record for \$HOST resolved successfully!"
 | 
				
			||||||
 | 
					                    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    cd tests
 | 
				
			||||||
 | 
					                    pytest -m "${{ github.event.inputs.marker_expression }}" -s -vvv --testbed="basic" -o firmware="${{ github.event.inputs.firmware }}" --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
 | 
				
			||||||
 | 
					              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: allure-results
 | 
				
			||||||
 | 
					        path: allure-results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: generate Allure report
 | 
				
			||||||
 | 
					      run: allure-${{ env.ALLURE_CLI_VERSION }}/bin/allure generate allure-results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: upload Allure report as artifact
 | 
				
			||||||
 | 
					      uses: actions/upload-artifact@v2
 | 
				
			||||||
 | 
					      with:
 | 
				
			||||||
 | 
					        name: allure-report
 | 
				
			||||||
 | 
					        path: allure-report
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: cleanup
 | 
				
			||||||
 | 
					      if: always()
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        kubectl delete ns "${{ steps.namespace.outputs.name }}" --wait=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: stop reservation
 | 
				
			||||||
 | 
					      if: always()
 | 
				
			||||||
 | 
					      run: python .quali/stop_reservation.py ${{ steps.start.outputs.res_id }}
 | 
				
			||||||
 | 
					      env:
 | 
				
			||||||
 | 
					        CLOUDSHELL_URL: quali-cloudshell.lab.wlan.tip.build
 | 
				
			||||||
 | 
					        CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }}
 | 
				
			||||||
 | 
					        CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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 }}"
 | 
				
			||||||
							
								
								
									
										51
									
								
								.github/workflows/quali.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								.github/workflows/quali.yml
									
									
									
									
										vendored
									
									
								
							@@ -41,7 +41,7 @@ on:
 | 
				
			|||||||
        description: 'revision of the Open Wifi UI'
 | 
					        description: 'revision of the Open Wifi UI'
 | 
				
			||||||
      ap_models:
 | 
					      ap_models:
 | 
				
			||||||
        required: true
 | 
					        required: true
 | 
				
			||||||
        default: 'ECW5410,EAP101,EC420,ECW5211,WF188N,EAP102,CIG194C'
 | 
					        default: 'edgecore_ecw5410,edgecore_eap101,tp-link_ec420-g1,edgecore_ecw5211,cig_wf188n,edgecore_eap102,cig_wf194c,hfcl_ion4'
 | 
				
			||||||
        description: 'the AP models to test'
 | 
					        description: 'the AP models to test'
 | 
				
			||||||
      ap_version:
 | 
					      ap_version:
 | 
				
			||||||
        required: true
 | 
					        required: true
 | 
				
			||||||
@@ -71,12 +71,12 @@ jobs:
 | 
				
			|||||||
      - name: set variables
 | 
					      - name: set variables
 | 
				
			||||||
        id: vars
 | 
					        id: vars
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          echo ::set-output name=openwifi::$(echo "${{ github.event.inputs.openwifi_revision || 'main' }}")
 | 
					          echo ::set-output name=openwifi::$(echo "${{ github.event.inputs.openwifi_revision || 'v2.4.0-RC3' }}")
 | 
				
			||||||
          echo ::set-output name=gw::$(echo "${{ github.event.inputs.openwifi_gw_revision || 'master' }}")
 | 
					          echo ::set-output name=gw::$(echo "${{ github.event.inputs.openwifi_gw_revision || 'v2.4.0-RC3' }}")
 | 
				
			||||||
          echo ::set-output name=sec::$(echo "${{ github.event.inputs.openwifi_sec_revision || 'main' }}")
 | 
					          echo ::set-output name=sec::$(echo "${{ github.event.inputs.openwifi_sec_revision || 'v2.4.0-RC2' }}")
 | 
				
			||||||
          echo ::set-output name=fms::$(echo "${{ github.event.inputs.openwifi_fms_revision || 'main' }}")
 | 
					          echo ::set-output name=fms::$(echo "${{ github.event.inputs.openwifi_fms_revision || 'v2.4.0-RC2' }}")
 | 
				
			||||||
          echo ::set-output name=ui::$(echo "${{ github.event.inputs.openwifi_ui_revision || 'main' }}")
 | 
					          echo ::set-output name=ui::$(echo "${{ github.event.inputs.openwifi_ui_revision || 'v2.4.0-RC2' }}")
 | 
				
			||||||
          echo ::set-output name=ap_models::$(echo "${{ github.event.inputs.ap_models || 'ECW5410,EAP101,EC420,ECW5211,WF188N,EAP102,CIG194C' }}")
 | 
					          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=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=marker_expression::$(echo "${{ github.event.inputs.marker_expression || 'uc_sanity' }}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -169,7 +169,7 @@ jobs:
 | 
				
			|||||||
    - name: prepare namespace
 | 
					    - name: prepare namespace
 | 
				
			||||||
      id: namespace
 | 
					      id: namespace
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        NAMESPACE="testing-${{ github.run_id }}-$(echo ${{ matrix.ap_model }} | tr '[:upper:]' '[:lower:]')"
 | 
					        NAMESPACE="testing-${{ github.run_id }}-$(echo ${{ matrix.ap_model }} | tr '[:upper:]' '[:lower:]' | tr '_' '-')"
 | 
				
			||||||
        kubectl create ns $NAMESPACE
 | 
					        kubectl create ns $NAMESPACE
 | 
				
			||||||
        kubectl config set-context --current --namespace=$NAMESPACE
 | 
					        kubectl config set-context --current --namespace=$NAMESPACE
 | 
				
			||||||
        echo "::set-output name=name::${NAMESPACE}"
 | 
					        echo "::set-output name=name::${NAMESPACE}"
 | 
				
			||||||
@@ -183,6 +183,8 @@ jobs:
 | 
				
			|||||||
          "basic": $(python .quali/get_configuration.py ${{ steps.start.outputs.res_id }})
 | 
					          "basic": $(python .quali/get_configuration.py ${{ steps.start.outputs.res_id }})
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        open_flow = {}
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        RADIUS_SERVER_DATA = {
 | 
					        RADIUS_SERVER_DATA = {
 | 
				
			||||||
            "ip": "10.10.1.221",
 | 
					            "ip": "10.10.1.221",
 | 
				
			||||||
            "port": 1812,
 | 
					            "port": 1812,
 | 
				
			||||||
@@ -465,6 +467,8 @@ jobs:
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        EOF
 | 
					        EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        cat configuration.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        kubectl create secret generic configuration --from-file=configuration=./configuration.py
 | 
					        kubectl create secret generic configuration --from-file=configuration=./configuration.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: run tests
 | 
					    - name: run tests
 | 
				
			||||||
@@ -495,12 +499,11 @@ jobs:
 | 
				
			|||||||
                  - -x
 | 
					                  - -x
 | 
				
			||||||
                  - -c
 | 
					                  - -c
 | 
				
			||||||
                  - |
 | 
					                  - |
 | 
				
			||||||
                    apt-get update
 | 
					 | 
				
			||||||
                    apt-get install -y dnsutils
 | 
					 | 
				
			||||||
                    HOSTS="sec-${{ steps.reservation.outputs.identifier }}.cicd.lab.wlan.tip.build gw-${{ steps.reservation.outputs.identifier }}.cicd.lab.wlan.tip.build fms-${{ steps.reservation.outputs.identifier }}.cicd.lab.wlan.tip.build"
 | 
					                    HOSTS="sec-${{ steps.reservation.outputs.identifier }}.cicd.lab.wlan.tip.build gw-${{ steps.reservation.outputs.identifier }}.cicd.lab.wlan.tip.build fms-${{ steps.reservation.outputs.identifier }}.cicd.lab.wlan.tip.build"
 | 
				
			||||||
                    for HOST in \$HOSTS; do
 | 
					                    for HOST in \$HOSTS; do
 | 
				
			||||||
                      until sleep 1; getent hosts \$HOST; do :; done
 | 
					                      HOST_ENTRY=""
 | 
				
			||||||
                      getent hosts \$HOST >> /etc/hosts
 | 
					                      until [[ ! -z "\$HOST_ENTRY" ]]; do sleep 1; HOST_ENTRY=\$(getent hosts \$HOST); done;
 | 
				
			||||||
 | 
					                      echo "\$HOST_ENTRY" >> /etc/hosts
 | 
				
			||||||
                      echo "DNS record for \$HOST resolved successfully!"
 | 
					                      echo "DNS record for \$HOST resolved successfully!"
 | 
				
			||||||
                    done
 | 
					                    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -551,6 +554,22 @@ jobs:
 | 
				
			|||||||
        kubectl logs -f $podname >/dev/null 2>&1
 | 
					        kubectl logs -f $podname >/dev/null 2>&1
 | 
				
			||||||
        exit $(kubectl get pod $podname --output="jsonpath={.status.containerStatuses[].state.terminated.exitCode}")
 | 
					        exit $(kubectl get pod $podname --output="jsonpath={.status.containerStatuses[].state.terminated.exitCode}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: show gw logs
 | 
				
			||||||
 | 
					      if: failure()
 | 
				
			||||||
 | 
					      run: kubectl -n openwifi-${{ steps.reservation.outputs.identifier }} logs deployment/owgw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: show fms logs
 | 
				
			||||||
 | 
					      if: failure()
 | 
				
			||||||
 | 
					      run: kubectl -n openwifi-${{ steps.reservation.outputs.identifier }} logs deployment/owfms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: show prov logs
 | 
				
			||||||
 | 
					      if: failure()
 | 
				
			||||||
 | 
					      run: kubectl -n openwifi-${{ steps.reservation.outputs.identifier }} logs deployment/owprov
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: show sec logs
 | 
				
			||||||
 | 
					      if: failure()
 | 
				
			||||||
 | 
					      run: kubectl -n openwifi-${{ steps.reservation.outputs.identifier }} logs deployment/owsec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: upload Allure results as artifact
 | 
					    - name: upload Allure results as artifact
 | 
				
			||||||
      if: always()
 | 
					      if: always()
 | 
				
			||||||
      uses: actions/upload-artifact@v2
 | 
					      uses: actions/upload-artifact@v2
 | 
				
			||||||
@@ -569,7 +588,7 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  report:
 | 
					  report:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    needs: [ test, generate-matrix ]
 | 
					    needs: [ test, vars, generate-matrix ]
 | 
				
			||||||
    if: always()
 | 
					    if: always()
 | 
				
			||||||
    strategy:
 | 
					    strategy:
 | 
				
			||||||
      max-parallel: 1
 | 
					      max-parallel: 1
 | 
				
			||||||
@@ -625,13 +644,11 @@ jobs:
 | 
				
			|||||||
      run: cp -r allure-results allure-report/results
 | 
					      run: cp -r allure-results allure-report/results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: copy new report
 | 
					    - name: copy new report
 | 
				
			||||||
      if: ${{ (github.event.inputs.marker_expression || 'uc_sanity') == 'uc_sanity' }}
 | 
					 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        mkdir -p reports/sanity/${{ matrix.ap_model }}
 | 
					        mkdir -p reports/sanity/${{ matrix.ap_model }}
 | 
				
			||||||
        cp -Tr allure-report reports/sanity/${{ matrix.ap_model }}/${{ github.run_number }}
 | 
					        cp -Tr allure-report reports/sanity/${{ matrix.ap_model }}/${{ github.run_number }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: update latest symlink
 | 
					    - name: update latest symlink
 | 
				
			||||||
      if: ${{ (github.event.inputs.marker_expression || 'uc_sanity') == 'uc_sanity' }}
 | 
					 | 
				
			||||||
      working-directory: reports/sanity/${{ matrix.ap_model }}
 | 
					      working-directory: reports/sanity/${{ matrix.ap_model }}
 | 
				
			||||||
      run: ln -fns ${{ github.run_number }} latest
 | 
					      run: ln -fns ${{ github.run_number }} latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -647,7 +664,7 @@ jobs:
 | 
				
			|||||||
        git commit -m "Automated deployment: $(date -u)"
 | 
					        git commit -m "Automated deployment: $(date -u)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: push
 | 
					    - name: push
 | 
				
			||||||
      if: github.ref == 'refs/heads/master'
 | 
					      if: github.ref == 'refs/heads/master' && needs.vars.outputs.marker_expression == 'uc_sanity'
 | 
				
			||||||
      uses: ad-m/github-push-action@v0.6.0
 | 
					      uses: ad-m/github-push-action@v0.6.0
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        github_token: ${{ secrets.GITHUB_TOKEN }}
 | 
					        github_token: ${{ secrets.GITHUB_TOKEN }}
 | 
				
			||||||
@@ -655,7 +672,7 @@ jobs:
 | 
				
			|||||||
        directory: reports
 | 
					        directory: reports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: upload to S3
 | 
					    - name: upload to S3
 | 
				
			||||||
      if: github.ref == 'refs/heads/master'
 | 
					      if: github.ref == 'refs/heads/master' && needs.vars.outputs.marker_expression == 'uc_sanity'
 | 
				
			||||||
      uses: ./wlan-testing/.github/actions/allure-report-to-s3
 | 
					      uses: ./wlan-testing/.github/actions/allure-report-to-s3
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        test_type: sanity
 | 
					        test_type: sanity
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,10 +31,10 @@ env:
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      "namespace": "dev01",
 | 
					      "namespace": "dev01",
 | 
				
			||||||
      "deploy_method": "git",
 | 
					      "deploy_method": "git",
 | 
				
			||||||
      "chart_version": "v2.4.0-RC2",
 | 
					      "chart_version": "v2.4.0-RC6",
 | 
				
			||||||
      "owgw_version": "v2.4.0-RC2",
 | 
					      "owgw_version": "v2.4.0-RC5",
 | 
				
			||||||
      "owsec_version": "v2.4.0-RC2",
 | 
					      "owsec_version": "v2.4.0-RC4",
 | 
				
			||||||
      "owfms_version": "v2.4.0-RC2",
 | 
					      "owfms_version": "v2.4.0-RC4",
 | 
				
			||||||
      "owprov_version": "main",
 | 
					      "owprov_version": "main",
 | 
				
			||||||
      "owgwui_version": "v2.4.0-RC2",
 | 
					      "owgwui_version": "v2.4.0-RC2",
 | 
				
			||||||
      "owprovui_version": "main"
 | 
					      "owprovui_version": "main"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,10 +31,10 @@ env:
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      "namespace": "qa01",
 | 
					      "namespace": "qa01",
 | 
				
			||||||
      "deploy_method": "git",
 | 
					      "deploy_method": "git",
 | 
				
			||||||
      "chart_version": "v2.4.0-RC2",
 | 
					      "chart_version": "v2.4.0-RC6",
 | 
				
			||||||
      "owgw_version": "v2.4.0-RC2",
 | 
					      "owgw_version": "v2.4.0-RC5",
 | 
				
			||||||
      "owsec_version": "v2.4.0-RC2",
 | 
					      "owsec_version": "v2.4.0-RC4",
 | 
				
			||||||
      "owfms_version": "v2.4.0-RC2",
 | 
					      "owfms_version": "v2.4.0-RC4",
 | 
				
			||||||
      "owprov_version": "main",
 | 
					      "owprov_version": "main",
 | 
				
			||||||
      "owgwui_version": "v2.4.0-RC2",
 | 
					      "owgwui_version": "v2.4.0-RC2",
 | 
				
			||||||
      "owprovui_version": "main"
 | 
					      "owprovui_version": "main"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
import json
 | 
					 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cloudshell.api.cloudshell_api import UpdateTopologyGlobalInputsRequest, UpdateTopologyRequirementsInputsRequest
 | 
					from cloudshell.api.cloudshell_api import UpdateTopologyGlobalInputsRequest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import argparse
 | 
					import argparse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,8 +15,8 @@ def main():
 | 
				
			|||||||
    parser.add_argument('--openwifi-sec-version', default='main')
 | 
					    parser.add_argument('--openwifi-sec-version', default='main')
 | 
				
			||||||
    parser.add_argument('--openwifi-fms-version', default='main')
 | 
					    parser.add_argument('--openwifi-fms-version', default='main')
 | 
				
			||||||
    parser.add_argument('--openwifi-ui-version', default='main')
 | 
					    parser.add_argument('--openwifi-ui-version', default='main')
 | 
				
			||||||
    parser.add_argument('--ap-model', default='EC420')
 | 
					    parser.add_argument('--ap-model', default='[Any]')
 | 
				
			||||||
    parser.add_argument('--wifi-type', default='Wifi5')
 | 
					    parser.add_argument('--wifi-type', default='[Any]')
 | 
				
			||||||
    args = parser.parse_args()
 | 
					    args = parser.parse_args()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    session = get_session()
 | 
					    session = get_session()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								helm/ucentral/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								helm/ucentral/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					wlan-cloud-ucentral-deploy
 | 
				
			||||||
@@ -9,13 +9,6 @@ usage () {
 | 
				
			|||||||
  echo "Required environment variables:"
 | 
					  echo "Required environment variables:"
 | 
				
			||||||
  echo;
 | 
					  echo;
 | 
				
			||||||
  echo "- NAMESPACE - namespace suffix that will used added for the Kubernetes environment (i.e. if you pass 'test', kubernetes namespace will be named 'ucentral-test')";
 | 
					  echo "- NAMESPACE - namespace suffix that will used added for the Kubernetes environment (i.e. if you pass 'test', kubernetes namespace will be named 'ucentral-test')";
 | 
				
			||||||
  echo "- OWGW_VERSION - OpenWIFI Gateway version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
					 | 
				
			||||||
  echo "- OWGWUI_VERSION - OpenWIFI Web UI version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
					 | 
				
			||||||
  echo "- OWSEC_VERSION - OpenWIFI Security version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
					 | 
				
			||||||
  echo "- OWFMS_VERSION - OpenWIFI Firmware version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
					 | 
				
			||||||
  echo "- OWPROV_VERSION - OpenWIFI Provisioning version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
					 | 
				
			||||||
  echo "- OWPROVUI_VERSION - OpenWIFI Provisioning Web UI version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
					 | 
				
			||||||
  echo;
 | 
					 | 
				
			||||||
  echo "- DEPLOY_METHOD - deployment method for the chart deployment (supported methods - 'git' (will use helm-git from assembly chart) and 'bundle' (will use chart stored in the Artifactory0";
 | 
					  echo "- DEPLOY_METHOD - deployment method for the chart deployment (supported methods - 'git' (will use helm-git from assembly chart) and 'bundle' (will use chart stored in the Artifactory0";
 | 
				
			||||||
  echo "- CHART_VERSION - version of chart to be deployed from assembly chart (for 'git' method git ref may be passed, for 'bundle' method version of chart may be passed)";
 | 
					  echo "- CHART_VERSION - version of chart to be deployed from assembly chart (for 'git' method git ref may be passed, for 'bundle' method version of chart may be passed)";
 | 
				
			||||||
  echo;
 | 
					  echo;
 | 
				
			||||||
@@ -28,20 +21,44 @@ usage () {
 | 
				
			|||||||
  echo "- OWSEC_NEW_PASSWORD - password that should be set to default user instead of default password from properties";
 | 
					  echo "- OWSEC_NEW_PASSWORD - password that should be set to default user instead of default password from properties";
 | 
				
			||||||
  echo "- CERT_LOCATION - path to certificate in PEM format that will be used for securing all endpoint in all services";
 | 
					  echo "- CERT_LOCATION - path to certificate in PEM format that will be used for securing all endpoint in all services";
 | 
				
			||||||
  echo "- KEY_LOCATION - path to private key in PEM format that will be used for securing all endpoint in all services";
 | 
					  echo "- KEY_LOCATION - path to private key in PEM format that will be used for securing all endpoint in all services";
 | 
				
			||||||
 | 
					  echo;
 | 
				
			||||||
 | 
					  echo "Following environmnet variables may be passed, but will be ignored if CHART_VERSION is set to release (i.e. v2.4.0):"
 | 
				
			||||||
 | 
					  echo;
 | 
				
			||||||
 | 
					  echo "- OWGW_VERSION - OpenWIFI Gateway version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
				
			||||||
 | 
					  echo "- OWGWUI_VERSION - OpenWIFI Web UI version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
				
			||||||
 | 
					  echo "- OWSEC_VERSION - OpenWIFI Security version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
				
			||||||
 | 
					  echo "- OWFMS_VERSION - OpenWIFI Firmware version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
				
			||||||
 | 
					  echo "- OWPROV_VERSION - OpenWIFI Provisioning version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
				
			||||||
 | 
					  echo "- OWPROVUI_VERSION - OpenWIFI Provisioning Web UI version to deploy (will be used for Docker image tag and git branch for Helm chart if git deployment is required)";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Helper functions
 | 
				
			||||||
 | 
					check_if_chart_version_is_release() {
 | 
				
			||||||
 | 
					  PARSED_CHART_VERSION=$(echo $CHART_VERSION | grep -xP "v\d+\.\d+\.\d+.*")
 | 
				
			||||||
 | 
					  if [[ -z "$PARSED_CHART_VERSION" ]]; then
 | 
				
			||||||
 | 
					    return 1
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Check if required environment variables were passed
 | 
					# Check if required environment variables were passed
 | 
				
			||||||
## Environment specifics
 | 
					 | 
				
			||||||
[ -z ${NAMESPACE+x} ] && echo "NAMESPACE is unset" && usage && exit 1
 | 
					 | 
				
			||||||
[ -z ${OWGW_VERSION+x} ] && echo "OWGW_VERSION is unset" && usage && exit 1
 | 
					 | 
				
			||||||
[ -z ${OWGWUI_VERSION+x} ] && echo "OWGWUI_VERSION is unset" && usage && exit 1
 | 
					 | 
				
			||||||
[ -z ${OWSEC_VERSION+x} ] && echo "OWSEC_VERSION is unset" && usage && exit 1
 | 
					 | 
				
			||||||
[ -z ${OWFMS_VERSION+x} ] && echo "OWFMS_VERSION is unset" && usage && exit 1
 | 
					 | 
				
			||||||
[ -z ${OWPROV_VERSION+x} ] && echo "OWPROV_VERSION is unset" && usage && exit 1
 | 
					 | 
				
			||||||
[ -z ${OWPROVUI_VERSION+x} ] && echo "OWPROVUI_VERSION is unset" && usage && exit 1
 | 
					 | 
				
			||||||
## Deployment specifics
 | 
					## Deployment specifics
 | 
				
			||||||
[ -z ${DEPLOY_METHOD+x} ] && echo "DEPLOY_METHOD is unset" && usage && exit 1
 | 
					[ -z ${DEPLOY_METHOD+x} ] && echo "DEPLOY_METHOD is unset" && usage && exit 1
 | 
				
			||||||
[ -z ${CHART_VERSION+x} ] && echo "CHART_VERSION is unset" && usage && exit 1
 | 
					[ -z ${CHART_VERSION+x} ] && echo "CHART_VERSION is unset" && usage && exit 1
 | 
				
			||||||
 | 
					if check_if_chart_version_is_release; then
 | 
				
			||||||
 | 
					  echo "Chart version ($CHART_VERSION) is release version, ignoring services versions"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  echo "Chart version ($CHART_VERSION) is not release version, checking if services versions are set"
 | 
				
			||||||
 | 
					  [ -z ${OWGW_VERSION+x} ] && echo "OWGW_VERSION is unset" && usage && exit 1
 | 
				
			||||||
 | 
					  [ -z ${OWGWUI_VERSION+x} ] && echo "OWGWUI_VERSION is unset" && usage && exit 1
 | 
				
			||||||
 | 
					  [ -z ${OWSEC_VERSION+x} ] && echo "OWSEC_VERSION is unset" && usage && exit 1
 | 
				
			||||||
 | 
					  [ -z ${OWFMS_VERSION+x} ] && echo "OWFMS_VERSION is unset" && usage && exit 1
 | 
				
			||||||
 | 
					  [ -z ${OWPROV_VERSION+x} ] && echo "OWPROV_VERSION is unset" && usage && exit 1
 | 
				
			||||||
 | 
					  [ -z ${OWPROVUI_VERSION+x} ] && echo "OWPROVUI_VERSION is unset" && usage && exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					## Environment specifics
 | 
				
			||||||
 | 
					[ -z ${NAMESPACE+x} ] && echo "NAMESPACE is unset" && usage && exit 1
 | 
				
			||||||
## Variables specifics
 | 
					## Variables specifics
 | 
				
			||||||
[ -z ${VALUES_FILE_LOCATION+x} ] && echo "VALUES_FILE_LOCATION is unset" && usage && exit 1
 | 
					[ -z ${VALUES_FILE_LOCATION+x} ] && echo "VALUES_FILE_LOCATION is unset" && usage && exit 1
 | 
				
			||||||
[ -z ${RTTY_TOKEN+x} ] && echo "RTTY_TOKEN is unset" && usage && exit 1
 | 
					[ -z ${RTTY_TOKEN+x} ] && echo "RTTY_TOKEN is unset" && usage && exit 1
 | 
				
			||||||
@@ -70,12 +87,14 @@ if [[ "$DEPLOY_METHOD" == "git" ]]; then
 | 
				
			|||||||
  cd wlan-cloud-ucentral-deploy
 | 
					  cd wlan-cloud-ucentral-deploy
 | 
				
			||||||
  git checkout $CHART_VERSION
 | 
					  git checkout $CHART_VERSION
 | 
				
			||||||
  cd chart
 | 
					  cd chart
 | 
				
			||||||
  sed -i '/wlan-cloud-ucentralgw@/s/ref=.*/ref='${OWGW_VERSION}'\"/g' Chart.yaml
 | 
					  if ! check_if_chart_version_is_release; then
 | 
				
			||||||
  sed -i '/wlan-cloud-ucentralgw-ui@/s/ref=.*/ref='${OWGWUI_VERSION}'\"/g' Chart.yaml
 | 
					    sed -i '/wlan-cloud-ucentralgw@/s/ref=.*/ref='${OWGW_VERSION}'\"/g' Chart.yaml
 | 
				
			||||||
  sed -i '/wlan-cloud-ucentralsec@/s/ref=.*/ref='${OWSEC_VERSION}'\"/g' Chart.yaml
 | 
					    sed -i '/wlan-cloud-ucentralgw-ui@/s/ref=.*/ref='${OWGWUI_VERSION}'\"/g' Chart.yaml
 | 
				
			||||||
  sed -i '/wlan-cloud-ucentralfms@/s/ref=.*/ref='${OWFMS_VERSION}'\"/g' Chart.yaml
 | 
					    sed -i '/wlan-cloud-ucentralsec@/s/ref=.*/ref='${OWSEC_VERSION}'\"/g' Chart.yaml
 | 
				
			||||||
  sed -i '/wlan-cloud-owprov@/s/ref=.*/ref='${OWPROV_VERSION}'\"/g' Chart.yaml
 | 
					    sed -i '/wlan-cloud-ucentralfms@/s/ref=.*/ref='${OWFMS_VERSION}'\"/g' Chart.yaml
 | 
				
			||||||
  sed -i '/wlan-cloud-owprov-ui@/s/ref=.*/ref='${OWPROVUI_VERSION}'\"/g' Chart.yaml
 | 
					    sed -i '/wlan-cloud-owprov@/s/ref=.*/ref='${OWPROV_VERSION}'\"/g' Chart.yaml
 | 
				
			||||||
 | 
					    sed -i '/wlan-cloud-owprov-ui@/s/ref=.*/ref='${OWPROVUI_VERSION}'\"/g' Chart.yaml
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  helm repo add bitnami https://charts.bitnami.com/bitnami
 | 
					  helm repo add bitnami https://charts.bitnami.com/bitnami
 | 
				
			||||||
  helm repo update
 | 
					  helm repo update
 | 
				
			||||||
  helm dependency update
 | 
					  helm dependency update
 | 
				
			||||||
@@ -143,10 +162,4 @@ helm upgrade --install --create-namespace --wait --timeout 60m \
 | 
				
			|||||||
  --set-file owfms.certs."restapi-key\.pem"=$KEY_LOCATION \
 | 
					  --set-file owfms.certs."restapi-key\.pem"=$KEY_LOCATION \
 | 
				
			||||||
  --set-file owprov.certs."restapi-cert\.pem"=$CERT_LOCATION \
 | 
					  --set-file owprov.certs."restapi-cert\.pem"=$CERT_LOCATION \
 | 
				
			||||||
  --set-file owprov.certs."restapi-key\.pem"=$KEY_LOCATION \
 | 
					  --set-file owprov.certs."restapi-key\.pem"=$KEY_LOCATION \
 | 
				
			||||||
  --set owgw.images.owgw.tag=$OWGW_VERSION_TAG \
 | 
					 | 
				
			||||||
  --set owgwui.images.owgwui.tag=$OWGWUI_VERSION_TAG \
 | 
					 | 
				
			||||||
  --set owsec.images.owsec.tag=$OWSEC_VERSION_TAG \
 | 
					 | 
				
			||||||
  --set owfms.images.owfms.tag=$OWFMS_VERSION_TAG \
 | 
					 | 
				
			||||||
  --set owprov.images.owprov.tag=$OWPROV_VERSION_TAG \
 | 
					 | 
				
			||||||
  --set owprovui.images.owprov.tag=$OWPROVUI_VERSION_TAG \
 | 
					 | 
				
			||||||
  tip-openwifi $DEPLOY_SOURCE
 | 
					  tip-openwifi $DEPLOY_SOURCE
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,11 @@
 | 
				
			|||||||
owgw:
 | 
					owgw:
 | 
				
			||||||
 | 
					  # https://telecominfraproject.atlassian.net/browse/WIFI-5840
 | 
				
			||||||
 | 
					  checks:
 | 
				
			||||||
 | 
					    owgw:
 | 
				
			||||||
 | 
					      readiness:
 | 
				
			||||||
 | 
					        exec:
 | 
				
			||||||
 | 
					          command: ["true"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services:
 | 
					  services:
 | 
				
			||||||
    owgw:
 | 
					    owgw:
 | 
				
			||||||
      type: LoadBalancer
 | 
					      type: LoadBalancer
 | 
				
			||||||
@@ -66,6 +73,13 @@ owgw:
 | 
				
			|||||||
      -----END CERTIFICATE-----
 | 
					      -----END CERTIFICATE-----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
owsec:
 | 
					owsec:
 | 
				
			||||||
 | 
					  # https://telecominfraproject.atlassian.net/browse/WIFI-5840
 | 
				
			||||||
 | 
					  checks:
 | 
				
			||||||
 | 
					    owsec:
 | 
				
			||||||
 | 
					      readiness:
 | 
				
			||||||
 | 
					        exec:
 | 
				
			||||||
 | 
					          command: ["true"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services:
 | 
					  services:
 | 
				
			||||||
    owsec:
 | 
					    owsec:
 | 
				
			||||||
      type: LoadBalancer
 | 
					      type: LoadBalancer
 | 
				
			||||||
@@ -176,6 +190,13 @@ owgwui:
 | 
				
			|||||||
    cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
 | 
					    cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
owfms:
 | 
					owfms:
 | 
				
			||||||
 | 
					  # https://telecominfraproject.atlassian.net/browse/WIFI-5840
 | 
				
			||||||
 | 
					  checks:
 | 
				
			||||||
 | 
					    owfms:
 | 
				
			||||||
 | 
					      readiness:
 | 
				
			||||||
 | 
					        exec:
 | 
				
			||||||
 | 
					          command: ["true"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services:
 | 
					  services:
 | 
				
			||||||
    owfms:
 | 
					    owfms:
 | 
				
			||||||
      type: LoadBalancer
 | 
					      type: LoadBalancer
 | 
				
			||||||
@@ -225,6 +246,12 @@ owfms:
 | 
				
			|||||||
      -----END CERTIFICATE-----
 | 
					      -----END CERTIFICATE-----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
owprov:
 | 
					owprov:
 | 
				
			||||||
 | 
					  checks:
 | 
				
			||||||
 | 
					    owprov:
 | 
				
			||||||
 | 
					      readiness:
 | 
				
			||||||
 | 
					        exec:
 | 
				
			||||||
 | 
					          command: ["true"]
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
  services:
 | 
					  services:
 | 
				
			||||||
    owprov:
 | 
					    owprov:
 | 
				
			||||||
      type: LoadBalancer
 | 
					      type: LoadBalancer
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -582,6 +582,24 @@ class APNOS:
 | 
				
			|||||||
                pass
 | 
					                pass
 | 
				
			||||||
        return vlan_list
 | 
					        return vlan_list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_ap_uci_show_ucentral(self):
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            client = self.ssh_cli_connect()
 | 
				
			||||||
 | 
					            cmd = "uci show ucentral"
 | 
				
			||||||
 | 
					            if self.mode:
 | 
				
			||||||
 | 
					                cmd = f"cd ~/cicd-git/ && ./openwrt_ctl.py {self.owrt_args} -t {self.tty} --action " \
 | 
				
			||||||
 | 
					                      f"cmd --value \"{cmd}\" "
 | 
				
			||||||
 | 
					            stdin, stdout, stderr = client.exec_command(cmd)
 | 
				
			||||||
 | 
					            output = stdout.read()
 | 
				
			||||||
 | 
					            status = output.decode('utf-8').splitlines()
 | 
				
			||||||
 | 
					            for i in status:
 | 
				
			||||||
 | 
					                if i.startswith("ucentral.config.server="):
 | 
				
			||||||
 | 
					                    status = i.split("=")[1]
 | 
				
			||||||
 | 
					            client.close()
 | 
				
			||||||
 | 
					        except Exception as e:
 | 
				
			||||||
 | 
					            print(e)
 | 
				
			||||||
 | 
					            status = "Error"
 | 
				
			||||||
 | 
					        return status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    obj = {
 | 
					    obj = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,7 @@ import allure
 | 
				
			|||||||
import requests
 | 
					import requests
 | 
				
			||||||
from operator import itemgetter
 | 
					from operator import itemgetter
 | 
				
			||||||
from pathlib import Path
 | 
					from pathlib import Path
 | 
				
			||||||
 | 
					from configuration import open_flow
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from requests.adapters import HTTPAdapter
 | 
					from requests.adapters import HTTPAdapter
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
@@ -385,6 +386,18 @@ class UProfileUtility:
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        self.mode = None
 | 
					        self.mode = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def set_express_wifi(self):
 | 
				
			||||||
 | 
					        if self.mode == "NAT":
 | 
				
			||||||
 | 
					            self.base_profile_config["interfaces"][0]["services"] = ["lldp", "ssh"]
 | 
				
			||||||
 | 
					            self.base_profile_config["interfaces"][1]["services"] = ["ssh", "lldp", "open-flow"]
 | 
				
			||||||
 | 
					            self.base_profile_config["interfaces"][1]["ipv4"]["subnet"] = "192.168.97.1/24"
 | 
				
			||||||
 | 
					            self.base_profile_config["interfaces"][1]["ipv4"]["dhcp"]["lease-count"] = 100
 | 
				
			||||||
 | 
					            self.base_profile_config['services']["open-flow"] = open_flow
 | 
				
			||||||
 | 
					            self.base_profile_config['services']['lldp']['describe'] = "OpenWiFi - expressWiFi"
 | 
				
			||||||
 | 
					            self.base_profile_config['services']['lldp']['location'] = "Hotspot"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def encryption_lookup(self, encryption="psk"):
 | 
					    def encryption_lookup(self, encryption="psk"):
 | 
				
			||||||
        encryption_mapping = {
 | 
					        encryption_mapping = {
 | 
				
			||||||
            "none": "open",
 | 
					            "none": "open",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,12 +22,13 @@ for folder in 'py-json', 'py-scripts':
 | 
				
			|||||||
sys.path.append(f"../lanforge/lanforge-scripts/py-scripts/tip-cicd-sanity")
 | 
					sys.path.append(f"../lanforge/lanforge-scripts/py-scripts/tip-cicd-sanity")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sys.path.append(f'../libs')
 | 
					sys.path.append(f'../libs')
 | 
				
			||||||
 | 
					sys.path.append(f'../tools')
 | 
				
			||||||
sys.path.append(f'../libs/lanforge/')
 | 
					sys.path.append(f'../libs/lanforge/')
 | 
				
			||||||
from sta_connect2 import StaConnect2
 | 
					from sta_connect2 import StaConnect2
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
import string
 | 
					import string
 | 
				
			||||||
import random
 | 
					import random
 | 
				
			||||||
 | 
					from scp_util import SCP_File
 | 
				
			||||||
S = 12
 | 
					S = 12
 | 
				
			||||||
# from eap_connect import EAPConnect
 | 
					# from eap_connect import EAPConnect
 | 
				
			||||||
from test_ipv4_ttls import TTLSTest
 | 
					from test_ipv4_ttls import TTLSTest
 | 
				
			||||||
@@ -50,6 +51,7 @@ class RunTest:
 | 
				
			|||||||
    def __init__(self, lanforge_data=None, local_report_path="../reports/", influx_params=None, debug=False):
 | 
					    def __init__(self, lanforge_data=None, local_report_path="../reports/", influx_params=None, debug=False):
 | 
				
			||||||
        self.lanforge_ip = lanforge_data["ip"]
 | 
					        self.lanforge_ip = lanforge_data["ip"]
 | 
				
			||||||
        self.lanforge_port = lanforge_data["port"]
 | 
					        self.lanforge_port = lanforge_data["port"]
 | 
				
			||||||
 | 
					        self.lanforge_ssh_port = lanforge_data["ssh_port"]
 | 
				
			||||||
        self.twog_radios = lanforge_data["2.4G-Radio"]
 | 
					        self.twog_radios = lanforge_data["2.4G-Radio"]
 | 
				
			||||||
        self.fiveg_radios = lanforge_data["5G-Radio"]
 | 
					        self.fiveg_radios = lanforge_data["5G-Radio"]
 | 
				
			||||||
        self.ax_radios = lanforge_data["AX-Radio"]
 | 
					        self.ax_radios = lanforge_data["AX-Radio"]
 | 
				
			||||||
@@ -129,6 +131,13 @@ class RunTest:
 | 
				
			|||||||
                    print("test result: " + result)
 | 
					                    print("test result: " + result)
 | 
				
			||||||
                pytest.exit("Test Failed: Debug True")
 | 
					                pytest.exit("Test Failed: Debug True")
 | 
				
			||||||
        self.staConnect.cleanup()
 | 
					        self.staConnect.cleanup()
 | 
				
			||||||
 | 
					        supplicqant = "/home/lanforge/wifi/wpa_supplicant_log_" + self.staConnect.radio.split(".")[2] + ".txt"
 | 
				
			||||||
 | 
					        obj = SCP_File(ip=self.lanforge_ip, port=self.lanforge_ssh_port, username="root", password="lanforge",
 | 
				
			||||||
 | 
					                       remote_path=supplicqant,
 | 
				
			||||||
 | 
					                       local_path=".")
 | 
				
			||||||
 | 
					        obj.pull_file()
 | 
				
			||||||
 | 
					        allure.attach.file(source="wpa_supplicant_log_" + self.staConnect.radio.split(".")[2] + ".txt",
 | 
				
			||||||
 | 
					                           name="supplicant_log")
 | 
				
			||||||
        for result in run_results:
 | 
					        for result in run_results:
 | 
				
			||||||
            print("test result: " + result)
 | 
					            print("test result: " + result)
 | 
				
			||||||
        result = True
 | 
					        result = True
 | 
				
			||||||
@@ -215,6 +224,13 @@ class RunTest:
 | 
				
			|||||||
            #     print(e)
 | 
					            #     print(e)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.eap_connect.stop()
 | 
					        self.eap_connect.stop()
 | 
				
			||||||
 | 
					        supplicqant = "/home/lanforge/wifi/wpa_supplicant_log_" + self.eap_connect.radio.split(".")[2] + ".txt"
 | 
				
			||||||
 | 
					        obj = SCP_File(ip=self.lanforge_ip, port=self.lanforge_ssh_port, username="root", password="lanforge",
 | 
				
			||||||
 | 
					                       remote_path=supplicqant,
 | 
				
			||||||
 | 
					                       local_path=".")
 | 
				
			||||||
 | 
					        obj.pull_file()
 | 
				
			||||||
 | 
					        allure.attach.file(source="wpa_supplicant_log_" + self.eap_connect.radio.split(".")[2] + ".txt",
 | 
				
			||||||
 | 
					                           name="supplicant_log")
 | 
				
			||||||
        if not self.eap_connect.passes():
 | 
					        if not self.eap_connect.passes():
 | 
				
			||||||
            if self.debug:
 | 
					            if self.debug:
 | 
				
			||||||
                print("test result: " + self.eap_connect.passes())
 | 
					                print("test result: " + self.eap_connect.passes())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -310,7 +310,7 @@ class ChamberView:
 | 
				
			|||||||
            if df.empty == True:
 | 
					            if df.empty == True:
 | 
				
			||||||
                return "empty"
 | 
					                return "empty"
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                result = df.to_string(index=False)
 | 
					                result = df[column_name].values.tolist()
 | 
				
			||||||
                return result
 | 
					                return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def read_csv_individual_station_throughput(self, dir_name, option):
 | 
					    def read_csv_individual_station_throughput(self, dir_name, option):
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										55
									
								
								libs/lanforge/scp_util.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										55
									
								
								libs/lanforge/scp_util.py
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env python3
 | 
				
			||||||
 | 
					import argparse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import paramiko
 | 
				
			||||||
 | 
					from scp import SCPClient
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SCP_File:
 | 
				
			||||||
 | 
					    def __init__(self, ip="localhost", port=22, username="lanforge", password="lanforge", remote_path="/home/lanforge/",
 | 
				
			||||||
 | 
					                 local_path="."):
 | 
				
			||||||
 | 
					        self.ip = ip
 | 
				
			||||||
 | 
					        self.port = port
 | 
				
			||||||
 | 
					        self.remote_path = remote_path
 | 
				
			||||||
 | 
					        self.local_path = local_path
 | 
				
			||||||
 | 
					        self.username = username
 | 
				
			||||||
 | 
					        self.password = password
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def pull_file(self):
 | 
				
			||||||
 | 
					        ssh = paramiko.SSHClient()
 | 
				
			||||||
 | 
					        ssh.load_system_host_keys()
 | 
				
			||||||
 | 
					        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 | 
				
			||||||
 | 
					        ssh.connect(hostname=self.ip, username=self.username, password=self.password, port=self.port, allow_agent=False,
 | 
				
			||||||
 | 
					                    look_for_keys=False)
 | 
				
			||||||
 | 
					        # ssh.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        with SCPClient(ssh.get_transport()) as scp:
 | 
				
			||||||
 | 
					            scp.get(remote_path=self.remote_path, local_path=self.local_path, recursive=True)
 | 
				
			||||||
 | 
					            scp.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def main():
 | 
				
			||||||
 | 
					    parser = argparse.ArgumentParser(prog="lf_utils",
 | 
				
			||||||
 | 
					                                     formatter_class=argparse.RawTextHelpFormatter,
 | 
				
			||||||
 | 
					                                     allow_abbrev=True,
 | 
				
			||||||
 | 
					                                     epilog="About lf_tools.py",
 | 
				
			||||||
 | 
					                                     description="Tools for LANforge System")
 | 
				
			||||||
 | 
					    parser.add_argument('--host', type=str, help=' --host : IP Address f LANforge System', default="localhost")
 | 
				
			||||||
 | 
					    parser.add_argument('--port', type=int, help='--passwd of dut', default=22)
 | 
				
			||||||
 | 
					    parser.add_argument('--username', type=str, help='--username to use on LANforge', default="lanforge")
 | 
				
			||||||
 | 
					    parser.add_argument('--password', type=str, help='--password to use on LANforge', default="lanforge")
 | 
				
			||||||
 | 
					    parser.add_argument('--remote_path', type=str, help='--password to the given username',
 | 
				
			||||||
 | 
					                        default="/home/lanforge/lf_kinstall.pl")
 | 
				
			||||||
 | 
					    parser.add_argument('--local_path', type=str, help='--action to perform'
 | 
				
			||||||
 | 
					                                                       'reboot | run_cmd', default=".")
 | 
				
			||||||
 | 
					    args = parser.parse_args()
 | 
				
			||||||
 | 
					    lf_tools = SCP_File(ip=args.host, port=args.port,
 | 
				
			||||||
 | 
					                        username=args.username, password=args.password,
 | 
				
			||||||
 | 
					                        remote_path=args.remote_path, local_path=args.local_path)
 | 
				
			||||||
 | 
					    lf_tools.pull_file()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    main()
 | 
				
			||||||
@@ -51,6 +51,7 @@ def closeApp(appName, setup_perfectoMobile):
 | 
				
			|||||||
    setup_perfectoMobile[1].step_start("Closing App: " + appName)
 | 
					    setup_perfectoMobile[1].step_start("Closing App: " + appName)
 | 
				
			||||||
    params = {'identifier': appName}
 | 
					    params = {'identifier': appName}
 | 
				
			||||||
    setup_perfectoMobile[0].execute_script('mobile:application:close', params)
 | 
					    setup_perfectoMobile[0].execute_script('mobile:application:close', params)
 | 
				
			||||||
 | 
					    print("Closed App")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def scrollDown(setup_perfectoMobile):
 | 
					def scrollDown(setup_perfectoMobile):
 | 
				
			||||||
    print("Scroll Down")
 | 
					    print("Scroll Down")
 | 
				
			||||||
@@ -59,9 +60,9 @@ def scrollDown(setup_perfectoMobile):
 | 
				
			|||||||
    params2["start"] = "50%,90%"
 | 
					    params2["start"] = "50%,90%"
 | 
				
			||||||
    params2["end"] = "50%,20%"
 | 
					    params2["end"] = "50%,20%"
 | 
				
			||||||
    params2["duration"] = "4"
 | 
					    params2["duration"] = "4"
 | 
				
			||||||
    time.sleep(5)
 | 
					    time.sleep(2)
 | 
				
			||||||
    setup_perfectoMobile[0].execute_script('mobile:touch:swipe', params2)
 | 
					    setup_perfectoMobile[0].execute_script('mobile:touch:swipe', params2)
 | 
				
			||||||
    time.sleep(5)
 | 
					    time.sleep(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def getDeviceID(setup_perfectoMobile):
 | 
					def getDeviceID(setup_perfectoMobile):
 | 
				
			||||||
@@ -114,6 +115,8 @@ def set_APconnMobileDevice_android(request, WifiName, WifiPass, setup_perfectoMo
 | 
				
			|||||||
        except NoSuchElementException:
 | 
					        except NoSuchElementException:
 | 
				
			||||||
            print("Exception: Verify Xpath - Update/check Xpath for Click Connections")
 | 
					            print("Exception: Verify Xpath - Update/check Xpath for Click Connections")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            print("Get Connected Wifi Name if any")
 | 
					            print("Get Connected Wifi Name if any")
 | 
				
			||||||
            report.step_start("Get Connected Wifi Name if any")
 | 
					            report.step_start("Get Connected Wifi Name if any")
 | 
				
			||||||
@@ -143,6 +146,7 @@ def set_APconnMobileDevice_android(request, WifiName, WifiPass, setup_perfectoMo
 | 
				
			|||||||
        report.step_start("Clicking Wi-Fi")
 | 
					        report.step_start("Clicking Wi-Fi")
 | 
				
			||||||
        wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']")
 | 
					        wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']")
 | 
				
			||||||
        wifiElement.click()
 | 
					        wifiElement.click()
 | 
				
			||||||
 | 
					        Wifi_AP_Name=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if Wifi_AP_Name.__eq__(WifiName):
 | 
					        if Wifi_AP_Name.__eq__(WifiName):
 | 
				
			||||||
            print("Wifi Name Matches - Already Connected To: " + Wifi_AP_Name)
 | 
					            print("Wifi Name Matches - Already Connected To: " + Wifi_AP_Name)
 | 
				
			||||||
@@ -581,7 +585,7 @@ def verifyUploadDownloadSpeed_android(request, setup_perfectoMobile, get_APToMob
 | 
				
			|||||||
    driver.switch_to.context('WEBVIEW_1')
 | 
					    driver.switch_to.context('WEBVIEW_1')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        print("Launching Safari")
 | 
					        print("Launching Chrome")
 | 
				
			||||||
        report.step_start("Google Home Page")
 | 
					        report.step_start("Google Home Page")
 | 
				
			||||||
        driver.get(connData["webURL"])
 | 
					        driver.get(connData["webURL"])
 | 
				
			||||||
        print("Enter Search Text")
 | 
					        print("Enter Search Text")
 | 
				
			||||||
@@ -1060,7 +1064,7 @@ def check_if_no_internet_popup(driver):#To check and kill if any popups related
 | 
				
			|||||||
                print("**alert** popup **alert**")
 | 
					                print("**alert** popup **alert**")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
                    driver.implicitly_wait(3)
 | 
					                    driver.implicitly_wait(2)
 | 
				
			||||||
                    time.sleep(2)
 | 
					                    time.sleep(2)
 | 
				
			||||||
                    kill_popup = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/keep_btn']")
 | 
					                    kill_popup = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/keep_btn']")
 | 
				
			||||||
                    kill_popup.click()
 | 
					                    kill_popup.click()
 | 
				
			||||||
@@ -1572,7 +1576,7 @@ def wifi_connect(request, WifiName, WifiPass, setup_perfectoMobile, connData):
 | 
				
			|||||||
                        print("Connect Button Not Enabled...Verify if Password is set properly  ")
 | 
					                        print("Connect Button Not Enabled...Verify if Password is set properly  ")
 | 
				
			||||||
                    check_if_no_internet_popup(driver)
 | 
					                    check_if_no_internet_popup(driver)
 | 
				
			||||||
                    # -------------------------------------------------------
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    # //*[@resource-id='com.android.settings:id/summary' and @text="Sign in to the network."]/parent::*/android.widget.TextView[@text='XWF-OWF_DSx']
 | 
				
			||||||
                    #Verify if WiFi is connected
 | 
					                    #Verify if WiFi is connected
 | 
				
			||||||
                    # -------------------------------------------------------
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
                    try:
 | 
					                    try:
 | 
				
			||||||
@@ -1604,11 +1608,16 @@ def wifi_connect(request, WifiName, WifiPass, setup_perfectoMobile, connData):
 | 
				
			|||||||
                                ssid_with_internet = True
 | 
					                                ssid_with_internet = True
 | 
				
			||||||
                                print("Wifi Successfully Connected")
 | 
					                                print("Wifi Successfully Connected")
 | 
				
			||||||
                               #allure.attach(name=body=str("Wifi Successfully Connected"))
 | 
					                               #allure.attach(name=body=str("Wifi Successfully Connected"))
 | 
				
			||||||
                            except NoSuchElementException:
 | 
					                            except:
 | 
				
			||||||
                                print("Wifi Connection Error: " + WifiName)
 | 
					                                try:
 | 
				
			||||||
                               #allure.attach(name=body=str("Wifi Connection Error: " + WifiName))
 | 
					                                    report.step_start("Unknown WIFI status found")
 | 
				
			||||||
                                closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
					                                    ssid_with_internet = False
 | 
				
			||||||
                                return ssid_with_internet
 | 
					                                    print("Unknown WIFI status found")
 | 
				
			||||||
 | 
					                                except NoSuchElementException:
 | 
				
			||||||
 | 
					                                    print("Wifi Connection Error: " + WifiName)
 | 
				
			||||||
 | 
					                                   #allure.attach(name=body=str("Wifi Connection Error: " + WifiName))
 | 
				
			||||||
 | 
					                                    closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                                    return ssid_with_internet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                except NoSuchElementException:
 | 
					                except NoSuchElementException:
 | 
				
			||||||
@@ -1776,8 +1785,8 @@ def wifi_disconnect_and_forget(request, WifiName, WifiPass, setup_perfectoMobile
 | 
				
			|||||||
def get_all_available_ssids(driver):
 | 
					def get_all_available_ssids(driver):
 | 
				
			||||||
    active_ssid_list = []
 | 
					    active_ssid_list = []
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        time.sleep(8)
 | 
					        time.sleep(5)
 | 
				
			||||||
        driver.implicitly_wait(10)
 | 
					        driver.implicitly_wait(5)
 | 
				
			||||||
        elements = driver.find_elements_by_xpath("//*[@resource-id='com.android.settings:id/title']")
 | 
					        elements = driver.find_elements_by_xpath("//*[@resource-id='com.android.settings:id/title']")
 | 
				
			||||||
        # print("elements: ", elements)
 | 
					        # print("elements: ", elements)
 | 
				
			||||||
        print(len(elements))
 | 
					        print(len(elements))
 | 
				
			||||||
@@ -2656,7 +2665,7 @@ def wifi_connect_eap(request, WifiName, User, ttls_passwd, setup_perfectoMobile,
 | 
				
			|||||||
                               #allure.attach(name=body=str("Wifi Successfully Connected"))
 | 
					                               #allure.attach(name=body=str("Wifi Successfully Connected"))
 | 
				
			||||||
                            except NoSuchElementException:
 | 
					                            except NoSuchElementException:
 | 
				
			||||||
                                print("Wifi Connection Error: " + WifiName)
 | 
					                                print("Wifi Connection Error: " + WifiName)
 | 
				
			||||||
                               #allure.attach(name=body=str("Wifi Connection Error: " + WifiName))
 | 
					                                #allure.attach(name=body=str("Wifi Connection Error: " + WifiName))
 | 
				
			||||||
                                closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
					                                closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
                                return ssid_with_internet
 | 
					                                return ssid_with_internet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2678,18 +2687,703 @@ def wifi_connect_eap(request, WifiName, User, ttls_passwd, setup_perfectoMobile,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
					    closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
    return ssid_with_internet
 | 
					    return ssid_with_internet
 | 
				
			||||||
 | 
					#--------------------CAPTIVE PORTAL Android-----------------------------------------
 | 
				
			||||||
 | 
					def captive_portal_and(request, WifiName, WifiPass, setup_perfectoMobile, connData):
 | 
				
			||||||
 | 
					    print("\n-------------------------------------")
 | 
				
			||||||
 | 
					    print("Select Wifi/AccessPoint Connection")
 | 
				
			||||||
 | 
					    print("-------------------------------------")
 | 
				
			||||||
 | 
					    print("Verifying Wifi Connection Details....")
 | 
				
			||||||
 | 
					   #allure.attach(name= body=str("\n-------------------------------------"))
 | 
				
			||||||
 | 
					    report = setup_perfectoMobile[1]
 | 
				
			||||||
 | 
					    driver = setup_perfectoMobile[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ssid_with_internet = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    report.step_start("Switching Driver Context")
 | 
				
			||||||
 | 
					    print("Switching Context to Native")
 | 
				
			||||||
 | 
					    contexts = driver.contexts
 | 
				
			||||||
 | 
					    driver.switch_to.context(contexts[0])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Open Settings Application
 | 
				
			||||||
 | 
					    openApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					    deviceModelName = getDeviceModelName(setup_perfectoMobile)
 | 
				
			||||||
 | 
					    print("Selected Device Model: " + deviceModelName)
 | 
				
			||||||
 | 
					   #allure.attach(name= body=str("\Selected Device Model: " + deviceModelName))
 | 
				
			||||||
 | 
					    if deviceModelName != ("Pixel 4"):
 | 
				
			||||||
 | 
					        report.step_start("Set Wifi Network to " + WifiName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # -----------------To Open Connections page-----------------------
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            print("Verifying Connected Wifi Connection")
 | 
				
			||||||
 | 
					            report.step_start("Click Connections")
 | 
				
			||||||
 | 
					            connElement = driver.find_element_by_xpath("//*[@text='Connections']")
 | 
				
			||||||
 | 
					            connElement.click()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            # ---------------------Open WIFI page-------------------------------
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                report.step_start("Clicking Wi-Fi")
 | 
				
			||||||
 | 
					                print("Clicking WIFI")
 | 
				
			||||||
 | 
					                wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']")
 | 
				
			||||||
 | 
					                wifiElement.click()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                # --------------------To Turn on WIFi Switch if already OFF--------------------------------
 | 
				
			||||||
 | 
					                try:
 | 
				
			||||||
 | 
					                    driver.implicitly_wait(1)
 | 
				
			||||||
 | 
					                    get_switch_text_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_text']")
 | 
				
			||||||
 | 
					                    get_switch_text = get_switch_text_element.text
 | 
				
			||||||
 | 
					                    print("get_switch_text: ",get_switch_text)
 | 
				
			||||||
 | 
					                    print("Find wifi switch")
 | 
				
			||||||
 | 
					                    try: #To Turn on Wi-Fi Switch
 | 
				
			||||||
 | 
					                        if get_switch_text == "Off":
 | 
				
			||||||
 | 
					                            # driver.implicitly_wait(3)
 | 
				
			||||||
 | 
					                            get_switch_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_widget']")
 | 
				
			||||||
 | 
					                            driver.implicitly_wait(1)
 | 
				
			||||||
 | 
					                            get_switch_element.click()
 | 
				
			||||||
 | 
					                            driver.implicitly_wait(1)
 | 
				
			||||||
 | 
					                            i = 0
 | 
				
			||||||
 | 
					                            for i in range(5):
 | 
				
			||||||
 | 
					                                if get_switch_text == "On":
 | 
				
			||||||
 | 
					                                    print("WIFI Switch is ON")
 | 
				
			||||||
 | 
					                                    break
 | 
				
			||||||
 | 
					                                else:
 | 
				
			||||||
 | 
					                                    try:
 | 
				
			||||||
 | 
					                                        get_switch_text_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                            "//*[@resource-id='com.android.settings:id/switch_text']")
 | 
				
			||||||
 | 
					                                        get_switch_text = get_switch_text_element.text
 | 
				
			||||||
 | 
					                                    except:
 | 
				
			||||||
 | 
					                                        pass
 | 
				
			||||||
 | 
					                                    print("Sleeping for: ", i)
 | 
				
			||||||
 | 
					                                    time.sleep(i)
 | 
				
			||||||
 | 
					                                    pass
 | 
				
			||||||
 | 
					                            if get_switch_text == "Off":
 | 
				
			||||||
 | 
					                                print("Switch is Still OFF")
 | 
				
			||||||
 | 
					                                closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                                return ssid_with_internet
 | 
				
			||||||
 | 
					                        else:
 | 
				
			||||||
 | 
					                            print("Switch is already On")
 | 
				
			||||||
 | 
					                            check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                    except:
 | 
				
			||||||
 | 
					                        print("Couldn't turn on WIFI switch")
 | 
				
			||||||
 | 
					                        closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                        return ssid_with_internet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    #---------------------This is to Forget current connected SSID-------------------------------
 | 
				
			||||||
 | 
					                    try: #To deal with already connected SSID
 | 
				
			||||||
 | 
					                        check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                        network_category = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                            "//*[@resource-id='com.android.settings:id/connected_network_category']")
 | 
				
			||||||
 | 
					                        try: #To forget exhisting ssid
 | 
				
			||||||
 | 
					                            print("To forget ssid")
 | 
				
			||||||
 | 
					                            check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                            additional_details_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                "//*[@resource-id='com.android.settings:id/layout_details']")
 | 
				
			||||||
 | 
					                            additional_details_element.click()
 | 
				
			||||||
 | 
					                            try:
 | 
				
			||||||
 | 
					                                check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                                forget_ssid = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                    "//*[@resource-id='com.android.settings:id/forget_button']//*[@resource-id='com.android.settings:id/icon']")
 | 
				
			||||||
 | 
					                                forget_ssid.click()
 | 
				
			||||||
 | 
					                                print("Forget old ssid")
 | 
				
			||||||
 | 
					                            except:
 | 
				
			||||||
 | 
					                                print("Couldn't forget ssid")
 | 
				
			||||||
 | 
					                                closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                                return ssid_with_internet
 | 
				
			||||||
 | 
					                        except:
 | 
				
			||||||
 | 
					                            print("Couldn't get into additional details")
 | 
				
			||||||
 | 
					                    except:
 | 
				
			||||||
 | 
					                        print("No Connected SSIDS")
 | 
				
			||||||
 | 
					                    #----------------------This is to Forget current connected SSID--------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    print("Searching for Wifi: " + WifiName)
 | 
				
			||||||
 | 
					                   #allure.attach(name= body=str("Searching for Wifi: " + WifiName))
 | 
				
			||||||
 | 
					                    time.sleep(2)
 | 
				
			||||||
 | 
					                    print("Selecting Wifi: " + WifiName)
 | 
				
			||||||
 | 
					                    ssid_found = False
 | 
				
			||||||
 | 
					                    available_ssids = False
 | 
				
			||||||
 | 
					                    # This is To get all available ssids
 | 
				
			||||||
 | 
					                    # ------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        for check_for_all_ssids in range(2):
 | 
				
			||||||
 | 
					                            available_ssids = get_all_available_ssids(driver)
 | 
				
			||||||
 | 
					                            try:
 | 
				
			||||||
 | 
					                                if WifiName not in available_ssids:
 | 
				
			||||||
 | 
					                                    scrollDown(setup_perfectoMobile)
 | 
				
			||||||
 | 
					                                    time.sleep(2)
 | 
				
			||||||
 | 
					                                else:
 | 
				
			||||||
 | 
					                                    ssid_found = True
 | 
				
			||||||
 | 
					                                    print(WifiName + " : Found in Device")
 | 
				
			||||||
 | 
					                                   #allure.attach(name= body=str(WifiName + " : Found in Device"))
 | 
				
			||||||
 | 
					                                    break
 | 
				
			||||||
 | 
					                            except:
 | 
				
			||||||
 | 
					                                print("1538")
 | 
				
			||||||
 | 
					                                pass
 | 
				
			||||||
 | 
					                        if not ssid_found:
 | 
				
			||||||
 | 
					                            print("could not found" + WifiName + " in device")
 | 
				
			||||||
 | 
					                           #allure.attach(name= body=str("could not found" + WifiName + " in device"))
 | 
				
			||||||
 | 
					                            closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                            return ssid_with_internet
 | 
				
			||||||
 | 
					                    except:
 | 
				
			||||||
 | 
					                        closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                        return ssid_with_internet
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    #Selecting WIFI
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        report.step_start("Selecting Wifi: " + WifiName)
 | 
				
			||||||
 | 
					                        print("Click wifi")
 | 
				
			||||||
 | 
					                        wifi_selection_element = WebDriverWait(driver, 35).until(
 | 
				
			||||||
 | 
					                            EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']")))
 | 
				
			||||||
 | 
					                        wifi_selection_element.click()
 | 
				
			||||||
 | 
					                        check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                       #allure.attach(name= body=str("Selecting Wifi: " + WifiName))
 | 
				
			||||||
 | 
					                    except Exception as e:
 | 
				
			||||||
 | 
					                        print("Exception on Selecting Wifi Network.  Please check wifi Name or signal")
 | 
				
			||||||
 | 
					                       #allure.attach(name= body=str("Exception on Selecting Wifi Network.  Please check wifi Name or signal"))
 | 
				
			||||||
 | 
					                        request.config.cache.set(key="SelectingWifiFailed", value=str(e))
 | 
				
			||||||
 | 
					                        closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                        return ssid_with_internet
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    #Set password if Needed
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        time.sleep(2)
 | 
				
			||||||
 | 
					                        check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                        report.step_start("Set Wifi Password")
 | 
				
			||||||
 | 
					                        print("Enter Wifi password")
 | 
				
			||||||
 | 
					                        wifi_password_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                            "//*[@resource-id='com.android.settings:id/edittext']")
 | 
				
			||||||
 | 
					                        wifi_password_element.send_keys(WifiPass)
 | 
				
			||||||
 | 
					                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                        print("Password Page Not Loaded, password May be cached in the System")
 | 
				
			||||||
 | 
					                    check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    #Click on connect button
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        time.sleep(2)
 | 
				
			||||||
 | 
					                        report.step_start("Click Connect Button")
 | 
				
			||||||
 | 
					                        print("Click Connect Button")
 | 
				
			||||||
 | 
					                        join_btn_element = driver.find_element_by_xpath("//*[@text='Connect']")
 | 
				
			||||||
 | 
					                        join_btn_element.click()
 | 
				
			||||||
 | 
					                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                        print("Connect Button Not Enabled...Verify if Password is set properly  ")
 | 
				
			||||||
 | 
					                    check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                    #---------------------Clicking on ssid for captive portal login--------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        time.sleep(2)
 | 
				
			||||||
 | 
					                        report.step_start("Selecting Wifi: " + WifiName)
 | 
				
			||||||
 | 
					                        wifi_selection_element = WebDriverWait(driver, 35).until(
 | 
				
			||||||
 | 
					                            EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']")))
 | 
				
			||||||
 | 
					                        wifi_selection_element.click()
 | 
				
			||||||
 | 
					                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                        print("Not connected to Captive portal Ssid.. ")
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        time.sleep(2)
 | 
				
			||||||
 | 
					                        report.step_start("Click Accept Terms Button")
 | 
				
			||||||
 | 
					                        print("Click Accept Terms Button")
 | 
				
			||||||
 | 
					                        join_btn_element = driver.find_element_by_xpath("//*[@text='Accept Terms of Service']")
 | 
				
			||||||
 | 
					                        join_btn_element.click()
 | 
				
			||||||
 | 
					                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                        print(" Couldn't press Accept terms button")
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        time.sleep(2)
 | 
				
			||||||
 | 
					                        report.step_start("Click Continue Button")
 | 
				
			||||||
 | 
					                        print("Click Continue Button")
 | 
				
			||||||
 | 
					                        join_btn_element = driver.find_element_by_xpath("//*[@text='Continue']")
 | 
				
			||||||
 | 
					                        join_btn_element.click()
 | 
				
			||||||
 | 
					                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                        print(" Couldn't press Continue button")
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        time.sleep(2)
 | 
				
			||||||
 | 
					                        report.step_start("Click Last Terms if needed")
 | 
				
			||||||
 | 
					                        print("Click Last Terms if needed")
 | 
				
			||||||
 | 
					                        join_btn_element = driver.find_element_by_xpath("//*[@text='Done']")
 | 
				
			||||||
 | 
					                        join_btn_element.click()
 | 
				
			||||||
 | 
					                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                        print(" Couldn't find the last terms page")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    #Verify if WiFi is connected
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        report.step_start("Verify if Wifi is Connected")
 | 
				
			||||||
 | 
					                        WifiInternetErrMsg = WebDriverWait(driver, 35).until(
 | 
				
			||||||
 | 
					                            EC.presence_of_element_located((MobileBy.XPATH,
 | 
				
			||||||
 | 
					                            "//*[@resource-id='android:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']")))
 | 
				
			||||||
 | 
					                        ssid_with_internet = True
 | 
				
			||||||
 | 
					                        print("Wifi Successfully Connected")
 | 
				
			||||||
 | 
					                       #allure.attach(name= body=str("Wifi Successfully Connected"))
 | 
				
			||||||
 | 
					                        # time.sleep(5)
 | 
				
			||||||
 | 
					                        check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                    except:
 | 
				
			||||||
 | 
					                        try:
 | 
				
			||||||
 | 
					                            check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                            WifiInternetErrMsg = WebDriverWait(driver, 35).until(
 | 
				
			||||||
 | 
					                                EC.presence_of_element_located((MobileBy.XPATH,
 | 
				
			||||||
 | 
					                                "//*[@resource-id='com.android.settings:id/summary' and @text='Connected without internet']/parent::*/android.widget.TextView[@text='"
 | 
				
			||||||
 | 
					                                                                + WifiName + "']")))
 | 
				
			||||||
 | 
					                            print("Wifi Successfully Connected without internet")
 | 
				
			||||||
 | 
					                           #allure.attach(name= body=str("Wifi Successfully Connected without internet"))
 | 
				
			||||||
 | 
					                            check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                        except:
 | 
				
			||||||
 | 
					                            try:
 | 
				
			||||||
 | 
					                                report.step_start("Verify if Wifi is Connected")
 | 
				
			||||||
 | 
					                                WifiInternetErrMsg = WebDriverWait(driver, 60).until(EC.presence_of_element_located((
 | 
				
			||||||
 | 
					                                    MobileBy.XPATH,
 | 
				
			||||||
 | 
					                                    "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']")))
 | 
				
			||||||
 | 
					                                ssid_with_internet = True
 | 
				
			||||||
 | 
					                                print("Wifi Successfully Connected")
 | 
				
			||||||
 | 
					                               #allure.attach(name=body=str("Wifi Successfully Connected"))
 | 
				
			||||||
 | 
					                            except NoSuchElementException:
 | 
				
			||||||
 | 
					                                print("Wifi Connection Error: " + WifiName)
 | 
				
			||||||
 | 
					                               #allure.attach(name=body=str("Wifi Connection Error: " + WifiName))
 | 
				
			||||||
 | 
					                                closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                                return ssid_with_internet
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    # Get into Additional Details
 | 
				
			||||||
 | 
					                    # To Get an IP Address
 | 
				
			||||||
 | 
					                    # To Forget connection
 | 
				
			||||||
 | 
					                    # To turn off auto. connect
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        print("Into additional details")
 | 
				
			||||||
 | 
					                        time.sleep(2)
 | 
				
			||||||
 | 
					                        additional_details_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                            "//*[@resource-id='com.android.settings:id/layout_details']")
 | 
				
			||||||
 | 
					                        additional_details_element.click()
 | 
				
			||||||
 | 
					                        try:
 | 
				
			||||||
 | 
					                            time.sleep(2)
 | 
				
			||||||
 | 
					                            ip_address_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='com.android.settings:id/summary']")
 | 
				
			||||||
 | 
					                            ip_address_element_text = ip_address_element.text
 | 
				
			||||||
 | 
					                            print("Device IP address is :", ip_address_element_text)
 | 
				
			||||||
 | 
					                        except:
 | 
				
			||||||
 | 
					                            try:
 | 
				
			||||||
 | 
					                                time.sleep(2)
 | 
				
			||||||
 | 
					                                ip_address_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                    "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='android:id/summary']")
 | 
				
			||||||
 | 
					                                ip_address_element_text = ip_address_element.text
 | 
				
			||||||
 | 
					                                print("Device IP address is :", ip_address_element_text)
 | 
				
			||||||
 | 
					                            except:
 | 
				
			||||||
 | 
					                                print("IP address element not found")
 | 
				
			||||||
 | 
					                            # allure.attach(name= body=str("IP address element not found"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            # closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                            # return ip_address_element_text, ssid_with_internet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        try:
 | 
				
			||||||
 | 
					                            check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                            driver.implicitly_wait(3)
 | 
				
			||||||
 | 
					                            time.sleep(2)
 | 
				
			||||||
 | 
					                            auto_reconnect_off = driver.find("//*[@resource-id='android:id/switch_widget']")
 | 
				
			||||||
 | 
					                            auto_reconnect_off_text = auto_reconnect_off.text
 | 
				
			||||||
 | 
					                            if auto_reconnect_off_text != "Off":
 | 
				
			||||||
 | 
					                                auto_reconnect_off.click()
 | 
				
			||||||
 | 
					                                print("Auto reconnect turning off")
 | 
				
			||||||
 | 
					                            else:
 | 
				
			||||||
 | 
					                                print("Auto reconnect is already off")
 | 
				
			||||||
 | 
					                        except:
 | 
				
			||||||
 | 
					                            print("Couldn't find auto reconnect element")
 | 
				
			||||||
 | 
					                    except:
 | 
				
			||||||
 | 
					                        print("Couldn't get into Additional settings")
 | 
				
			||||||
 | 
					                except NoSuchElementException:
 | 
				
			||||||
 | 
					                    print("No Switch element found")
 | 
				
			||||||
 | 
					                   #allure.attach(name= body=str("No Switch element found"))
 | 
				
			||||||
 | 
					                # ---------------------To Turn on WIFi Switch if already OFF-------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            except NoSuchElementException:
 | 
				
			||||||
 | 
					                print("Couldn't find wifi Button")
 | 
				
			||||||
 | 
					                #allure.attach(name= body=str("Couldn't find wifi Button"))
 | 
				
			||||||
 | 
					            # ------------------Open WIFI page----------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        except NoSuchElementException:
 | 
				
			||||||
 | 
					            print("Exception: Verify Xpath - Update/check Xpath for Click Connections")
 | 
				
			||||||
 | 
					           #allure.attach(name= body=str("Exception: Verify Xpath - Update/check Xpath for Click Connections"))
 | 
				
			||||||
 | 
					        # -----------------To Open Connections page---------------------------
 | 
				
			||||||
 | 
					    # --------------------Pixel 4 code---------------------------
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        report.step_start("Set Wifi Network to " + WifiName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # -----------------To Open Connections page-----------------------
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            print("Verifying Connected Wifi Connection")
 | 
				
			||||||
 | 
					            report.step_start("Click Network & internet in pixel4")
 | 
				
			||||||
 | 
					            connElement = driver.find_element_by_xpath("//*[@text='Network & internet']")
 | 
				
			||||||
 | 
					            connElement.click()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            # ---------------------Open WIFI page-------------------------------
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                report.step_start("Clicking Wi-Fi")
 | 
				
			||||||
 | 
					                print("Clicking WIFI")
 | 
				
			||||||
 | 
					                time.sleep(3)
 | 
				
			||||||
 | 
					                wifiElement = WebDriverWait(driver, 10).until(
 | 
				
			||||||
 | 
					                    EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='Wi‑Fi']")))
 | 
				
			||||||
 | 
					                wifiElement.click()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                # --------------------To Turn on WIFi Switch if already OFF--------------------------------
 | 
				
			||||||
 | 
					                try:
 | 
				
			||||||
 | 
					                    driver.implicitly_wait(1)
 | 
				
			||||||
 | 
					                    report.step_start("Turn on WIFi Switch if already OFF")
 | 
				
			||||||
 | 
					                    get_switch_text_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                        "//*[@resource-id='android:id/icon']")
 | 
				
			||||||
 | 
					                    get_switch_text = get_switch_text_element.click()
 | 
				
			||||||
 | 
					                    if get_switch_text is not None:
 | 
				
			||||||
 | 
					                        switch_text = "Off"
 | 
				
			||||||
 | 
					                    else:
 | 
				
			||||||
 | 
					                        switch_text = "On"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    print("get_switch_text: ", switch_text)
 | 
				
			||||||
 | 
					                    print("Find wifi switch")
 | 
				
			||||||
 | 
					                    try:  # To Turn on Wi-Fi Switch
 | 
				
			||||||
 | 
					                        if switch_text == "Off":
 | 
				
			||||||
 | 
					                            # driver.implicitly_wait(3)
 | 
				
			||||||
 | 
					                            get_switch_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                "//*[@resource-id='com.android.settings:id/switch_widget']")
 | 
				
			||||||
 | 
					                            driver.implicitly_wait(1)
 | 
				
			||||||
 | 
					                            get_switch_element.click()
 | 
				
			||||||
 | 
					                            driver.implicitly_wait(1)
 | 
				
			||||||
 | 
					                            i = 0
 | 
				
			||||||
 | 
					                            for i in range(5):
 | 
				
			||||||
 | 
					                                if switch_text == "On":
 | 
				
			||||||
 | 
					                                    print("WIFI Switch is ON")
 | 
				
			||||||
 | 
					                                    break
 | 
				
			||||||
 | 
					                                else:
 | 
				
			||||||
 | 
					                                    try:
 | 
				
			||||||
 | 
					                                        get_switch_text_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                            "//*[@text='Add network']")
 | 
				
			||||||
 | 
					                                        get_switch_text = get_switch_text_element.text
 | 
				
			||||||
 | 
					                                        if get_switch_text == "Add network":
 | 
				
			||||||
 | 
					                                            switch_text = "On"
 | 
				
			||||||
 | 
					                                        else:
 | 
				
			||||||
 | 
					                                            switch_text = "Off"
 | 
				
			||||||
 | 
					                                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                                        print("Exception: Verify Xpath")
 | 
				
			||||||
 | 
					                                    # Scroll Down
 | 
				
			||||||
 | 
					                                    scrollDown(setup_perfectoMobile)
 | 
				
			||||||
 | 
					                                    print("Sleeping for: ", i)
 | 
				
			||||||
 | 
					                                    time.sleep(i)
 | 
				
			||||||
 | 
					                                    pass
 | 
				
			||||||
 | 
					                            if switch_text == "Off":
 | 
				
			||||||
 | 
					                                print("Switch is Still OFF")
 | 
				
			||||||
 | 
					                                closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                                return ssid_with_internet
 | 
				
			||||||
 | 
					                        else:
 | 
				
			||||||
 | 
					                            print("Switch is already On")
 | 
				
			||||||
 | 
					                            check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                    except:
 | 
				
			||||||
 | 
					                        print("Couldn't turn on WIFI switch")
 | 
				
			||||||
 | 
					                        closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                        return ssid_with_internet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    # ---------------------This is to Forget current connected SSID-------------------------------
 | 
				
			||||||
 | 
					                    try:  # To deal with already connected SSID
 | 
				
			||||||
 | 
					                        check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                        network_category = driver.find_element_by_xpath("//*[@text='Connected']")
 | 
				
			||||||
 | 
					                        try:  # To forget existing ssid
 | 
				
			||||||
 | 
					                            print("To forget ssid")
 | 
				
			||||||
 | 
					                            report.step_start("To forget ssid")
 | 
				
			||||||
 | 
					                            check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                            additional_details_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                "//*[@resource-id='com.android.settings:id/settings_button_no_background']")
 | 
				
			||||||
 | 
					                            additional_details_element.click()
 | 
				
			||||||
 | 
					                        except:
 | 
				
			||||||
 | 
					                            print("Couldn't get into additional details")
 | 
				
			||||||
 | 
					                        try:
 | 
				
			||||||
 | 
					                            check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                            forget_ssid = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                "//*[@resource-id='com.android.settings:id/button1']")
 | 
				
			||||||
 | 
					                            forget_ssid.click()
 | 
				
			||||||
 | 
					                            print("Forget old ssid")
 | 
				
			||||||
 | 
					                        except:
 | 
				
			||||||
 | 
					                            print("Couldn't forget ssid")
 | 
				
			||||||
 | 
					                            closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                            return ssid_with_internet
 | 
				
			||||||
 | 
					                    except:
 | 
				
			||||||
 | 
					                        print("No Connected SSIDS")
 | 
				
			||||||
 | 
					                    # ----------------------This is to Forget current connected SSID--------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    # time.sleep(2)
 | 
				
			||||||
 | 
					                    # print("Selecting Wifi: " + WifiName)
 | 
				
			||||||
 | 
					                    # ssid_found = False
 | 
				
			||||||
 | 
					                    # available_ssids = False
 | 
				
			||||||
 | 
					                    # This is To get all available ssids
 | 
				
			||||||
 | 
					                    # ------------------------------------------------------
 | 
				
			||||||
 | 
					                    # try:
 | 
				
			||||||
 | 
					                    #     for check_for_all_ssids in range(2):
 | 
				
			||||||
 | 
					                    #         available_ssids = WifiName
 | 
				
			||||||
 | 
					                    #         try:
 | 
				
			||||||
 | 
					                    #             if WifiName not in available_ssids:
 | 
				
			||||||
 | 
					                    #                 scrollDown(setup_perfectoMobile)
 | 
				
			||||||
 | 
					                    #                 time.sleep(2)
 | 
				
			||||||
 | 
					                    #             else:
 | 
				
			||||||
 | 
					                    #                 ssid_found = True
 | 
				
			||||||
 | 
					                    #                 print(WifiName + " : Found in Device")
 | 
				
			||||||
 | 
					                    #                 # allure.attach(name= body=str(WifiName + " : Found in Device"))
 | 
				
			||||||
 | 
					                    #                 break
 | 
				
			||||||
 | 
					                    #         except:
 | 
				
			||||||
 | 
					                    #             print("1538")
 | 
				
			||||||
 | 
					                    #             pass
 | 
				
			||||||
 | 
					                    #     if not ssid_found:
 | 
				
			||||||
 | 
					                    #         print("could not found" + WifiName + " in device")
 | 
				
			||||||
 | 
					                    #         # allure.attach(name= body=str("could not found" + WifiName + " in device"))
 | 
				
			||||||
 | 
					                    #         closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                    #         return ssid_with_internet
 | 
				
			||||||
 | 
					                    # except:
 | 
				
			||||||
 | 
					                    #     closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                    #     return ssid_with_internet
 | 
				
			||||||
 | 
					                    # # -------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    # Selecting WIFI
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        report.step_start("Selecting Wifi: " + WifiName)
 | 
				
			||||||
 | 
					                        print("Click wifi")
 | 
				
			||||||
 | 
					                        wifi_selection_element = WebDriverWait(driver, 35).until(
 | 
				
			||||||
 | 
					                            EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']")))
 | 
				
			||||||
 | 
					                        wifi_selection_element.click()
 | 
				
			||||||
 | 
					                        check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                    # allure.attach(name= body=str("Selecting Wifi: " + WifiName))
 | 
				
			||||||
 | 
					                    except Exception as e:
 | 
				
			||||||
 | 
					                        print("Exception on Selecting Wifi Network")
 | 
				
			||||||
 | 
					                        # allure.attach(name= body=str("Exception on Selecting Wifi Network.  Please check wifi Name or signal"))
 | 
				
			||||||
 | 
					                        request.config.cache.set(key="SelectingWifiFailed", value=str(e))
 | 
				
			||||||
 | 
					                        closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                        return ssid_with_internet
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    # Set password if Needed
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                        report.step_start("Set Wifi Password")
 | 
				
			||||||
 | 
					                        print("Entering password")
 | 
				
			||||||
 | 
					                        wifiPasswordElement = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                            "//*[@resource-id='com.android.settings:id/password']")
 | 
				
			||||||
 | 
					                        wifiPasswordElement.send_keys(WifiPass)
 | 
				
			||||||
 | 
					                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                        print("Password Page Not Loaded, password May be cached in the System")
 | 
				
			||||||
 | 
					                    check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    # Click on connect button
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        report.step_start("Click Connect Button")
 | 
				
			||||||
 | 
					                        joinBTNElement = driver.find_element_by_xpath("//*[@text='Connect']")
 | 
				
			||||||
 | 
					                        joinBTNElement.click()
 | 
				
			||||||
 | 
					                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                        print("Connect Button Not Enabled...Verify if Password is set properly  ")
 | 
				
			||||||
 | 
					                    check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        report.step_start("Selecting Wifi: " + WifiName)
 | 
				
			||||||
 | 
					                        wifiSelectionElement = WebDriverWait(driver, 35).until(
 | 
				
			||||||
 | 
					                            EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']")))
 | 
				
			||||||
 | 
					                        wifiSelectionElement.click()
 | 
				
			||||||
 | 
					                        check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                    except Exception as e:
 | 
				
			||||||
 | 
					                        print("Exception on Selecting Wifi Network.  Please check wifi Name or signal")
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        time.sleep(2)
 | 
				
			||||||
 | 
					                        report.step_start("Click Accept Terms Button")
 | 
				
			||||||
 | 
					                        print("Click Accept Terms Button")
 | 
				
			||||||
 | 
					                        join_btn_element = driver.find_element_by_xpath("//*[@text='Accept Terms of Service']")
 | 
				
			||||||
 | 
					                        join_btn_element.click()
 | 
				
			||||||
 | 
					                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                        print(" Couldn't press Accept terms button")
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        time.sleep(2)
 | 
				
			||||||
 | 
					                        report.step_start("Click Continue Button")
 | 
				
			||||||
 | 
					                        print("Click Continue Button")
 | 
				
			||||||
 | 
					                        join_btn_element = driver.find_element_by_xpath("//*[@text='Continue']")
 | 
				
			||||||
 | 
					                        join_btn_element.click()
 | 
				
			||||||
 | 
					                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                        print(" Couldn't press Continue button")
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        time.sleep(2)
 | 
				
			||||||
 | 
					                        report.step_start("Click Last Terms if needed")
 | 
				
			||||||
 | 
					                        print("Click Last Terms if needed")
 | 
				
			||||||
 | 
					                        join_btn_element = driver.find_element_by_xpath("//*[@text='Done']")
 | 
				
			||||||
 | 
					                        join_btn_element.click()
 | 
				
			||||||
 | 
					                    except NoSuchElementException:
 | 
				
			||||||
 | 
					                        print(" Couldn't find the last terms page")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    # Verify if WiFi is connected
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        report.step_start("Verify if Wifi is Connected")
 | 
				
			||||||
 | 
					                        WifiInternetErrMsg = WebDriverWait(driver, 35).until(
 | 
				
			||||||
 | 
					                            EC.presence_of_element_located((MobileBy.XPATH,
 | 
				
			||||||
 | 
					                                                            "//*[@resource-id='android:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']")))
 | 
				
			||||||
 | 
					                        ssid_with_internet = True
 | 
				
			||||||
 | 
					                        print("Wifi Successfully Connected")
 | 
				
			||||||
 | 
					                        # time.sleep(5)
 | 
				
			||||||
 | 
					                        check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                    except:
 | 
				
			||||||
 | 
					                        try:
 | 
				
			||||||
 | 
					                            check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                            WifiInternetErrMsg = WebDriverWait(driver, 35).until(
 | 
				
			||||||
 | 
					                                EC.presence_of_element_located((MobileBy.XPATH,
 | 
				
			||||||
 | 
					                                                                "//*[@resource-id='com.android.settings:id/summary' and @text='Connected without internet']/parent::*/android.widget.TextView[@text='" + WifiName + "']")))
 | 
				
			||||||
 | 
					                            print("Wifi Successfully Connected without internet")
 | 
				
			||||||
 | 
					                            check_if_no_internet_popup(driver)
 | 
				
			||||||
 | 
					                        except:
 | 
				
			||||||
 | 
					                            try:
 | 
				
			||||||
 | 
					                                report.step_start("Verify if Wifi is Connected")
 | 
				
			||||||
 | 
					                                WifiInternetErrMsg = WebDriverWait(driver, 60).until(
 | 
				
			||||||
 | 
					                                    EC.presence_of_element_located((
 | 
				
			||||||
 | 
					                                        MobileBy.XPATH,
 | 
				
			||||||
 | 
					                                        "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']")))
 | 
				
			||||||
 | 
					                                ssid_with_internet = True
 | 
				
			||||||
 | 
					                                print("Wifi Successfully Connected")
 | 
				
			||||||
 | 
					                            except NoSuchElementException:
 | 
				
			||||||
 | 
					                                print("Wifi Connection Error: " + WifiName)
 | 
				
			||||||
 | 
					                                closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                                return ssid_with_internet
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    # Get into Additional Details
 | 
				
			||||||
 | 
					                    # To Get an IP Address
 | 
				
			||||||
 | 
					                    # To Forget connection
 | 
				
			||||||
 | 
					                    # To turn off auto. connect
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        print("Into additional details")
 | 
				
			||||||
 | 
					                        time.sleep(5)
 | 
				
			||||||
 | 
					                        report.step_start("Going for ip address")
 | 
				
			||||||
 | 
					                        additional_details_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                            "//*[@resource-id='com.android.settings:id/settings_button_no_background']")
 | 
				
			||||||
 | 
					                        additional_details_element.click()
 | 
				
			||||||
 | 
					                        print("Entered ssid")
 | 
				
			||||||
 | 
					                        try:
 | 
				
			||||||
 | 
					                            time.sleep(10)
 | 
				
			||||||
 | 
					                            print("clicking Advanced")
 | 
				
			||||||
 | 
					                            report.step_start("clicking Advanced")
 | 
				
			||||||
 | 
					                            advanced_element = driver.find_element_by_xpath("//*[@text='Advanced']")
 | 
				
			||||||
 | 
					                            advanced_element.click()
 | 
				
			||||||
 | 
					                            print("clicked Advanced")
 | 
				
			||||||
 | 
					                            # print("Device IP address is :", ip_address_element_text)
 | 
				
			||||||
 | 
					                        except:
 | 
				
			||||||
 | 
					                            try:
 | 
				
			||||||
 | 
					                                time.sleep(5)
 | 
				
			||||||
 | 
					                                print("clicking Advanced2")
 | 
				
			||||||
 | 
					                                advanced_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                    "//*[@resource-id='com.android.settings:id/recycler_view']/android.widget.FrameLayout[2]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]")
 | 
				
			||||||
 | 
					                                advanced_element.click()
 | 
				
			||||||
 | 
					                                # print("Device IP address is :", ip_address_element_text)
 | 
				
			||||||
 | 
					                            except:
 | 
				
			||||||
 | 
					                                try:
 | 
				
			||||||
 | 
					                                    time.sleep(5)
 | 
				
			||||||
 | 
					                                    print("clicking Advanced2")
 | 
				
			||||||
 | 
					                                    advanced_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                        "//*[@resource-id='com.android.settings:id/recycler_view']/android.widget.LinearLayout[5]/android.widget.LinearLayout[1]/android.widget.ImageView[1]")
 | 
				
			||||||
 | 
					                                    advanced_element.click()
 | 
				
			||||||
 | 
					                                except:
 | 
				
			||||||
 | 
					                                    print("No advanced options")
 | 
				
			||||||
 | 
					                            # allure.attach(name= body=str("IP address element not found"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            # closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					                            # return ip_address_element_text, ssid_with_internet
 | 
				
			||||||
 | 
					                        # Scroll Down
 | 
				
			||||||
 | 
					                        scrollDown(setup_perfectoMobile)
 | 
				
			||||||
 | 
					                        try:
 | 
				
			||||||
 | 
					                            time.sleep(2)
 | 
				
			||||||
 | 
					                            ip_address_element = driver.find_element_by_xpath(
 | 
				
			||||||
 | 
					                                "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='android:id/summary']")
 | 
				
			||||||
 | 
					                            ip_address_element_text = ip_address_element.text
 | 
				
			||||||
 | 
					                            print("Device IP address is :", ip_address_element_text)
 | 
				
			||||||
 | 
					                        except:
 | 
				
			||||||
 | 
					                            print("IP address element not found")
 | 
				
			||||||
 | 
					                    except:
 | 
				
			||||||
 | 
					                        print("Couldn't get into Additional settings")
 | 
				
			||||||
 | 
					                    # -------------------------------------------------------
 | 
				
			||||||
 | 
					                except:
 | 
				
			||||||
 | 
					                    print("No Switch element found")
 | 
				
			||||||
 | 
					                # ---------------------To Turn on WIFi Switch if already OFF-------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            except:
 | 
				
			||||||
 | 
					                print("Couldn't find wifi Button")
 | 
				
			||||||
 | 
					            # ------------------Open WIFI page----------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        except:
 | 
				
			||||||
 | 
					            print("Exception: Verify Xpath - Update/check Xpath for Click Connections")
 | 
				
			||||||
 | 
					        # -----------------To Open Connections page---------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					    return ip_address_element_text, ssid_with_internet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def close_driver(driver):
 | 
					def close_driver(driver):
 | 
				
			||||||
    driver.close()
 | 
					    driver.close()
 | 
				
			||||||
    driver.quit()
 | 
					    driver.quit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# def capture_start_har(setup_perfectoMobile):
 | 
					
 | 
				
			||||||
#     setup_perfectoMobile[1].step_start("Start HAR capture on Phone...")
 | 
					def expressWifi(request, WifiName, setup_perfectoMobile, connData):
 | 
				
			||||||
#     # params = {'generateHarFile', 'true'}
 | 
					    print("\n-------------------------------------")
 | 
				
			||||||
#     params = {'generateHarFile' : 'true'}
 | 
					    print("Express Wifi Verification")
 | 
				
			||||||
#     setup_perfectoMobile[0].execute_script('mobile:vnetwork:start', params)
 | 
					    print("-------------------------------------")
 | 
				
			||||||
#
 | 
					    report = setup_perfectoMobile[1]
 | 
				
			||||||
# def capture_stop_har(setup_perfectoMobile):
 | 
					    driver = setup_perfectoMobile[0]
 | 
				
			||||||
#     setup_perfectoMobile[1].step_start("Stop HAR capture on Phone...")
 | 
					
 | 
				
			||||||
#     params = {'generateHarFile' : 'true'}
 | 
					    try:
 | 
				
			||||||
#     setup_perfectoMobile[0].execute_script('mobile:vnetwork:stop', params)
 | 
					        click_on_ssid = WebDriverWait(driver, 10).until(EC.presence_of_element_located((
 | 
				
			||||||
 | 
					            MobileBy.XPATH,
 | 
				
			||||||
 | 
					            "//*[@resource-id='com.android.settings:id/summary' and @text='Sign in to the network.']/parent::*/android.widget.TextView[@text='" + WifiName + "']")))
 | 
				
			||||||
 | 
					        click_on_ssid.click()
 | 
				
			||||||
 | 
					        print("click on expresswifi SSID to open login page")
 | 
				
			||||||
 | 
					    except:
 | 
				
			||||||
 | 
					        print("Could not found expresswifi SSID")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        print("Express Wifi Home Page Verification")
 | 
				
			||||||
 | 
					        report.step_start("Express Wifi Home Page Verification")
 | 
				
			||||||
 | 
					        driver.implicitly_wait(2)
 | 
				
			||||||
 | 
					        ExpressWifiBytesLeft = driver.find_element_by_xpath("//*[@label='0KB left']")
 | 
				
			||||||
 | 
					    except NoSuchElementException:
 | 
				
			||||||
 | 
					        # driver.implicitly_wait(25)
 | 
				
			||||||
 | 
					        #Add function to Toggle Wifi if Express Wifi Home Page not Triggerd
 | 
				
			||||||
 | 
					        print("Express Wifi Page Not Logged In - ")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        print("ExpressWifi Click on Menu Circle")
 | 
				
			||||||
 | 
					        report.step_start("ExpressWifi Click on Menu Circle")
 | 
				
			||||||
 | 
					        ExpressWifiMenu = driver.find_element_by_xpath("//*[@resource-id='dogfood-menu']")
 | 
				
			||||||
 | 
					        ExpressWifiMenu.click()
 | 
				
			||||||
 | 
					    except NoSuchElementException:
 | 
				
			||||||
 | 
					        print("---- Exception ExpressWifi Click on Menu Circle")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        print("ExpressWifi Click Run Tests!")
 | 
				
			||||||
 | 
					        report.step_start("ExpressWifi Click Run Tests!")
 | 
				
			||||||
 | 
					        ExpressWifiRunTests = driver.find_element_by_xpath("//*[@resource-id='run_tests']")
 | 
				
			||||||
 | 
					        ExpressWifiRunTests.click()
 | 
				
			||||||
 | 
					        time.sleep(20)
 | 
				
			||||||
 | 
					    except NoSuchElementException:
 | 
				
			||||||
 | 
					        print("Exception ExceptionExpressWifi Click Run Tests!")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        print("Verify Results: ")
 | 
				
			||||||
 | 
					        report.step_start("Verify Results")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        expressWifiOutputMsg = "//*[@resource-id='test_result']"
 | 
				
			||||||
 | 
					        LogOut = driver.find_element_by_xpath(expressWifiOutputMsg)
 | 
				
			||||||
 | 
					        print("----" + LogOut.text + "\n")
 | 
				
			||||||
 | 
					        if 'test completed successfully' in LogOut.text:
 | 
				
			||||||
 | 
					            closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					            return True
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					            return False
 | 
				
			||||||
 | 
					    except NoSuchElementException:
 | 
				
			||||||
 | 
					        print("Exception Verify Results")
 | 
				
			||||||
 | 
					    closeApp(connData["appPackage-android"], setup_perfectoMobile)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
allure-pytest
 | 
					allure-pytest
 | 
				
			||||||
Appium-Python-Client
 | 
					Appium-Python-Client==1.2.0
 | 
				
			||||||
bs4
 | 
					bs4
 | 
				
			||||||
influxdb
 | 
					influxdb
 | 
				
			||||||
influxdb-client
 | 
					influxdb-client
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,7 +42,6 @@ from LANforge.LFUtils import *
 | 
				
			|||||||
if 'py-json' not in sys.path:
 | 
					if 'py-json' not in sys.path:
 | 
				
			||||||
    sys.path.append('../py-scripts')
 | 
					    sys.path.append('../py-scripts')
 | 
				
			||||||
from apnos.apnos import APNOS
 | 
					from apnos.apnos import APNOS
 | 
				
			||||||
from controller.controller_1x.controller import Controller
 | 
					 | 
				
			||||||
from controller.controller_1x.controller import FirmwareUtility
 | 
					from controller.controller_1x.controller import FirmwareUtility
 | 
				
			||||||
import pytest
 | 
					import pytest
 | 
				
			||||||
from lanforge.lf_tests import RunTest
 | 
					from lanforge.lf_tests import RunTest
 | 
				
			||||||
@@ -50,11 +49,10 @@ from cv_test_manager import cv_test
 | 
				
			|||||||
from configuration import CONFIGURATION
 | 
					from configuration import CONFIGURATION
 | 
				
			||||||
from configuration import RADIUS_SERVER_DATA
 | 
					from configuration import RADIUS_SERVER_DATA
 | 
				
			||||||
from configuration import RADIUS_ACCOUNTING_DATA
 | 
					from configuration import RADIUS_ACCOUNTING_DATA
 | 
				
			||||||
 | 
					from lanforge.scp_util import SCP_File
 | 
				
			||||||
from testrails.testrail_api import APIClient
 | 
					from testrails.testrail_api import APIClient
 | 
				
			||||||
from testrails.reporting import Reporting
 | 
					from testrails.reporting import Reporting
 | 
				
			||||||
from lf_tools import ChamberView
 | 
					from lf_tools import ChamberView
 | 
				
			||||||
from sta_connect2 import StaConnect2
 | 
					 | 
				
			||||||
from os import path
 | 
					from os import path
 | 
				
			||||||
from typing import Any, Callable, Optional
 | 
					from typing import Any, Callable, Optional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -266,6 +264,11 @@ def get_sdk_version(fixtures_ver):
 | 
				
			|||||||
    version = fixtures_ver.get_sdk_version()
 | 
					    version = fixtures_ver.get_sdk_version()
 | 
				
			||||||
    yield version
 | 
					    yield version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@pytest.fixture(scope="session")
 | 
				
			||||||
 | 
					def get_uci_show(fixtures_ver, get_apnos, get_configuration):
 | 
				
			||||||
 | 
					    uci_show = fixtures_ver.get_uci_show(get_apnos, get_configuration)
 | 
				
			||||||
 | 
					    yield uci_show
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@pytest.fixture(scope="session")
 | 
					@pytest.fixture(scope="session")
 | 
				
			||||||
def skip_lf(request):
 | 
					def skip_lf(request):
 | 
				
			||||||
@@ -524,6 +527,12 @@ def test_access_point(fixtures_ver, request, get_configuration, get_apnos):
 | 
				
			|||||||
    yield status
 | 
					    yield status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@pytest.fixture(scope="session")
 | 
				
			||||||
 | 
					def test_ap_connection_status(fixtures_ver, request, get_configuration, get_apnos):
 | 
				
			||||||
 | 
					    """used to check the manager status of AP, should be used as a setup to verify if ap can reach cloud"""
 | 
				
			||||||
 | 
					    connection, redirector_value = fixtures_ver.get_ap_status_logs(get_configuration, get_apnos)
 | 
				
			||||||
 | 
					    yield connection, redirector_value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@pytest.fixture(scope="session")
 | 
					@pytest.fixture(scope="session")
 | 
				
			||||||
def traffic_generator_connectivity(testbed, get_configuration):
 | 
					def traffic_generator_connectivity(testbed, get_configuration):
 | 
				
			||||||
    """Verify if traffic generator is reachable"""
 | 
					    """Verify if traffic generator is reachable"""
 | 
				
			||||||
@@ -679,3 +688,25 @@ def get_ap_logs(request, get_apnos, get_configuration):
 | 
				
			|||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request.addfinalizer(collect_logs)
 | 
					    request.addfinalizer(collect_logs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@pytest.fixture(scope="function")
 | 
				
			||||||
 | 
					def get_lf_logs(request, get_apnos, get_configuration):
 | 
				
			||||||
 | 
					    ip = get_configuration["traffic_generator"]["details"]["ip"]
 | 
				
			||||||
 | 
					    port = get_configuration["traffic_generator"]["details"]["ssh_port"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def collect_logs_lf():
 | 
				
			||||||
 | 
					        log_0 = "/home/lanforge/lanforge_log_0.txt"
 | 
				
			||||||
 | 
					        log_1 = "/home/lanforge/lanforge_log_1.txt"
 | 
				
			||||||
 | 
					        obj = SCP_File(ip=ip, port=port, username="root", password="lanforge", remote_path=log_0,
 | 
				
			||||||
 | 
					                       local_path=".")
 | 
				
			||||||
 | 
					        obj.pull_file()
 | 
				
			||||||
 | 
					        allure.attach.file(source="lanforge_log_0.txt",
 | 
				
			||||||
 | 
					                           name="lanforge_log_0")
 | 
				
			||||||
 | 
					        obj = SCP_File(ip=ip, port=port, username="root", password="lanforge", remote_path=log_1,
 | 
				
			||||||
 | 
					                       local_path=".")
 | 
				
			||||||
 | 
					        obj.pull_file()
 | 
				
			||||||
 | 
					        allure.attach.file(source="lanforge_log_1.txt",
 | 
				
			||||||
 | 
					                           name="lanforge_log_1")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    request.addfinalizer(collect_logs_lf)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,125 @@
 | 
				
			|||||||
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Performance Test: Receiver Sensitivity Test: bridge Mode
 | 
				
			||||||
 | 
					    pytest -m "rxsensitivity and bridge"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					import allure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pytestmark = [pytest.mark.advance, pytest.mark.rxsensitivity, pytest.mark.bridge]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					setup_params_general = {
 | 
				
			||||||
 | 
					    "mode": "BRIDGE",
 | 
				
			||||||
 | 
					    "ssid_modes": {
 | 
				
			||||||
 | 
					        "wpa2_personal": [
 | 
				
			||||||
 | 
					            {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"},
 | 
				
			||||||
 | 
					            {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"}
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "rf": {},
 | 
				
			||||||
 | 
					    "radius": False
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@allure.feature("BRIDGE MODE RECEIVER SENSITIVITY TEST")
 | 
				
			||||||
 | 
					@pytest.mark.parametrize(
 | 
				
			||||||
 | 
					    'setup_profiles',
 | 
				
			||||||
 | 
					    [setup_params_general],
 | 
				
			||||||
 | 
					    indirect=True,
 | 
				
			||||||
 | 
					    scope="class"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					@pytest.mark.usefixtures("setup_profiles")
 | 
				
			||||||
 | 
					class TestRxSensitivityBridge(object):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2445", name="WIFI-2445")
 | 
				
			||||||
 | 
					    @pytest.mark.wpa2_personal
 | 
				
			||||||
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
 | 
					    @pytest.mark.all_mcs
 | 
				
			||||||
 | 
					    def test_client_wpa2_personal_bridge_all_mcs_5g(self, lf_test,  lf_tools, station_names_fiveg, create_lanforge_chamberview_dut,
 | 
				
			||||||
 | 
					                                                    get_configuration):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					            Receiver Sensitivity Bridge Mode
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa2_personal"][1]
 | 
				
			||||||
 | 
					        ssid_name = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        security_key = profile_data["security_key"]
 | 
				
			||||||
 | 
					        security = "wpa2"
 | 
				
			||||||
 | 
					        mode = "BRIDGE"
 | 
				
			||||||
 | 
					        band = "fiveg"
 | 
				
			||||||
 | 
					        vlan = 1
 | 
				
			||||||
 | 
					        dut_name = create_lanforge_chamberview_dut
 | 
				
			||||||
 | 
					        ser_no = lf_test.attenuator_serial()
 | 
				
			||||||
 | 
					        print(ser_no)
 | 
				
			||||||
 | 
					        raw_lines = [['txo_preamble: VHT'],
 | 
				
			||||||
 | 
					                     ['txo_mcs: 0 CCK, OFDM, HT, VHT;1 CCK, OFDM, HT, VHT;2 CCK, OFDM, HT, VHT;3 CCK, OFDM, HT, VHT;'
 | 
				
			||||||
 | 
					                      '4 OFDM, HT, VHT;5 OFDM, HT, VHT;6 OFDM, HT, VHT;7 OFDM, HT, VHT;8 VHT;9 VHT'],
 | 
				
			||||||
 | 
					                     ['spatial_streams: 2'], ['bandw_options: 80'], ['txo_sgi: OFF'],
 | 
				
			||||||
 | 
					                     ['txo_retries: No Retry'], ['attenuator: ' + str(ser_no[0])], ['attenuator2: ' + str(ser_no[1])],
 | 
				
			||||||
 | 
					                     ['attenuations: 0..+50..800'], ['attenuations2: 0..+50..800'],
 | 
				
			||||||
 | 
					                     ["show_3s: 1"], ['txo_txpower: 17'],
 | 
				
			||||||
 | 
					                     ["show_ll_graphs: 1"], ["show_log: 1"]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        station = lf_test.Client_Connect(ssid=ssid_name, security=security,
 | 
				
			||||||
 | 
					                                         passkey=security_key, mode=mode, band=band,
 | 
				
			||||||
 | 
					                                         station_name=station_names_fiveg, vlan_id=vlan)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if station:
 | 
				
			||||||
 | 
					            obj = lf_test.rx_sensitivity(station_name=station_names_fiveg, mode=mode,
 | 
				
			||||||
 | 
					                                            instance_name="RECEIVER_SENSITIVITY_BRIDGE_5G",
 | 
				
			||||||
 | 
					                                            vlan_id=vlan, dut_name=dut_name, raw_lines=raw_lines)
 | 
				
			||||||
 | 
					            report_name = obj.report_name[0]['LAST']["response"].split(":::")[1].split("/")[-1]
 | 
				
			||||||
 | 
					            entries = os.listdir("../reports/" + report_name + '/')
 | 
				
			||||||
 | 
					            lf_tools.attach_report_graphs(report_name=report_name, pdf_name="Receiver sensitivity test")
 | 
				
			||||||
 | 
					            print("Test Completed... Cleaning up Stations")
 | 
				
			||||||
 | 
					            lf_test.Client_disconnect(station_name=station_names_fiveg)
 | 
				
			||||||
 | 
					            assert station
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2445", name="WIFI-2445")
 | 
				
			||||||
 | 
					    @pytest.mark.wpa2_personal
 | 
				
			||||||
 | 
					    @pytest.mark.twog
 | 
				
			||||||
 | 
					    @pytest.mark.all_mcs
 | 
				
			||||||
 | 
					    def test_client_wpa2_personal_bridge_all_mcs_2g(self, lf_test, lf_tools, station_names_twog,
 | 
				
			||||||
 | 
					                                                    create_lanforge_chamberview_dut,
 | 
				
			||||||
 | 
					                                                    get_configuration):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					            Receiver Sensitivity Bridge Mode
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa2_personal"][0]
 | 
				
			||||||
 | 
					        ssid_name = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        security_key = profile_data["security_key"]
 | 
				
			||||||
 | 
					        security = "wpa2"
 | 
				
			||||||
 | 
					        mode = "BRIDGE"
 | 
				
			||||||
 | 
					        band = "twog"
 | 
				
			||||||
 | 
					        vlan = 1
 | 
				
			||||||
 | 
					        dut_name = create_lanforge_chamberview_dut
 | 
				
			||||||
 | 
					        ser_no = lf_test.attenuator_serial()
 | 
				
			||||||
 | 
					        print(ser_no)
 | 
				
			||||||
 | 
					        raw_lines = [['txo_preamble: VHT'],
 | 
				
			||||||
 | 
					                     ['txo_mcs: 0 CCK, OFDM, HT, VHT;1 CCK, OFDM, HT, VHT;2 CCK, OFDM, HT, VHT;3 CCK, OFDM, HT, VHT;'
 | 
				
			||||||
 | 
					                      '4 OFDM, HT, VHT;5 OFDM, HT, VHT;6 OFDM, HT, VHT;7 OFDM, HT, VHT;8 VHT;9 VHT'],
 | 
				
			||||||
 | 
					                     ['spatial_streams: 2'], ['bandw_options: 80'], ['txo_sgi: OFF'],
 | 
				
			||||||
 | 
					                     ['txo_retries: No Retry'], ['attenuator: ' + str(ser_no[0])], ['attenuator2: ' + str(ser_no[1])],
 | 
				
			||||||
 | 
					                     ['attenuations: 0..+50..800'], ['attenuations2: 0..+50..800'],
 | 
				
			||||||
 | 
					                     ["show_3s: 1"], ['txo_txpower: 17'],
 | 
				
			||||||
 | 
					                     ["show_ll_graphs: 1"], ["show_log: 1"]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        station = lf_test.Client_Connect(ssid=ssid_name, security=security,
 | 
				
			||||||
 | 
					                                         passkey=security_key, mode=mode, band=band,
 | 
				
			||||||
 | 
					                                         station_name=station_names_twog, vlan_id=vlan)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if station:
 | 
				
			||||||
 | 
					            obj = lf_test.rx_sensitivity(station_name=station_names_twog, mode=mode,
 | 
				
			||||||
 | 
					                                         instance_name="RECEIVER_SENSITIVITY_BRIDGE_2G",
 | 
				
			||||||
 | 
					                                         vlan_id=vlan, dut_name=dut_name, raw_lines=raw_lines)
 | 
				
			||||||
 | 
					            report_name = obj.report_name[0]['LAST']["response"].split(":::")[1].split("/")[-1]
 | 
				
			||||||
 | 
					            entries = os.listdir("../reports/" + report_name + '/')
 | 
				
			||||||
 | 
					            lf_tools.attach_report_graphs(report_name=report_name, pdf_name="Receiver sensitivity test")
 | 
				
			||||||
 | 
					            print("Test Completed... Cleaning up Stations")
 | 
				
			||||||
 | 
					            lf_test.Client_disconnect(station_name=station_names_twog)
 | 
				
			||||||
 | 
					            assert station
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
@@ -72,17 +72,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            #print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(60):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(60):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -141,17 +138,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(90):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(90):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -210,17 +204,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(45):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(45):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -279,17 +270,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(90):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(90):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -348,17 +336,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(250):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(250):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -417,17 +402,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(500):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(500):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -486,17 +468,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(250):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(250):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -555,17 +534,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(500):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(500):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -624,17 +600,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(45):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(45):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -693,17 +666,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(90):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(90):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -762,17 +732,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(45):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(45):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -831,17 +798,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(90):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(90):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -900,17 +864,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(250):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(250):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -969,17 +930,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(500):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(500):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -1038,17 +996,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(500):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(500):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -1107,17 +1062,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(45):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(45):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -1176,17 +1128,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(45):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(45):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -1245,17 +1194,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(250):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(250):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
@@ -1314,17 +1260,14 @@ class Test_SpatialConsistency_Bridge(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
					            kpi_val = lf_tools.read_kpi_file(column_name=["numeric-score"], dir_name=report_name)
 | 
				
			||||||
            print(type(kpi_val))
 | 
					            print(type(kpi_val))
 | 
				
			||||||
            print(str(kpi_val))
 | 
					            print(kpi_val)
 | 
				
			||||||
            val = kpi_val.split(" ")
 | 
					            print(str(kpi_val[0])[1:-1])
 | 
				
			||||||
            print(val)
 | 
					 | 
				
			||||||
            # print(type(val))
 | 
					 | 
				
			||||||
            print(val[5])
 | 
					 | 
				
			||||||
            if str(kpi_val) == "empty":
 | 
					            if str(kpi_val) == "empty":
 | 
				
			||||||
                print("kpi is empty, station did not got ip, Test failed")
 | 
					                print("kpi is empty, station did not got ip, Test failed")
 | 
				
			||||||
                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
					                allure.attach(name="Kpi Data", body="station did not got ip Test failed.")
 | 
				
			||||||
                assert False
 | 
					                assert False
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if float(val[5]) > float(500):
 | 
					                if float(str(kpi_val[0])[1:-1]) > float(500):
 | 
				
			||||||
                    print("Test passed successfully")
 | 
					                    print("Test passed successfully")
 | 
				
			||||||
                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
					                    allure.attach(name="Kpi Data", body=str(kpi_val))
 | 
				
			||||||
                    assert True
 | 
					                    assert True
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,6 +71,7 @@ def setup_profiles(request, setup_controller, testbed, get_equipment_ref, fixtur
 | 
				
			|||||||
                if vlan_list[i] > 4095 or vlan_list[i] < 1:
 | 
					                if vlan_list[i] > 4095 or vlan_list[i] < 1:
 | 
				
			||||||
                    vlan_list.pop(i)
 | 
					                    vlan_list.pop(i)
 | 
				
			||||||
    if request.param["mode"] == "VLAN":
 | 
					    if request.param["mode"] == "VLAN":
 | 
				
			||||||
 | 
					        lf_tools.reset_scenario()
 | 
				
			||||||
        lf_tools.add_vlan(vlan_ids=vlan_list)
 | 
					        lf_tools.add_vlan(vlan_ids=vlan_list)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # call this, if 1.x
 | 
					    # call this, if 1.x
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa_enterprise
 | 
					    @pytest.mark.wpa_enterprise
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                               station_names_twog, setup_profiles,  lf_test, update_report,
 | 
					                               station_names_twog, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                               test_cases, radius_info, exit_on_fail):
 | 
					                               test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        """ wpa enterprise 2g
 | 
					        """ wpa enterprise 2g
 | 
				
			||||||
@@ -73,7 +73,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa_enterprise
 | 
					    @pytest.mark.wpa_enterprise
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa_enterprise_5g(self, station_names_fiveg, get_ap_logs,
 | 
					    def test_wpa_enterprise_5g(self, station_names_fiveg, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                               setup_profiles,  lf_test, update_report,
 | 
					                               setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                               test_cases, radius_info, exit_on_fail):
 | 
					                               test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        """ wpa enterprise 5g
 | 
					        """ wpa enterprise 5g
 | 
				
			||||||
@@ -98,7 +98,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object):
 | 
				
			|||||||
    @pytest.mark.sanity_light
 | 
					    @pytest.mark.sanity_light
 | 
				
			||||||
    @pytest.mark.wpa2_enterprise
 | 
					    @pytest.mark.wpa2_enterprise
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                station_names_twog, setup_profiles,  lf_test, update_report,
 | 
					                                station_names_twog, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        """ wpa enterprise 2g
 | 
					        """ wpa enterprise 2g
 | 
				
			||||||
@@ -126,7 +126,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object):
 | 
				
			|||||||
    @pytest.mark.sanity_light
 | 
					    @pytest.mark.sanity_light
 | 
				
			||||||
    @pytest.mark.wpa2_enterprise
 | 
					    @pytest.mark.wpa2_enterprise
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                station_names_fiveg, setup_profiles,  lf_test, update_report,
 | 
					                                station_names_fiveg, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        """ wpa enterprise 2g
 | 
					        """ wpa enterprise 2g
 | 
				
			||||||
@@ -154,7 +154,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise
 | 
					    @pytest.mark.wpa3_enterprise
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                station_names_twog, setup_profiles,  lf_test, update_report,
 | 
					                                station_names_twog, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        """ wpa enterprise 2g
 | 
					        """ wpa enterprise 2g
 | 
				
			||||||
@@ -181,7 +181,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise
 | 
					    @pytest.mark.wpa3_enterprise
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa3_enterprise_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                station_names_fiveg, setup_profiles,  lf_test, update_report,
 | 
					                                station_names_fiveg, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        """ wpa enterprise 2g
 | 
					        """ wpa enterprise 2g
 | 
				
			||||||
@@ -239,7 +239,7 @@ class TestBridgeModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa_wpa2_enterprise_mixed
 | 
					    @pytest.mark.wpa_wpa2_enterprise_mixed
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                    station_names_twog, setup_profiles,  lf_test, update_report,
 | 
					                                    station_names_twog, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                                    test_cases, radius_info, exit_on_fail):
 | 
					                                    test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        """ wpa enterprise 2g
 | 
					        """ wpa enterprise 2g
 | 
				
			||||||
@@ -267,7 +267,7 @@ class TestBridgeModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa_wpa2_enterprise_mixed
 | 
					    @pytest.mark.wpa_wpa2_enterprise_mixed
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                    station_names_fiveg, setup_profiles,  lf_test,
 | 
					                                    station_names_fiveg, setup_profiles,  lf_test,
 | 
				
			||||||
                                    update_report, test_cases, radius_info, exit_on_fail):
 | 
					                                    update_report, test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        """ wpa enterprise 2g
 | 
					        """ wpa enterprise 2g
 | 
				
			||||||
@@ -295,7 +295,7 @@ class TestBridgeModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise_mixed
 | 
					    @pytest.mark.wpa3_enterprise_mixed
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                      station_names_twog, setup_profiles,  lf_test,
 | 
					                                      station_names_twog, setup_profiles,  lf_test,
 | 
				
			||||||
                                      update_report, test_cases, radius_info, exit_on_fail):
 | 
					                                      update_report, test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        """ wpa enterprise 2g
 | 
					        """ wpa enterprise 2g
 | 
				
			||||||
@@ -322,7 +322,7 @@ class TestBridgeModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise_mixed
 | 
					    @pytest.mark.wpa3_enterprise_mixed
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                      station_names_fiveg, setup_profiles,  lf_test,
 | 
					                                      station_names_fiveg, setup_profiles,  lf_test,
 | 
				
			||||||
                                      update_report, exit_on_fail,
 | 
					                                      update_report, exit_on_fail,
 | 
				
			||||||
                                      test_cases, radius_info):
 | 
					                                      test_cases, radius_info):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,7 +50,8 @@ class TestBridgeModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.open
 | 
					    @pytest.mark.open
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2809", name="JIRA LINK")
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2809", name="JIRA LINK")
 | 
				
			||||||
    def test_open_ssid_2g(self, get_vif_state, get_ap_logs, setup_profiles, lf_test, update_report,
 | 
					    def test_open_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs, setup_profiles, lf_test,
 | 
				
			||||||
 | 
					                          update_report,
 | 
				
			||||||
                          station_names_twog,
 | 
					                          station_names_twog,
 | 
				
			||||||
                          test_cases):
 | 
					                          test_cases):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
@@ -76,7 +77,7 @@ class TestBridgeModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.open
 | 
					    @pytest.mark.open
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2801", name="JIRA LINK")
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2801", name="JIRA LINK")
 | 
				
			||||||
    def test_open_ssid_5g(self, get_vif_state, get_ap_logs,  lf_test, test_cases, station_names_fiveg,
 | 
					    def test_open_ssid_5g(self, get_vif_state, get_ap_logs,  lf_test, test_cases, station_names_fiveg, get_lf_logs,
 | 
				
			||||||
                          update_report):
 | 
					                          update_report):
 | 
				
			||||||
        """Client Connectivity open ssid 5G
 | 
					        """Client Connectivity open ssid 5G
 | 
				
			||||||
           pytest -m "client_connectivity and bridge and general and open and fiveg"
 | 
					           pytest -m "client_connectivity and bridge and general and open and fiveg"
 | 
				
			||||||
@@ -103,7 +104,7 @@ class TestBridgeModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('wpa 2.4 GHZ Band')
 | 
					    @allure.story('wpa 2.4 GHZ Band')
 | 
				
			||||||
    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2801", name="JIRA LINK")
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2801", name="JIRA LINK")
 | 
				
			||||||
    def test_wpa_ssid_2g(self, get_vif_state, get_ap_logs, update_report,
 | 
					    def test_wpa_ssid_2g(self, get_vif_state, get_ap_logs, update_report, get_lf_logs,
 | 
				
			||||||
                         lf_test, test_cases, station_names_twog):
 | 
					                         lf_test, test_cases, station_names_twog):
 | 
				
			||||||
        """Client Connectivity wpa ssid 2.4G
 | 
					        """Client Connectivity wpa ssid 2.4G
 | 
				
			||||||
           pytest -m "client_connectivity and bridge and general and wpa and twog"
 | 
					           pytest -m "client_connectivity and bridge and general and wpa and twog"
 | 
				
			||||||
@@ -129,7 +130,8 @@ class TestBridgeModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.wpa
 | 
					    @pytest.mark.wpa
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('wpa 5 GHZ Band')
 | 
					    @allure.story('wpa 5 GHZ Band')
 | 
				
			||||||
    def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs, lf_test, update_report, test_cases, station_names_fiveg):
 | 
					    def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs, lf_test, update_report, get_lf_logs,
 | 
				
			||||||
 | 
					                         test_cases, station_names_fiveg):
 | 
				
			||||||
        """Client Connectivity wpa ssid 5G
 | 
					        """Client Connectivity wpa ssid 5G
 | 
				
			||||||
           pytest -m "client_connectivity and bridge and general and wpa and fiveg"
 | 
					           pytest -m "client_connectivity and bridge and general and wpa and fiveg"
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
@@ -154,7 +156,8 @@ class TestBridgeModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.wpa2_personal
 | 
					    @pytest.mark.wpa2_personal
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('wpa2_personal 2.4 GHZ Band')
 | 
					    @allure.story('wpa2_personal 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs,  lf_test, update_report, test_cases,
 | 
					    def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs,  get_lf_logs,
 | 
				
			||||||
 | 
					                                   lf_test, update_report, test_cases,
 | 
				
			||||||
                                   station_names_twog):
 | 
					                                   station_names_twog):
 | 
				
			||||||
        """Client Connectivity wpa2_personal ssid 2.4G
 | 
					        """Client Connectivity wpa2_personal ssid 2.4G
 | 
				
			||||||
           pytest -m "client_connectivity and bridge and general and wpa2_personal and twog"
 | 
					           pytest -m "client_connectivity and bridge and general and wpa2_personal and twog"
 | 
				
			||||||
@@ -181,7 +184,7 @@ class TestBridgeModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('wpa2_personal 5 GHZ Band')
 | 
					    @allure.story('wpa2_personal 5 GHZ Band')
 | 
				
			||||||
    def test_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs,  update_report, test_cases,
 | 
					    def test_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs,  update_report, test_cases,
 | 
				
			||||||
                                   station_names_fiveg,
 | 
					                                   station_names_fiveg, get_lf_logs,
 | 
				
			||||||
                                   lf_test):
 | 
					                                   lf_test):
 | 
				
			||||||
        """Client Connectivity wpa2_personal ssid 5G
 | 
					        """Client Connectivity wpa2_personal ssid 5G
 | 
				
			||||||
           pytest -m "client_connectivity and bridge and general and wpa2_personal and fiveg"
 | 
					           pytest -m "client_connectivity and bridge and general and wpa2_personal and fiveg"
 | 
				
			||||||
@@ -270,7 +273,8 @@ class TestBridgeModeConnectivitySuiteTwo(object):
 | 
				
			|||||||
    @pytest.mark.wpa3_personal
 | 
					    @pytest.mark.wpa3_personal
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('open 5 GHZ Band')
 | 
					    @allure.story('open 5 GHZ Band')
 | 
				
			||||||
    def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs, station_names_fiveg,  lf_test, test_cases,
 | 
					    def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs, station_names_fiveg,
 | 
				
			||||||
 | 
					                                   lf_test, test_cases, get_lf_logs,
 | 
				
			||||||
                                   update_report):
 | 
					                                   update_report):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
           pytest -m "client_connectivity and bridge and general and wpa3_personal and fiveg"
 | 
					           pytest -m "client_connectivity and bridge and general and wpa3_personal and fiveg"
 | 
				
			||||||
@@ -296,7 +300,7 @@ class TestBridgeModeConnectivitySuiteTwo(object):
 | 
				
			|||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('open 2.4 GHZ Band')
 | 
					    @allure.story('open 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa3_personal_mixed_ssid_2g(self, get_vif_state, get_ap_logs, station_names_twog, setup_profiles, 
 | 
					    def test_wpa3_personal_mixed_ssid_2g(self, get_vif_state, get_ap_logs, station_names_twog, setup_profiles, 
 | 
				
			||||||
                                         lf_test,
 | 
					                                         lf_test, get_lf_logs,
 | 
				
			||||||
                                         update_report,
 | 
					                                         update_report,
 | 
				
			||||||
                                         test_cases):
 | 
					                                         test_cases):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
@@ -323,7 +327,7 @@ class TestBridgeModeConnectivitySuiteTwo(object):
 | 
				
			|||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('open 5 GHZ Band')
 | 
					    @allure.story('open 5 GHZ Band')
 | 
				
			||||||
    def test_wpa3_personal_mixed_ssid_5g(self, get_vif_state, get_ap_logs, station_names_fiveg,  lf_test,
 | 
					    def test_wpa3_personal_mixed_ssid_5g(self, get_vif_state, get_ap_logs, station_names_fiveg,  lf_test,
 | 
				
			||||||
                                         test_cases,
 | 
					                                         test_cases, get_lf_logs,
 | 
				
			||||||
                                         update_report):
 | 
					                                         update_report):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
           pytest -m "client_connectivity and bridge and general and wpa3_personal_mixed and fiveg"
 | 
					           pytest -m "client_connectivity and bridge and general and wpa3_personal_mixed and fiveg"
 | 
				
			||||||
@@ -349,7 +353,7 @@ class TestBridgeModeConnectivitySuiteTwo(object):
 | 
				
			|||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('wpa wpa2 personal mixed 2.4 GHZ Band')
 | 
					    @allure.story('wpa wpa2 personal mixed 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, station_names_twog, setup_profiles, 
 | 
					    def test_wpa_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, station_names_twog, setup_profiles, 
 | 
				
			||||||
                                       lf_test,
 | 
					                                       lf_test, get_lf_logs,
 | 
				
			||||||
                                       update_report,
 | 
					                                       update_report,
 | 
				
			||||||
                                       test_cases):
 | 
					                                       test_cases):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
@@ -376,7 +380,8 @@ class TestBridgeModeConnectivitySuiteTwo(object):
 | 
				
			|||||||
    @pytest.mark.wpa_wpa2_personal_mixed
 | 
					    @pytest.mark.wpa_wpa2_personal_mixed
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('wpa wpa2 personal mixed 5 GHZ Band')
 | 
					    @allure.story('wpa wpa2 personal mixed 5 GHZ Band')
 | 
				
			||||||
    def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, station_names_fiveg,  lf_test, test_cases,
 | 
					    def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, station_names_fiveg, get_lf_logs,
 | 
				
			||||||
 | 
					                                       lf_test, test_cases,
 | 
				
			||||||
                                       update_report):
 | 
					                                       update_report):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
           pytest -m "client_connectivity and bridge and general and wpa_wpa2_personal_mixed and fiveg"
 | 
					           pytest -m "client_connectivity and bridge and general and wpa_wpa2_personal_mixed and fiveg"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa_enterprise
 | 
					    @pytest.mark.wpa_enterprise
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                               station_names_twog, setup_profiles,  lf_test, update_report,
 | 
					                               station_names_twog, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                               test_cases, radius_info, exit_on_fail):
 | 
					                               test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        profile_data = setup_params_enterprise["ssid_modes"]["wpa_enterprise"][0]
 | 
					        profile_data = setup_params_enterprise["ssid_modes"]["wpa_enterprise"][0]
 | 
				
			||||||
@@ -59,7 +59,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa_enterprise
 | 
					    @pytest.mark.wpa_enterprise
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa_enterprise_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                               station_names_fiveg, setup_profiles,  lf_test, update_report,
 | 
					                               station_names_fiveg, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                               test_cases, radius_info, exit_on_fail):
 | 
					                               test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        profile_data = setup_params_enterprise["ssid_modes"]["wpa_enterprise"][1]
 | 
					        profile_data = setup_params_enterprise["ssid_modes"]["wpa_enterprise"][1]
 | 
				
			||||||
@@ -85,7 +85,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
    @pytest.mark.sanity_light
 | 
					    @pytest.mark.sanity_light
 | 
				
			||||||
    @pytest.mark.wpa2_enterprise
 | 
					    @pytest.mark.wpa2_enterprise
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                station_names_twog, setup_profiles,  lf_test, update_report,
 | 
					                                station_names_twog, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        profile_data = setup_params_enterprise["ssid_modes"]["wpa2_enterprise"][0]
 | 
					        profile_data = setup_params_enterprise["ssid_modes"]["wpa2_enterprise"][0]
 | 
				
			||||||
@@ -111,7 +111,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
    @pytest.mark.sanity_light
 | 
					    @pytest.mark.sanity_light
 | 
				
			||||||
    @pytest.mark.wpa2_enterprise
 | 
					    @pytest.mark.wpa2_enterprise
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                station_names_fiveg, setup_profiles,  lf_test, update_report,
 | 
					                                station_names_fiveg, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        profile_data = setup_params_enterprise["ssid_modes"]["wpa2_enterprise"][1]
 | 
					        profile_data = setup_params_enterprise["ssid_modes"]["wpa2_enterprise"][1]
 | 
				
			||||||
@@ -136,7 +136,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise
 | 
					    @pytest.mark.wpa3_enterprise
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                station_names_twog, setup_profiles,  lf_test, update_report,
 | 
					                                station_names_twog, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        profile_data = setup_params_enterprise["ssid_modes"]["wpa3_enterprise"][0]
 | 
					        profile_data = setup_params_enterprise["ssid_modes"]["wpa3_enterprise"][0]
 | 
				
			||||||
@@ -160,7 +160,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise
 | 
					    @pytest.mark.wpa3_enterprise
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa3_enterprise_5g(self, get_vif_state,station_names_fiveg, get_ap_logs,
 | 
					    def test_wpa3_enterprise_5g(self, get_vif_state,station_names_fiveg, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                setup_profiles,  lf_test, update_report,
 | 
					                                setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        profile_data = setup_params_enterprise["ssid_modes"]["wpa3_enterprise"][1]
 | 
					        profile_data = setup_params_enterprise["ssid_modes"]["wpa3_enterprise"][1]
 | 
				
			||||||
@@ -210,7 +210,7 @@ class TestNATModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa_wpa2_enterprise_mixed
 | 
					    @pytest.mark.wpa_wpa2_enterprise_mixed
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                    station_names_twog, setup_profiles,  lf_test, update_report,
 | 
					                                    station_names_twog, setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                                    test_cases, radius_info, exit_on_fail):
 | 
					                                    test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        profile_data = setup_params_enterprise_two["ssid_modes"]["wpa_wpa2_enterprise_mixed"][0]
 | 
					        profile_data = setup_params_enterprise_two["ssid_modes"]["wpa_wpa2_enterprise_mixed"][0]
 | 
				
			||||||
@@ -235,7 +235,7 @@ class TestNATModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa_wpa2_enterprise_mixed
 | 
					    @pytest.mark.wpa_wpa2_enterprise_mixed
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                    station_names_fiveg, setup_profiles,  lf_test,
 | 
					                                    station_names_fiveg, setup_profiles,  lf_test,
 | 
				
			||||||
                                    update_report, test_cases, radius_info, exit_on_fail):
 | 
					                                    update_report, test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        profile_data = setup_params_enterprise_two["ssid_modes"]["wpa_wpa2_enterprise_mixed"][1]
 | 
					        profile_data = setup_params_enterprise_two["ssid_modes"]["wpa_wpa2_enterprise_mixed"][1]
 | 
				
			||||||
@@ -260,7 +260,7 @@ class TestNATModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise_mixed
 | 
					    @pytest.mark.wpa3_enterprise_mixed
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                      station_names_twog, setup_profiles,  lf_test,
 | 
					                                      station_names_twog, setup_profiles,  lf_test,
 | 
				
			||||||
                                      update_report, test_cases, radius_info, exit_on_fail):
 | 
					                                      update_report, test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        profile_data = setup_params_enterprise_two["ssid_modes"]["wpa3_enterprise_mixed"][0]
 | 
					        profile_data = setup_params_enterprise_two["ssid_modes"]["wpa3_enterprise_mixed"][0]
 | 
				
			||||||
@@ -284,8 +284,8 @@ class TestNATModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise_mixed
 | 
					    @pytest.mark.wpa3_enterprise_mixed
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                      station_names_fiveg, setup_profiles,  lf_test,
 | 
					                                      station_names_fiveg, setup_profiles, lf_test,
 | 
				
			||||||
                                      update_report, exit_on_fail,
 | 
					                                      update_report, exit_on_fail,
 | 
				
			||||||
                                      test_cases, radius_info):
 | 
					                                      test_cases, radius_info):
 | 
				
			||||||
        profile_data = setup_params_enterprise_two["ssid_modes"]["wpa3_enterprise_mixed"][1]
 | 
					        profile_data = setup_params_enterprise_two["ssid_modes"]["wpa3_enterprise_mixed"][1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,7 +48,7 @@ class TestNATModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.open
 | 
					    @pytest.mark.open
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('open 2.4 GHZ Band')
 | 
					    @allure.story('open 2.4 GHZ Band')
 | 
				
			||||||
    def test_open_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_open_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                          setup_profiles,  lf_test, update_report,
 | 
					                          setup_profiles,  lf_test, update_report,
 | 
				
			||||||
                          station_names_twog,
 | 
					                          station_names_twog,
 | 
				
			||||||
                          test_cases):
 | 
					                          test_cases):
 | 
				
			||||||
@@ -77,7 +77,7 @@ class TestNATModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.open
 | 
					    @pytest.mark.open
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('open 5 GHZ Band')
 | 
					    @allure.story('open 5 GHZ Band')
 | 
				
			||||||
    def test_open_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_open_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                           lf_test, test_cases, station_names_fiveg,
 | 
					                           lf_test, test_cases, station_names_fiveg,
 | 
				
			||||||
                          update_report):
 | 
					                          update_report):
 | 
				
			||||||
        """Client Connectivity open ssid 5G
 | 
					        """Client Connectivity open ssid 5G
 | 
				
			||||||
@@ -104,7 +104,7 @@ class TestNATModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.wpa
 | 
					    @pytest.mark.wpa
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('wpa 2.4 GHZ Band')
 | 
					    @allure.story('wpa 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa_ssid_2g(self, get_vif_state, get_ap_logs,  update_report,
 | 
					    def test_wpa_ssid_2g(self, get_vif_state, get_ap_logs,  update_report, get_lf_logs,
 | 
				
			||||||
                         lf_test, test_cases, station_names_twog):
 | 
					                         lf_test, test_cases, station_names_twog):
 | 
				
			||||||
        """Client Connectivity wpa ssid 2.4G
 | 
					        """Client Connectivity wpa ssid 2.4G
 | 
				
			||||||
           pytest -m "client_connectivity and NAT and general and wpa and twog"
 | 
					           pytest -m "client_connectivity and NAT and general and wpa and twog"
 | 
				
			||||||
@@ -129,7 +129,7 @@ class TestNATModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.wpa
 | 
					    @pytest.mark.wpa
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('wpa 5 GHZ Band')
 | 
					    @allure.story('wpa 5 GHZ Band')
 | 
				
			||||||
    def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                         lf_test, update_report, test_cases, station_names_fiveg):
 | 
					                         lf_test, update_report, test_cases, station_names_fiveg):
 | 
				
			||||||
        """Client Connectivity wpa ssid 5G
 | 
					        """Client Connectivity wpa ssid 5G
 | 
				
			||||||
           pytest -m "client_connectivity and NAT and general and wpa and fiveg"
 | 
					           pytest -m "client_connectivity and NAT and general and wpa and fiveg"
 | 
				
			||||||
@@ -155,7 +155,7 @@ class TestNATModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.wpa2_personal
 | 
					    @pytest.mark.wpa2_personal
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('wpa2_personal 2.4 GHZ Band')
 | 
					    @allure.story('wpa2_personal 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                    lf_test, update_report, test_cases,
 | 
					                                    lf_test, update_report, test_cases,
 | 
				
			||||||
                                   station_names_twog):
 | 
					                                   station_names_twog):
 | 
				
			||||||
        """Client Connectivity wpa2_personal ssid 2.4G
 | 
					        """Client Connectivity wpa2_personal ssid 2.4G
 | 
				
			||||||
@@ -182,7 +182,7 @@ class TestNATModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.wpa2_personal
 | 
					    @pytest.mark.wpa2_personal
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('wpa2_personal 5 GHZ Band')
 | 
					    @allure.story('wpa2_personal 5 GHZ Band')
 | 
				
			||||||
    def test_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                    update_report, test_cases,
 | 
					                                    update_report, test_cases,
 | 
				
			||||||
                                   station_names_fiveg,
 | 
					                                   station_names_fiveg,
 | 
				
			||||||
                                   lf_test):
 | 
					                                   lf_test):
 | 
				
			||||||
@@ -245,7 +245,7 @@ class TestNATModeConnectivitySuiteB(object):
 | 
				
			|||||||
    @pytest.mark.wpa3_personal
 | 
					    @pytest.mark.wpa3_personal
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('open 2.4 GHZ Band')
 | 
					    @allure.story('open 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa3_personal_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_personal_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                   station_names_twog, setup_profiles,  lf_test,
 | 
					                                   station_names_twog, setup_profiles,  lf_test,
 | 
				
			||||||
                                   update_report,
 | 
					                                   update_report,
 | 
				
			||||||
                                   test_cases):
 | 
					                                   test_cases):
 | 
				
			||||||
@@ -272,7 +272,7 @@ class TestNATModeConnectivitySuiteB(object):
 | 
				
			|||||||
    @pytest.mark.wpa3_personal
 | 
					    @pytest.mark.wpa3_personal
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('open 5 GHZ Band')
 | 
					    @allure.story('open 5 GHZ Band')
 | 
				
			||||||
    def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                   station_names_fiveg,  lf_test, test_cases,
 | 
					                                   station_names_fiveg,  lf_test, test_cases,
 | 
				
			||||||
                                   update_report):
 | 
					                                   update_report):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
@@ -300,7 +300,7 @@ class TestNATModeConnectivitySuiteB(object):
 | 
				
			|||||||
    @allure.story('open 2.4 GHZ Band')
 | 
					    @allure.story('open 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa3_personal_mixed_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_personal_mixed_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
				
			||||||
                                         station_names_twog, setup_profiles, 
 | 
					                                         station_names_twog, setup_profiles, 
 | 
				
			||||||
                                         lf_test,
 | 
					                                         lf_test, get_lf_logs,
 | 
				
			||||||
                                         update_report,
 | 
					                                         update_report,
 | 
				
			||||||
                                         test_cases):
 | 
					                                         test_cases):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
@@ -326,7 +326,7 @@ class TestNATModeConnectivitySuiteB(object):
 | 
				
			|||||||
    @pytest.mark.wpa3_personal_mixed
 | 
					    @pytest.mark.wpa3_personal_mixed
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('open 5 GHZ Band')
 | 
					    @allure.story('open 5 GHZ Band')
 | 
				
			||||||
    def test_wpa3_personal_mixed_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_personal_mixed_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                         station_names_fiveg,  lf_test,
 | 
					                                         station_names_fiveg,  lf_test,
 | 
				
			||||||
                                         test_cases,
 | 
					                                         test_cases,
 | 
				
			||||||
                                         update_report):
 | 
					                                         update_report):
 | 
				
			||||||
@@ -353,7 +353,7 @@ class TestNATModeConnectivitySuiteB(object):
 | 
				
			|||||||
    @pytest.mark.wpa_wpa2_personal_mixed
 | 
					    @pytest.mark.wpa_wpa2_personal_mixed
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('wpa wpa2 personal mixed 2.4 GHZ Band')
 | 
					    @allure.story('wpa wpa2 personal mixed 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                       station_names_twog, setup_profiles, 
 | 
					                                       station_names_twog, setup_profiles, 
 | 
				
			||||||
                                       lf_test,
 | 
					                                       lf_test,
 | 
				
			||||||
                                       update_report,
 | 
					                                       update_report,
 | 
				
			||||||
@@ -382,7 +382,7 @@ class TestNATModeConnectivitySuiteB(object):
 | 
				
			|||||||
    @pytest.mark.wpa_wpa2_personal_mixed
 | 
					    @pytest.mark.wpa_wpa2_personal_mixed
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('wpa wpa2 personal mixed 5 GHZ Band')
 | 
					    @allure.story('wpa wpa2 personal mixed 5 GHZ Band')
 | 
				
			||||||
    def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                       station_names_fiveg,  lf_test, test_cases,
 | 
					                                       station_names_fiveg,  lf_test, test_cases,
 | 
				
			||||||
                                       update_report):
 | 
					                                       update_report):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa_enterprise
 | 
					    @pytest.mark.wpa_enterprise
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                               station_names_twog, setup_profiles,  lf_test,
 | 
					                               station_names_twog, setup_profiles,  lf_test,
 | 
				
			||||||
                               update_report,
 | 
					                               update_report,
 | 
				
			||||||
                               test_cases, radius_info, exit_on_fail):
 | 
					                               test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
@@ -60,7 +60,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa_enterprise
 | 
					    @pytest.mark.wpa_enterprise
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa_enterprise_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                               station_names_fiveg, setup_profiles,  lf_test,
 | 
					                               station_names_fiveg, setup_profiles,  lf_test,
 | 
				
			||||||
                               update_report,
 | 
					                               update_report,
 | 
				
			||||||
                               test_cases, radius_info, exit_on_fail):
 | 
					                               test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
@@ -87,7 +87,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
    @pytest.mark.sanity_light
 | 
					    @pytest.mark.sanity_light
 | 
				
			||||||
    @pytest.mark.wpa2_enterprise
 | 
					    @pytest.mark.wpa2_enterprise
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                station_names_twog, setup_profiles,  lf_test,
 | 
					                                station_names_twog, setup_profiles,  lf_test,
 | 
				
			||||||
                                update_report,
 | 
					                                update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
@@ -114,7 +114,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
    @pytest.mark.sanity_light
 | 
					    @pytest.mark.sanity_light
 | 
				
			||||||
    @pytest.mark.wpa2_enterprise
 | 
					    @pytest.mark.wpa2_enterprise
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                station_names_fiveg, setup_profiles,  lf_test,
 | 
					                                station_names_fiveg, setup_profiles,  lf_test,
 | 
				
			||||||
                                update_report,
 | 
					                                update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
@@ -140,7 +140,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise
 | 
					    @pytest.mark.wpa3_enterprise
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                station_names_twog, setup_profiles,  lf_test,
 | 
					                                station_names_twog, setup_profiles,  lf_test,
 | 
				
			||||||
                                update_report,
 | 
					                                update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
@@ -165,7 +165,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise
 | 
					    @pytest.mark.wpa3_enterprise
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa3_enterprise_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                station_names_fiveg, setup_profiles,  lf_test,
 | 
					                                station_names_fiveg, setup_profiles,  lf_test,
 | 
				
			||||||
                                update_report,
 | 
					                                update_report,
 | 
				
			||||||
                                test_cases, radius_info, exit_on_fail):
 | 
					                                test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
@@ -216,7 +216,7 @@ class TestVLANModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa_wpa2_enterprise_mixed
 | 
					    @pytest.mark.wpa_wpa2_enterprise_mixed
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                    station_names_twog, setup_profiles,  lf_test,
 | 
					                                    station_names_twog, setup_profiles,  lf_test,
 | 
				
			||||||
                                    update_report,
 | 
					                                    update_report,
 | 
				
			||||||
                                    test_cases, radius_info, exit_on_fail):
 | 
					                                    test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
@@ -244,7 +244,7 @@ class TestVLANModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs,
 | 
				
			||||||
                                    station_names_fiveg, setup_profiles, 
 | 
					                                    station_names_fiveg, setup_profiles, 
 | 
				
			||||||
                                    lf_test,
 | 
					                                    lf_test, get_lf_logs,
 | 
				
			||||||
                                    update_report, test_cases, radius_info, exit_on_fail):
 | 
					                                    update_report, test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
        profile_data = setup_params_enterprise_two["ssid_modes"]["wpa_wpa2_enterprise_mixed"][1]
 | 
					        profile_data = setup_params_enterprise_two["ssid_modes"]["wpa_wpa2_enterprise_mixed"][1]
 | 
				
			||||||
        ssid_name = profile_data["ssid_name"]
 | 
					        ssid_name = profile_data["ssid_name"]
 | 
				
			||||||
@@ -268,7 +268,7 @@ class TestVLANModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise_mixed
 | 
					    @pytest.mark.wpa3_enterprise_mixed
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                      station_names_twog, setup_profiles, 
 | 
					                                      station_names_twog, setup_profiles, 
 | 
				
			||||||
                                      lf_test,
 | 
					                                      lf_test,
 | 
				
			||||||
                                      update_report, test_cases, radius_info, exit_on_fail):
 | 
					                                      update_report, test_cases, radius_info, exit_on_fail):
 | 
				
			||||||
@@ -293,7 +293,7 @@ class TestVLANModeEnterpriseTTLSSuiteTwo(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.wpa3_enterprise_mixed
 | 
					    @pytest.mark.wpa3_enterprise_mixed
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                      station_names_fiveg, setup_profiles, 
 | 
					                                      station_names_fiveg, setup_profiles, 
 | 
				
			||||||
                                      lf_test,
 | 
					                                      lf_test,
 | 
				
			||||||
                                      update_report, exit_on_fail,
 | 
					                                      update_report, exit_on_fail,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,8 +46,8 @@ class TestvlanModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.open
 | 
					    @pytest.mark.open
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('open 2.4 GHZ Band')
 | 
					    @allure.story('open 2.4 GHZ Band')
 | 
				
			||||||
    def test_open_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_open_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                          setup_profiles,  lf_test, update_report,
 | 
					                          setup_profiles, lf_test, update_report,
 | 
				
			||||||
                          station_names_twog,
 | 
					                          station_names_twog,
 | 
				
			||||||
                          test_cases):
 | 
					                          test_cases):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
@@ -72,8 +72,8 @@ class TestvlanModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.open
 | 
					    @pytest.mark.open
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('open 5 GHZ Band')
 | 
					    @allure.story('open 5 GHZ Band')
 | 
				
			||||||
    def test_open_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_open_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                           lf_test, test_cases, station_names_fiveg,
 | 
					                          lf_test, test_cases, station_names_fiveg,
 | 
				
			||||||
                          update_report):
 | 
					                          update_report):
 | 
				
			||||||
        """Client Connectivity open ssid 5G
 | 
					        """Client Connectivity open ssid 5G
 | 
				
			||||||
           pytest -m "client_connectivity and vlan and general and open and fiveg"
 | 
					           pytest -m "client_connectivity and vlan and general and open and fiveg"
 | 
				
			||||||
@@ -100,7 +100,7 @@ class TestvlanModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('wpa 2.4 GHZ Band')
 | 
					    @allure.story('wpa 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
				
			||||||
                          update_report,
 | 
					                         update_report, get_lf_logs,
 | 
				
			||||||
                         lf_test, test_cases, station_names_twog):
 | 
					                         lf_test, test_cases, station_names_twog):
 | 
				
			||||||
        """Client Connectivity wpa ssid 2.4G
 | 
					        """Client Connectivity wpa ssid 2.4G
 | 
				
			||||||
           pytest -m "client_connectivity and vlan and general and wpa and twog"
 | 
					           pytest -m "client_connectivity and vlan and general and wpa and twog"
 | 
				
			||||||
@@ -126,7 +126,7 @@ class TestvlanModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.wpa
 | 
					    @pytest.mark.wpa
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('wpa 5 GHZ Band')
 | 
					    @allure.story('wpa 5 GHZ Band')
 | 
				
			||||||
    def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                         lf_test, update_report, test_cases, station_names_fiveg):
 | 
					                         lf_test, update_report, test_cases, station_names_fiveg):
 | 
				
			||||||
        """Client Connectivity wpa ssid 5G
 | 
					        """Client Connectivity wpa ssid 5G
 | 
				
			||||||
           pytest -m "client_connectivity and vlan and general and wpa and fiveg"
 | 
					           pytest -m "client_connectivity and vlan and general and wpa and fiveg"
 | 
				
			||||||
@@ -152,8 +152,8 @@ class TestvlanModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.wpa2_personal
 | 
					    @pytest.mark.wpa2_personal
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('wpa2_personal 2.4 GHZ Band')
 | 
					    @allure.story('wpa2_personal 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                    lf_test, update_report, test_cases,
 | 
					                                   lf_test, update_report, test_cases,
 | 
				
			||||||
                                   station_names_twog):
 | 
					                                   station_names_twog):
 | 
				
			||||||
        """Client Connectivity wpa2_personal ssid 2.4G
 | 
					        """Client Connectivity wpa2_personal ssid 2.4G
 | 
				
			||||||
           pytest -m "client_connectivity and vlan and general and wpa2_personal and twog"
 | 
					           pytest -m "client_connectivity and vlan and general and wpa2_personal and twog"
 | 
				
			||||||
@@ -179,8 +179,8 @@ class TestvlanModeConnectivitySuiteA(object):
 | 
				
			|||||||
    @pytest.mark.wpa2_personal
 | 
					    @pytest.mark.wpa2_personal
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('wpa2_personal 5 GHZ Band')
 | 
					    @allure.story('wpa2_personal 5 GHZ Band')
 | 
				
			||||||
    def test_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                    update_report, test_cases,
 | 
					                                   update_report, test_cases,
 | 
				
			||||||
                                   station_names_fiveg,
 | 
					                                   station_names_fiveg,
 | 
				
			||||||
                                   lf_test):
 | 
					                                   lf_test):
 | 
				
			||||||
        """Client Connectivity wpa2_personal ssid 5G
 | 
					        """Client Connectivity wpa2_personal ssid 5G
 | 
				
			||||||
@@ -243,8 +243,8 @@ class TestvlanModeConnectivitySuiteTwo(object):
 | 
				
			|||||||
    @pytest.mark.wpa3_personal
 | 
					    @pytest.mark.wpa3_personal
 | 
				
			||||||
    @pytest.mark.twog
 | 
					    @pytest.mark.twog
 | 
				
			||||||
    @allure.story('open 2.4 GHZ Band')
 | 
					    @allure.story('open 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa3_personal_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_personal_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                   station_names_twog, setup_profiles,  lf_test,
 | 
					                                   station_names_twog, setup_profiles, lf_test,
 | 
				
			||||||
                                   update_report,
 | 
					                                   update_report,
 | 
				
			||||||
                                   test_cases):
 | 
					                                   test_cases):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
@@ -271,8 +271,8 @@ class TestvlanModeConnectivitySuiteTwo(object):
 | 
				
			|||||||
    @pytest.mark.wpa3_personal
 | 
					    @pytest.mark.wpa3_personal
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('open 5 GHZ Band')
 | 
					    @allure.story('open 5 GHZ Band')
 | 
				
			||||||
    def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                   station_names_fiveg,  lf_test, test_cases,
 | 
					                                   station_names_fiveg, lf_test, test_cases,
 | 
				
			||||||
                                   update_report):
 | 
					                                   update_report):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
           pytest -m "client_connectivity and vlan and general and wpa3_personal and fiveg"
 | 
					           pytest -m "client_connectivity and vlan and general and wpa3_personal and fiveg"
 | 
				
			||||||
@@ -299,7 +299,7 @@ class TestvlanModeConnectivitySuiteTwo(object):
 | 
				
			|||||||
    @allure.story('open 2.4 GHZ Band')
 | 
					    @allure.story('open 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa3_personal_mixed_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_personal_mixed_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
				
			||||||
                                         station_names_twog, setup_profiles,
 | 
					                                         station_names_twog, setup_profiles,
 | 
				
			||||||
                                         lf_test,
 | 
					                                         lf_test, get_lf_logs,
 | 
				
			||||||
                                         update_report,
 | 
					                                         update_report,
 | 
				
			||||||
                                         test_cases):
 | 
					                                         test_cases):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
@@ -326,8 +326,8 @@ class TestvlanModeConnectivitySuiteTwo(object):
 | 
				
			|||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('open 5 GHZ Band')
 | 
					    @allure.story('open 5 GHZ Band')
 | 
				
			||||||
    def test_wpa3_personal_mixed_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa3_personal_mixed_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
				
			||||||
                                         station_names_fiveg,  lf_test,
 | 
					                                         station_names_fiveg, lf_test,
 | 
				
			||||||
                                         test_cases,
 | 
					                                         test_cases, get_lf_logs,
 | 
				
			||||||
                                         update_report):
 | 
					                                         update_report):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
           pytest -m "client_connectivity and vlan and general and wpa3_personal_mixed and fiveg"
 | 
					           pytest -m "client_connectivity and vlan and general and wpa3_personal_mixed and fiveg"
 | 
				
			||||||
@@ -354,7 +354,7 @@ class TestvlanModeConnectivitySuiteTwo(object):
 | 
				
			|||||||
    @allure.story('wpa wpa2 personal mixed 2.4 GHZ Band')
 | 
					    @allure.story('wpa wpa2 personal mixed 2.4 GHZ Band')
 | 
				
			||||||
    def test_wpa_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs,
 | 
				
			||||||
                                       station_names_twog, setup_profiles,
 | 
					                                       station_names_twog, setup_profiles,
 | 
				
			||||||
                                       lf_test,
 | 
					                                       lf_test, get_lf_logs,
 | 
				
			||||||
                                       update_report,
 | 
					                                       update_report,
 | 
				
			||||||
                                       test_cases):
 | 
					                                       test_cases):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
@@ -381,8 +381,8 @@ class TestvlanModeConnectivitySuiteTwo(object):
 | 
				
			|||||||
    @pytest.mark.wpa_wpa2_personal_mixed
 | 
					    @pytest.mark.wpa_wpa2_personal_mixed
 | 
				
			||||||
    @pytest.mark.fiveg
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
    @allure.story('wpa wpa2 personal mixed 5 GHZ Band')
 | 
					    @allure.story('wpa wpa2 personal mixed 5 GHZ Band')
 | 
				
			||||||
    def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs,
 | 
					    def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs,
 | 
				
			||||||
                                       station_names_fiveg,  lf_test, test_cases,
 | 
					                                       station_names_fiveg, lf_test, test_cases,
 | 
				
			||||||
                                       update_report):
 | 
					                                       update_report):
 | 
				
			||||||
        """Client Connectivity open ssid 2.4G
 | 
					        """Client Connectivity open ssid 2.4G
 | 
				
			||||||
           pytest -m "client_connectivity and vlan and general and wpa_wpa2_personal_mixed and fiveg"
 | 
					           pytest -m "client_connectivity and vlan and general and wpa_wpa2_personal_mixed and fiveg"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										0
									
								
								tests/e2e/interOp/Express_WiFi/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								tests/e2e/interOp/Express_WiFi/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								tests/e2e/interOp/Express_WiFi/android/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								tests/e2e/interOp/Express_WiFi/android/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
				
			|||||||
 | 
					from logging import exception
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					import warnings
 | 
				
			||||||
 | 
					from perfecto.test import TestResultFactory
 | 
				
			||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					from selenium.common.exceptions import NoSuchElementException
 | 
				
			||||||
 | 
					from selenium.webdriver.common.by import By
 | 
				
			||||||
 | 
					from appium import webdriver
 | 
				
			||||||
 | 
					from selenium.common.exceptions import NoSuchElementException
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import allure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if 'perfecto_libs' not in sys.path:
 | 
				
			||||||
 | 
					    sys.path.append(f'../libs/perfecto_libs')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pytestmark = [pytest.mark.sanity, pytest.mark.interop, pytest.mark.android, pytest.mark.interop_android, pytest.mark.expressWifiConnection]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from android_lib import set_APconnMobileDevice_android, ForgetWifiConnection, expressWifi, wifi_connect, wifi_disconnect_and_forget
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					setup_params_general = {
 | 
				
			||||||
 | 
					    "mode": "NAT",
 | 
				
			||||||
 | 
					    "ssid_modes": {
 | 
				
			||||||
 | 
					        "open": [{"ssid_name": "XWF-OWF_DSx", "appliedRadios": ["2G"]}]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "rf": {},
 | 
				
			||||||
 | 
					    "radius": False,
 | 
				
			||||||
 | 
					    "express-wifi": True
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@pytest.mark.parametrize(
 | 
				
			||||||
 | 
					    'setup_profiles',
 | 
				
			||||||
 | 
					    [setup_params_general],
 | 
				
			||||||
 | 
					    indirect=True,
 | 
				
			||||||
 | 
					    scope="class"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					@pytest.mark.usefixtures("setup_profiles")
 | 
				
			||||||
 | 
					class TestExpressWifiAndroid(object):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @pytest.mark.twog
 | 
				
			||||||
 | 
					    @pytest.mark.open
 | 
				
			||||||
 | 
					    def test_ExpressWifi_Android(self, request, get_ToggleAirplaneMode_data, setup_perfectoMobile_android):
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["open"][0]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = ""
 | 
				
			||||||
 | 
					        print ("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print ("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_android[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_android[0]
 | 
				
			||||||
 | 
					        connData = get_ToggleAirplaneMode_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        wifi_connect(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #Express Wifi
 | 
				
			||||||
 | 
					        if expressWifi(request, ssidName, setup_perfectoMobile_android, connData):
 | 
				
			||||||
 | 
					            assert True
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					        #ForgetWifi
 | 
				
			||||||
 | 
					        wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
							
								
								
									
										0
									
								
								tests/e2e/interOp/Express_WiFi/iOS/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								tests/e2e/interOp/Express_WiFi/iOS/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										68
									
								
								tests/e2e/interOp/Express_WiFi/iOS/test_ExpressWifi_ios.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								tests/e2e/interOp/Express_WiFi/iOS/test_ExpressWifi_ios.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
				
			|||||||
 | 
					from logging import exception
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					import warnings
 | 
				
			||||||
 | 
					from perfecto.test import TestResultFactory
 | 
				
			||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					from selenium.common.exceptions import NoSuchElementException
 | 
				
			||||||
 | 
					from selenium.webdriver.common.by import By
 | 
				
			||||||
 | 
					from appium import webdriver
 | 
				
			||||||
 | 
					from selenium.common.exceptions import NoSuchElementException
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import allure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if 'perfecto_libs' not in sys.path:
 | 
				
			||||||
 | 
					    sys.path.append(f'../libs/perfecto_libs')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pytestmark = [pytest.mark.sanity, pytest.mark.interop, pytest.mark.ios, pytest.mark.interop_ios,
 | 
				
			||||||
 | 
					              pytest.mark.expressWifiConnection]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from iOS_lib import closeApp, ForgetWifiConnection, set_APconnMobileDevice_iOS, Toggle_WifiMode_iOS, \
 | 
				
			||||||
 | 
					    verifyUploadDownloadSpeediOS, expressWifi, wifi_connect, wifi_disconnect_and_forget
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					setup_params_general = {
 | 
				
			||||||
 | 
					    "mode": "NAT",
 | 
				
			||||||
 | 
					    "ssid_modes": {
 | 
				
			||||||
 | 
					        "open": [{"ssid_name": "XWF-OWF_DSx", "appliedRadios": ["2G"]}]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "rf": {},
 | 
				
			||||||
 | 
					    "radius": False,
 | 
				
			||||||
 | 
					    "express-wifi": True
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@pytest.mark.parametrize(
 | 
				
			||||||
 | 
					    'setup_profiles',
 | 
				
			||||||
 | 
					    [setup_params_general],
 | 
				
			||||||
 | 
					    indirect=True,
 | 
				
			||||||
 | 
					    scope="class"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					@pytest.mark.usefixtures("setup_profiles")
 | 
				
			||||||
 | 
					class TestExpressWifi(object):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @pytest.mark.twog
 | 
				
			||||||
 | 
					    @pytest.mark.open
 | 
				
			||||||
 | 
					    def test_ExpressWifi(self, request, get_ToggleAirplaneMode_data, setup_perfectoMobile_iOS):
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["open"][0]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = ""
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_iOS[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_iOS[0]
 | 
				
			||||||
 | 
					        connData = get_ToggleAirplaneMode_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        wifi_connect(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Express Wifi
 | 
				
			||||||
 | 
					        if expressWifi(request, setup_perfectoMobile_iOS, connData):
 | 
				
			||||||
 | 
					            assert True
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # ForgetWifi
 | 
				
			||||||
 | 
					        wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
							
								
								
									
										0
									
								
								tests/e2e/interOp/captive_portal/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								tests/e2e/interOp/captive_portal/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,276 @@
 | 
				
			|||||||
 | 
					from logging import exception
 | 
				
			||||||
 | 
					import io
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					import warnings
 | 
				
			||||||
 | 
					from perfecto.test import TestResultFactory
 | 
				
			||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					from selenium.common.exceptions import NoSuchElementException
 | 
				
			||||||
 | 
					from selenium.webdriver.common.by import By
 | 
				
			||||||
 | 
					from appium import webdriver
 | 
				
			||||||
 | 
					from selenium.common.exceptions import NoSuchElementException
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import allure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if 'perfecto_libs' not in sys.path:
 | 
				
			||||||
 | 
					    sys.path.append(f'../libs/perfecto_libs')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from android_lib import closeApp, set_APconnMobileDevice_android, Toggle_AirplaneMode_android, ForgetWifiConnection, openApp, \
 | 
				
			||||||
 | 
					    get_ip_address_and, verifyUploadDownloadSpeed_android, wifi_connect, wifi_disconnect_and_forget, captive_portal_and
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pytestmark = [pytest.mark.sanity, pytest.mark.interop, pytest.mark.android, pytest.mark.interop_and, pytest.mark.captive_portal
 | 
				
			||||||
 | 
					              ,pytest.mark.interop_uc_sanity, pytest.mark.bridge]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					setup_params_general = {
 | 
				
			||||||
 | 
					    "mode": "BRIDGE",
 | 
				
			||||||
 | 
					    "ssid_modes": {
 | 
				
			||||||
 | 
					        "open": [{"ssid_name": "captive_open_2g", "appliedRadios": ["2G"]},
 | 
				
			||||||
 | 
					                 {"ssid_name": "captive_open_5g", "appliedRadios": ["5G"]}],
 | 
				
			||||||
 | 
					        "wpa": [{"ssid_name": "captive_wpa_2g", "appliedRadios": ["2G"], "security_key": "lanforge"},
 | 
				
			||||||
 | 
					                {"ssid_name": "captive_wpa_5g", "appliedRadios": ["5G"],
 | 
				
			||||||
 | 
					                 "security_key": "lanforge"}],
 | 
				
			||||||
 | 
					        "wpa2_personal": [{"ssid_name": "captive_wpa2_2g", "appliedRadios": ["2G"], "security_key": "lanforge"},
 | 
				
			||||||
 | 
					                {"ssid_name": "captive_wpa2_5g", "appliedRadios": ["5G"],
 | 
				
			||||||
 | 
					                 "security_key": "lanforge"}],
 | 
				
			||||||
 | 
					        "wpa3_personal": [
 | 
				
			||||||
 | 
					            {"ssid_name": "captive_wpa3_2g", "appliedRadios": ["2G"], "security_key": "lanforge"},
 | 
				
			||||||
 | 
					            {"ssid_name": "captive_wpa3_5g", "appliedRadios": ["5G"],
 | 
				
			||||||
 | 
					             "security_key": "lanforge"}]},
 | 
				
			||||||
 | 
					    "rf": {},
 | 
				
			||||||
 | 
					    "radius": False
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@allure.suite(suite_name="interop sanity")
 | 
				
			||||||
 | 
					@allure.sub_suite(sub_suite_name="Bridge Mode Captive Portal : Suite-A")
 | 
				
			||||||
 | 
					@pytest.mark.InteropsuiteA
 | 
				
			||||||
 | 
					@allure.feature("BRIDGE MODE CAPTIVE PORTAL")
 | 
				
			||||||
 | 
					@pytest.mark.parametrize(
 | 
				
			||||||
 | 
					    'setup_profiles',
 | 
				
			||||||
 | 
					    [setup_params_general],
 | 
				
			||||||
 | 
					    indirect=True,
 | 
				
			||||||
 | 
					    scope="class"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					@pytest.mark.usefixtures("setup_profiles")
 | 
				
			||||||
 | 
					class TestBridgeModeCaptivePortalSuiteOneBridge(object):
 | 
				
			||||||
 | 
					    """ Captive Portal SuiteA
 | 
				
			||||||
 | 
					        pytest -m "captive portal and bridge and InteropsuiteA"
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5178", name="WIFI-5178")
 | 
				
			||||||
 | 
					    @pytest.mark.twog
 | 
				
			||||||
 | 
					    @pytest.mark.open
 | 
				
			||||||
 | 
					    def test_Captive_Portal_Open_2g_BRIDGE(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                               setup_perfectoMobile_android):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["open"][0]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = "[BLANK]"
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_android[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_android[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5141", name="WIFI-5141")
 | 
				
			||||||
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
 | 
					    @pytest.mark.open
 | 
				
			||||||
 | 
					    def test_Captive_Portal_Open_5g_BRIDGE(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                               setup_perfectoMobile_android):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["open"][1]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = "[BLANK]"
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_android[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_android[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5180", name="WIFI-5180")
 | 
				
			||||||
 | 
					    @pytest.mark.twog
 | 
				
			||||||
 | 
					    @pytest.mark.wpa
 | 
				
			||||||
 | 
					    def test_Captive_Portal_WPA_2g_Bridge(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                         setup_perfectoMobile_android):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa"][0]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = profile_data["security_key"]
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_android[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_android[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5144", name="WIFI-5144")
 | 
				
			||||||
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
 | 
					    @pytest.mark.wpa
 | 
				
			||||||
 | 
					    def test_Captive_Portal_WPA_5g_Bridge(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                         setup_perfectoMobile_android):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa"][1]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = profile_data["security_key"]
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_android[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_android[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5184", name="WIFI-5184")
 | 
				
			||||||
 | 
					    @pytest.mark.twog
 | 
				
			||||||
 | 
					    @pytest.mark.wpa2_personal
 | 
				
			||||||
 | 
					    def test_Captive_Portal_WPA2_2g_Personal_Bridge(self, request, get_vif_state, get_ap_logs,
 | 
				
			||||||
 | 
					                                                   get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                                   setup_perfectoMobile_android):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa2_personal"][0]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = profile_data["security_key"]
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_android[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_android[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5147", name="WIFI-5147")
 | 
				
			||||||
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
 | 
					    @pytest.mark.wpa2_personal
 | 
				
			||||||
 | 
					    def test_Captive_Portal_WPA2_5g_Personal_Bridge(self, request, get_vif_state, get_ap_logs,
 | 
				
			||||||
 | 
					                                                    get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                                    setup_perfectoMobile_android):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa2_personal"][1]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = profile_data["security_key"]
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_android[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_android[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -0,0 +1,350 @@
 | 
				
			|||||||
 | 
					from logging import exception
 | 
				
			||||||
 | 
					import io
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					import warnings
 | 
				
			||||||
 | 
					from perfecto.test import TestResultFactory
 | 
				
			||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					from selenium.common.exceptions import NoSuchElementException
 | 
				
			||||||
 | 
					from selenium.webdriver.common.by import By
 | 
				
			||||||
 | 
					from appium import webdriver
 | 
				
			||||||
 | 
					from selenium.common.exceptions import NoSuchElementException
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import allure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if 'perfecto_libs' not in sys.path:
 | 
				
			||||||
 | 
					    sys.path.append(f'../libs/perfecto_libs')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from iOS_lib import closeApp, openApp, get_WifiIPAddress_iOS, ForgetWifiConnection, ping_deftapps_iOS, \
 | 
				
			||||||
 | 
					    Toggle_AirplaneMode_iOS, set_APconnMobileDevice_iOS, verify_APconnMobileDevice_iOS, Toggle_WifiMode_iOS, tearDown,\
 | 
				
			||||||
 | 
					    verifyUploadDownloadSpeediOS, get_ip_address_ios, captive_portal_ios, wifi_connect, wifi_disconnect_and_forget
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pytestmark = [pytest.mark.sanity, pytest.mark.interop, pytest.mark.ios, pytest.mark.interop_ios,
 | 
				
			||||||
 | 
					              pytest.mark.captive_portal, pytest.mark.interop_uc_sanity, pytest.mark.bridge]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					setup_params_general = {
 | 
				
			||||||
 | 
					    "mode": "BRIDGE",
 | 
				
			||||||
 | 
					    "ssid_modes": {
 | 
				
			||||||
 | 
					        "open": [{"ssid_name": "captive_open_2g", "appliedRadios": ["2G"]},
 | 
				
			||||||
 | 
					                 {"ssid_name": "captive_open_5g", "appliedRadios": ["5G"]}],
 | 
				
			||||||
 | 
					        "wpa": [{"ssid_name": "captive_wpa_2g", "appliedRadios": ["2G"], "security_key": "lanforge"},
 | 
				
			||||||
 | 
					                {"ssid_name": "captive_wpa_5g", "appliedRadios": ["5G"],
 | 
				
			||||||
 | 
					                 "security_key": "lanforge"}],
 | 
				
			||||||
 | 
					        "wpa2": [{"ssid_name": "captive_wpa2_2g", "appliedRadios": ["2G"], "security_key": "lanforge"},
 | 
				
			||||||
 | 
					                {"ssid_name": "captive2_wpa_5g", "appliedRadios": ["5G"],
 | 
				
			||||||
 | 
					                 "security_key": "lanforge"}],
 | 
				
			||||||
 | 
					        "wpa3_personal": [
 | 
				
			||||||
 | 
					            {"ssid_name": "captive_wpa3_2g", "appliedRadios": ["2G"], "security_key": "lanforge"},
 | 
				
			||||||
 | 
					            {"ssid_name": "captive_wpa3_5g", "appliedRadios": ["5G"],
 | 
				
			||||||
 | 
					             "security_key": "lanforge"}]},
 | 
				
			||||||
 | 
					    "rf": {},
 | 
				
			||||||
 | 
					    "radius": False
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@allure.suite(suite_name="interop sanity")
 | 
				
			||||||
 | 
					@allure.sub_suite(sub_suite_name="Bridge Mode Captive Portal : Suite-A")
 | 
				
			||||||
 | 
					@pytest.mark.InteropsuiteA
 | 
				
			||||||
 | 
					@allure.feature("BRIDGE MODE CAPTIVE PORTAL")
 | 
				
			||||||
 | 
					# @pytest.mark.parametrize(
 | 
				
			||||||
 | 
					#     'setup_profiles',
 | 
				
			||||||
 | 
					#     [setup_params_general],
 | 
				
			||||||
 | 
					#     indirect=True,
 | 
				
			||||||
 | 
					#     scope="class"
 | 
				
			||||||
 | 
					# )
 | 
				
			||||||
 | 
					#@pytest.mark.usefixtures("setup_profiles")
 | 
				
			||||||
 | 
					class TestBridgeModeCaptivePortalSuiteOneBridge(object):
 | 
				
			||||||
 | 
					    """ Captive Portal SuiteA
 | 
				
			||||||
 | 
					        pytest -m "captive portal and bridge and InteropsuiteA"
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5179", name="WIFI-5179")
 | 
				
			||||||
 | 
					    @pytest.mark.twog
 | 
				
			||||||
 | 
					    @pytest.mark.open
 | 
				
			||||||
 | 
					    def test_Captive_Portal_Open_2g_BRIDGE(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                               setup_perfectoMobile_iOS):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["open"][0]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = "[BLANK]"
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_iOS[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_iOS[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5146", name="WIFI-5146")
 | 
				
			||||||
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
 | 
					    @pytest.mark.open
 | 
				
			||||||
 | 
					    def test_Captive_Portal_Open_5g_BRIDGE(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                               setup_perfectoMobile_iOS):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["open"][1]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = "[BLANK]"
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_iOS[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_iOS[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5182", name="WIFI-5182")
 | 
				
			||||||
 | 
					    @pytest.mark.twog
 | 
				
			||||||
 | 
					    @pytest.mark.wpa
 | 
				
			||||||
 | 
					    def test_Captive_Portal_WPA_2g_Bridge(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                         setup_perfectoMobile_iOS):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa"][0]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = profile_data["security_key"]
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_iOS[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_iOS[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5149", name="WIFI-5149")
 | 
				
			||||||
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
 | 
					    @pytest.mark.wpa
 | 
				
			||||||
 | 
					    def test_Captive_Portal_WPA_5g_Bridge(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                         setup_perfectoMobile_iOS):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa"][1]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = profile_data["security_key"]
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_iOS[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_iOS[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5186", name="WIFI-5186")
 | 
				
			||||||
 | 
					    @pytest.mark.twog
 | 
				
			||||||
 | 
					    @pytest.mark.wpa2_personal
 | 
				
			||||||
 | 
					    def test_Captive_Portal_WPA2_2g_Personal_Bridge(self, request, get_vif_state, get_ap_logs,
 | 
				
			||||||
 | 
					                                                   get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                                   setup_perfectoMobile_iOS):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa2_personal"][0]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = profile_data["security_key"]
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_iOS[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_iOS[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5153", name="WIFI-5153")
 | 
				
			||||||
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
 | 
					    @pytest.mark.wpa2_personal
 | 
				
			||||||
 | 
					    def test_Captive_Portal_WPA2_5g_Personal_Bridge(self, request, get_vif_state, get_ap_logs,
 | 
				
			||||||
 | 
					                                                    get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                                    setup_perfectoMobile_iOS):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa2_personal"][1]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = profile_data["security_key"]
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_iOS[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_iOS[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5130", name="WIFI-5130")
 | 
				
			||||||
 | 
					    @pytest.mark.twog
 | 
				
			||||||
 | 
					    @pytest.mark.wpa3_personal
 | 
				
			||||||
 | 
					    def test_Captive_Portal_WPA3_2g_Personal_Bridge(self, request, get_vif_state, get_ap_logs,
 | 
				
			||||||
 | 
					                                                   get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                                   setup_perfectoMobile_iOS):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa3_personal"][0]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = profile_data["security_key"]
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_iOS[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_iOS[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5140", name="WIFI-5140")
 | 
				
			||||||
 | 
					    @pytest.mark.sg123
 | 
				
			||||||
 | 
					    @pytest.mark.fiveg
 | 
				
			||||||
 | 
					    @pytest.mark.wpa3_personal
 | 
				
			||||||
 | 
					    def test_Captive_Portal_WPA3_5g_Personal_Bridge(self, request, get_vif_state, get_ap_logs,
 | 
				
			||||||
 | 
					                                                    get_APToMobileDevice_data,
 | 
				
			||||||
 | 
					                                                    setup_perfectoMobile_iOS):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        profile_data = setup_params_general["ssid_modes"]["wpa3_personal"][1]
 | 
				
			||||||
 | 
					        ssidName = profile_data["ssid_name"]
 | 
				
			||||||
 | 
					        ssidPassword = profile_data["security_key"]
 | 
				
			||||||
 | 
					        print("SSID_NAME: " + ssidName)
 | 
				
			||||||
 | 
					        print("SSID_PASS: " + ssidPassword)
 | 
				
			||||||
 | 
					        get_vif_state.append(ssidName)
 | 
				
			||||||
 | 
					        if ssidName not in get_vif_state:
 | 
				
			||||||
 | 
					            allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state))
 | 
				
			||||||
 | 
					            pytest.xfail("SSID NOT AVAILABLE IN VIF STATE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        report = setup_perfectoMobile_iOS[1]
 | 
				
			||||||
 | 
					        driver = setup_perfectoMobile_iOS[0]
 | 
				
			||||||
 | 
					        connData = get_APToMobileDevice_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Set Wifi/AP Mode
 | 
				
			||||||
 | 
					        ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        if is_internet:
 | 
				
			||||||
 | 
					            if ip:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address")
 | 
				
			||||||
 | 
					            print(text_body)
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str(text_body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					            wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            allure.attach(name="Connection Status: ", body=str("No Internet access"))
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
@@ -433,7 +433,6 @@ def setup_perfectoMobile_android(request):
 | 
				
			|||||||
    try:
 | 
					    try:
 | 
				
			||||||
        params = {'property': 'model'}
 | 
					        params = {'property': 'model'}
 | 
				
			||||||
        deviceModel = driver.execute_script('mobile:handset:info', params)
 | 
					        deviceModel = driver.execute_script('mobile:handset:info', params)
 | 
				
			||||||
        device_name_list.append(deviceModel)
 | 
					 | 
				
			||||||
    except:
 | 
					    except:
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -600,7 +599,6 @@ def setup_perfectoMobile_iOS(request):
 | 
				
			|||||||
    try:
 | 
					    try:
 | 
				
			||||||
        params = {'property': 'model'}
 | 
					        params = {'property': 'model'}
 | 
				
			||||||
        deviceModel = driver.execute_script('mobile:handset:info', params)
 | 
					        deviceModel = driver.execute_script('mobile:handset:info', params)
 | 
				
			||||||
        device_name_list.append(deviceModel)
 | 
					 | 
				
			||||||
    except:
 | 
					    except:
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -318,6 +318,39 @@ class Fixtures_2x:
 | 
				
			|||||||
            version_list.append(version)
 | 
					            version_list.append(version)
 | 
				
			||||||
        return version_list
 | 
					        return version_list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_uci_show(self, get_apnos, get_configuration):
 | 
				
			||||||
 | 
					        version_list = []
 | 
				
			||||||
 | 
					        for access_point_info in get_configuration['access_point']:
 | 
				
			||||||
 | 
					            ap_ssh = get_apnos(access_point_info)
 | 
				
			||||||
 | 
					            connectivity_data = ap_ssh.run_generic_command(cmd="uci show ucentral.config.server")
 | 
				
			||||||
 | 
					            # connectivity_data.pop(0)
 | 
				
			||||||
 | 
					            # connectivity_data.pop(1)
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
 | 
					            # version_list.append(connectivity_data)
 | 
				
			||||||
 | 
					        return connectivity_data[1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_ap_status_logs(self, get_configuration, get_apnos):
 | 
				
			||||||
 | 
					        connected = 0
 | 
				
			||||||
 | 
					        redirector_data = None
 | 
				
			||||||
 | 
					        for access_point_info in get_configuration['access_point']:
 | 
				
			||||||
 | 
					            ap_ssh = get_apnos(access_point_info, sdk="2.x")
 | 
				
			||||||
 | 
					            # for i in range(15):
 | 
				
			||||||
 | 
					            connectivity_data = ap_ssh.run_generic_command(cmd="ubus call ucentral status")
 | 
				
			||||||
 | 
					            if "disconnected" in str(connectivity_data):
 | 
				
			||||||
 | 
					                print("AP in disconnected state, sleeping for 30 sec")
 | 
				
			||||||
 | 
					                # time.sleep(30)
 | 
				
			||||||
 | 
					                connected = 0
 | 
				
			||||||
 | 
					                # # if i == 10:
 | 
				
			||||||
 | 
					                # print("rebooting AP")
 | 
				
			||||||
 | 
					                # ap_ssh.reboot()
 | 
				
			||||||
 | 
					                # print("sleep for 300 sec")
 | 
				
			||||||
 | 
					                # time.sleep(300)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                connected = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            redirector_data = ap_ssh.run_generic_command(cmd="cat /etc/ucentral/redirector.json")
 | 
				
			||||||
 | 
					        return connected, redirector_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_sdk_version(self):
 | 
					    def get_sdk_version(self):
 | 
				
			||||||
        version = self.controller_obj.get_sdk_version()
 | 
					        version = self.controller_obj.get_sdk_version()
 | 
				
			||||||
        return version
 | 
					        return version
 | 
				
			||||||
@@ -509,6 +542,12 @@ class Fixtures_2x:
 | 
				
			|||||||
                            print(e)
 | 
					                            print(e)
 | 
				
			||||||
                            test_cases["wpa_eap"] = False
 | 
					                            test_cases["wpa_eap"] = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            if parameter['express-wifi']:
 | 
				
			||||||
 | 
					                instantiate_profile_obj.set_express_wifi()
 | 
				
			||||||
 | 
					        except:
 | 
				
			||||||
 | 
					            pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ap_ssh = get_apnos(get_configuration['access_point'][0], pwd="../libs/apnos/", sdk="2.x")
 | 
					        ap_ssh = get_apnos(get_configuration['access_point'][0], pwd="../libs/apnos/", sdk="2.x")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Get ucentral status
 | 
					        # Get ucentral status
 | 
				
			||||||
@@ -701,4 +740,3 @@ class Fixtures_2x:
 | 
				
			|||||||
                pytest.fail("AP is disconnected from UC Gateway")
 | 
					                pytest.fail("AP is disconnected from UC Gateway")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,12 @@
 | 
				
			|||||||
"""
 | 
					"""
 | 
				
			||||||
    Test Case Module:  Testing Basic Connectivity with Resources
 | 
					    Test Case Module:  Testing Basic Connectivity with Resources
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import allure
 | 
					import allure
 | 
				
			||||||
import pytest
 | 
					import pytest
 | 
				
			||||||
import requests
 | 
					import requests
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pytestmark = [pytest.mark.test_resources, pytest.mark.sanity, pytest.mark.uc_sanity,
 | 
					pytestmark = [pytest.mark.test_resources, pytest.mark.sanity, pytest.mark.uc_sanity,
 | 
				
			||||||
              pytest.mark.sanity_55]
 | 
					              pytest.mark.sanity_55]
 | 
				
			||||||
@@ -17,26 +19,133 @@ class TestResources(object):
 | 
				
			|||||||
    @pytest.mark.test_cloud_controller
 | 
					    @pytest.mark.test_cloud_controller
 | 
				
			||||||
    @pytest.mark.uc_sanity
 | 
					    @pytest.mark.uc_sanity
 | 
				
			||||||
    @allure.testcase(name="test_controller_connectivity", url="")
 | 
					    @allure.testcase(name="test_controller_connectivity", url="")
 | 
				
			||||||
    def test_controller_connectivity(self, setup_controller):
 | 
					    def test_controller_connectivity(self, setup_controller, get_configuration):
 | 
				
			||||||
        """Test case to verify cloud Controller Connectivity"""
 | 
					        """Test case to verify cloud Controller Connectivity"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        login_response_json = setup_controller.login_resp.json()
 | 
					        login_response_json = setup_controller.login_resp.json()
 | 
				
			||||||
        response_code = setup_controller.login_resp.status_code
 | 
					        response_code = setup_controller.login_resp.status_code
 | 
				
			||||||
        allure.attach(name="Login Response Code", body=str(response_code))
 | 
					        request_url = setup_controller.login_resp.request.url
 | 
				
			||||||
        allure.attach(name="Login Response JSON",
 | 
					        print("Login_Request_URL: ", str(request_url))
 | 
				
			||||||
                      body=str(login_response_json),
 | 
					        allure.attach(name="Login_Request_URL: ", body=str(request_url))
 | 
				
			||||||
                      attachment_type=allure.attachment_type.JSON)
 | 
					        print("response_code: ", response_code)
 | 
				
			||||||
        version = setup_controller.get_sdk_version()
 | 
					        allure.attach(name="Login Response Code: ", body=str(response_code))
 | 
				
			||||||
        print(version)
 | 
					        print("login_response_json: ", login_response_json)
 | 
				
			||||||
        assert response_code == 200
 | 
					        allure.attach(name="Login Response JSON: ", body=str(setup_controller.login_resp.json()))
 | 
				
			||||||
 | 
					        if response_code != 200:
 | 
				
			||||||
 | 
					            pytest.exit(
 | 
				
			||||||
 | 
					                "exiting from pytest, login response is no 200: " + str(setup_controller.login_resp.status_code))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        gw_system_info = setup_controller.get_system_gw()
 | 
				
			||||||
 | 
					        request_url = gw_system_info.request.url
 | 
				
			||||||
 | 
					        allure.attach(name="get_system_gw_request: ", body=str(request_url))
 | 
				
			||||||
 | 
					        gw_system_status = gw_system_info.status_code
 | 
				
			||||||
 | 
					        gw_system_status_json = gw_system_info.json()
 | 
				
			||||||
 | 
					        print("gw_status_check response from gateway: ", gw_system_status)
 | 
				
			||||||
 | 
					        allure.attach(name="gw_status_check response from gateway: ", body=str(gw_system_status) +
 | 
				
			||||||
 | 
					                                                                           str(gw_system_status_json))
 | 
				
			||||||
 | 
					        if gw_system_status != 200:
 | 
				
			||||||
 | 
					            allure.attach(name="Login_Request_URL: ", body=str(request_url))
 | 
				
			||||||
 | 
					            pytest.exit("gw_status_check response from gateway: " + str(gw_system_status))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        fms_system_info = setup_controller.get_system_fms()
 | 
				
			||||||
 | 
					        request_url = fms_system_info.request.url
 | 
				
			||||||
 | 
					        allure.attach(name="get_system_fms_request: ", body=str(request_url))
 | 
				
			||||||
 | 
					        fms_system_status = fms_system_info.status_code
 | 
				
			||||||
 | 
					        fms_system_status_json = fms_system_info.json()
 | 
				
			||||||
 | 
					        print("fms_status_check response from fms: ", fms_system_status)
 | 
				
			||||||
 | 
					        allure.attach(name="fms_status_check response from fms:", body=str(fms_system_status) +
 | 
				
			||||||
 | 
					                                                                       str(fms_system_status_json))
 | 
				
			||||||
 | 
					        if fms_system_status != 200:
 | 
				
			||||||
 | 
					            pytest.exit("fms_status_check response from fms: " + str(fms_system_status))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # if gw_status_check != 200:
 | 
				
			||||||
 | 
					        #     for i in range(10):
 | 
				
			||||||
 | 
					        #         if setup_controller.get_system_gw().status_code != 200 and i < 9:
 | 
				
			||||||
 | 
					        #             print("sleeping for 30 sec, gw service is down with response not equals to 200")
 | 
				
			||||||
 | 
					        #             time.sleep(30)
 | 
				
			||||||
 | 
					        #         elif setup_controller.get_system_gw().status_code != 200 and i == 9:
 | 
				
			||||||
 | 
					        #             pytest.exit("GW service is not up yet, exiting from pytest")
 | 
				
			||||||
 | 
					        #         else:
 | 
				
			||||||
 | 
					        #             break
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        # if fms_status_check != 200:
 | 
				
			||||||
 | 
					        #     for i in range(10):
 | 
				
			||||||
 | 
					        #         if setup_controller.get_system_fms().status_code != 200 and i < 9:
 | 
				
			||||||
 | 
					        #             print("sleeping for 30 sec, fms service is down with response not equals to 200")
 | 
				
			||||||
 | 
					        #             time.sleep(30)
 | 
				
			||||||
 | 
					        #         elif setup_controller.get_system_fms().status_code != 200 and i == 9:
 | 
				
			||||||
 | 
					        #             pytest.exit("fms service is not up yet, exiting from pytest")
 | 
				
			||||||
 | 
					        #         else:
 | 
				
			||||||
 | 
					        #             break
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        # available_device_list = []
 | 
				
			||||||
 | 
					        # devices = setup_controller.get_devices()
 | 
				
			||||||
 | 
					        # number_devices = len(devices["devices"])
 | 
				
			||||||
 | 
					        # for i in range(number_devices):
 | 
				
			||||||
 | 
					        #     available_device_list.append(devices["devices"][i]["serialNumber"])
 | 
				
			||||||
 | 
					        # print("available_device_list: ", available_device_list)
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        # if get_configuration["access_point"][0]["serial"] not in available_device_list:
 | 
				
			||||||
 | 
					        #     for i in range(10):
 | 
				
			||||||
 | 
					        #         available_device_list = []
 | 
				
			||||||
 | 
					        #         devices = setup_controller.get_devices()
 | 
				
			||||||
 | 
					        #         number_devices = len(devices["devices"])
 | 
				
			||||||
 | 
					        #         for i in range(number_devices):
 | 
				
			||||||
 | 
					        #             available_device_list.append(devices["devices"][i]["serialNumber"])
 | 
				
			||||||
 | 
					        #         print(available_device_list)
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        #         if get_configuration["access_point"][0]["serial"] not in available_device_list and i < 9:
 | 
				
			||||||
 | 
					        #             print("unable to find device on UI, Sleeping for 30 sec")
 | 
				
			||||||
 | 
					        #             time.sleep(30)
 | 
				
			||||||
 | 
					        #         elif get_configuration["access_point"][0]["serial"] not in available_device_list and i == 9:
 | 
				
			||||||
 | 
					        #             pytest.exit("Device" + get_configuration["access_point"][0]["serial"] + "not found on UI")
 | 
				
			||||||
 | 
					        #         else:
 | 
				
			||||||
 | 
					        #             break
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        # for ap in get_configuration['access_point']:
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        #     ap_ssh = get_apnos(ap, pwd="../libs/apnos/", sdk="2.x")
 | 
				
			||||||
 | 
					        #     uci_show_ucentral = ap_ssh.run_generic_command("uci show ucentral")
 | 
				
			||||||
 | 
					        #     print(uci_show_ucentral)
 | 
				
			||||||
 | 
					        #     print("AP is pointing to: ", ap_ssh.get_ap_uci_show_ucentral())
 | 
				
			||||||
 | 
					        #     expected_sdk = str(get_configuration["controller"]['url'].replace("https://sec", "\'gw").replace(":16001","\'"))
 | 
				
			||||||
 | 
					        #     if ap_ssh.get_ap_uci_show_ucentral() != expected_sdk:
 | 
				
			||||||
 | 
					        #         for i in range(10):
 | 
				
			||||||
 | 
					        #             ucentral_show = str(ap_ssh.get_ap_uci_show_ucentral().strip())
 | 
				
			||||||
 | 
					        #             print("AP pointing to: ", ucentral_show)
 | 
				
			||||||
 | 
					        #             print("AP should point to: ", expected_sdk)
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        #             if ucentral_show != expected_sdk and i < 9:
 | 
				
			||||||
 | 
					        #                 print("AP is not pointing to right SDK, retry after 30 sec")
 | 
				
			||||||
 | 
					        #                 time.sleep(30)
 | 
				
			||||||
 | 
					        #             elif ucentral_show != expected_sdk and i == 9:
 | 
				
			||||||
 | 
					        #                 assert False
 | 
				
			||||||
 | 
					        #                 pytest.exit("AP is not pointing to right SDK")
 | 
				
			||||||
 | 
					        #             else:
 | 
				
			||||||
 | 
					        #                 break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assert True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.test_access_points_connectivity
 | 
					    @pytest.mark.test_access_points_connectivity
 | 
				
			||||||
    @allure.testcase(name="test_access_points_connectivity", url="")
 | 
					    @allure.testcase(name="test_access_points_connectivity", url="")
 | 
				
			||||||
    def test_access_points_connectivity(self, test_access_point, fixtures_ver):
 | 
					    def test_access_points_connectivity(self, setup_controller, get_uci_show, test_access_point, get_configuration,
 | 
				
			||||||
 | 
					                                        test_ap_connection_status, fixtures_ver):
 | 
				
			||||||
        """Test case to verify Access Points Connectivity"""
 | 
					        """Test case to verify Access Points Connectivity"""
 | 
				
			||||||
        data = []
 | 
					        data = []
 | 
				
			||||||
        for status in test_access_point:
 | 
					        for status in test_access_point:
 | 
				
			||||||
            data.append(status[0])
 | 
					            data.append(status[0])
 | 
				
			||||||
 | 
					        connection, redirector = test_ap_connection_status
 | 
				
			||||||
        allure.attach(name="AP - Cloud connectivity info", body=str(fixtures_ver.ubus_connection))
 | 
					        allure.attach(name="AP - Cloud connectivity info", body=str(fixtures_ver.ubus_connection))
 | 
				
			||||||
 | 
					        print("test_ap_connection_status: ", connection, redirector)
 | 
				
			||||||
 | 
					        expected_sdk = str(get_configuration["controller"]['url'].replace("https://sec", "\'gw").replace(":16001", "\'"))
 | 
				
			||||||
 | 
					        print("Expected SDK: ", expected_sdk)
 | 
				
			||||||
 | 
					        allure.attach(name="Exoected SDK: ", body=str(expected_sdk))
 | 
				
			||||||
 | 
					        print("SDK On AP: ", str(get_uci_show.split("=")[1]))
 | 
				
			||||||
 | 
					        allure.attach(name="SDK Pointed by AP: ", body=str(get_uci_show.split("=")[1]))
 | 
				
			||||||
 | 
					        if expected_sdk not in get_uci_show:
 | 
				
			||||||
 | 
					            pytest.exit("AP has invalid Redirector")
 | 
				
			||||||
 | 
					        if test_ap_connection_status[0] == 0:
 | 
				
			||||||
 | 
					            pytest.exit("AP in Disconnected State")
 | 
				
			||||||
        assert False not in data
 | 
					        assert False not in data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.traffic_generator_connectivity
 | 
					    @pytest.mark.traffic_generator_connectivity
 | 
				
			||||||
@@ -135,9 +244,12 @@ class TestFMS(object):
 | 
				
			|||||||
        assert False not in PASS
 | 
					        assert False not in PASS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.firmware_upgrade
 | 
					    @pytest.mark.firmware_upgrade
 | 
				
			||||||
    def test_firmware_upgrade_request(self, firmware_upgrade, get_ap_logs):
 | 
					    def test_firmware_upgrade_request(self, firmware_upgrade, get_ap_logs, test_ap_connection_status):
 | 
				
			||||||
        for update in firmware_upgrade:
 | 
					        for update in firmware_upgrade:
 | 
				
			||||||
            allure.attach(name='serial: ' + update[0], body="")
 | 
					            allure.attach(name='serial: ' + update[0], body="")
 | 
				
			||||||
 | 
					        if test_ap_connection_status[0] == 0:
 | 
				
			||||||
 | 
					            assert False
 | 
				
			||||||
 | 
					            pytest.exit("AP in Disconnected State")
 | 
				
			||||||
        assert True
 | 
					        assert True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @pytest.mark.test_firmware_ap
 | 
					    @pytest.mark.test_firmware_ap
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,70 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/python3.9
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    lf_tools : Tools for LANforge
 | 
					 | 
				
			||||||
                reboot, run_cmd, etc
 | 
					 | 
				
			||||||
    ./lf_tools --host 10.28.3.8 --port 22 --username root --password lanforge --action reboot
 | 
					 | 
				
			||||||
    ./lf_tools --host 10.28.3.8 --port 22 --username root --password lanforge --action run_cmd --cmd ls
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
import argparse
 | 
					 | 
				
			||||||
import paramiko
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class LFTools:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __init__(self, host="", port=22, username="root", password="lanforge"):
 | 
					 | 
				
			||||||
        self.host = host
 | 
					 | 
				
			||||||
        self.port = port
 | 
					 | 
				
			||||||
        self.username = username
 | 
					 | 
				
			||||||
        self.password = password
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def ssh_cli_connect(self):
 | 
					 | 
				
			||||||
        client = paramiko.SSHClient()
 | 
					 | 
				
			||||||
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 | 
					 | 
				
			||||||
        print("Connecting to LANforge: %s@%s:%s" % (
 | 
					 | 
				
			||||||
            self.username, self.host, self.port))
 | 
					 | 
				
			||||||
        client.connect(self.host, username=self.username, password=self.password,
 | 
					 | 
				
			||||||
                       port=self.port, timeout=10, allow_agent=False, banner_timeout=200)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return client
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def run_cmd(self, cmd):
 | 
					 | 
				
			||||||
        client = self.ssh_cli_connect()
 | 
					 | 
				
			||||||
        stdin, stdout, stderr = client.exec_command(cmd)
 | 
					 | 
				
			||||||
        output = "Output: " + str(stdout.read())
 | 
					 | 
				
			||||||
        error = "Error: " + str(stderr.read())
 | 
					 | 
				
			||||||
        client.close()
 | 
					 | 
				
			||||||
        return output, error
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def run_action(self, action, cmd):
 | 
					 | 
				
			||||||
        if action == "reboot":
 | 
					 | 
				
			||||||
            output, error = self.run_cmd("reboot")
 | 
					 | 
				
			||||||
            print(output, error)
 | 
					 | 
				
			||||||
        elif action == "run_cmd":
 | 
					 | 
				
			||||||
            output, error = self.run_cmd(cmd)
 | 
					 | 
				
			||||||
            print(output, error)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            print("Invalid Action")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def main():
 | 
					 | 
				
			||||||
    parser = argparse.ArgumentParser(prog="lf_utils",
 | 
					 | 
				
			||||||
                                     formatter_class=argparse.RawTextHelpFormatter,
 | 
					 | 
				
			||||||
                                     allow_abbrev=True,
 | 
					 | 
				
			||||||
                                     epilog="About lf_tools.py",
 | 
					 | 
				
			||||||
                                     description="Tools for LANforge System")
 | 
					 | 
				
			||||||
    parser.add_argument('--host', type=str, help=' --host : IP Address f LANforge System', default="localhost")
 | 
					 | 
				
			||||||
    parser.add_argument('--port', type=int, help='--passwd of dut', default=22)
 | 
					 | 
				
			||||||
    parser.add_argument('--username', type=str, help='--username to use on LANforge', default="root")
 | 
					 | 
				
			||||||
    parser.add_argument('--password', type=str, help='--password to the given username', default="lanforge")
 | 
					 | 
				
			||||||
    parser.add_argument('--action', type=str, help='--action to perform'
 | 
					 | 
				
			||||||
                                                   'reboot | run_cmd', default="run_cmd")
 | 
					 | 
				
			||||||
    parser.add_argument('--cmd', type=str, help='--cmd : used when action is "run_cmd"', default="pwd")
 | 
					 | 
				
			||||||
    args = parser.parse_args()
 | 
					 | 
				
			||||||
    lf_tools = LFTools(host=args.host, port=args.port, username=args.username, password=args.password)
 | 
					 | 
				
			||||||
    lf_tools.run_action(args.action, args.cmd)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == '__main__':
 | 
					 | 
				
			||||||
    main()
 | 
					 | 
				
			||||||
							
								
								
									
										55
									
								
								tools/scp_util.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										55
									
								
								tools/scp_util.py
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env python3
 | 
				
			||||||
 | 
					import argparse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import paramiko
 | 
				
			||||||
 | 
					from scp import SCPClient
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SCP_File:
 | 
				
			||||||
 | 
					    def __init__(self, ip="localhost", port=22, username="lanforge", password="lanforge", remote_path="/home/lanforge/",
 | 
				
			||||||
 | 
					                 local_path="."):
 | 
				
			||||||
 | 
					        self.ip = ip
 | 
				
			||||||
 | 
					        self.port = port
 | 
				
			||||||
 | 
					        self.remote_path = remote_path
 | 
				
			||||||
 | 
					        self.local_path = local_path
 | 
				
			||||||
 | 
					        self.username = username
 | 
				
			||||||
 | 
					        self.password = password
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def pull_file(self):
 | 
				
			||||||
 | 
					        ssh = paramiko.SSHClient()
 | 
				
			||||||
 | 
					        ssh.load_system_host_keys()
 | 
				
			||||||
 | 
					        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 | 
				
			||||||
 | 
					        ssh.connect(hostname=self.ip, username=self.username, password=self.password, port=self.port, allow_agent=False,
 | 
				
			||||||
 | 
					                    look_for_keys=False)
 | 
				
			||||||
 | 
					        # ssh.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        with SCPClient(ssh.get_transport()) as scp:
 | 
				
			||||||
 | 
					            scp.get(remote_path=self.remote_path, local_path=self.local_path, recursive=True)
 | 
				
			||||||
 | 
					            scp.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def main():
 | 
				
			||||||
 | 
					    parser = argparse.ArgumentParser(prog="lf_utils",
 | 
				
			||||||
 | 
					                                     formatter_class=argparse.RawTextHelpFormatter,
 | 
				
			||||||
 | 
					                                     allow_abbrev=True,
 | 
				
			||||||
 | 
					                                     epilog="About lf_tools.py",
 | 
				
			||||||
 | 
					                                     description="Tools for LANforge System")
 | 
				
			||||||
 | 
					    parser.add_argument('--host', type=str, help=' --host : IP Address f LANforge System', default="localhost")
 | 
				
			||||||
 | 
					    parser.add_argument('--port', type=int, help='--passwd of dut', default=22)
 | 
				
			||||||
 | 
					    parser.add_argument('--username', type=str, help='--username to use on LANforge', default="lanforge")
 | 
				
			||||||
 | 
					    parser.add_argument('--password', type=str, help='--password to use on LANforge', default="lanforge")
 | 
				
			||||||
 | 
					    parser.add_argument('--remote_path', type=str, help='--password to the given username',
 | 
				
			||||||
 | 
					                        default="/home/lanforge/lf_kinstall.pl")
 | 
				
			||||||
 | 
					    parser.add_argument('--local_path', type=str, help='--action to perform'
 | 
				
			||||||
 | 
					                                                       'reboot | run_cmd', default=".")
 | 
				
			||||||
 | 
					    args = parser.parse_args()
 | 
				
			||||||
 | 
					    lf_tools = SCP_File(ip=args.host, port=args.port,
 | 
				
			||||||
 | 
					                        username=args.username, password=args.password,
 | 
				
			||||||
 | 
					                        remote_path=args.remote_path, local_path=args.local_path)
 | 
				
			||||||
 | 
					    lf_tools.pull_file()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    main()
 | 
				
			||||||
		Reference in New Issue
	
	Block a user