Tests/Integration/MSFT_xExchTransportService.Integration.Tests.ps1

<#
    .SYNOPSIS
        Automated integration test for MSFT_xExchTransportService DSC Resource.
        This test module requires use of credentials.
        The first run through of the tests will prompt for credentials from the logged on user.
#>


#region HEADER
[System.String]$script:moduleRoot = Split-Path -Parent (Split-Path -Parent $PSScriptRoot)
[System.String]$script:DSCModuleName = 'xExchange'
[System.String]$script:DSCResourceFriendlyName = 'xExchTransportService'
[System.String]$script:DSCResourceName = "MSFT_$($script:DSCResourceFriendlyName)"

Import-Module -Name (Join-Path -Path $script:moduleRoot -ChildPath (Join-Path -Path 'Tests' -ChildPath (Join-Path -Path 'TestHelpers' -ChildPath 'xExchangeTestHelper.psm1'))) -Force
Import-Module -Name (Join-Path -Path $script:moduleRoot -ChildPath (Join-Path -Path 'Modules' -ChildPath 'xExchangeHelper.psm1')) -Force
Import-Module -Name (Join-Path -Path $script:moduleRoot -ChildPath (Join-Path -Path 'DSCResources' -ChildPath (Join-Path -Path "$($script:DSCResourceName)" -ChildPath "$($script:DSCResourceName).psm1")))

#Check if Exchange is installed on this machine. If not, we can't run tests
[System.Boolean]$exchangeInstalled = IsSetupComplete

#endregion HEADER

