Tests/Unit/MSFT_xDnsServerDiagnostics.Tests.ps1
$script:DSCModuleName = 'xDnsServer' $script:DSCResourceName = 'MSFT_xDnsServerDiagnostics' #region HEADER # Unit Test Template Version: 1.1.0 $moduleRoot = Split-Path -Parent (Split-Path -Parent (Split-Path -Parent $Script:MyInvocation.MyCommand.Path)) if ( (-not (Test-Path -Path (Join-Path -Path $moduleRoot -ChildPath 'DSCResource.Tests'))) -or ` (-not (Test-Path -Path (Join-Path -Path $moduleRoot -ChildPath 'DSCResource.Tests\TestHelper.psm1'))) ) { & git @('clone','https://github.com/PowerShell/DscResource.Tests.git',(Join-Path -Path $moduleRoot -ChildPath '\DSCResource.Tests\')) } Import-Module (Join-Path -Path $moduleRoot -ChildPath 'DSCResource.Tests\TestHelper.psm1') -Force $testEnvironment = Initialize-TestEnvironment ` -DSCModuleName $script:DSCModuleName ` -DSCResourceName $script:DSCResourceName ` -TestType Unit #endregion HEADER # Begin Testing try { InModuleScope $script:DSCResourceName { function Get-DnsServerDiagnostics {} function Set-DnsServerDiagnostics {} #region Pester Test Initialization $testParameters = [PSCustomObject]@{ Name = 'xDnsServerDiagnostics_Integration' Answers = $true EnableLogFileRollover = $true EnableLoggingForLocalLookupEvent = $true EnableLoggingForPluginDllEvent = $true EnableLoggingForRecursiveLookupEvent = $true EnableLoggingForRemoteServerEvent = $true EnableLoggingForServerStartStopEvent = $true EnableLoggingForTombstoneEvent = $true EnableLoggingForZoneDataWriteEvent = $true EnableLoggingForZoneLoadingEvent = $true EnableLoggingToFile = $true EventLogLevel = 4 FilterIPAddressList = "192.168.1.1","192.168.1.2" FullPackets = $true LogFilePath = 'C:\Windows\System32\DNS\DNSDiagnostics.log' MaxMBFileSize = 500000000 Notifications = $true Queries = $true QuestionTransactions = $true ReceivePackets = $true SaveLogsToPersistentStorage = $true SendPackets = $true TcpPackets = $true UdpPackets = $true UnmatchedResponse = $true Update = $true UseSystemEventLog = $true WriteThrough = $true } $mockGetDnsServerDiagnostics = [PSCustomObject]@{ Name = 'xDnsServerDiagnostics_Integration' Answers = $true EnableLogFileRollover = $true EnableLoggingForLocalLookupEvent = $true EnableLoggingForPluginDllEvent = $true EnableLoggingForRecursiveLookupEvent = $true EnableLoggingForRemoteServerEvent = $true EnableLoggingForServerStartStopEvent = $true EnableLoggingForTombstoneEvent = $true EnableLoggingForZoneDataWriteEvent = $true EnableLoggingForZoneLoadingEvent = $true EnableLoggingToFile = $true EventLogLevel = 4 FilterIPAddressList = "192.168.1.1","192.168.1.2" FullPackets = $true LogFilePath = 'C:\Windows\System32\DNS\DNSDiagnostics.log' MaxMBFileSize = 500000000 Notifications = $true Queries = $true QuestionTransactions = $true ReceivePackets = $true SaveLogsToPersistentStorage = $true SendPackets = $true TcpPackets = $true UdpPackets = $true UnmatchedResponse = $true Update = $true UseSystemEventLog = $true WriteThrough = $true } $commonParameters += [System.Management.Automation.PSCmdlet]::CommonParameters $commonParameters += [System.Management.Automation.PSCmdlet]::OptionalCommonParameters $mockParameters = @{ Verbose = $true Debug = $true ErrorAction = 'stop' WarningAction = 'Continue' InformationAction = 'Continue' ErrorVariable = 'err' WarningVariable = 'warn' OutVariable = 'out' OutBuffer = 'outbuff' PipelineVariable = 'pipe' InformationVariable = 'info' WhatIf = $true Confirm = $true UseTransaction = $true Name = 'DnsServerDiagnostic' } #endregion Pester Test Initialization #region Example state 1 Describe 'The system is not in the desired state' { Context 'Get-TargetResource' { It "Get method returns 'something'" { Mock Get-DnsServerDiagnostics -MockWith {$mockGetDnsServerDiagnostics} Mock Assert-Module $getResult = Get-TargetResource -Name 'DnsServerDiagnostic' foreach ($key in $getResult.Keys) { if ($null -ne $getResult[$key] -and $key -ne 'Name') { $getResult[$key] | Should be $mockGetDnsServerDiagnostics.$key } } } It 'Get throws when DnsServerDiagnostics is not found' { Mock Get-DnsServerDiagnostics -MockWith {throw 'Invalid Class'} {Get-TargetResource -Name 'DnsServerDiagnostics'} | should throw 'Invalid Class' } } Context 'Test-TargetResource' { $falseParameters = @{Name = 'DnsServerDiagnostic'} foreach ($key in $testParameters.Keys) { if ($key -ne 'Name') { $falseTestParameters = $falseParameters.Clone() $falseTestParameters.Add($key,$testParameters[$key]) It "Test method returns false when testing $key" { Mock Get-TargetResource -MockWith {$mockGetDnsServerDiagnostics} Test-TargetResource @falseTestParameters | Should be $false } } } } Context 'Error handling' { It 'Test throws when DnsServerDiagnostics is not found' { Mock Get-DnsServerDiagnostics -MockWith {throw 'Invalid Class'} {Get-TargetResource -Name 'xDnsServerSetting_Integration'} | should throw 'Invalid Class' } } Context 'Set-TargetResource' { It 'Set method calls Set-CimInstance' { Mock Get-DnsServerDiagnostics -MockWith {$mockGetDnsServerDiagnostics} Mock Set-DnsServerDiagnostics {} Set-TargetResource @testParameters Assert-MockCalled Set-DnsServerDiagnostics -Exactly 1 } } } #endregion Example state 1 #region Example state 2 Describe 'The system is in the desired state' { Context 'Test-TargetResource' { Mock Get-TargetResource -MockWith { $mockGetDnsServerDiagnostics } $trueParameters = @{ Name = 'xDnsServerDiagnostics_Integration' } foreach ($key in $testParameters.Keys) { if ($key -ne 'Name') { $trueTestParameters = $trueParameters.Clone() $trueTestParameters.Add($key,$mockGetDnsServerDiagnostics.$key) It "Test method returns true when testing $key" { $result = Test-TargetResource @trueTestParameters $result | Should be $true } } } } } #endregion Example state 2 #region Non-Exported Function Unit Tests Describe 'Private functions' { Context 'Remove-CommonParameters' { It 'Should not contain any common parameters' { $removeResults = Remove-CommonParameter $mockParameters foreach ($key in $removeResults.Keys) { $commonParameters -notcontains $key | should be $true } } } } #endregion Non-Exported Function Unit Tests } } finally { #region FOOTER Restore-TestEnvironment -TestEnvironment $testEnvironment #endregion } |