parameters: - name: suiteName type: string - name: testOS type: string values: - ubuntu2004 - name: knownHost type: string - name: toolset type: string values: - make - name: uhdSrcDir type: string - name: uhdArtifactSource type: string - name: redisHost type: string - name: dutMatrix type: object jobs: - job: uhd_devtest_${{ parameters.suiteName }}_${{ parameters.testOS }} displayName: uhd devtest ${{ parameters.suiteName }} ${{ parameters.testOS }} timeoutInMinutes: 90 pool: name: de-dre-lab demands: - suiteName -equals ${{ parameters.suiteName }} - testOS -equals ${{ parameters.testOS }} - device -equals $(devAgent) variables: - group: sdr-pipeline-vars strategy: matrix: ${{ parameters.dutMatrix }} workspace: clean: outputs steps: - checkout: self clean: true - task: InstallSSHKey@0 displayName: 'Install Ettus SSH key' inputs: knownHostsEntry: '${{ parameters.knownHost }}' sshPublicKey: '$(ettus_ssh_pubkey)' sshKeySecureFile: 'id_rsa.ettus' - script: | if [ "${{ parameters.uhdArtifactSource }}" = "current" ]; then echo '##vso[task.setvariable variable=uhd_artifact_directory]'$(Agent.BuildDirectory) else echo '##vso[task.setvariable variable=uhd_artifact_directory]'$(Agent.BuildDirectory)/${{ parameters.uhdArtifactSource }} fi displayName: Set uhddev pipeline artifact location - download: ${{ parameters.uhdArtifactSource }} artifact: uhddev-${{ parameters.testOS }}-${{ parameters.toolset }} displayName: Download uhddev-${{ parameters.testOS }}-${{ parameters.toolset }} artifact - task: ExtractFiles@1 inputs: archiveFilePatterns: $(uhd_artifact_directory)/uhddev-${{ parameters.testOS }}-${{ parameters.toolset }}/uhddev-${{ parameters.testOS }}-${{ parameters.toolset }}.tar.gz destinationFolder: $(Build.BinariesDirectory) cleanDestinationFolder: true - download: ${{ parameters.uhdArtifactSource }} artifact: n3xx-images # Only sync the bz2 sdimg since the bmap # is incompatible with mender patterns: | **/*.bz2 fitImage-manufacturing displayName: Download $(devType)-images artifact condition: and(succeeded(), eq(variables.devType, 'n3xx')) - download: ${{ parameters.uhdArtifactSource }} artifact: e320-images # Only sync the bz2 sdimg since the bmap # is incompatible with mender patterns: | **/*.bz2 fitImage-manufacturing displayName: Download $(devType)-images artifact condition: and(succeeded(), eq(variables.devModel, 'e320')) - script: | cd $(Build.BinariesDirectory)/uhddev/build mkdir -p fpga_images rm -rf fpga_images/* python3 utils/uhd_images_downloader.py -t $(devModel)_fpga -i fpga_images \ -b $(sdr-fileserver) if [ "$(devType)" = "b200" ]; then python3 utils/uhd_images_downloader.py -t b2xx_common -i fpga_images \ -b $(sdr-fileserver) fi displayName: Download FPGA Images - script: | mkdir -p $(Common.TestResultsDirectory)/devtest cd $(Common.TestResultsDirectory)/devtest export PATH=$(Build.BinariesDirectory)/uhddev/build/utils:$(Build.BinariesDirectory)/uhddev/build/examples:$PATH export LD_LIBRARY_PATH=$(Build.BinariesDirectory)/uhddev/build/lib:$LD_LIBRARY_PATH export UHD_IMAGES_DIR=$(Build.BinariesDirectory)/uhddev/build/fpga_images python3 ${{ parameters.uhdSrcDir }}/.ci/utils/mutex_hardware.py \ --sdimage_sdmux $(devType),$(devModel),$(uhd_artifact_directory)/$(devType)-images/$(devSDImage),${{ parameters.uhdSrcDir }}/$(devLabgridConfig),$(devHostname) \ --fpgas $(devFpga) \ --sfp_addrs $(sfpAddrs) \ ${{ parameters.redisHost }} $(devName) \ "$(Build.BinariesDirectory)/uhddev/build/utils/uhd_usrp_probe --args addr=$(devAddr)" \ "python3 ${{ parameters.uhdSrcDir }}/host/tests/devtest/run_testsuite.py \ --src-dir ${{ parameters.uhdSrcDir }}/host/tests/devtest \ --devtest-pattern $(devtestPattern) --args addr=$(devAddr),type=$(devType) \ --build-type Release --build-dir $(Build.BinariesDirectory)/uhddev/build \ --python-interp python3 --xml" continueOnError: true condition: and(succeeded(), eq(variables.devType, 'n3xx'), eq(variables.devBus, 'ip')) displayName: Run n3xx devtest on $(devName) - script: | mkdir -p $(Common.TestResultsDirectory)/devtest cd $(Common.TestResultsDirectory)/devtest export PATH=$(Build.BinariesDirectory)/uhddev/build/utils:$(Build.BinariesDirectory)/uhddev/build/examples:$PATH export LD_LIBRARY_PATH=$(Build.BinariesDirectory)/uhddev/build/lib:$LD_LIBRARY_PATH export UHD_IMAGES_DIR=$(Build.BinariesDirectory)/uhddev/build/fpga_images python3 ${{ parameters.uhdSrcDir }}/.ci/utils/mutex_hardware.py \ --sdimage_tftp $(devType),$(devModel),$(uhd_artifact_directory)/e320-images/$(devSDImage),$(uhd_artifact_directory)/e320-images/$(devInitramfsImage),${{ parameters.uhdSrcDir }}/$(devLabgridConfig) \ --fpgas $(devFpga) \ --sfp_addrs $(sfpAddrs) \ ${{ parameters.redisHost }} $(devName) \ "$(Build.BinariesDirectory)/uhddev/build/utils/uhd_usrp_probe --args addr=$(devAddr)" \ "python3 ${{ parameters.uhdSrcDir }}/host/tests/devtest/run_testsuite.py \ --src-dir ${{ parameters.uhdSrcDir }}/host/tests/devtest \ --devtest-pattern $(devtestPattern) --args addr=$(devAddr),type=$(devType) \ --build-type Release --build-dir $(Build.BinariesDirectory)/uhddev/build \ --python-interp python3 --xml" continueOnError: true condition: and(succeeded(), eq(variables.devModel, 'e320'), eq(variables.devBus, 'ip')) displayName: Run e320 devtest on $(devName) - script: | mkdir -p $(Common.TestResultsDirectory)/devtest cd $(Common.TestResultsDirectory)/devtest export PATH=$(Build.BinariesDirectory)/uhddev/build/utils:$(Build.BinariesDirectory)/uhddev/build/examples:$PATH export LD_LIBRARY_PATH=$(Build.BinariesDirectory)/uhddev/build/lib:$LD_LIBRARY_PATH export UHD_IMAGES_DIR=$(Build.BinariesDirectory)/uhddev/build/fpga_images python3 ${{ parameters.uhdSrcDir }}/.ci/utils/mutex_hardware.py \ ${{ parameters.redisHost }} $(devName) \ "$(Build.BinariesDirectory)/uhddev/build/utils/uhd_usrp_probe --args serial=$(devSerial)" \ "$(Build.BinariesDirectory)/uhddev/build/utils/uhd_image_loader --args serial=$(devSerial),type=$(devType)" \ "python3 ${{ parameters.uhdSrcDir }}/host/tests/devtest/run_testsuite.py \ --src-dir ${{ parameters.uhdSrcDir }}/host/tests/devtest \ --devtest-pattern $(devtestPattern) --args serial=$(devSerial),type=$(devType) \ --build-type Release --build-dir $(Build.BinariesDirectory)/uhddev/build \ --python-interp python3 --xml" continueOnError: true condition: and(succeeded(), eq(variables.devType, 'b200'), eq(variables.devBus, 'usb')) displayName: Run b2xx devtest on $(devName) - script: | mkdir -p $(Common.TestResultsDirectory)/devtest cd $(Common.TestResultsDirectory)/devtest export PATH=$(Build.BinariesDirectory)/uhddev/build/utils:$(Build.BinariesDirectory)/uhddev/build/examples:$PATH export LD_LIBRARY_PATH=$(Build.BinariesDirectory)/uhddev/build/lib:$LD_LIBRARY_PATH python3 ${{ parameters.uhdSrcDir }}/.ci/utils/mutex_hardware.py \ --jtag_x3xx $(devType),$(devModel),$(jtagServer),$(jtagSerial),$(Build.BinariesDirectory)/uhddev/build/fpga_images/ \ --fpgas $(devFpga) \ ${{ parameters.redisHost }} $(devName) \ "$(Build.BinariesDirectory)/uhddev/build/utils/uhd_usrp_probe --args addr=$(devAddr)" \ "python3 ${{ parameters.uhdSrcDir }}/host/tests/devtest/run_testsuite.py \ --src-dir ${{ parameters.uhdSrcDir }}/host/tests/devtest \ --devtest-pattern $(devtestPattern) --args addr=$(devAddr),type=$(devType) \ --build-type Release --build-dir $(Build.BinariesDirectory)/uhddev/build \ --python-interp python3 --xml" continueOnError: true condition: and(succeeded(), eq(variables.devType, 'x300'), eq(variables.devBus, 'ip')) displayName: Run x3xx devtest on $(devName) $(devFpga) - script: | cat $(Common.TestResultsDirectory)/devtest/log*.log echo "" displayName: cat devtest log condition: always() - script: | cd $(Common.TestResultsDirectory)/devtest python3 ${{ parameters.uhdSrcDir }}/.ci/utils/format_devtest_junitxml.py \ $(Common.TestResultsDirectory)/devtest \ $(Common.TestResultsDirectory)/devtest/devtestresults.xml continueOnError: true displayName: Format devtest xml condition: and(always(), eq(variables.devType, 'b200')) - script: | cd $(Common.TestResultsDirectory)/devtest python3 ${{ parameters.uhdSrcDir }}/.ci/utils/format_devtest_junitxml.py \ --fpgas $(devFpga) \ $(Common.TestResultsDirectory)/devtest \ $(Common.TestResultsDirectory)/devtest/devtestresults.xml continueOnError: true displayName: Format devtest xml condition: and(always(), ne(variables.devType, 'b200')) - publish: $(Common.TestResultsDirectory) artifact: test-logs-devtest-$(devName)-$(devFpga)-run$(System.JobAttempt) displayName: Upload Test Logs condition: always() - task: PublishTestResults@2 inputs: testResultsFormat: 'JUnit' testResultsFiles: '$(Common.TestResultsDirectory)/devtest/devtestresults.xml' testRunTitle: $(devName) devtest buildConfiguration: 'Release' mergeTestResults: true failTaskOnFailedTests: true displayName: Upload devtest results condition: always() - script: | echo "A previous step failed. See steps with warnings." echo "Marking the overall build status as a failure." exit 1 condition: in(variables['Agent.JobStatus'], 'SucceededWithIssues') displayName: Mark build as failure