if ($exchangeInstalled)
{
    #Get required credentials to use for the test
    if ($null -eq $Global:ShellCredentials)
    {
        [PSCredential]$Global:ShellCredentials = Get-Credential -Message 'Enter credentials for connecting a Remote PowerShell session to Exchange'
    }

    Describe 'Set and modify Transport Service configuration' {
    #Set configuration with default values
    $testParams = @{
         Identity                                = $env:computername
         Credential                              = $Global:ShellCredentials
         AllowServiceRestart                     = $true
         ActiveUserStatisticsLogMaxAge           = '30.00:00:00'
         ActiveUserStatisticsLogMaxDirectorySize = '250MB'
         ActiveUserStatisticsLogMaxFileSize      = '10MB'
         ActiveUserStatisticsLogPath             = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\ActiveUsersStats'
         AgentLogEnabled                         = $true
         AgentLogMaxAge                          = '7.00:00:00'
         AgentLogMaxDirectorySize                = '250MB'
         AgentLogMaxFileSize                     = '10MB'
         AgentLogPath                            = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\AgentLog'
         ConnectivityLogEnabled                  = $true
         ConnectivityLogMaxAge                   = '30.00:00:00'
         ConnectivityLogMaxDirectorySize         = '1000MB'
         ConnectivityLogMaxFileSize              = '10MB'
         ConnectivityLogPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\Connectivity'
         ContentConversionTracingEnabled         = $false
         DelayNotificationTimeout                = '04:00:00'
         DnsLogEnabled                           = $false
         DnsLogMaxAge                            = '7.00:00:00'
         DnsLogMaxDirectorySize                  = '100 MB'
         DnsLogMaxFileSize                       = '10 MB'
         DnsLogPath                              = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\DNS'
         ExternalDNSAdapterEnabled               = $true
         ExternalDNSAdapterGuid                  = '00000000-0000-0000-0000-000000000000'
         ExternalDNSProtocolOption               = 'any'
         ExternalDNSServers                      = ''
         ExternalIPAddress                       = ''
         InternalDNSAdapterEnabled               = $true          
         InternalDNSAdapterGuid                  = '00000000-0000-0000-0000-000000000000'
         InternalDNSProtocolOption               = 'any'
         InternalDNSServers                      = ''
         IntraOrgConnectorProtocolLoggingLevel   = 'none'
         IntraOrgConnectorSmtpMaxMessagesPerConnection = '20'
         IrmLogEnabled                           = $true
         IrmLogMaxAge                            = '30.00:00:00'
         IrmLogMaxDirectorySize                  = '250MB'
         IrmLogMaxFileSize                       = '10MB'
         IrmLogPath                              = 'C:\Program Files\Microsoft\Exchange Server\V15\Logging\IRMLogs'
         MaxConcurrentMailboxDeliveries          = '20'
         MaxConcurrentMailboxSubmissions         = '20'
         MaxConnectionRatePerMinute              = '1200'
         MaxOutboundConnections                  = '1000'
         MaxPerDomainOutboundConnections         = '20'
         MessageExpirationTimeout                = '2.00:00:00'
         MessageRetryInterval                    = '00:15:00'
         MessageTrackingLogEnabled               = $true
         MessageTrackingLogMaxAge                = '30.00:00:00'
         MessageTrackingLogMaxDirectorySize      = '1000MB'
         MessageTrackingLogMaxFileSize           = '10 MB'
         MessageTrackingLogPath                  = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\MessageTracking'
         MessageTrackingLogSubjectLoggingEnabled = $true
         OutboundConnectionFailureRetryInterval  = '00:10:00'
         PickupDirectoryMaxHeaderSize            = '64 KB'
         PickupDirectoryMaxMessagesPerMinute     = '100'
         PickupDirectoryMaxRecipientsPerMessage  = '100'
         PickupDirectoryPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Pickup'
         PipelineTracingEnabled                  = $false
         PipelineTracingPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\PipelineTracing'
         PipelineTracingSenderAddress            = ''
         PoisonMessageDetectionEnabled           = $true
         PoisonThreshold                         = '2'
         QueueLogMaxAge                          = '7.00:00:00'
         QueueLogMaxDirectorySize                = '200MB'
         QueueLogMaxFileSize                     = '10MB'
         QueueLogPath                            = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\QueueViewer'
         QueueMaxIdleTime                        = '00:03:00'
         ReceiveProtocolLogMaxAge                = '30.00:00:00'
         ReceiveProtocolLogMaxDirectorySize      = '250MB'
         ReceiveProtocolLogMaxFileSize           = '10 MB'
         ReceiveProtocolLogPath                  = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\ProtocolLog\SmtpReceive'
         RecipientValidationCacheEnabled         = $false
         ReplayDirectoryPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Replay'
         RootDropDirectoryPath                   = ''
         RoutingTableLogMaxAge                   = '7.00:00:00'
         RoutingTableLogMaxDirectorySize         = '50 MB'
         RoutingTableLogPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\Routing'
         SendProtocolLogMaxAge                   = '30.00:00:00'
         SendProtocolLogMaxDirectorySize         = '250MB'
         SendProtocolLogMaxFileSize              = '10MB'
         SendProtocolLogPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\ProtocolLog\SmtpSend'
         ServerStatisticsLogMaxAge               = '30.00:00:00'
         ServerStatisticsLogMaxDirectorySize     = '250MB'
         ServerStatisticsLogMaxFileSize          = '10 MB'
         ServerStatisticsLogPath                 = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\ServerStats'
         TransientFailureRetryCount              = '6'
         TransientFailureRetryInterval           = '00:05:00'
         UseDowngradedExchangeServerAuth         = $false
    }

    $expectedGetResults = @{
         ActiveUserStatisticsLogMaxAge           = '30.00:00:00'
         ActiveUserStatisticsLogMaxDirectorySize = '250MB'
         ActiveUserStatisticsLogMaxFileSize      = '10MB'
         ActiveUserStatisticsLogPath             = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\ActiveUsersStats'
         AgentLogEnabled                         = $true
         AgentLogMaxAge                          = '7.00:00:00'
         AgentLogMaxDirectorySize                = '250MB'
         AgentLogMaxFileSize                     = '10MB'
         AgentLogPath                            = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\AgentLog'
         ConnectivityLogEnabled                  = $true
         ConnectivityLogMaxAge                   = '30.00:00:00'
         ConnectivityLogMaxDirectorySize         = '1000MB'
         ConnectivityLogMaxFileSize              = '10MB'
         ConnectivityLogPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\Connectivity'
         ContentConversionTracingEnabled         = $false
         DelayNotificationTimeout                = '04:00:00'
         DnsLogEnabled                           = $false
         DnsLogMaxAge                            = '7.00:00:00'
         DnsLogMaxDirectorySize                  = '100 MB'
         DnsLogMaxFileSize                       = '10 MB'
         DnsLogPath                              = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\DNS'
         ExternalDNSAdapterEnabled               = $true
         ExternalDNSAdapterGuid                  = '00000000-0000-0000-0000-000000000000'
         ExternalDNSProtocolOption               = 'any'
         ExternalDNSServers                      = $null
         ExternalIPAddress                       = $null
         InternalDNSAdapterEnabled               = $true          
         InternalDNSAdapterGuid                  = '00000000-0000-0000-0000-000000000000'
         InternalDNSProtocolOption               = 'any'
         InternalDNSServers                      = $null
         IntraOrgConnectorProtocolLoggingLevel   = 'none'
         IntraOrgConnectorSmtpMaxMessagesPerConnection = '20'
         IrmLogEnabled                           = $true
         IrmLogMaxAge                            = '30.00:00:00'
         IrmLogMaxDirectorySize                  = '250MB'
         IrmLogMaxFileSize                       = '10MB'
         IrmLogPath                              = 'C:\Program Files\Microsoft\Exchange Server\V15\Logging\IRMLogs'
         MaxConcurrentMailboxDeliveries          = '20'
         MaxConcurrentMailboxSubmissions         = '20'
         MaxConnectionRatePerMinute              = '1200'
         MaxOutboundConnections                  = '1000'
         MaxPerDomainOutboundConnections         = '20'
         MessageExpirationTimeout                = '2.00:00:00'
         MessageRetryInterval                    = '00:15:00'
         MessageTrackingLogEnabled               = $true
         MessageTrackingLogMaxAge                = '30.00:00:00'
         MessageTrackingLogMaxDirectorySize      = '1000MB'
         MessageTrackingLogMaxFileSize           = '10 MB'
         MessageTrackingLogPath                  = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\MessageTracking'
         MessageTrackingLogSubjectLoggingEnabled = $true
         OutboundConnectionFailureRetryInterval  = '00:10:00'
         PickupDirectoryMaxHeaderSize            = '64 KB'
         PickupDirectoryMaxMessagesPerMinute     = '100'
         PickupDirectoryMaxRecipientsPerMessage  = '100'
         PickupDirectoryPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Pickup'
         PipelineTracingEnabled                  = $false
         PipelineTracingPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\PipelineTracing'
         PipelineTracingSenderAddress            = $null
         PoisonMessageDetectionEnabled           = $true
         PoisonThreshold                         = '2'
         QueueLogMaxAge                          = '7.00:00:00'
         QueueLogMaxDirectorySize                = '200MB'
         QueueLogMaxFileSize                     = '10MB'
         QueueLogPath                            = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\QueueViewer'
         QueueMaxIdleTime                        = '00:03:00'
         ReceiveProtocolLogMaxAge                = '30.00:00:00'
         ReceiveProtocolLogMaxDirectorySize      = '250MB'
         ReceiveProtocolLogMaxFileSize           = '10 MB'
         ReceiveProtocolLogPath                  = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\ProtocolLog\SmtpReceive'
         RecipientValidationCacheEnabled         = $false
         ReplayDirectoryPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Replay'
         RootDropDirectoryPath                   = ''
         RoutingTableLogMaxAge                   = '7.00:00:00'
         RoutingTableLogMaxDirectorySize         = '50 MB'
         RoutingTableLogPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\Routing'
         SendProtocolLogMaxAge                   = '30.00:00:00'
         SendProtocolLogMaxDirectorySize         = '250 MB'
         SendProtocolLogMaxFileSize              = '10MB'
         SendProtocolLogPath                     = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\ProtocolLog\SmtpSend'
         ServerStatisticsLogMaxAge               = '30.00:00:00'
         ServerStatisticsLogMaxDirectorySize     = '250MB'
         ServerStatisticsLogMaxFileSize          = '10 MB'
         ServerStatisticsLogPath                 = 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Hub\ServerStats'
         TransientFailureRetryCount              = '6'
         TransientFailureRetryInterval           = '00:05:00'
         UseDowngradedExchangeServerAuth         = $false
    }

     Test-TargetResourceFunctionality -Params $testParams -ContextLabel 'Set default Transport Service configuration' -ExpectedGetResults $expectedGetResults
     
     #modify configuration
     $testParams.InternalDNSServers = '192.168.1.10'
     $testParams.ExternalDNSServers = '10.1.1.10'
     $testParams.PipelineTracingSenderAddress = 'john.doe@contoso.com'
     
     $expectedGetResults.InternalDNSServers = '192.168.1.10'
     $expectedGetResults.ExternalDNSServers = '10.1.1.10'
     $expectedGetResults.PipelineTracingSenderAddress = 'john.doe@contoso.com'

     Test-TargetResourceFunctionality -Params $testParams -ContextLabel 'Modify Transport Service configuration' -ExpectedGetResults $expectedGetResults
     
     #modify configuration
     $testParams.InternalDNSServers = ''
     $testParams.ExternalDNSServers = ''
     $testParams.PipelineTracingSenderAddress = ''
     
     $expectedGetResults.InternalDNSServers = $null
     $expectedGetResults.ExternalDNSServers = $null
     $expectedGetResults.PipelineTracingSenderAddress = $null
     
     Test-TargetResourceFunctionality -Params $testParams -ContextLabel 'Revert Transport Service configuration' -ExpectedGetResults $expectedGetResults
     }
}
else
{
    Write-Verbose -Message 'Tests in this file require that Exchange is installed to be run.'
}