Diagnostics/Comprehensive/HyperVSwitchNativeTeam.Comprehensive.Tests.ps1
function Get-ConfigurationDataAsObject { [CmdletBinding()] Param ( [Parameter(Mandatory)] [Microsoft.PowerShell.DesiredStateConfiguration.ArgumentToConfigurationDataTransformation()] [hashtable] $ConfigurationData ) return $ConfigurationData } #Replace this with the right configuration data path $moduleBase = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent $examplePath = "${moduleBase}\Examples\" $baseName = ($MyInvocation.MyCommand.Name.Split('.'))[0] $configurationDataPSD1 = "${examplePath}\Sample_${baseName}.NodeData.psd1" #Replace till here $configurationData = Get-ConfigurationDataAsObject -ConfigurationData $configurationDataPSD1 Describe 'Simple Operations tests for Hyper-V Deployment with Switch Embedded Teaming and related network Configuration' { Context 'Hyper-V module related tests' { It 'Hyper-V Module is available' { Get-Module -Name Hyper-V -ListAvailable | should not BeNullOrEmpty } It 'Hyper-V Module can be loaded' { Import-Module -Name Hyper-V -Global -PassThru -Force | should not BeNullOrEmpty } } Context 'Network Team tests' { $team = Get-NetLbfoTeam -Name $configurationData.AllNodes.TeamName -ErrorAction SilentlyContinue It 'Network team should exist' { $team | Should not BeNullOrEmpty } It 'Load balancing algorithm should match' { $team.LoadBalancingAlgorithm | Should be $configurationData.AllNodes.LoadBalancingAlgorithm } It 'Teaming mode should match' { $team.TeamingMode | Should Be $configurationData.AllNodes.TeamingMode } } Context 'Hyper-V Host networking tests' { $vmSwitch = Get-VMSwitch -Name $configurationData.AllNodes.SwitchName -ErrorAction SilentlyContinue It 'A VM Switch should exist' { $vmSwitch | Should not BeNullOrEmpty } It 'VM Switch Type should be external' { $vmSwitch.SwitchType | Should Be 'External' } It 'Only one VM switch should exist' { $vmSwitch.Count | Should be 1 } It 'Bandwidth Reservation Mode should be Weight' { $vmSwitch.BandwidthReservationMode | Should be 'Weight' } It 'Management Network Adapter exists' { { Get-VMNetworkAdapter -ManagementOS -Name $configurationData.AllNodes.ManagementAdapterName } | Should Not Throw } It 'Cluster Network Adapter exists' { { Get-VMNetworkAdapter -ManagementOS -Name $configurationData.AllNodes.ClusterAdapterName } | Should Not Throw } It 'Live Migration Network Adapter exists' { { Get-VMNetworkAdapter -ManagementOS -Name $configurationData.AllNodes.LiveMigrationAdapterName } | Should Not Throw } It 'Management Bandwidth weight should match configuration' { (Get-VMNetworkAdapter -ManagementOS -Name $configurationData.AllNodes.ManagementAdapterName).BandwidthSetting.MinimumBandwidthWeight | Should Be $ConfigurationData.AllNodes.ManagementMinimumBandwidthWeight } It 'Cluster Bandwidth weight should match configuration' { (Get-VMNetworkAdapter -ManagementOS -Name $configurationData.AllNodes.ClusterAdapterName).BandwidthSetting.MinimumBandwidthWeight | Should Be $ConfigurationData.AllNodes.ClusterMinimumBandwidthWeight } It 'Live Migration Bandwidth weight should match configuration' { (Get-VMNetworkAdapter -ManagementOS -Name $configurationData.AllNodes.LiveMigrationAdapterName).BandwidthSetting.MinimumBandwidthWeight | Should Be $ConfigurationData.AllNodes.LiveMigrationMinimumBandwidthWeight } } Context 'General networking tests' { It 'DNS server should be reachable' { Test-Connection -ComputerName $configurationData.AllNodes.ManagementDns -Count 2 -Quiet | Should Be $true } It 'Default Gateway on the management network should be reachable' { Test-Connection -ComputerName $configurationData.AllNodes.ManagementGateway -Count 2 -Quiet | Should Be $true } } AfterAll { remove-Module Hyper-V } } |