Files
PowerShell-PSDscResources/Tests/Integration/MSFT_UserResource.Integration.Tests.ps1
T
2016-11-02 10:34:55 -07:00

207 lines
8.6 KiB
PowerShell

<#
To run these tests, the currently logged on user must have rights to create a user.
These integration tests cover creating a brand new user, updating values
of a user that already exists, and deleting a user that exists.
#>
# Suppressing this rule since we need to create a plaintext password to test this resource
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingConvertToSecureStringWithPlainText', '')]
param ()
if ($PSVersionTable.PSVersion.Major -lt 5 -or $PSVersionTable.PSVersion.Minor -lt 1)
{
Write-Warning -Message 'Cannot run PSDscResources integration tests on PowerShell versions lower than 5.1'
return
}
Import-Module -Name (Join-Path -Path (Split-Path $PSScriptRoot -Parent) `
-ChildPath (Join-Path -Path 'TestHelpers' `
-ChildPath 'CommonTestHelper.psm1'))
$script:testEnvironment = Enter-DscResourceTestEnvironment `
-DscResourceModuleName 'PSDscResources' `
-DscResourceName 'MSFT_UserResource' `
-TestType 'Integration'
try {
$configFile = Join-Path -Path $PSScriptRoot -ChildPath 'MSFT_UserResource.config.ps1'
Describe 'UserResource Integration Tests' {
$ConfigData = @{
AllNodes = @(
@{
NodeName = '*'
PSDscAllowPlainTextPassword = $true
}
@{
NodeName = 'localhost'
}
)
}
Context 'Should create a new user' {
$configurationName = 'MSFT_User_NewUser'
$configurationPath = Join-Path -Path $TestDrive -ChildPath $configurationName
$logPath = Join-Path -Path $TestDrive -ChildPath 'NewUser.log'
$testUserName = 'TestUserName12345'
$testUserPassword = 'StrongOne7.'
$testDescription = 'Test Description'
$secureTestPassword = ConvertTo-SecureString $testUserPassword -AsPlainText -Force
$testCredential = New-Object PSCredential ($testUserName, $secureTestPassword)
try
{
It 'Should compile without throwing' {
{
. $configFile -ConfigurationName $configurationName
& $configurationName -UserName $testUserName `
-Password $testCredential `
-Description $testDescription `
-OutputPath $configurationPath `
-ConfigurationData $ConfigData `
-ErrorAction Stop
Start-DscConfiguration -Path $configurationPath -Wait -Force
} | Should Not Throw
}
It 'Should be able to call Get-DscConfiguration without throwing' {
{ Get-DscConfiguration -Verbose -ErrorAction Stop } | Should Not Throw
}
It 'Should return the correct configuration' {
$currentConfig = Get-DscConfiguration -Verbose -ErrorAction Stop
$currentConfig.UserName | Should Be $testUserName
$currentConfig.Ensure | Should Be 'Present'
$currentConfig.Description | Should Be $TestDescription
$currentConfig.Disabled | Should Be $false
$currentConfig.PasswordChangeRequired | Should Be $null
}
}
finally
{
if (Test-Path -Path $logPath) {
Remove-Item -Path $logPath -Recurse -Force
}
if (Test-Path -Path $configurationPath)
{
Remove-Item -Path $configurationPath -Recurse -Force
}
}
}
Context 'Should update an existing user' {
$configurationName = 'MSFT_User_UpdateUser'
$configurationPath = Join-Path -Path $TestDrive -ChildPath $configurationName
$logPath = Join-Path -Path $TestDrive -ChildPath 'UpdateUser.log'
$testUserName = 'TestUserName12345'
$testUserPassword = 'StrongOne7.'
$testDescription = 'New Test Description'
$secureTestPassword = ConvertTo-SecureString $testUserPassword -AsPlainText -Force
$testCredential = New-Object PSCredential ($testUserName, $secureTestPassword)
try
{
It 'Should compile without throwing' {
{
. $configFile -ConfigurationName $configurationName
& $configurationName -UserName $testUserName `
-Password $testCredential `
-Description $testDescription `
-OutputPath $configurationPath `
-ConfigurationData $ConfigData `
-ErrorAction Stop
Start-DscConfiguration -Path $configurationPath -Wait -Force
} | Should Not Throw
}
It 'Should be able to call Get-DscConfiguration without throwing' {
{ Get-DscConfiguration -Verbose -ErrorAction Stop } | Should Not Throw
}
It 'Should return the correct configuration' {
$currentConfig = Get-DscConfiguration -Verbose -ErrorAction Stop
$currentConfig.UserName | Should Be $testUserName
$currentConfig.Ensure | Should Be 'Present'
$currentConfig.Description | Should Be $TestDescription
$currentConfig.Disabled | Should Be $false
$currentConfig.PasswordChangeRequired | Should Be $null
}
}
finally
{
if (Test-Path -Path $logPath) {
Remove-Item -Path $logPath -Recurse -Force
}
if (Test-Path -Path $configurationPath)
{
Remove-Item -Path $configurationPath -Recurse -Force
}
}
}
Context 'Should delete an existing user' {
$configurationName = 'MSFT_User_DeleteUser'
$configurationPath = Join-Path -Path $TestDrive -ChildPath $configurationName
$logPath = Join-Path -Path $TestDrive -ChildPath 'DeleteUser.log'
$testUserName = 'TestUserName12345'
$testUserPassword = 'StrongOne7.'
$secureTestPassword = ConvertTo-SecureString $testUserPassword -AsPlainText -Force
$testCredential = New-Object PSCredential ($testUserName, $secureTestPassword)
try
{
It 'Should compile without throwing' {
{
. $configFile -ConfigurationName $configurationName
& $configurationName -UserName $testUserName `
-Password $testCredential `
-OutputPath $configurationPath `
-ConfigurationData $ConfigData `
-Ensure 'Absent' `
-ErrorAction Stop
Start-DscConfiguration -Path $configurationPath -Wait -Force
} | Should Not Throw
}
It 'Should be able to call Get-DscConfiguration without throwing' {
{ Get-DscConfiguration -Verbose -ErrorAction Stop } | Should Not Throw
}
It 'Should return the correct configuration' {
$currentConfig = Get-DscConfiguration -Verbose -ErrorAction Stop
$currentConfig.UserName | Should Be $testUserName
$currentConfig.Ensure | Should Be 'Absent'
}
}
finally
{
if (Test-Path -Path $logPath) {
Remove-Item -Path $logPath -Recurse -Force
}
if (Test-Path -Path $configurationPath)
{
Remove-Item -Path $configurationPath -Recurse -Force
}
}
}
}
}
finally
{
Exit-DscResourceTestEnvironment -TestEnvironment $script:testEnvironment
}