Files
go_goutils/netx/funcs_test.go
T
brent saner cbfaaddf34 v1.17.0
ADDED:
* netx:
** docs updated
** added NOTES.adoc for more extensive info that doesn't need to be in
the library docs
** Addr4in6Compat()
** Addr4in6Mapped()
** Addr4in6Mapped()
** HasSubnet()
** IP4MapPfx4to6()
** IP4MapPfx6to4()
** IPSetCombined()
** IPSetFrom()
** IPSetFromNative()
** IsAddr4Compat()
** IsPublic()
** MustIPSetCombined()
** MustIPSetFrom()
** MustIPSetFromNative()
** Pfx4in6Compat() (untested)
** Pfx4in6Mapped() (untested)
** UnmapAddr()
** UnmapPfx()
** Better support in other functions for IPv4-Compatible/IPv4-Mapped
addressing
2026-07-29 15:05:36 -04:00

160 lines
4.1 KiB
Go

package netx
import (
"math"
"net"
"net/netip"
"testing"
)
/*
func TestFuncsDns(t *testing.T) {
var err error
var domBin []byte
var domStr string
var domEx string = "foo.r00t2.io"
if domBin, err = DnsStrToWire(domEx); err != nil {
t.Fatal(err)
}
t.Logf("Domain %s to wire: %#x\n", domEx, domBin)
if domStr, err = DnsWireToStr(domBin); err != nil {
t.Fatal(err)
}
t.Logf("Domain wire %#x to string: %s\n", domBin, domStr)
if domStr != domEx {
t.Fatalf("DNS str wrong (%s != %s)\n)", domStr, domEx)
}
t.Logf("Domain string %s matches %s", domStr, domEx)
return
}
*/
func TestFuncsIP(t *testing.T) {
var err error
var ip net.IP
var addr netip.Addr
var ipFamily uint16
var tgtFamily uint16
var addrFamily uint16
// IPv4 on even indexes, IPv6 on odd.
for idx, s := range []string{
"203.0.113.10",
"2001:db8::203:0:113:10",
} {
if ip = net.ParseIP(s); ip == nil {
t.Fatalf("ip %s not valid", s)
}
if addr, err = netip.ParseAddr(s); err != nil {
t.Fatalf("addr %s not valid", s)
}
ipFamily = GetIpFamily(ip)
addrFamily = GetAddrFamily(addr)
if ipFamily == AFUnspec {
t.Fatalf("GetIpFamily: Failed on IP %s (unspecified family)", s)
}
if addrFamily == AFUnspec {
t.Fatalf("GetAddrFamily: Failed on IP %s (unspecified family)", s)
}
switch idx%2 == 0 {
case true:
tgtFamily = AFInet
case false:
tgtFamily = AFInet6
}
if ipFamily != tgtFamily {
t.Fatalf("GetIpFamily: Failed on IP %s (expected %d, got %d)", s, AFInet, tgtFamily)
}
if addrFamily != tgtFamily {
t.Fatalf("GetAddrFamily: Failed on IP %s (expected %d, got %d)", s, AFInet, tgtFamily)
}
}
}
func TestFuncsMask(t *testing.T) {
var err error
var cidr uint8
var mask uint32
var maskStr string
var ipMask net.IPMask
var cidrTgt uint8 = 32
var maskTgt uint32 = math.MaxUint32
var maskStrTgt string = "255.255.255.255"
var ipMaskTgt net.IPMask = net.IPMask{255, 255, 255, 255}
// To CIDR
if cidr, err = Mask4ToCidr(maskTgt); err != nil {
t.Fatal(err)
} else if cidr != cidrTgt {
t.Fatalf("Mask4ToCidr: cidr %d != cidrTgt %d", cidr, cidrTgt)
}
if cidr, err = IPMask4ToCidr(ipMaskTgt); err != nil {
t.Fatal(err)
} else if cidr != cidrTgt {
t.Fatalf("IPMask4ToCidr: cidr %d != cidrTgt %d", cidr, cidrTgt)
}
if cidr, err = Mask4StrToCidr(maskStrTgt); err != nil {
t.Fatal(err)
} else if cidr != cidrTgt {
t.Fatalf("Mask4StrToCidr cidr %d != cidrTgt %d", cidr, cidrTgt)
}
// To net.IPMask
if ipMask, err = Cidr4ToIPMask(cidrTgt); err != nil {
t.Fatal(err)
} else if ipMaskTgt.String() != ipMask.String() {
t.Fatalf("Cidr4ToIPMask ipMask %s != ipMaskTgt %s", ipMask.String(), ipMaskTgt.String())
}
if ipMask, err = Mask4ToIPMask(maskTgt); err != nil {
t.Fatal(err)
} else if ipMaskTgt.String() != ipMask.String() {
t.Fatalf("Mask4ToIPMask ipMask %s != ipMaskTgt %s", ipMask.String(), ipMaskTgt.String())
}
if ipMask, err = Mask4StrToIPMask(maskStrTgt); err != nil {
t.Fatal(err)
} else if ipMaskTgt.String() != ipMask.String() {
t.Fatalf("Mask4StrToIPMask ipMask %s != ipMaskTgt %s", ipMask.String(), ipMaskTgt.String())
}
// To bitmask
if mask, err = Cidr4ToMask(cidrTgt); err != nil {
t.Fatal(err)
} else if mask != maskTgt {
t.Fatalf("Cidr4ToMask mask %d != maskTgt %d", mask, maskTgt)
}
if mask, err = IPMask4ToMask(ipMaskTgt); err != nil {
t.Fatal(err)
} else if mask != maskTgt {
t.Fatalf("IPMask4ToMask mask %d != maskTgt %d", mask, maskTgt)
}
if mask, err = Mask4StrToMask(maskStrTgt); err != nil {
t.Fatal(err)
} else if mask != maskTgt {
t.Fatalf("Mask4StrToMask mask %d != maskTgt %d", mask, maskTgt)
}
// To string
if maskStr, err = Cidr4ToStr(cidrTgt); err != nil {
t.Fatal(err)
} else if maskStr != maskStrTgt {
t.Fatalf("Cidr4ToStr maskStr %s != maskStrTgt %s", maskStr, maskStrTgt)
}
if maskStr, err = IPMask4ToStr(ipMaskTgt); err != nil {
t.Fatal(err)
} else if maskStr != maskStrTgt {
t.Fatalf("IPMask4ToStr maskStr %s != maskStrTgt %s", maskStr, maskStrTgt)
}
if maskStr, err = Mask4ToStr(maskTgt); err != nil {
t.Fatal(err)
} else if maskStr != maskStrTgt {
t.Fatalf("Mask4ToStr maskStr %s != maskStrTgt %s", maskStr, maskStrTgt)
}
}