Moc.Tests.ps1

ipmo .\moc.psm1 -force

BeforeAll {
    $global:config = @{}
    $global:config[$global:MocModule] = @{}
}

Describe 'Set-MocConfig' {
    It 'Should be able to create ssh configuration and set-mocconfig without IP' {
        Save-ConfigurationDirectory -moduleName $global:AksHciModule -workingDir "C:\test"
        $sshConfig = New-SSHConfiguration -name "test"
        $sshConfig.Name | should -Be "test"
        $vnet =  [VirtualNetwork]::new("defaultswitch", "Default Switch" , "", "", $(), "", 0,  "", "",  "", "")
        Set-MocConfig -ssh $sshConfig -vnet $vnet -skipHostLimitChecks -skipRemotingChecks -skipValidationCheck
        (Get-MocConfig).sshConfigName | should -Be "test"
        (Get-MocConfig).sshRestrictCommands | should -Be $false
        (Get-MocConfig).sshPublicKey | should -Be "C:\AksHci\.ssh\akshci_rsa.pub"
        (Get-MocConfig).sshPrivateKey | should -Be "C:\AksHci\.ssh\akshci_rsa"
        (Get-MocConfig).sshCidr | should -BeNullOrEmpty
        (Get-MocConfig).sshIPAddresses | should -BeNullOrEmpty
    }

    It 'Should be able to create ssh configuration and set-mocconfig with IP Address' {
        Save-ConfigurationDirectory -moduleName $global:AksHciModule -workingDir "C:\test"
        $sshConfig = New-SSHConfiguration -name "test" -ipaddresses @('127.0.0.1')
        $vnet =  [VirtualNetwork]::new("defaultswitch", "Default Switch" , "", "", $(), "", 0,  "", "",  "", "")
        Set-MocConfig -ssh $sshConfig -vnet $vnet -skipHostLimitChecks -skipRemotingChecks -skipValidationCheck
        (Get-MocConfig).sshConfigName | should -Be "test"
        (Get-MocConfig).sshRestrictCommands | should -Be $false
        (Get-MocConfig).sshPublicKey | should -Be "C:\AksHci\.ssh\akshci_rsa.pub"
        (Get-MocConfig).sshPrivateKey | should -Be "C:\AksHci\.ssh\akshci_rsa"
        (Get-MocConfig).sshCidr | should -BeNullOrEmpty
        (Get-MocConfig).sshIPAddresses | should -Be "127.0.0.1"
    }

    It 'Should be able to create ssh configuration and set-mocconfig with IP Addresses' {
        Save-ConfigurationDirectory -moduleName $global:AksHciModule -workingDir "C:\test"
        $sshConfig = New-SSHConfiguration -name "test" -ipaddresses @('127.0.0.1', '127.0.0.2')
        $vnet =  [VirtualNetwork]::new("defaultswitch", "Default Switch" , "", "", $(), "", 0,  "", "",  "", "")
        Set-MocConfig -ssh $sshConfig -vnet $vnet -skipHostLimitChecks -skipRemotingChecks -skipValidationCheck
        (Get-MocConfig).sshConfigName | should -Be "test"
        (Get-MocConfig).sshRestrictCommands | should -Be $false
        (Get-MocConfig).sshPublicKey | should -Be "C:\AksHci\.ssh\akshci_rsa.pub"
        (Get-MocConfig).sshPrivateKey | should -Be "C:\AksHci\.ssh\akshci_rsa"
        (Get-MocConfig).sshCidr | should -BeNullOrEmpty
        (Get-MocConfig).sshIPAddresses | should -Be "127.0.0.1,127.0.0.2"
    }

    It 'Should be able to create ssh configuration and set-mocconfig with CIDR' {
        Save-ConfigurationDirectory -moduleName $global:AksHciModule -workingDir "C:\test"
        $sshConfig = New-SSHConfiguration -name "test" -cidr '127.0.0.1/25'
        $vnet =  [VirtualNetwork]::new("defaultswitch", "Default Switch" , "", "", $(), "", 0,  "", "",  "", "")
        Set-MocConfig -ssh $sshConfig -vnet $vnet -skipHostLimitChecks -skipRemotingChecks -skipValidationCheck
        (Get-MocConfig).sshConfigName | should -Be "test"
        (Get-MocConfig).sshRestrictCommands | should -Be $false
        (Get-MocConfig).sshPublicKey | should -Be "C:\AksHci\.ssh\akshci_rsa.pub"
        (Get-MocConfig).sshPrivateKey | should -Be "C:\AksHci\.ssh\akshci_rsa"
        (Get-MocConfig).sshCidr | should -Be "127.0.0.1/25"
        (Get-MocConfig).sshIPAddresses | should -BeNullOrEmpty
    }

    It 'Should be able to create ssh configuration and set-mocconfig with sshRestriction' {
        Save-ConfigurationDirectory -moduleName $global:AksHciModule -workingDir "C:\test"
        $sshConfig = New-SSHConfiguration -name "test" -cidr '127.0.0.1/25' -restrictSSHCommands
        $vnet =  [VirtualNetwork]::new("defaultswitch", "Default Switch" , "", "", $(), "", 0,  "", "",  "", "")
        Set-MocConfig -ssh $sshConfig -vnet $vnet -skipHostLimitChecks -skipRemotingChecks -skipValidationCheck
        (Get-MocConfig).sshConfigName | should -Be "test"
        (Get-MocConfig).sshRestrictCommands | should -Be $true
        (Get-MocConfig).sshPublicKey | should -Be "C:\AksHci\.ssh\akshci_rsa.pub"
        (Get-MocConfig).sshPrivateKey | should -Be "C:\AksHci\.ssh\akshci_rsa"
        (Get-MocConfig).sshCidr | should -Be "127.0.0.1/25"
        (Get-MocConfig).sshIPAddresses | should -BeNullOrEmpty
    }

    It 'Should be able to create ssh configuration and set-mocconfig with public & private key' {
        Save-ConfigurationDirectory -moduleName $global:AksHciModule -workingDir "C:\test"
        Set-Content -value "1234" -path "C:\test\temp.pub"
        Set-Content -value "4567" -path "C:\test\temp"
        $sshConfig = New-SSHConfiguration -name "test" -cidr '127.0.0.1/25' -restrictSSHCommands -sshPublicKey "C:\test\temp.pub" -sshPrivateKey "C:\test\temp"
        $vnet =  [VirtualNetwork]::new("defaultswitch", "Default Switch" , "", "", $(), "", 0,  "", "",  "", "")
        Set-MocConfig -ssh $sshConfig -vnet $vnet -skipHostLimitChecks -skipRemotingChecks -skipValidationCheck
        (Get-MocConfig).sshConfigName | should -Be "test"
        (Get-MocConfig).sshRestrictCommands | should -Be $true
        (Get-MocConfig).sshPublicKey | should -Be "C:\test\temp.pub"
        (Get-MocConfig).sshPrivateKey | should -Be "C:\test\temp"
        (Get-MocConfig).sshCidr | should -Be "127.0.0.1/25"
        (Get-MocConfig).sshIPAddresses | should -BeNullOrEmpty
    }

    It 'Get-SSHAuthConfigSudoRestrictions with public & private key' {
        Save-ConfigurationDirectory -moduleName $global:AksHciModule -workingDir "C:\test"
        Set-Content -value "1234" -path "C:\test\temp.pub"
        Set-Content -value "4567" -path "C:\test\temp"
        $sshConfig = New-SSHConfiguration -name "test" -cidr '127.0.0.1/25' -restrictSSHCommands -sshPublicKey "C:\test\temp.pub" -sshPrivateKey "C:\test\temp"
        $vnet =  [VirtualNetwork]::new("defaultswitch", "Default Switch" , "", "", $(), "", 0,  "", "",  "", "")
        Set-MocConfig -ssh $sshConfig -vnet $vnet -skipHostLimitChecks -skipRemotingChecks -skipValidationCheck
        (Get-MocConfig).sshConfigName | should -Be "test"
        (Get-MocConfig).sshRestrictCommands | should -Be $true
        (Get-MocConfig).sshPublicKey | should -Be "C:\test\temp.pub"
        (Get-MocConfig).sshPrivateKey | should -Be "C:\test\temp"
        (Get-MocConfig).sshCidr | should -Be "127.0.0.1/25"
        (Get-MocConfig).sshIPAddresses | should -BeNullOrEmpty
        Get-SSHAuthConfigSudoRestrictions | should -Be "from=""127.0.0.1/25"" 1234"
    }

    It 'Get-SSHAuthConfigSudoRestrictions without public & private key' {
        Save-ConfigurationDirectory -moduleName $global:AksHciModule -workingDir "C:\test"
        $sshConfig = New-SSHConfiguration -name "test" -cidr '127.0.0.1/25' -restrictSSHCommands
        $vnet =  [VirtualNetwork]::new("defaultswitch", "Default Switch" , "", "", $(), "", 0,  "", "",  "", "")
        Set-MocConfig -ssh $sshConfig -vnet $vnet -skipHostLimitChecks -skipRemotingChecks -skipValidationCheck
        (Get-MocConfig).sshConfigName | should -Be "test"
        (Get-MocConfig).sshRestrictCommands | should -Be $true
        (Get-MocConfig).sshPublicKey | should -Be "C:\AksHci\.ssh\akshci_rsa.pub"
        (Get-MocConfig).sshPrivateKey | should -Be "C:\AksHci\.ssh\akshci_rsa"
        (Get-MocConfig).sshCidr | should -Be "127.0.0.1/25"
        (Get-MocConfig).sshIPAddresses | should -BeNullOrEmpty
        $content = get-content -path  "C:\AksHci\.ssh\akshci_rsa.pub"
        Get-SSHAuthConfigSudoRestrictions | should -Be "from=""127.0.0.1/25"" $content"
    }

    It 'Get-SSHAuthConfigSudoRestrictions with ip Address' {
        Save-ConfigurationDirectory -moduleName $global:AksHciModule -workingDir "C:\test"
        $sshConfig = New-SSHConfiguration -name "test" -ipaddresses @('127.0.0.1')
        $vnet =  [VirtualNetwork]::new("defaultswitch", "Default Switch" , "", "", $(), "", 0,  "", "",  "", "")
        Set-MocConfig -ssh $sshConfig -vnet $vnet -skipHostLimitChecks -skipRemotingChecks -skipValidationCheck
        (Get-MocConfig).sshConfigName | should -Be "test"
        (Get-MocConfig).sshRestrictCommands | should -Be $false
        (Get-MocConfig).sshPublicKey | should -Be "C:\AksHci\.ssh\akshci_rsa.pub"
        (Get-MocConfig).sshPrivateKey | should -Be "C:\AksHci\.ssh\akshci_rsa"
        (Get-MocConfig).sshCidr | should -BeNullOrEmpty
        (Get-MocConfig).sshIPAddresses | should -Be "127.0.0.1"
        $content = get-content -path  "C:\AksHci\.ssh\akshci_rsa.pub"
        Get-SSHAuthConfigSudoRestrictions | should -Be "from=""127.0.0.1"" $content"
    }

    It 'Get-SSHAuthConfigSudoRestrictions with ip Addresses' {
        Save-ConfigurationDirectory -moduleName $global:AksHciModule -workingDir "C:\test"
        $sshConfig = New-SSHConfiguration -name "test" -ipaddresses @('127.0.0.1','127.0.0.2') -sshPublicKey "C:\test\temp.pub" -sshPrivateKey "C:\test\temp"
        Set-Content -value "1234" -path "C:\test\temp.pub"
        Set-Content -value "4567" -path "C:\test\temp"
        $vnet =  [VirtualNetwork]::new("defaultswitch", "Default Switch" , "", "", $(), "", 0,  "", "",  "", "")
        Set-MocConfig -ssh $sshConfig -vnet $vnet -skipHostLimitChecks -skipRemotingChecks -skipValidationCheck
        (Get-MocConfig).sshConfigName | should -Be "test"
        (Get-MocConfig).sshRestrictCommands | should -Be $false
        (Get-MocConfig).sshPublicKey | should -Be "C:\test\temp.pub"
        (Get-MocConfig).sshPrivateKey | should -Be "C:\test\temp"
        (Get-MocConfig).sshCidr | should -BeNullOrEmpty
        (Get-MocConfig).sshIPAddresses | should -Be "127.0.0.1,127.0.0.2"
        Get-SSHAuthConfigSudoRestrictions | should -Be "from=""127.0.0.1,127.0.0.2"" 1234"
    }
}