mirror of
https://github.com/juanfont/headscale.git
synced 2024-11-26 08:53:05 +00:00
Fix IP Address Order Bug
This commit is contained in:
parent
23a3adf8d2
commit
6567af7730
2 changed files with 43 additions and 0 deletions
|
@ -5,6 +5,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"net/netip"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
|
@ -73,7 +74,23 @@ type (
|
|||
|
||||
type MachineAddresses []netip.Addr
|
||||
|
||||
func (ma MachineAddresses) Sort() {
|
||||
sort.Slice(ma, func(index1, index2 int) bool {
|
||||
if ma[index1].Is4() && ma[index2].Is6() {
|
||||
|
||||
return true
|
||||
}
|
||||
if ma[index1].Is6() && ma[index2].Is4() {
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
return ma[index1].Compare(ma[index2]) < 0
|
||||
})
|
||||
}
|
||||
|
||||
func (ma MachineAddresses) StringSlice() []string {
|
||||
ma.Sort()
|
||||
strSlice := make([]string, 0, len(ma))
|
||||
for _, addr := range ma {
|
||||
strSlice = append(strSlice, addr.String())
|
||||
|
|
|
@ -113,3 +113,29 @@ func Test_MachineCanAccess(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestMachineAddressesOrder(t *testing.T) {
|
||||
machineAddresses := MachineAddresses{
|
||||
netip.MustParseAddr("2001:db8::2"),
|
||||
netip.MustParseAddr("100.64.0.2"),
|
||||
netip.MustParseAddr("2001:db8::1"),
|
||||
netip.MustParseAddr("100.64.0.1"),
|
||||
}
|
||||
|
||||
strSlice := machineAddresses.StringSlice()
|
||||
expected := []string{
|
||||
"100.64.0.1",
|
||||
"100.64.0.2",
|
||||
"2001:db8::1",
|
||||
"2001:db8::2",
|
||||
}
|
||||
|
||||
if len(strSlice) != len(expected) {
|
||||
t.Fatalf("unexpected slice length: got %v, want %v", len(strSlice), len(expected))
|
||||
}
|
||||
for i, addr := range strSlice {
|
||||
if addr != expected[i] {
|
||||
t.Errorf("unexpected address at index %v: got %v, want %v", i, addr, expected[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue