-
Notifications
You must be signed in to change notification settings - Fork 225
/
SqlServerDSCCommon.Tests.ps1
75 lines (65 loc) · 3.52 KB
/
SqlServerDSCCommon.Tests.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
[CmdletBinding()]
# Suppressing this because we need to generate a mocked credentials that will be passed along to the examples that are needed in the tests.
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")]
param()
$script:moduleRoot = Split-Path $PSScriptRoot -Parent
Describe 'SqlServerDSC module common tests' {
Context -Name 'When there are example file for resource' {
<#
For Appveyor builds copy the module to the system modules directory so it falls
in to a PSModulePath folder and is picked up correctly.
#>
if ($env:APPVEYOR)
{
$powershellModulePath = Join-Path -Path (($env:PSModulePath -split ';')[0]) -ChildPath 'SqlServerDSC'
Copy-item -Path $env:APPVEYOR_BUILD_FOLDER -Destination $powershellModulePath -Recurse -Force
}
$mockPassword = ConvertTo-SecureString '&iPm%M5q3K$Hhq=wcEK' -AsPlainText -Force
$mockCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList @('username', $mockPassword)
$mockConfigData = @{
AllNodes = @(
@{
NodeName = "localhost"
PSDscAllowPlainTextPassword = $true
}
)
}
$exampleFile = Get-ChildItem -Path "$script:moduleRoot\Examples\Resources" -Filter "*.ps1" -Recurse
foreach ($exampleToValidate in $exampleFile)
{
$exampleDescriptiveName = Join-Path -Path (Split-Path $exampleToValidate.Directory -Leaf) -ChildPath (Split-Path $exampleToValidate -Leaf)
It "Should compile MOFs for example '$exampleDescriptiveName' correctly" {
{
. $exampleToValidate.FullName
$exampleCommand = Get-Command Example -ErrorAction SilentlyContinue
if ($exampleCommand)
{
try
{
$params = @{}
$exampleCommand.Parameters.Keys | Where-Object { $_ -like '*Account' -or ($_ -like '*Credential' -and $_ -ne 'PsDscRunAsCredential') } | ForEach-Object -Process {
$params.Add($_, $mockCredential)
}
Example @params -ConfigurationData $mockConfigData -OutputPath 'TestDrive:\' -ErrorAction Continue -WarningAction SilentlyContinue | Out-Null
}
finally
{
# Remove the function we dot-sourced so next example file doesn't use the previous Example-function.
Remove-Item function:Example
}
}
else
{
throw "The example '$exampleDescriptiveName' does not contain a function 'Example'."
}
} | Should -Not -Throw
}
}
if ($env:APPVEYOR -eq $true)
{
Remove-item -Path $powershellModulePath -Recurse -Force -Confirm:$false
# Restore the module in 'memory' to ensure other tests after this test have access to it
Import-Module -Name "$script:moduleRoot\SqlServerDSC.psd1" -Global -Force
}
}
}