Tests/Unit/MSFT_NetAdapterName.Tests.ps1
$script:DSCModuleName = 'NetworkingDsc' $script:DSCResourceName = 'MSFT_NetAdapterName' Import-Module -Name (Join-Path -Path (Join-Path -Path (Split-Path $PSScriptRoot -Parent) -ChildPath 'TestHelpers') -ChildPath 'CommonTestHelper.psm1') -Global #region HEADER # Unit Test Template Version: 1.1.0 [System.String] $script:moduleRoot = Split-Path -Parent (Split-Path -Parent $PSScriptRoot) if ( (-not (Test-Path -Path (Join-Path -Path $script:moduleRoot -ChildPath 'DSCResource.Tests'))) -or ` (-not (Test-Path -Path (Join-Path -Path $script:moduleRoot -ChildPath 'DSCResource.Tests\TestHelper.psm1'))) ) { & git @('clone', 'https://github.com/PowerShell/DscResource.Tests.git', (Join-Path -Path $script:moduleRoot -ChildPath '\DSCResource.Tests\')) } Import-Module -Name (Join-Path -Path $script:moduleRoot -ChildPath 'DSCResource.Tests\TestHelper.psm1') -Force $TestEnvironment = Initialize-TestEnvironment ` -DSCModuleName $script:DSCModuleName ` -DSCResourceName $script:DSCResourceName ` -TestType Unit #endregion HEADER # Begin Testing try { InModuleScope $script:DSCResourceName { # Generate the adapter data to be used for Mocking $script:adapterName = 'Adapter' $script:newAdapterName = 'NewAdapter' $script:adapterPhysicalMediaType = '802.3' $script:adapterStatus = 'Up' $script:adapterMacAddress = '11-22-33-44-55-66' $script:adapterInterfaceDescription = 'Hyper-V Virtual Ethernet Adapter #2' $script:adapterInterfaceIndex = 2 $script:adapterInterfaceGuid = '75670D9B-5879-4DBA-BC99-86CDD33EB66A' $script:adapterDriverDescription = 'Hyper-V Virtual Ethernet Adapter' $script:adapterParameters = [PSObject]@{ Name = $script:adapterName NewName = $script:newAdapterName PhysicalMediaType = $script:adapterPhysicalMediaType Status = $script:adapterStatus MacAddress = $script:adapterMacAddress InterfaceDescription = $script:adapterInterfaceDescription InterfaceIndex = $script:adapterInterfaceIndex InterfaceGuid = $script:adapterInterfaceGuid DriverDescription = $script:adapterDriverDescription } $script:mockAdapter = [PSObject]@{ Name = $script:adapterName PhysicalMediaType = $script:adapterPhysicalMediaType Status = $script:adapterStatus MacAddress = $script:adapterMacAddress InterfaceDescription = $script:adapterInterfaceDescription InterfaceIndex = $script:adapterInterfaceIndex InterfaceGuid = $script:adapterInterfaceGuid DriverDescription = $script:adapterDriverDescription } $script:mockRenamedAdapter = [PSObject]@{ Name = $script:newAdapterName PhysicalMediaType = $script:adapterPhysicalMediaType Status = $script:adapterStatus MacAddress = $script:adapterMacAddress InterfaceDescription = $script:adapterInterfaceDescription InterfaceIndex = $script:adapterInterfaceIndex InterfaceGuid = $script:adapterInterfaceGuid DriverDescription = $script:adapterDriverDescription } function Rename-NetAdapter { [CmdletBinding()] param ( [Parameter(ValueFromPipeline = $true)] $InputObject, [Parameter()] [System.String] $NewName ) } Describe 'MSFT_NetAdapterName\Get-TargetResource' -Tag 'Get' { Context 'Renamed adapter can be found' { Mock ` -CommandName Find-NetworkAdapter ` -MockWith { $script:mockRenamedAdapter } ` -ParameterFilter { $Name -eq $script:newAdapterName } It 'Should not throw' { { $script:result = Get-TargetResource @adapterParameters -Verbose } | Should -Not -Throw } It 'Should return existing adapter' { $script:result.Name | Should -Be $script:mockRenamedAdapter.Name $script:result.PhysicalMediaType | Should -Be $script:mockRenamedAdapter.PhysicalMediaType $script:result.Status | Should -Be $script:mockRenamedAdapter.Status $script:result.MacAddress | Should -Be $script:mockRenamedAdapter.MacAddress $script:result.InterfaceDescription | Should -Be $script:mockRenamedAdapter.InterfaceDescription $script:result.InterfaceIndex | Should -Be $script:mockRenamedAdapter.InterfaceIndex $script:result.InterfaceGuid | Should -Be $script:mockRenamedAdapter.InterfaceGuid $script:result.DriverDescription | Should -Be $script:mockRenamedAdapter.DriverDescription } It 'Should call all the mocks' { Assert-MockCalled ` -CommandName Find-NetworkAdapter -Exactly -Times 1 ` -ParameterFilter { $Name -eq $script:newAdapterName } } } Context 'Renamed adapter not found but matching adapter can be found' { Mock ` -CommandName Find-NetworkAdapter ` -ParameterFilter { $Name -eq $script:newAdapterName } Mock ` -CommandName Find-NetworkAdapter -MockWith { $script:mockAdapter } ` -ParameterFilter { $Name -eq $script:adapterName } It 'Should not throw exception' { { $script:result = Get-TargetResource -Name $script:adapterName -NewName $script:newAdapterName -Verbose } | Should -Not -Throw } It 'Should return existing adapter' { $script:result.Name | Should -Be $script:mockAdapter.Name $script:result.PhysicalMediaType | Should -Be $script:mockAdapter.PhysicalMediaType $script:result.Status | Should -Be $script:mockAdapter.Status $script:result.MacAddress | Should -Be $script:mockAdapter.MacAddress $script:result.InterfaceDescription | Should -Be $script:mockAdapter.InterfaceDescription $script:result.InterfaceIndex | Should -Be $script:mockAdapter.InterfaceIndex $script:result.InterfaceGuid | Should -Be $script:mockAdapter.InterfaceGuid $script:result.DriverDescription | Should -Be $script:mockAdapter.DriverDescription } It 'Should call all the mocks' { Assert-MockCalled ` -CommandName Find-NetworkAdapter -Exactly -Times 1 ` -ParameterFilter { $Name -eq $script:adapterName } Assert-MockCalled ` -CommandName Find-NetworkAdapter -Exactly -Times 1 ` -ParameterFilter { $Name -eq $script:newAdapterName } } } } Describe 'MSFT_NetAdapterName\Set-TargetResource' -Tag 'Set' { Context 'Matching adapter can be found' { Mock ` -CommandName Find-NetworkAdapter ` -MockWith { $script:mockAdapter } Mock ` -CommandName Rename-NetAdapter ` -ParameterFilter { $NewName -eq $script:newAdapterName } ` -MockWith { $script:mockRenamedAdapter } It 'Should not throw exception' { { Set-TargetResource @adapterParameters -Verbose } | Should -Not -Throw } It 'Should call all the mocks' { Assert-MockCalled ` -CommandName Find-NetworkAdapter -Exactly -Times 1 Assert-MockCalled ` -CommandName Rename-NetAdapter -Exactly -Times 1 ` -ParameterFilter { $NewName -eq $script:newAdapterName } } } } Describe 'MSFT_NetAdapterName\Test-TargetResource' -Tag 'Test' { Context 'Matching adapter can be found and has correct Name' { Mock -CommandName Find-NetworkAdapter -MockWith { $script:mockRenamedAdapter } It 'Should not throw exception' { { $script:result = Test-TargetResource @adapterParameters -Verbose } | Should -Not -Throw } It 'Should return true' { $script:result | Should -Be $true } It 'Should call all the mocks' { Assert-MockCalled -commandName Find-NetworkAdapter -Exactly -Times 1 } } Context 'Renamed adapter does not exist, but matching adapter can be found and has wrong Name' { Mock ` -CommandName Find-NetworkAdapter ` -MockWith { $script:mockAdapter } ` -ParameterFilter { $Name -and $Name -eq $script:AdapterName } Mock ` -CommandName Find-NetworkAdapter ` -ParameterFilter { $Name -and $Name -eq $script:newAdapterName } It 'Should not throw exception' { { $script:result = Test-TargetResource @adapterParameters -Verbose } | Should -Not -Throw } It 'Should return false' { $script:result | Should -Be $false } It 'Should call all the mocks' { Assert-MockCalled ` -CommandName Find-NetworkAdapter -Exactly -Times 1 ` -ParameterFilter { $Name -and $Name -eq $script:AdapterName } Assert-MockCalled ` -CommandName Find-NetworkAdapter -Exactly -Times 1 ` -ParameterFilter { $Name -and $Name -eq $script:newAdapterName } } } Context 'Adapter name changed by Set-TargetResource' { Mock ` -CommandName Find-NetworkAdapter ` -MockWith { $script:mockRenamedAdapter } ` -ParameterFilter { $Name -and $Name -eq $script:newAdapterName } It 'Should not throw exception' { { $script:result = Test-TargetResource @adapterParameters -Verbose } | Should -Not -Throw } It 'Should return false' { $script:result | Should -Be $true } It 'Should call all the mocks' { Assert-MockCalled ` -CommandName Find-NetworkAdapter -Exactly -Times 1 ` -ParameterFilter { $Name -and $Name -eq $script:newAdapterName } } } } } #end InModuleScope $DSCResourceName #endregion } finally { #region FOOTER Restore-TestEnvironment -TestEnvironment $TestEnvironment #endregion } |