Files
PowerShell-PSDscResources/Tests/Integration/MSFT_GroupResource.Integration.Tests.ps1
T

287 lines
10 KiB
PowerShell

[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingConvertToSecureStringWithPlainText', '')]
param ()
$errorActionPreference = 'Stop'
Set-StrictMode -Version 'Latest'
if ($PSVersionTable.PSVersion -lt [Version] '5.1')
{
Write-Warning -Message 'Cannot run PSDscResources integration tests on PowerShell versions lower than 5.1'
return
}
$script:testFolderPath = Split-Path -Path $PSScriptRoot -Parent
$script:testHelpersPath = Join-Path -Path $script:testFolderPath -ChildPath 'TestHelpers'
Import-Module -Name (Join-Path -Path $script:testHelpersPath -ChildPath 'CommonTestHelper.psm1')
$script:testEnvironment = Enter-DscResourceTestEnvironment `
-DscResourceModuleName 'PSDscResources' `
-DscResourceName 'MSFT_GroupResource' `
-TestType 'Integration'
try
{
Describe 'Group Integration Tests' {
BeforeAll {
Import-Module -Name (Join-Path -Path $script:testHelpersPath `
-ChildPath 'MSFT_GroupResource.TestHelper.psm1')
$script:confgurationNoMembersFilePath = Join-Path -Path $PSScriptRoot -ChildPath 'MSFT_GroupResource_NoMembers.config.ps1'
$script:confgurationWithMembersFilePath = Join-Path -Path $PSScriptRoot -ChildPath 'MSFT_GroupResource_Members.config.ps1'
$script:confgurationWithMembersToIncludeExcludeFilePath = Join-Path -Path $PSScriptRoot -ChildPath 'MSFT_GroupResource_MembersToIncludeExclude.config.ps1'
# Fake users for testing
$testUsername1 = 'TestUser1'
$testUsername2 = 'TestUser2'
$testUsernames = @( $testUsername1, $testUsername2 )
$testPassword = 'T3stPassw0rd#'
$secureTestPassword = ConvertTo-SecureString -String $testPassword -AsPlainText -Force
foreach ($username in $testUsernames)
{
$testUserCredential = New-Object -TypeName 'System.Management.Automation.PSCredential' -ArgumentList @( $username, $secureTestPassword )
$null = New-User -Credential $testUserCredential
}
}
AfterAll {
foreach ($username in $testUsernames)
{
Remove-User -UserName $username
}
}
It 'Should use Group from PSDscResources' {
$groupResource = Get-DscResource -Name 'Group'
$groupResource | Should -Not -Be $null
if ($groupResource.Count -gt 1)
{
$sortedGroupResrources = $groupResource | Sort-Object -Property 'Version' -Descending
$groupResource = $sortedGroupResrources | Select-Object -First 1
}
$groupResource.ModuleName | Should -Be 'PSDscResources'
}
It 'Should create an empty group' {
$configurationName = 'CreateEmptyGroup'
$testGroupName = 'TestEmptyGroup1'
$resourceParameters = @{
Ensure = 'Present'
GroupName = $testGroupName
}
Test-GroupExists -GroupName $testGroupName | Should -BeFalse
try
{
{
. $script:confgurationWithMembersFilePath -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @resourceParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should -Not -Throw
Test-GroupExists -GroupName $testGroupName -Members @() | Should -BeTrue
}
finally
{
if (Test-GroupExists -GroupName $testGroupName)
{
Remove-Group -GroupName $testGroupName
}
}
}
It 'Should not change the state of the present built-in Users group when no Members specified' {
$configurationName = 'BuiltInGroup'
$testGroupName = 'Users'
$resourceParameters = @{
Ensure = 'Present'
GroupName = $testGroupName
}
Test-GroupExists -GroupName $testGroupName | Should -BeTrue
{
. $script:confgurationNoMembersFilePath -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @resourceParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should -Not -Throw
Test-GroupExists -GroupName $testGroupName | Should -BeTrue
}
It 'Should add a member to the built-in Users group with MembersToInclude' {
$configurationName = 'BuiltInGroup'
$testGroupName = 'Users'
$resourceParameters = @{
Ensure = 'Present'
GroupName = $testGroupName
MembersToInclude = $testUsername1
}
Test-GroupExists -GroupName $testGroupName | Should -BeTrue
{
. $script:confgurationWithMembersToIncludeExcludeFilePath -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @resourceParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should -Not -Throw
Test-GroupExists -GroupName $testGroupName -MembersToInclude $testUsername1 | Should -BeTrue
}
It 'Should create a group with two test users using Members' {
$configurationName = 'CreateGroupWithTwoMembers'
$testGroupName = 'TestGroupWithMembers2'
$groupMembers = $testUsernames
$resourceParameters = @{
Ensure = 'Present'
GroupName = $testGroupName
Members = $groupMembers
}
Test-GroupExists -GroupName $testGroupName | Should -BeFalse
try
{
{
. $script:confgurationWithMembersFilePath -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @resourceParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should -Not -Throw
Test-GroupExists -GroupName $testGroupName -Members $groupMembers | Should -BeTrue
}
finally
{
if (Test-GroupExists -GroupName $testGroupName)
{
Remove-Group -GroupName $testGroupName
}
}
}
It 'Should add a member to a group with MembersToInclude' {
$configurationName = 'CreateGroupWithTwoMembers'
$testGroupName = 'TestGroupWithMembersToInclude3'
$groupMembers = @( $testUsername1 )
$resourceParameters = @{
Ensure = 'Present'
GroupName = $testGroupName
MembersToInclude = $groupMembers
}
Test-GroupExists -GroupName $testGroupName | Should -BeFalse
New-Group -GroupName $testGroupName
Test-GroupExists -GroupName $testGroupName | Should -BeTrue
try
{
{
. $script:confgurationWithMembersToIncludeExcludeFilePath -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @resourceParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should -Not -Throw
Test-GroupExists -GroupName $testGroupName -MembersToInclude $groupMembers | Should -BeTrue
}
finally
{
if (Test-GroupExists -GroupName $testGroupName)
{
Remove-Group -GroupName $testGroupName
}
}
}
It 'Should remove a member from a group with MembersToExclude' {
$configurationName = 'CreateGroupWithTwoMembers'
$testGroupName = 'TestGroupWithMembersToInclude3'
$groupMembersToExclude = @( $testUsername1 )
$resourceParameters = @{
Ensure = 'Present'
GroupName = $testGroupName
MembersToExclude = $groupMembersToExclude
}
Test-GroupExists -GroupName $testGroupName | Should -BeFalse
New-Group -GroupName $testGroupName -Members $groupMembersToExclude
Test-GroupExists -GroupName $testGroupName | Should -BeTrue
try
{
{
. $script:confgurationWithMembersToIncludeExcludeFilePath -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @resourceParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should -Not -Throw
Test-GroupExists -GroupName $testGroupName -MembersToExclude $groupMembersToExclude | Should -BeTrue
}
finally
{
if (Test-GroupExists -GroupName $testGroupName)
{
Remove-Group -GroupName $testGroupName
}
}
}
It 'Should remove a group' {
$configurationName = 'RemoveGroup'
$testGroupName = 'TestRemoveGroup1'
$resourceParameters = @{
Ensure = 'Absent'
GroupName = $testGroupName
}
Test-GroupExists -GroupName $testGroupName | Should -BeFalse
New-Group -GroupName $testGroupName
Test-GroupExists -GroupName $testGroupName | Should -BeTrue
try
{
{
. $script:confgurationWithMembersFilePath -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @resourceParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should -Not -Throw
Test-GroupExists -GroupName $testGroupName | Should -BeFalse
}
finally
{
if (Test-GroupExists -GroupName $testGroupName)
{
Remove-Group -GroupName $testGroupName
}
}
}
}
}
finally
{
Exit-DscResourceTestEnvironment -TestEnvironment $script:testEnvironment
}