mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2026-08-09 09:31:15 +10:00
Fix DHCP DNS reset handling (#4800)
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
#===========================================================================
|
||||
# Tests - DNS
|
||||
#===========================================================================
|
||||
|
||||
BeforeAll {
|
||||
$script:repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path
|
||||
|
||||
function Get-NetAdapter { }
|
||||
function Set-DnsClientServerAddress {
|
||||
param(
|
||||
$InterfaceIndex,
|
||||
$ServerAddresses,
|
||||
[switch]$ResetServerAddresses
|
||||
)
|
||||
}
|
||||
function netsh {
|
||||
param(
|
||||
[Parameter(ValueFromRemainingArguments = $true)]
|
||||
[string[]]$Arguments
|
||||
)
|
||||
}
|
||||
function Write-WinUtilLog {
|
||||
param($Message, $Level, $Component)
|
||||
}
|
||||
|
||||
. (Join-Path $script:repoRoot "functions\private\Set-WinUtilDNS.ps1")
|
||||
}
|
||||
|
||||
Describe "Set-WinUtilDNS" {
|
||||
BeforeEach {
|
||||
$script:sync = [Hashtable]::Synchronized(@{
|
||||
configs = @{
|
||||
dns = @{
|
||||
Cloudflare = [pscustomobject]@{
|
||||
Primary = "1.1.1.1"
|
||||
Secondary = "1.0.0.1"
|
||||
Primary6 = "2606:4700:4700::1111"
|
||||
Secondary6 = "2606:4700:4700::1001"
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Mock Get-NetAdapter {
|
||||
[pscustomobject]@{
|
||||
Name = "Ethernet"
|
||||
Status = "Up"
|
||||
ifIndex = 7
|
||||
}
|
||||
}
|
||||
Mock Set-DnsClientServerAddress { }
|
||||
Mock netsh { }
|
||||
Mock Write-WinUtilLog { }
|
||||
Mock Write-Warning { }
|
||||
Mock Write-Host { }
|
||||
}
|
||||
|
||||
AfterEach {
|
||||
Remove-Variable -Name sync -Scope Script -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
It "sets IPv4 and IPv6 DNS server addresses separately" {
|
||||
Set-WinUtilDNS -DNSProvider "Cloudflare"
|
||||
|
||||
Should -Invoke -CommandName Set-DnsClientServerAddress -Times 1 -Exactly -ParameterFilter {
|
||||
$InterfaceIndex -eq 7 -and
|
||||
$ServerAddresses.Count -eq 2 -and
|
||||
$ServerAddresses[0] -eq "1.1.1.1" -and
|
||||
$ServerAddresses[1] -eq "1.0.0.1"
|
||||
}
|
||||
Should -Invoke -CommandName Set-DnsClientServerAddress -Times 1 -Exactly -ParameterFilter {
|
||||
$InterfaceIndex -eq 7 -and
|
||||
$ServerAddresses.Count -eq 2 -and
|
||||
$ServerAddresses[0] -eq "2606:4700:4700::1111" -and
|
||||
$ServerAddresses[1] -eq "2606:4700:4700::1001"
|
||||
}
|
||||
Should -Invoke -CommandName Set-DnsClientServerAddress -Times 0 -Exactly -ParameterFilter {
|
||||
$ServerAddresses.Count -eq 4
|
||||
}
|
||||
}
|
||||
|
||||
It "resets DNS to DHCP for IPv4 and IPv6" {
|
||||
Set-WinUtilDNS -DNSProvider "DHCP"
|
||||
|
||||
Should -Invoke -CommandName Set-DnsClientServerAddress -Times 1 -Exactly -ParameterFilter {
|
||||
$InterfaceIndex -eq 7 -and
|
||||
$ResetServerAddresses -eq $true
|
||||
}
|
||||
Should -Invoke -CommandName netsh -Times 1 -Exactly -ParameterFilter {
|
||||
$Arguments[0] -eq "interface" -and
|
||||
$Arguments[1] -eq "ip" -and
|
||||
$Arguments[2] -eq "set" -and
|
||||
$Arguments[3] -eq "dnsservers" -and
|
||||
$Arguments[4] -eq "name=Ethernet" -and
|
||||
$Arguments[5] -eq "source=dhcp"
|
||||
}
|
||||
Should -Invoke -CommandName netsh -Times 1 -Exactly -ParameterFilter {
|
||||
$Arguments[0] -eq "interface" -and
|
||||
$Arguments[1] -eq "ipv6" -and
|
||||
$Arguments[2] -eq "set" -and
|
||||
$Arguments[3] -eq "dnsservers" -and
|
||||
$Arguments[4] -eq "name=Ethernet" -and
|
||||
$Arguments[5] -eq "source=dhcp"
|
||||
}
|
||||
}
|
||||
|
||||
It "catches DNS setter failures so the tweak runspace can continue" {
|
||||
Mock Set-DnsClientServerAddress { throw "DNS failed" }
|
||||
|
||||
{ Set-WinUtilDNS -DNSProvider "Cloudflare" } | Should -Not -Throw
|
||||
|
||||
Should -Invoke -CommandName Write-WinUtilLog -Times 1 -Exactly -ParameterFilter {
|
||||
$Level -eq "ERROR" -and
|
||||
$Component -eq "DNS" -and
|
||||
$Message -like "Unable to set DNS provider Cloudflare*"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user