Tests/xWinRM.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
#requires -Version 1.0
Import-Module -Name .\DSCResources\xWinRM\xWinRM.psm1

$WarningPreference = 'silentlycontinue'

$Global:DSCModuleName      = 'xWinRM'
$Global:DSCResourceName    = 'xWinRM'

InModuleScope -ModuleName xWinRM -ScriptBlock {
  $returnValue = @{
    Service_Basic              = 'false'
    Client_Basic               = 'false'
    Client_Digest              = 'false'
    Service_Kerberos           = 'false'
    Client_Kerberos            = 'false'
    Service_Negotiate          = 'false'
    Client_Negotiate           = 'false'
    Service_Certificate        = 'true'
    Client_Certificate         = 'false'
    Service_CredSSP            = 'true'
    Client_CredSSP             = 'true'
    Service_AllowUnencrypted   = 'true'
    Client_AllowUnencrypted    = 'true'
    HttpPort                   = 5985
    HttpsPort                  = 5986
    MaxEnvelopeSizekb          = 500
    MaxTimeoutms               = 60000
    MaxBatchItems              = 32000
    MaxProviderRequests        = 4294967295
    MaxMemoryPerShellMB        = 1024
    CurrentHTTPSCertThumpprint = $null
  }

  Describe -Name "Testing if $($Global:DSCResourceName)\Get-TargetResource and $($Global:DSCResourceName)\Test-TargetResource return correct objects" -Fixture {
    It -name 'Get-TargetResource returns a hashtable' -test {
      Get-TargetResource -Protocol HTTP -Ensure Present | Should Be 'System.Collections.Hashtable'
    }

    It -name 'Test-TargetResource returns true or false' -test {
      (Test-TargetResource -Protocol HTTP -Ensure Present).GetType() -as [string] | Should Be 'bool'
    }
  }
  Describe -Name "$($Global:DSCResourceName)\Set-TargetResource" -Fixture {
    Context -Name "Testing $($Global:DSCResourceName)\Set-TargetResource logic for ensure = present" -Fixture {   
      It -name 'Configuring WinRM HTTP listener' -test {
        Set-TargetResource -Protocol HTTP -Ensure Present -HttpPort 6000 -Service_AllowUnencrypted false
      }
      It -name 'Configuring WinRM HTTPS listener' -test {
        Set-TargetResource -Protocol HTTPS -Ensure Present -Service_AllowUnencrypted false -HttpsPort 6005
      }
    }
    Context -Name "Testing $($Global:DSCResourceName)\Set-TargetResource results" -Fixture {   
      It -name 'WinRM HTTP listener port should be 6000' -test {
        (Get-TargetResource -Protocol HTTP -Ensure Present).HttpPort| Should be 6000
      }
      It -name 'WinRM HTTPS listener port should be 6005' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).HttpsPort| Should be 6005
      }
      It -name 'WinRM service Basic auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Service_Basic | Should be 'true'
      }
      It -name 'WinRM client Basic auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Client_Basic| Should be 'true'
      }
      It -name 'WinRM service Kerberos auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Service_Basic | Should be 'true'
      }
      It -name 'WinRM client Kerberos auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Client_Kerberos | Should be 'true'
      }
      It -name 'WinRM service Kerberos auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Service_Kerberos | Should be 'true'
      }
      It -name 'WinRM client Negotiate auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Client_Negotiate | Should be 'true'
      }
      It -name 'WinRM service Negotiate auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Service_Negotiate  | Should be 'true'
      }
      It -name 'WinRM client basic auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Client_Basic| Should be 'true'
      }
      It -name 'WinRM service Certificate auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Service_Certificate | Should be 'false'
      }
      It -name 'WinRM client Certificate auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Client_Certificate | Should be 'true'
      }
      It -name 'WinRM service CredSSP auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Service_CredSSP | Should be 'false'
      }
      It -name 'WinRM client CredSSP auth should be true' -test {
        (Get-TargetResource -Protocol HTTPS -Ensure Present).Client_CredSSP | Should be 'false'
      }
    }
    Context -Name "Testing $($Global:DSCResourceName)\Test-TargetResource results" -Fixture {   
      It -name 'Test-TargetResource returns true' -test {
        Test-TargetResource -Protocol HTTP -Ensure Present -Service_AllowUnencrypted false -HttpPort 6000 | Should Be $true
      }
      It -name 'Test-TargetResource returns true' -test {
        Test-TargetResource -Protocol HTTPS -Ensure Present -Service_AllowUnencrypted false -HttpsPort 6005 | Should Be $true
      }
    }
    Context -Name "Testing $($Global:DSCResourceName)\Set-TargetResource logic for ensure = absent" -Fixture {   
      It -name 'Configuring WinRM HTTP listener' -test {
        Set-TargetResource -Protocol HTTP -Ensure Absent -HttpPort 6000 -Service_AllowUnencrypted false
      }
      It -name 'Configuring WinRM HTTPS listener' -test {
        Set-TargetResource -Protocol HTTPS -Ensure Absent -Service_AllowUnencrypted false -HttpsPort 6005
      }
    }
    Context -Name "Testing $($Global:DSCResourceName)\Test-TargetResource results" -Fixture {   
      It -name 'Test-TargetResource returns true' -test {
        Test-TargetResource -Protocol HTTP -Ensure Absent -Service_AllowUnencrypted false -HttpPort 6000 | Should Be $true
      }
      It -name 'Test-TargetResource returns true' -test {
        Test-TargetResource -Protocol HTTPS -Ensure Absent -Service_AllowUnencrypted false -HttpsPort 6005 | Should Be $true
      }
    }
  }
  Describe -Name "$($Global:DSCResourceName)\Test-TargetResource" -Fixture {
    Mock -CommandName Get-TargetResource -MockWith {
      $returnValue
    }
    It -name 'Test-TargetResource returns false' -test {
      Test-TargetResource -Protocol HTTP -Ensure Present -Service_AllowUnencrypted false -HttpPort 6000 | Should Be $false
    }
    It -name 'Test-TargetResource returns false' -test {
      Test-TargetResource -Protocol HTTPS -Ensure Present -Service_AllowUnencrypted false -HttpsPort 6005 | Should Be $false
    }
    It -name 'Test-TargetResource returns true' -test {
      Test-TargetResource -Protocol HTTP -Ensure Absent -Service_AllowUnencrypted false -HttpPort 6000 | Should Be $true
    }
    It -name 'Test-TargetResource returns true' -test {
      Test-TargetResource -Protocol HTTPS -Ensure Absent -Service_AllowUnencrypted false -HttpsPort 6005 | Should Be $true
    }
  }
}