aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--.appveyor/build.ps12
-rw-r--r--.appveyor/test.ps1213
-rw-r--r--appveyor.yml25
3 files changed, 239 insertions, 1 deletions
diff --git a/.appveyor/build.ps1 b/.appveyor/build.ps1
index 99caa6f..4e0ebd8 100644
--- a/.appveyor/build.ps1
+++ b/.appveyor/build.ps1
@@ -115,7 +115,7 @@ function Build-Driver {
$solution_path = Get-DriverSolutionPath -ProjectDir $ProjectDir -DriverSpec $DriverSpec
$Configuration = Get-DriverConfiguration -Configuration $Configuration
- $msbuild_params = "/p:Configuration=$Configuration;Platform=$Platform"
+ $msbuild_params = "/p:Configuration=$Configuration;Platform=$Platform;SignMode=TestSign"
cd $build_dir
Invoke-Exe { msbuild.exe $msbuild_params $solution_path }
diff --git a/.appveyor/test.ps1 b/.appveyor/test.ps1
new file mode 100644
index 0000000..71cb340
--- /dev/null
+++ b/.appveyor/test.ps1
@@ -0,0 +1,213 @@
+param(
+ [string] $BuildDir = $null,
+ [string] $ProjectDir = $null,
+ [string] $Configuration = $null,
+ [string] $Platform = $null
+)
+
+$ErrorActionPreference = "Stop";
+Set-PSDebug -Strict
+
+function Invoke-Exe {
+ param(
+ [ScriptBlock] $Cmd,
+ [int[]] $AllowedExitCodes = @(0)
+ )
+
+ $backupErrorActionPreference = $script:ErrorActionPreference
+ $script:ErrorActionPreference = 'Continue'
+
+ try {
+ $result = & $Cmd
+ if ($AllowedExitCodes -notcontains $LastExitCode) {
+ throw "External command failed with exit code ${LastExitCode}: $Cmd"
+ }
+ return $result
+ } finally {
+ $script:ErrorActionPreference = $backupErrorActionPreference
+ }
+}
+
+function Test-AppVeyor {
+ return Test-Path env:APPVEYOR
+}
+
+function Set-AppVeyorDefaults {
+ $script:ProjectDir = $env:APPVEYOR_BUILD_FOLDER
+ $script:BuildDir = 'C:\Projects\build'
+ $script:Platform = $env:PLATFORM
+ $script:Configuration = $env:CONFIGURATION
+}
+
+function Add-UtilsPath {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $BuildDir,
+ [Parameter(Mandatory=$true)]
+ [string] $Configuration
+ )
+
+ $env:PATH = "$BuildDir\service\utils\$Configuration;${env:PATH}"
+ $env:PATH = "$BuildDir\wrappers\simple\utils\$Configuration;${env:PATH}"
+}
+
+function Get-DriverName {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $DriverSpec
+ )
+
+ return Split-Path -Path $DriverSpec -Leaf
+}
+
+function Get-DriverBinDir {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $ProjectDir,
+ [Parameter(Mandatory=$true)]
+ [string] $DriverSpec,
+ [Parameter(Mandatory=$true)]
+ [string] $Platform,
+ [Parameter(Mandatory=$true)]
+ [string] $Configuration
+ )
+
+ $Platform = switch ($Platform) {
+ 'Win32' { 'x86' }
+ 'x64' { 'x64' }
+ default { throw "Unsupported platform: $Platform" }
+ }
+
+ $driver_name = Get-DriverName -DriverSpec $DriverSpec
+
+ return "$ProjectDir\km\build\wdk8.1update\$DriverSpec\bin\Windows7\$Platform\$Configuration"
+}
+
+function Get-DriverSysPath {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $ProjectDir,
+ [Parameter(Mandatory=$true)]
+ [string] $DriverSpec,
+ [Parameter(Mandatory=$true)]
+ [string] $Platform,
+ [Parameter(Mandatory=$true)]
+ [string] $Configuration
+ )
+
+ $bin_dir = Get-DriverBinDir `
+ -ProjectDir $ProjectDir `
+ -DriverSpec $DriverSpec `
+ -Platform $Platform `
+ -Configuration $Configuration
+ $driver_name = Get-DriverName -DriverSpec $DriverSpec
+
+ return "$bin_dir\$driver_name.vs12.sys"
+}
+
+function Start-Driver {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $ProjectDir,
+ [Parameter(Mandatory=$true)]
+ [string] $DriverSpec,
+ [Parameter(Mandatory=$true)]
+ [string] $Platform,
+ [Parameter(Mandatory=$true)]
+ [string] $Configuration
+ )
+
+ $service_name = Get-DriverName -DriverSpec $DriverSpec
+ $sys_path = Get-DriverSysPath `
+ -ProjectDir $ProjectDir `
+ -DriverSpec $DriverSpec `
+ -Platform $Platform `
+ -Configuration $Configuration
+
+ Write-Host "Starting driver $service_name..."
+ Invoke-Exe { install_service.exe $service_name $sys_path }
+ Invoke-Exe { start_service.exe $service_name }
+}
+
+function Stop-Driver {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $DriverSpec
+ )
+
+ $service_name = Get-DriverName -DriverSpec $DriverSpec
+
+ Write-Host "Stopping driver $service_name..."
+ Invoke-Exe { stop_service.exe $service_name }
+ Invoke-Exe { uninstall_service.exe $service_name }
+}
+
+function Exchange-Ints {
+ param(
+ [Parameter(Mandatory=$true)]
+ [int] $NewInt
+ )
+
+ return Invoke-Exe { exchange_ints.exe $NewInt }
+}
+
+function Verify-ExchangeInts {
+ param(
+ [Parameter(Mandatory=$true)]
+ [int] $NewInt,
+ [Parameter(Mandatory=$true)]
+ [int] $OldInt
+ )
+
+ $old_int = Invoke-Exe { exchange_ints.exe $NewInt }
+ if ($old_int -ne $OldInt) {
+ throw "Expected $OldInt, got: $old_int"
+ } else {
+ Write-Host "Previous integer: $old_int, new integer: $NewInt"
+ }
+}
+
+function Run-ProjectTests {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $ProjectDir,
+ [Parameter(Mandatory=$true)]
+ [string] $BuildDir,
+ [Parameter(Mandatory=$true)]
+ [string] $Platform,
+ [Parameter(Mandatory=$true)]
+ [string] $Configuration
+ )
+
+ Add-UtilsPath -BuildDir $BuildDir -Configuration $Configuration
+ Start-Driver `
+ -ProjectDir $ProjectDir `
+ -DriverSpec 'simple' `
+ -Platform $Platform `
+ -Configuration $Configuration
+ Verify-ExchangeInts -NewInt 69 -OldInt 42
+ Verify-ExchangeInts -NewInt 100500 -OldInt 69
+ Stop-Driver -DriverSpec 'simple'
+}
+
+function Run-ProjectTestsAppVeyor {
+ if (Test-AppVeyor) {
+ Set-AppVeyorDefaults
+ $appveyor_cwd = pwd
+ }
+
+ try {
+ Run-ProjectTests `
+ -ProjectDir $script:ProjectDir `
+ -BuildDir $script:BuildDir `
+ -Platform $script:Platform `
+ -Configuration $script:Configuration
+ } finally {
+ if (Test-AppVeyor) {
+ cd $appveyor_cwd
+ Set-PSDebug -Off
+ }
+ }
+}
+
+Run-ProjectTestsAppVeyor
diff --git a/appveyor.yml b/appveyor.yml
index 20ee0ef..178db2b 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -5,6 +5,12 @@ branches:
only:
- master
+#environment:
+# APPVEYOR_RDP_PASSWORD: 'FooBar01!'
+
+#on_finish:
+# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
+
platform:
- Win32
- x64
@@ -15,3 +21,22 @@ configuration:
build_script:
- ps: .\.appveyor\build.ps1
+
+# Workers are 64-bit, can't load 32-bit drivers.
+for:
+-
+ matrix:
+ only:
+ - platform: x64
+
+ # https://github.com/appveyor/ci/issues/715
+ install:
+ - appveyor AddMessage "Enabling self-signed drivers..."
+ - bcdedit.exe /set TESTSIGNING ON
+ - appveyor AddMessage "Rebooting the worker..."
+ - ps: Restart-Computer -Force
+ - ps: Start-Sleep -s 10
+ - appveyor AddMessage "OK"
+
+ test_script:
+ - ps: .\.appveyor\test.ps1