vsts/templates/steps-deploy-and-run-pytest.yaml (204 lines of code) (raw):
parameters:
forced_image: $(Horton.ForcedImage)
suite: ''
testcase: ''
repeat_count: ''
steps:
- powershell: |
function IsEmpty($s) { ( ($s -eq $null) -or ( $s -eq "" ) -or ( $s.StartsWith("$") ) ) }
function GetArchitecture() {
$plat = (uname -m) | Out-String
if ($plat.StartsWith("armv7")) {
"arm64"
} else {
"x64"
}
}
$SkipTest="no"
$UsesDocker = "yes"
Write-Host "Configuring test suite=$env:Suite"
$Variant = ""
if ($env:Suite.StartsWith("c_")) {
$Language = "c"
} elseif ($env:Suite.StartsWith("java_")) {
$Language = "java"
} elseif ($env:Suite.StartsWith("csharp_")) {
$Language = "csharp"
} elseif ($env:Suite.StartsWith("node_")) {
$Language = "node"
} elseif ($env:Suite.StartsWith("node6_")) {
$Language = "node"
$Variant = "node6"
} elseif ($env:Suite.StartsWith("node16_")) {
$Language = "node"
$Variant = "node16"
} elseif ($env:Suite.StartsWith("node18_")) {
$Language = "node"
$Variant = "node18"
} elseif ($env:Suite.StartsWith("py37_")) {
$Language = "pythonv2"
$Variant = "py37"
} elseif ($env:Suite.StartsWith("py38_")) {
$Language = "pythonv2"
$Variant = "py38"
} elseif ($env:Suite.StartsWith("py39_")) {
$Language = "pythonv2"
$Variant = "py39"
} elseif ($env:Suite.StartsWith("py310")) {
$Language = "pythonv2"
$Variant = "py310"
} else {
throw("Unknown/missing language in suite: " + $env:Suite)
}
if ($env:Suite.Contains("iothub_module_quick_drop")) {
$Scenario="iothub_module_quick_drop"
$DeploymentType="iothub"
} elseif ($env:Suite.Contains("iothub_module_full_drop")) {
$Scenario="iothub_module_full_drop"
$DeploymentType="iothub"
} elseif ($env:Suite.Contains("iothub_device_quick_drop")) {
$Scenario="iothub_device_quick_drop"
$DeploymentType="iothub"
} elseif ($env:Suite.Contains("iothub_device_full_drop")) {
$Scenario="iothub_device_full_drop"
$DeploymentType="iothub"
} elseif ($env:Suite.Contains("edgehub_module_quick_drop")) {
$Scenario="edgehub_module_quick_drop"
$DeploymentType="iotedge"
} elseif ($env:Suite.Contains("edgehub_module_full_drop")) {
$Scenario="edgehub_module_full_drop"
$DeploymentType="iotedge"
} elseif ($env:Suite.Contains("iothub_module_and_device")) {
$Scenario="iothub_module_and_device"
$DeploymentType="iothub"
} elseif ($env:Suite.Contains("iothub_module")) {
$Scenario="iothub_module"
$DeploymentType="iothub"
} elseif ($env:Suite.Contains("iothub_device")) {
$DeploymentType="iothub"
} elseif ($env:Suite.Contains("edgehub_module")) {
$Scenario="edgehub_module"
$DeploymentType="iotedge"
} else {
throw("Unknown/missing scenario in suite: " + $env:Suite)
}
if ($env:Suite.Contains("mqttws")) {
$Transport="mqttws"
} elseif ($env:Suite.Contains("mqtt")) {
$Transport="mqtt"
} elseif ($env:Suite.Contains("amqpws")) {
$Transport="amqpws"
} elseif ($env:Suite.Contains("amqp")) {
$Transport="amqp"
} else {
throw("Unknown/missing transport in suite: " + $env:Suite)
}
$Async = ""
if ($env:Suite.Contains("async")) {
$Async="yes"
}
# Skip tests based on SDK transport support
if ($Language -eq "c") {
if ($Scenario -eq "edgehub_module") {
if (($Transport -eq "amqp") -or ($Transport -eq "amqpws")) {
$SkipTest="yes"
}
}
} elseif ($Language -eq "pythonv2") {
if (($Transport -ne "mqtt") -and ($Transport -ne "mqttws")) {
$SkipTest="yes"
}
}
# add parameters if we're runnin a single case
$TestArgs=""
if ( -not (IsEmpty($env:TestCase)) ) {
$TestArgs=$TestArgs + " " + $env:TestCase
}
if ( -not (IsEmpty($env:RepeatCount)) ) {
$TestArgs=$TestArgs + " --count=" + $env:RepeatCount
}
# parameters for async
if ($Async -eq "yes") {
$TestArgs=$TestArgs + " --async"
}
if ($env:AGENT_JOBNAME -ne "Job") {
$LogFolderName=$env:AGENT_JOBNAME.replace(" + ","").replace(" ","_")
} else {
$LogFolderName="${Language}_${Scenario}_${Transport}_${Variant}"
if ($Async -eq "yes") {
$LogFolderName="${LogFolderName}_Async"
}
$LogFolderName=$LogFolderName + "_" + $env:SYSTEM_JOBPOSITIONINPHASE
}
$TestImageTag=$env:DefaultImageTag
if ( -not (IsEmpty($Variant)) ) {
$TestImageTag=$TestImageTag + "-" + $Variant
}
if ( -not (IsEmpty($env:ForcedImage)) ) {
$TestImageTag=$env:ForcedImageTag
}
$ImageTestMod = $env:IOTHUB_E2E_REPO_ADDRESS + "/" + ${Language} + "-e2e-v3:" + ${TestImageTag}
$Architecture=GetArchitecture
Write-Host "##vso[task.setvariable variable=architecture]${Architecture}"
Write-Host "##vso[task.setvariable variable=language]${Language}"
Write-Host "##vso[task.setvariable variable=variant]${Variant}"
Write-Host "##vso[task.setvariable variable=scenario]${Scenario}"
Write-Host "##vso[task.setvariable variable=transport]${Transport}"
Write-Host "##vso[task.setvariable variable=async]${Async}"
Write-Host "##vso[task.setvariable variable=logFolderName]${LogFolderName}"
Write-Host "##vso[task.setvariable variable=skipTest]${SkipTest}"
Write-Host "##vso[task.setvariable variable=testArgs]${TestArgs}"
Write-Host "##vso[task.setvariable variable=testImageTag]${TestImageTag}"
Write-Host "##vso[task.setvariable variable=imageTestMod]${ImageTestMod}"
Write-Host "##vso[task.setvariable variable=deploymentType]${DeploymentType}"
Write-Host "##vso[task.setvariable variable=usesDocker]${UsesDocker}"
Write-Host "Architecture=${Architecture}"
Write-Host "Language=${Language}"
Write-Host "Variant=${Variant}"
Write-Host "Scenario=${Scenario}"
Write-Host "Transport=${Transport}"
Write-Host "Async=${Async}"
Write-Host "AgentJobName=${env:AGENT_JOBNAME}"
Write-Host "LogFolderName=${LogFolderName}"
Write-Host "SkipTest=${SkipTest}"
Write-Host "TestArgs=${TestArgs}"
Write-Host "TestImageTag=${TestImageTag}"
Write-Host "ImageTestMod=${ImageTestMod}"
Write-Host "DeploymentType=${DeploymentType}"
Write-Host "UsesDocker=${UsesDocker}"
displayName: Custom task execution logic
env:
Suite: ${{ parameters.suite }}
DefaultImageTag: "vsts-$(Build.BuildId)"
ForcedImageTag: ${{ parameters.forced_image }}
TestCase: ${{ parameters.testcase }}
RepeatCount: ${{ parameters.repeat_count }}
IOTHUB_E2E_REPO_ADDRESS: $(IOTHUB-E2E-REPO-ADDRESS)
ignoreLASTEXITCODE: false
errorActionPreference: Stop
failOnStderr: true
- template: steps-ensure-e2e-fx-repo.yaml
- task: UsePythonVersion@0
inputs:
versionSpec: '3.7'
architecture: $(architecture)
condition: and(succeeded(), ne(variables['skipTest'],'yes'))
- bash:
source ${HORTON_FRAMEWORKROOT}/bin/activate_horton && pip list
displayName: 'Create Horton environment'
condition: and(succeeded(), ne(variables['skipTest'],'yes'))
- template: steps-pre-test.yaml
parameters:
language: $(language)
test_image_tag: $(testImageTag)
image_testMod: $(imageTestMod)
deployment_type: $(deploymentType)
- template: steps-run-pytest.yaml
parameters:
language: $(language)
transport: $(transport)
scenario: $(scenario)
log_folder_name: $(logFolderName)
extra_args: $(testArgs)
- template: steps-post-test.yaml
parameters:
language: $(language)
log_folder_name: $(logFolderName)
deployment_type: $(deploymentType)