dotnet-installer/test/Installer/testmsi.ps1
2017-08-24 17:16:11 -07:00

92 lines
2.5 KiB
PowerShell

# Copyright (c) .NET Foundation and contributors. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
param(
[string]$InputMsi,
[string]$DotnetDir,
[string]$TestDir
)
. "$PSScriptRoot\..\..\scripts\common\_common.ps1"
$RepoRoot = Convert-Path "$PSScriptRoot\..\.."
function CopyInstaller([string]$destination)
{
# Copy both the .msi and the .exe to the testBin directory so
# the tests running in the docker container have access to them.
Copy-Item $inputMsi -Destination:$destination
$BundlePath = [System.IO.Path]::ChangeExtension($inputMsi, "exe")
Copy-Item $BundlePath -Destination:$destination
}
function CopyTestXUnitRunner([string]$destination)
{
$XUnitRunnerDir = Join-Path $env:NUGET_PACKAGES xunit.runner.console\2.1.0\tools
Copy-Item $XUnitRunnerDir\xunit.console.exe -Destination:$destination
Copy-Item $XUnitRunnerDir\xunit.runner.utility.desktop.dll -Destination:$destination
}
Write-Output "Running tests for MSI installer at $inputMsi."
if(!(Test-Path $inputMsi))
{
throw "$inputMsi not found"
}
$testName = "Microsoft.DotNet.Cli.Msi.Tests"
$testProj="$PSScriptRoot\$testName\$testName.csproj"
$testBin="$TestDir\$testName"
pushd "$DotnetDir"
try {
.\dotnet restore `
$testProj | Out-Host
if($LastExitCode -ne 0)
{
throw "dotnet restore failed with exit code $LastExitCode."
}
.\dotnet publish `
--framework net46 `
--output $testBin `
$testProj | Out-Host
if($LastExitCode -ne 0)
{
throw "dotnet publish failed with exit code $LastExitCode."
}
if($env:RunInstallerTestsInDocker)
{
CopyInstaller $testBin
CopyTestXUnitRunner $testBin
Write-Output "Running installer tests in Windows Container"
# --net="none" works around a networking issue on the containers on the CI machines.
# Since our installer tests don't require the network, it is fine to shut it off.
$MsiFileName = [System.IO.Path]::GetFileName($inputMsi)
docker run `
--rm `
-v "$testBin\:D:" `
-e "CLI_MSI=D:\$MsiFileName" `
--net="none" `
windowsservercore `
D:\xunit.console.exe D:\$testName.dll | Out-Host
if($LastExitCode -ne 0)
{
throw "xunit runner failed with exit code $LastExitCode."
}
}
}
finally {
popd
}
Exit 0