WSL/tools/test/copy_and_build_tests.ps1

59 lines
2.0 KiB
PowerShell

<#
.SYNOPSIS
Copies linux unit tests to a given WSL distribution and builds them.
.PARAMETER WslTestDirPath
The absolute path to the location of the \wsl-build\test\linux directory.
.PARAMETER DistroName
The name of the WSL distribution to copy and build the tests inside of.
Defaults to "test_distro"
#>
param (
[Parameter( ValueFromPipeline = $true,
ValueFromPipelineByPropertyName = $true,
Mandatory = $true,
ParameterSetName = "WslTestDirPath",
HelpMessage = "Path to \wsl-build\test\linux\ location")]
[Parameter( ParameterSetName = "CopyBuildTestAll ")]
[Alias('testpath')]
[string[]]$WslTestDirPath,
[Parameter( ValueFromPipeline = $true,
ValueFromPipelineByPropertyName = $true,
Mandatory = $false,
ParameterSetName = "DistroName",
HelpMessage = "Name of WSL distro to run tests in; defaults to test_distro")]
[Parameter( ParameterSetName = "CopyBuildTestAll ")]
[Alias('distro')]
[string[]]$DistroName = "test_distro"
)
$ErrorActionPreference = "Stop"
Set-StrictMode -Version Latest
function Run {
[CmdletBinding()]
param([ScriptBlock]$cmd)
Invoke-Command -ScriptBlock $cmd
if ($LastExitCode -ne 0) {
throw ("$cmd failed with exit code: " + $lastexitcode)
}
}
$DistroPath = "$env:LocalAppData\lxss"
$copyScriptCommand = $PSScriptRoot + "\copy_tests.ps1 -WslTestDirPath $WslTestDirPath -DistroName $DistroName"
$cleanTestCommand = "rm -rf /data/test"
$buildTestCommand = "cd /data/test; ./build_tests.sh; less /data/test/log/build_output"
# clean test directory on linux side
Write-Output "Cleaning unit tests at $DistroPath\rootfs\data\test"
Run { wsl.exe --distribution $DistroName --user root --exec bash -c "$cleanTestCommand" }
# call the logic in copy_tests.ps1
Invoke-Expression $copyScriptCommand
# build the tests on the linux side
Write-Output "Building unit tests at $DistroPath\rootfs\data\test\"
Run { wsl.exe --distribution $DistroName --user root --exec bash -c "$buildTestCommand" }