diff --git a/Modules/VMware.vSphere.SsoAdmin/VMware.vSphere.SsoAdmin.psm1 b/Modules/VMware.vSphere.SsoAdmin/VMware.vSphere.SsoAdmin.psm1 index f2d89f6..92e4915 100644 --- a/Modules/VMware.vSphere.SsoAdmin/VMware.vSphere.SsoAdmin.psm1 +++ b/Modules/VMware.vSphere.SsoAdmin/VMware.vSphere.SsoAdmin.psm1 @@ -147,7 +147,7 @@ function Connect-SsoAdminServer { } function Disconnect-SsoAdminServer { -<# + <# .NOTES =========================================================================== Created on: 9/29/2020 @@ -167,18 +167,31 @@ function Disconnect-SsoAdminServer { Disconnect a SSO Admin connection stored in 'mySsoAdminConnection' varaible #> -[CmdletBinding()] - param( - [Parameter( - Mandatory=$true, - ValueFromPipeline=$true, - ValueFromPipelineByPropertyName=$false, - HelpMessage='SsoAdminServer object')] - [ValidateNotNull()] - [VMware.vSphere.SsoAdminClient.DataTypes.SsoAdminServer] - $Server) + [CmdletBinding()] + param( + [Parameter( + ValueFromPipeline = $true, + ValueFromPipelineByPropertyName = $false, + HelpMessage = 'SsoAdminServer object')] + [ValidateNotNull()] + [VMware.vSphere.SsoAdminClient.DataTypes.SsoAdminServer] + $Server + ) Process { + if (-not $PSBoundParameters['Server']) { + switch (@($global:DefaultSsoAdminServers).count) { + { $_ -eq 1 } { $server = ($global:DefaultSsoAdminServers).ToArray()[0] ; break } + { $_ -gt 1 } { + Throw 'Connected to more than 1 SSO server, please specify a SSO server via -Server parameter' + break + } + Default { + Throw 'Not connected to SSO server.' + } + } + } + if ($global:DefaultSsoAdminServers.Contains($Server)) { $global:DefaultSsoAdminServers.Remove($Server) | Out-Null } diff --git a/Modules/VMware.vSphere.SsoAdmin/src/test/ConnectDisconnect.Tests.ps1 b/Modules/VMware.vSphere.SsoAdmin/src/test/ConnectDisconnect.Tests.ps1 index fee3610..53ef770 100644 --- a/Modules/VMware.vSphere.SsoAdmin/src/test/ConnectDisconnect.Tests.ps1 +++ b/Modules/VMware.vSphere.SsoAdmin/src/test/ConnectDisconnect.Tests.ps1 @@ -84,6 +84,63 @@ Describe "Connect-SsoAdminServer and Disconnect-SsoAdminServer Tests" { $expected.IsConnected | Should Be $false } + It 'Diconnect-SsoAdminServer disconnects the currently connected SSO in case there is 1 SSO server' { + # Arrange + $expected = Connect-SsoAdminServer ` + -Server $VcAddress ` + -User $User ` + -Password $Password ` + -SkipCertificateCheck + + # Act + Disconnect-SsoAdminServer -server $expected + + # Assert + $global:DefaultSsoAdminServers | Should Not Contain $expected + $expected.IsConnected | Should Be $false + } + + It 'Diconnect-SsoAdminServer does not disconnect if connected to more than 1 SSO server' { + # Arrange + $expected += @(Connect-SsoAdminServer ` + -Server $VcAddress ` + -User $User ` + -Password $Password ` + -SkipCertificateCheck) + $expected += @(Connect-SsoAdminServer ` + -Server $VcAddress ` + -User $User ` + -Password $Password ` + -SkipCertificateCheck) + + # Act + + # Assert + {Disconnect-SsoAdminServer} | should -Throw 'Connected to more than 1 SSO server, please specify a SSO server via -Server parameter' + (Compare-Object $global:DefaultSsoAdminServers $expected -IncludeEqual).Count | Should Be 2 + $expected.IsConnected | Should -Contain $true + } + + It 'Diconnect-SsoAdminServer does disconnect via pipeline if connected to more than 1 SSO server' { + # Arrange + $expected += @(Connect-SsoAdminServer ` + -Server $VcAddress ` + -User $User ` + -Password $Password ` + -SkipCertificateCheck) + $expected += @(Connect-SsoAdminServer ` + -Server $VcAddress ` + -User $User ` + -Password $Password ` + -SkipCertificateCheck) + + # Act + $expected | Disconnect-SsoAdminServer + # Assert + $global:DefaultSsoAdminServers.count | Should Be 0 + $expected.IsConnected | Should -not -Contain $true + } + It 'Disconnects disconnected object' { # Arrange $expected = Connect-SsoAdminServer `