v1.10.3
ADDED: * netx now has a ton of netmask conversion functions for IPv4 netmasks. (IPv6 doesn't really *have* netmasks, so it was intentionally excluded).
This commit is contained in:
134
netx/funcs_test.go
Normal file
134
netx/funcs_test.go
Normal file
@@ -0,0 +1,134 @@
|
||||
package netx
|
||||
|
||||
import (
|
||||
`math`
|
||||
`net`
|
||||
`net/netip`
|
||||
"testing"
|
||||
)
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user