Skip to content

Commit

Permalink
Refactor live test scenarios to use new password generation function (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
vidai-msft authored Sep 9, 2024
1 parent ffc4c3a commit 9c95b56
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 35 deletions.
34 changes: 16 additions & 18 deletions src/Compute/LiveTests/Compute/TestLiveScenarios.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,15 @@ Invoke-LiveTestScenario -Name "Creates a virtual machine." -Description "Test cr
$rgName = $rg.ResourceGroupName
$name = New-LiveTestResourceName

$VMLocalAdminUser = New-LiveTestResourceName;
$VMLocalAdminSecurePassword = ConvertTo-SecureString "Aalexwdy5#" -AsPlainText -Force;
$LocationName = "eastus";
$domainNameLabel = New-LiveTestResourceName;
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);
$text = New-LiveTestResourceName;
$bytes = [System.Text.Encoding]::Unicode.GetBytes($text);
$userData = [Convert]::ToBase64String($bytes);
$VMLocalAdminUser = New-LiveTestResourceName
$VMLocalAdminSecurePassword = ConvertTo-SecureString (New-LiveTestPassword) -AsPlainText -Force
$domainNameLabel = New-LiveTestResourceName
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword)
$text = New-LiveTestResourceName
$bytes = [System.Text.Encoding]::Unicode.GetBytes($text)
$userData = [Convert]::ToBase64String($bytes)

$actual = New-AzVM -ResourceGroupName $rgName -Name $name -Credential $Credential -DomainNameLabel $domainNameLabel -UserData $userData;
$actual = New-AzVM -ResourceGroupName $rgName -Name $name -Credential $Credential -DomainNameLabel $domainNameLabel -UserData $userData -OpenPorts @()

Assert-AreEqual $name $actual.Name
# Assert-AreEqual "Succeeded" Label $actual.ProvisioningState
Expand All @@ -28,16 +27,15 @@ Invoke-LiveTestScenario -Name "Removes a virtual machine from Azure" -Descriptio
$rgName = $rg.ResourceGroupName
$name = New-LiveTestResourceName

$VMLocalAdminUser = New-LiveTestResourceName;
$VMLocalAdminSecurePassword = ConvertTo-SecureString "Aalexwdy5#" -AsPlainText -Force;
$LocationName = "eastus";
$domainNameLabel = New-LiveTestResourceName;
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);
$text = New-LiveTestResourceName;
$bytes = [System.Text.Encoding]::Unicode.GetBytes($text);
$userData = [Convert]::ToBase64String($bytes);
$VMLocalAdminUser = New-LiveTestResourceName
$VMLocalAdminSecurePassword = ConvertTo-SecureString (New-LiveTestPassword) -AsPlainText -Force
$domainNameLabel = New-LiveTestResourceName
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword)
$text = New-LiveTestResourceName
$bytes = [System.Text.Encoding]::Unicode.GetBytes($text)
$userData = [Convert]::ToBase64String($bytes)

New-AzVM -ResourceGroupName $rgName -Name $name -Credential $Credential -DomainNameLabel $domainNameLabel -UserData $userData;
New-AzVM -ResourceGroupName $rgName -Name $name -Credential $Credential -DomainNameLabel $domainNameLabel -UserData $userData -OpenPorts @()
Remove-AzVM -ResourceGroupName $rgName -Name $name -Force

$removedVM = Get-AzVM -ResourceGroupName $rgName -Name $name -ErrorAction SilentlyContinue
Expand Down
36 changes: 19 additions & 17 deletions tools/TestFx/Live/InvokeLiveTestScenarios.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ param (
)

$srcDir = Join-Path -Path ${env:BUILD_SOURCESDIRECTORY} -ChildPath "src"
$liveScenarios = Get-ChildItem -Path $srcDir -Directory -Exclude "Accounts" -ErrorAction SilentlyContinue | Get-ChildItem -Directory -Filter "LiveTests" -Recurse | Get-ChildItem -File -Filter "TestLiveScenarios.ps1" | Select-Object -ExpandProperty FullName
$liveScenarios = Get-ChildItem -Path $srcDir -Directory -Exclude "Accounts" -ErrorAction SilentlyContinue | Get-ChildItem -Directory -Filter "LiveTests" -Recurse | Get-ChildItem -File -Filter "TestLiveScenarios.ps1" -Recurse | Select-Object -ExpandProperty FullName

$maxRunspaces = 9
[void][int]::TryParse(${env:RSPTHROTTLE}, [ref]$maxRunspaces)
Expand All @@ -27,16 +27,17 @@ $liveJobs = $liveScenarios | ForEach-Object {
$ps = [powershell]::Create()
$ps.RunspacePool = $rsp
[void]$ps.AddScript({
param (
[string] $Module,
[string] $RunPlatform,
[string] $LiveScenarioScript
)

Import-Module "./tools/TestFx/Assert.ps1" -Force
Import-Module "./tools/TestFx/Live/LiveTestUtility.psd1" -ArgumentList $Module, $RunPlatform, ${env:DATALOCATION} -Force
. $LiveScenarioScript
}).AddParameter("Module", $module).AddParameter("RunPlatform", $RunPlatform).AddParameter("LiveScenarioScript", $_)
param (
[string] $Module,
[string] $RunPlatform,
[string] $LiveScenarioScript
)

Import-Module "./tools/TestFx/Assert.ps1" -Force
Import-Module "./tools/TestFx/Live/LiveTestUtility.psd1" -ArgumentList $Module, $RunPlatform, ${env:DATALOCATION} -Force
. $LiveScenarioScript
}
).AddParameter("Module", $module).AddParameter("RunPlatform", $RunPlatform).AddParameter("LiveScenarioScript", $_)

[PSCustomObject]@{
Id = $ps.InstanceId
Expand Down Expand Up @@ -136,7 +137,7 @@ while ($queuedJobs.Count -gt 0) {
}

$accountsDir = Join-Path -Path $srcDir -ChildPath "Accounts"
$accountsLiveScenario = Get-ChildItem -Path $accountsDir -Directory -Filter "LiveTests" -Recurse -ErrorAction SilentlyContinue | Get-ChildItem -File -Filter "TestLiveScenarios.ps1" | Select-Object -ExpandProperty FullName
$accountsLiveScenario = Get-ChildItem -Path $accountsDir -Directory -Filter "LiveTests" -Recurse -ErrorAction SilentlyContinue | Get-ChildItem -File -Filter "TestLiveScenarios.ps1" -Recurse | Select-Object -ExpandProperty FullName
if ($null -ne $accountsLiveScenario) {
Write-Output ""
Write-Output "##[section]Live test run for module `"Accounts`"."
Expand All @@ -150,11 +151,12 @@ $liveJobs | ForEach-Object {
if ($null -ne $_.Instance) {
$_.Instance.Commands.Clear()
[void]$_.Instance.AddScript({
$cleanupJobs = Get-Job
$cleanupJobs | Wait-Job | Out-Null
$cleanupJobs | Select-Object Name, Command, State, PSBeginTime, PSEndTime, Output
$cleanupJobs | Remove-Job
})
$cleanupJobs = Get-Job
$cleanupJobs | Wait-Job | Out-Null
$cleanupJobs | Select-Object Name, Command, State, PSBeginTime, PSEndTime, Output
$cleanupJobs | Remove-Job
}
)
$_.AsyncHandle = $_.Instance.BeginInvoke()
}
}
Expand Down
38 changes: 38 additions & 0 deletions tools/TestFx/Live/LiveTestUtility.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,44 @@ function New-LiveTestStorageAccountName {
$saFullName
}

function New-LiveTestPassword {
[CmdletBinding()]
[OutputType([string])]
param (
[Parameter()]
[ValidateRange(12, 123)]
[int] $MaxLength = 16
)

$lowercase = 'abcdefghijklmnopqrstuvwxyz'
$uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
$numbers = '0123456789'
$special = '!@#$%^&*()-_=+[]{}|;:,.<>?'
$allCharacters = $lowercase + $uppercase + $numbers + $special

# Ensure at least three of the required character types
$password = @()
$characterTypes = @($lowercase, $uppercase, $numbers, $special)
$selectedTypes = Get-Random -InputObject $characterTypes -Count 3

foreach ($type in $selectedTypes) {
$password += $type[(Get-Random -Minimum 0 -Maximum $type.Length)]
}

# Ensure the first character is not a special character
$nonSpecialCharacters = $lowercase + $uppercase + $numbers
$firstChar = $nonSpecialCharacters[(Get-Random -Minimum 0 -Maximum $nonSpecialCharacters.Length)]
$password = @($firstChar) + $password

# Fill the rest of the password length with random characters from all sets
$remainingLength = $MaxLength - $password.Length
$password += (1..$remainingLength | ForEach-Object { $allCharacters[(Get-Random -Minimum 0 -Maximum $allCharacters.Length)] })

# Shuffle the password to ensure randomness, excluding the first character
$password = $password[0] + ( -join ($password[1..($password.Length - 1)] | Get-Random -Count ($password.Length - 1)))
return -join $password
}

function Invoke-LiveTestCommand {
[CmdletBinding()]
param (
Expand Down

0 comments on commit 9c95b56

Please sign in to comment.