Tests/Integration/MSFT_ScriptResource.Integration.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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
$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 } Describe 'Script Integration Tests' { BeforeAll { # Import CommonTestHelper for Enter-DscResourceTestEnvironment, Exit-DscResourceTestEnvironment $script:moduleRootPath = Split-Path -Path (Split-Path -Path $PSScriptRoot -Parent) -Parent $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_ScriptResource' ` -TestType 'Integration' # Import Script module for Get-TargetResource, Test-TargetResource $dscResourcesFolderFilePath = Join-Path -Path $script:moduleRootPath -ChildPath 'DscResources' $scriptResourceFolderFilePath = Join-Path -Path $dscResourcesFolderFilePath -ChildPath 'MSFT_ScriptResource' $scriptResourceModuleFilePath = Join-Path -Path $scriptResourceFolderFilePath -ChildPath 'MSFT_ScriptResource.psm1' Import-Module -Name $scriptResourceModuleFilePath $script:configurationNoCredentialFilePath = Join-Path -Path $PSScriptRoot -ChildPath 'MSFT_ScriptResource_NoCredential.config.ps1' $script:configurationWithCredentialFilePath = Join-Path -Path $PSScriptRoot -ChildPath 'MSFT_ScriptResource_WithCredential.config.ps1' # Cannot use $TestDrive here because script is run outside of Pester $script:testFilePath = Join-Path -Path $env:SystemDrive -ChildPath 'TestFile.txt' if (Test-Path -Path $script:testFilePath) { $null = Remove-Item -Path $script:testFilePath -Force } } AfterAll { if (Test-Path -Path $script:testFilePath) { $null = Remove-Item -Path $script:testFilePath -Force } $null = Exit-DscResourceTestEnvironment -TestEnvironment $script:testEnvironment } Context 'Get, set, and test scripts specified and Credential not specified' { if (Test-Path -Path $script:testFilePath) { $null = Remove-Item -Path $script:testFilePath -Force } $configurationName = 'TestScriptNoCredential' # Cannot use $TestDrive here because script is run outside of Pester $resourceParameters = @{ FilePath = $script:testFilePath FileContent = 'Test file content' } It 'Should have removed test file before the configuration' { Test-Path -Path $resourceParameters.FilePath | Should -BeFalse } It 'Should compile and apply the MOF without throwing' { { . $script:configurationNoCredentialFilePath -ConfigurationName $configurationName & $configurationName -OutputPath $TestDrive @resourceParameters Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force } | Should Not Throw } It 'Should have created the test file' { Test-Path -Path $resourceParameters.FilePath | Should -BeTrue } It 'Should have set file content correctly' { Get-Content -Path $resourceParameters.FilePath -Raw | Should Be "$($resourceParameters.FileContent)`r`n" } } if ($env:appVeyor) { Context 'Get, set, and test scripts specified and Credential specified' { if (Test-Path -Path $script:testFilePath) { Remove-Item -Path $script:testFilePath -Force } $configurationName = 'TestScriptWithCredential' # Cannot use $TestDrive here because script is run outside of Pester $resourceParameters = @{ FilePath = $script:testFilePath FileContent = 'Test file content' Credential = Get-AppVeyorAdministratorCredential } It 'Should have removed test file before config runs' { Test-Path -Path $resourceParameters.FilePath | Should -BeFalse } $configData = @{ AllNodes = @( @{ NodeName = 'localhost' PSDscAllowPlainTextPassword = $true PSDscAllowDomainUser = $true } ) } It 'Should compile and apply the MOF without throwing' { { . $script:configurationWithCredentialFilePath -ConfigurationName $configurationName & $configurationName -OutputPath $TestDrive -ConfigurationData $configData @resourceParameters Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force } | Should -Not -Throw } It 'Should have created the test file' { Test-Path -Path $resourceParameters.FilePath | Should -BeTrue } It 'Should have set file content correctly' { Get-Content -Path $resourceParameters.FilePath -Raw | Should -Be "$($resourceParameters.FileContent)`r`n" } } } } |