Skip to content
This repository was archived by the owner on Dec 1, 2023. It is now read-only.

Commit 980b38d

Browse files
authored
Merge pull request #9 from cleygraf/development
Development
2 parents 49cabea + 067e062 commit 980b38d

File tree

2 files changed

+63
-8
lines changed

2 files changed

+63
-8
lines changed

.build.ps1

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,17 @@ task ValidateRemoteScriptExecution {
106106
$i = 0
107107
foreach ($Mount in $MountArray) {
108108
$LoopCount = 1
109+
# Keeping the guest credential value local since it may only apply to the individual virtual machine in some cases
110+
# Try per vm guest credentials first
111+
if ( Get-Variable -Name "$Config.virtualMachines[$i].guestCred" -ErrorAction SilentlyContinue ) {
112+
Write-Verbose -Message "Importing Credential file: $($IdentityPath + $($Config.virtualMachines[$i].guestCred))" -Verbose
113+
$GuestCredential = Import-Clixml -Path ($IdentityPath + $($Config.virtualMachines[$i].guestCred))
114+
}
115+
# Use global guest credentials
116+
else {
117+
Write-Verbose -Message "Importing Credential file: $($IdentityPath + "guestCred.XML")" -Verbose
118+
$GuestCredential = Import-Clixml -Path ($IdentityPath + "guestCred.XML")
119+
}
109120
while ($true) {
110121
Write-Verbose -Message "Testing script execution on '$($Config.virtualMachines[$i].mountName)', attempt '$LoopCount'..." -Verbose
111122
$splat = @{
@@ -164,27 +175,30 @@ task MoveLiveMountNetworkAddress {
164175
$splat = @{
165176
ScriptText = 'Get-NetAdapter | where {($_.MacAddress).ToLower() -eq "' + $TestInterfaceMAC + '"} | Remove-NetRoute -Confirm:$false -ErrorAction SilentlyContinue;`
166177
Get-NetAdapter | where {($_.MacAddress).ToLower() -eq "' + $TestInterfaceMAC + '"} | Get-NetIPAddress | Remove-NetIPAddress -confirm:$false;`
178+
Get-NetAdapter | where {($_.MacAddress).ToLower() -eq "' + $TestInterfaceMAC + '"} | Set-NetIPInterface -DHCP Disable;`
167179
Get-NetAdapter | where {($_.MacAddress).ToLower() -eq "' + $TestInterfaceMAC + '"} | `
168180
New-NetIPAddress -IPAddress ' + $Config.virtualMachines[$i].testIp + ' -PrefixLength ' + $Config.virtualMachines[$i].testSubnet + `
169181
' -DefaultGateway ' + $Config.virtualMachines[$i].testGateway
170182
ScriptType = 'PowerShell'
171183
VM = $Config.virtualMachines[$i].mountName
172184
GuestCredential = $GuestCredential
173185
}
186+
Write-Verbose -Message "Changing ip of $($Config.virtualMachines[$i].mountName) to $($Config.virtualMachines[$i].testIp)." -Verbose
174187
$output = Invoke-VMScript @splat -ErrorAction Stop
175188
$splat = @{
176189
ScriptText = '(Get-NetAdapter| where {($_.MacAddress).ToLower() -eq "' + $TestInterfaceMAC + '"} | Get-NetIPAddress -AddressFamily IPv4).IPAddress'
177190
ScriptType = 'PowerShell'
178191
VM = $Config.virtualMachines[$i].mountName
179192
GuestCredential = $GuestCredential
180193
}
194+
Write-Verbose -Message "Verifying new ip of $($Config.virtualMachines[$i].mountName)." -Verbose
181195
$output = Invoke-VMScript @splat -ErrorAction Stop
182-
$new_ip = $output.ScriptOutput -replace "`r`n", ""
196+
$new_ip = $($output.ScriptOutput | Out-String).Trim().Split("`r`n")[-1]
183197
if ( $new_ip -eq $Config.virtualMachines[$i].testIp ) {
184198
Write-Verbose -Message "$($Config.virtualMachines[$i].mountName) Network Address Status: Assigned to $($new_ip)"
185199
}
186200
else {
187-
throw "$($Config.virtualMachines[$i].mountName) changing ip to $($Config.virtualMachines[$i].testIp) failed, exiting Build script. Previously live mounted VMs will continue running"
201+
throw "$($Config.virtualMachines[$i].mountName) changing ip to $($Config.virtualMachines[$i].testIp) failed (is still $($newip)), exiting Build script. Previously live mounted VMs will continue running"
188202
}
189203
$i++
190204
}
@@ -197,7 +211,16 @@ task LiveMountTest {
197211
Write-Verbose -Message "$($Config.virtualMachines[$i].mountName) Test Status: Loading the following tests - $($Config.virtualMachines[$i].tasks)" -Verbose
198212
# Keeping the guest credential value local since it may only apply to the individual virtual machine in some cases
199213
# Not all tests will need a guest credential, but it's there in case required
214+
# Try per vm guest credentials first
215+
if ( Get-Variable -Name "$Config.virtualMachines[$i].guestCred" -ErrorAction SilentlyContinue ) {
216+
Write-Verbose -Message "Importing Credential file: $($IdentityPath + $($Config.virtualMachines[$i].guestCred))" -Verbose
200217
$GuestCredential = Import-Clixml -Path ($IdentityPath + $($Config.virtualMachines[$i].guestCred))
218+
}
219+
# Use global guest credentials
220+
else {
221+
Write-Verbose -Message "Importing Credential file: $($IdentityPath + "guestCred.XML")" -Verbose
222+
$GuestCredential = Import-Clixml -Path ($IdentityPath + "guestCred.XML")
223+
}
201224
Invoke-Build -File .\tests.ps1 -Task $Config.virtualMachines[$i].tasks -Config $Config.virtualMachines[$i] -GuestCredential $GuestCredential
202225
Write-Verbose -Message "$($Config.virtualMachines[$i].mountName) Test Status: Testing complete" -Verbose
203226
$i++

tests.ps1

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,47 @@ param(
33
[System.Management.Automation.PSCredential]$GuestCredential
44
)
55

6+
#
7+
# Tests running on the local machine, e. g. try to ping the test vm
8+
#
69
task Ping {
7-
assert (Test-Connection -ComputerName $Config.testIp -Quiet) "Unable to ping the server."
8-
10+
$progressPreference = 'SilentlyContinue';
11+
Test-Connection $Config.testIp -Quiet 6> $null
12+
assert (Test-Connection $Config.testIp -Quiet 6> $null) "Unable to ping the server."
913
}
1014

11-
task Netlogon {
12-
$GuestCredentialModified = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ('.\'+$GuestCredential.UserName), ($GuestCredential.Password)
13-
$ValidateService = (Get-WmiObject -Class Win32_Service -ComputerName $Config.testIp -Credential $GuestCredentialModified -Filter "name='Netlogon'").State
14-
equals $ValidateService 'Running'
15+
task Port80 {
16+
if ( $(Get-PSVersion).Major -ge 6 ) {
17+
# Test-NetConnection is not available on core non Windows
18+
assert (Test-Connection $Config.testIp -TCPPort 80) "Unable to connect to port 80 of the server."
19+
}
20+
else {
21+
assert (Test-NetConnection $Config.testIp -Port 80) "Unable to connect to port 80 of the server."
22+
}
1523
}
1624

25+
#
26+
# Tests running inside the test vm, e. g. check if a service is running. VMware-tools are used to achieve this.
27+
#
28+
task NTDS {
29+
$splat = @{
30+
ScriptText = 'if ( Get-Service "NTDS" -ErrorAction SilentlyContinue ) { Write-Output "running" } else { Write-Output "not running" }'
31+
ScriptType = 'PowerShell'
32+
VM = $Config.mountName
33+
GuestCredential = $GuestCredential
34+
}
35+
$output = Invoke-VMScript @splat -ErrorAction Stop
36+
equals "$($output.Trim())" "running"
37+
}
38+
39+
task MSSQLSERVER {
40+
$splat = @{
41+
ScriptText = 'if ( Get-Service "MSSQLSERVER" -ErrorAction SilentlyContinue ) { Write-Output "running" } else { Write-Output "not running" }'
42+
ScriptType = 'PowerShell'
43+
VM = $Config.mountName
44+
GuestCredential = $GuestCredential
45+
}
46+
$output = Invoke-VMScript @splat -ErrorAction Stop
47+
equals "$($output.Trim())" "running"
48+
}
1749
task .

0 commit comments

Comments
 (0)