Tests/Integration/MSFT_xExchReceiveConnector.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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<#
    .SYNOPSIS
        Automated integration test for MSFT_xExchReceiveConnector 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 = 'xExchReceiveConnector'
[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 = Get-IsSetupComplete

#endregion HEADER

if ($exchangeInstalled)
{
    #Get required credentials to use for the test
    $shellCredentials = Get-TestCredential

    Describe 'Set and modify a Receive Connector' {
    #Set configuration with default values

    $extendedRightAllowEntries = $(New-CimInstance -ClassName MSFT_KeyValuePair -Namespace root/microsoft/Windows/DesiredStateConfiguration  -ClientOnly -Property @{
                                        Key = 'NT AUTHORITY\ANONYMOUS LOGON'; `
                                        Value = 'Ms-Exch-SMTP-Accept-Any-Recipient,ms-Exch-Bypass-Anti-Spam'})
    $testParams = @{
         Identity                                = "$($env:computername)\AnonymousRelay $($env:computername)"
         Credential                              = $shellCredentials
         Ensure                                  = 'Present'
         ExtendedRightAllowEntries               = $extendedRightAllowEntries
         AdvertiseClientSettings                 = $false
         AuthMechanism                           = 'Tls', 'ExternalAuthoritative'
         Banner                                  = '220 Pester'
         BareLinefeedRejectionEnabled            = $false
         BinaryMimeEnabled                       = $true
         Bindings                                = '192.168.0.100:25'
         ChunkingEnabled                         = $true
         Comment                                 = 'Connector for relaying'
         ConnectionInactivityTimeout             = '00:05:00'
         ConnectionTimeout                       = '00:10:00'
         DefaultDomain                           = ''
         #DomainController = ''
         DeliveryStatusNotificationEnabled       = $true
         DomainSecureEnabled                     = $false
         EightBitMimeEnabled                     = $true
         EnableAuthGSSAPI                        = $false
         Enabled                                 = $true
         EnhancedStatusCodesEnabled              = $true
         ExtendedProtectionPolicy                = 'none'
         Fqdn                                    = "$($env:computername).pester.com"
         LongAddressesEnabled                    = $false
         MaxAcknowledgementDelay                 = '00:00:00'
         MaxHeaderSize                           = '128KB'
         MaxHopCount                             = '60'
         MaxInboundConnection                    = '5000'
         MaxInboundConnectionPercentagePerSource = '100'
         MaxInboundConnectionPerSource           = '50'
         MaxLocalHopCount                        = '12'
         MaxLogonFailures                        = '3'
         MaxMessageSize                          = '35MB'
         MaxProtocolErrors                       = '5'
         MaxRecipientsPerMessage                 = '5000'
         MessageRateLimit                        = 'Unlimited'
         MessageRateSource                       = 'IPAddress'
         OrarEnabled                             = $false
         PermissionGroups                        = 'AnonymousUsers','ExchangeServers'
         PipeliningEnabled                       = $true
         ProtocolLoggingLevel                    = 'Verbose'
         RemoteIPRanges                          = '192.16.7.99'
         RequireEHLODomain                       = $false
         RequireTLS                              = $false
         ServiceDiscoveryFqdn                    = ''
         SizeEnabled                             = 'EnabledwithoutValue'
         SuppressXAnonymousTls                   = $false
         TarpitInterval                          = '00:00:00'
         TlsCertificateName                      = $null
         TlsDomainCapabilities                   = 'contoso.com:AcceptOorgProtocol'
         TransportRole                           = 'FrontendTransport'
         Usage                                   = 'Custom'
    }

    $expectedGetResults = @{
         ExtendedRightAllowEntries               = $extendedRightAllowEntries
         AdvertiseClientSettings                 = $false
         AuthMechanism                           = 'Tls', 'ExternalAuthoritative'
         Banner                                  = '220 Pester'
         BareLinefeedRejectionEnabled            = $false
         BinaryMimeEnabled                       = $true
         Bindings                                = '192.168.0.100:25'
         ChunkingEnabled                         = $true
         Comment                                 = 'Connector for relaying'
         ConnectionInactivityTimeout             = '00:05:00'
         ConnectionTimeout                       = '00:10:00'
         DefaultDomain                           = ''
         #DomainController = ''
         DeliveryStatusNotificationEnabled       = $true
         DomainSecureEnabled                     = $false
         EightBitMimeEnabled                     = $true
         EnableAuthGSSAPI                        = $false
         Enabled                                 = $true
         EnhancedStatusCodesEnabled              = $true
         ExtendedProtectionPolicy                = 'none'
         Fqdn                                    = "$($env:computername).pester.com"
         LongAddressesEnabled                    = $false
         MaxAcknowledgementDelay                 = '00:00:00'
         MaxHeaderSize                           = '128 KB (131,072 bytes)'
         MaxHopCount                             = '60'
         MaxInboundConnection                    = '5000'
         MaxInboundConnectionPercentagePerSource = '100'
         MaxInboundConnectionPerSource           = '50'
         MaxLocalHopCount                        = '12'
         MaxLogonFailures                        = '3'
         MaxMessageSize                          = '35 MB (36,700,160 bytes)'
         MaxProtocolErrors                       = '5'
         MaxRecipientsPerMessage                 = '5000'
         MessageRateLimit                        = 'Unlimited'
         MessageRateSource                       = 'IPAddress'
         OrarEnabled                             = $false
         PermissionGroups                        = [System.String[]]@('AnonymousUsers','ExchangeServers','Custom')
         PipeliningEnabled                       = $true
         ProtocolLoggingLevel                    = 'Verbose'
         RemoteIPRanges                          = '192.16.7.99'
         RequireEHLODomain                       = $false
         RequireTLS                              = $false
         ServiceDiscoveryFqdn                    = ''
         SizeEnabled                             = 'EnabledwithoutValue'
         SuppressXAnonymousTls                   = $false
         TarpitInterval                          = '00:00:00'
         TlsCertificateName                      = ''
         TlsDomainCapabilities                   = 'contoso.com:AcceptOorgProtocol'
         TransportRole                           = 'FrontendTransport'
    }

     Test-TargetResourceFunctionality -Params $testParams -ContextLabel 'Create Receive Connector' -ExpectedGetResults $expectedGetResults

     #modify configuration
     $extendedRightDenyEntries = $(New-CimInstance -ClassName MSFT_KeyValuePair -Namespace root/microsoft/Windows/DesiredStateConfiguration `
                                            -Property @{Key = 'Domain Users'; Value = 'ms-Exch-Bypass-Anti-Spam'} -ClientOnly)

     $testParams.ExtendedRightDenyEntries = $extendedRightDenyEntries
     $expectedGetResults.ExtendedRightDenyEntries = $extendedRightDenyEntries

     Test-TargetResourceFunctionality -Params $testParams -ContextLabel 'Modify Receive Connector' -ExpectedGetResults $expectedGetResults

     #modify configuration
     $testParams.Ensure = 'Absent'
     $expectedGetResults = $null

     Test-TargetResourceFunctionality -Params $testParams -ContextLabel 'Remove Receive Connector' -ExpectedGetResults $expectedGetResults
     }
}
else
{
    Write-Verbose -Message 'Tests in this file require that Exchange is installed to be run.'
}