• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

cybertec-postgresql / vip-manager / 34482096606
91%

Build:
DEFAULT BRANCH: master
Ran 10 Sep 2026 01:23PM UTC
Jobs 1
Files 12
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

10 Sep 2026 01:21PM UTC coverage: 90.661% (-0.1%) from 90.759%
34482096606

push

github

web-flow
[+] Support IPv6 addresses on Windows (#424)

* [+] Support IPv6 addresses on Windows

configureAddress() fed the VIP to AddIPAddress() via
binary.LittleEndian.Uint32(c.VIP.AsSlice()). For an IPv6 address that
slice is 16 bytes, so the call silently received the first four of them,
and AddIPAddress is an IPv4-only Win32 API regardless. An IPv6 VIP on
Windows could not work.

Add the IPv6-capable iphlpapi calls (InitializeUnicastIpAddressEntry,
CreateUnicastIpAddressEntry, DeleteUnicastIpAddressEntry) and dispatch on
the address family, reusing windows.MibUnicastIpAddressRow from
golang.org/x/sys/windows. The handle needed to remove the address differs
per family, so BasicConfigurer now embeds a platform specific osState
instead of carrying a Windows-only NTE context on every platform.

Also drop sendPacketWindows(). It dialled "ip4:ethernet", which is not a
network Go knows, so the Windows gratuitous ARP has always failed. None is
needed: Windows runs Duplicate Address Detection and announces the address
to the link itself when it is added through these APIs, for both families.

Note that Is4() alone would miss a ::ffff:a.b.c.d VIP, which is an IPv4
address, so the dispatch tests that case too.

Adds basicConfigurer_windows_test.go, which had no counterpart before:
every function in basicConfigurer_windows.go is now covered, including
both add and delete failure paths.

* [-] rebuild the IPv4 netmask from its prefix length on Windows

getMask() picks the mask width from what netip reports, and a ::ffff:a.b.c.d
VIP is reported as IPv6, so the Windows IPv4 path could be handed a 16 byte
mask and read only its leading four bytes: a /64 silently became a /32.

Derive the mask from netmaskSize() instead, and refuse a prefix wider than /32
rather than passing a nonsense mask to AddIPAddress.

1 of 1 new or added line in 1 file covered. (100.0%)

1 existing line in 1 file now uncovered.

932 of 1028 relevant lines covered (90.66%)

1.4 hits per line

Coverage Regressions

Lines Coverage ∆ File
1
91.97
-0.73% checker/etcd_leader_checker.go
Jobs
ID Job ID Ran Files Coverage
1 34482096606.1 10 Sep 2026 01:23PM UTC 17
90.03
GitHub Action Run
Source Files on build 34482096606
  • Tree
  • List 12
  • Changed 4
  • Source Changed 1
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #34482096606
  • 50367ad1 on github
  • Prev Build on master (#34364921935)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc