1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-03 15:46:23 -07:00

Use subtests for IP range testing

This commit is contained in:
Eggbertx 2024-03-26 22:21:33 -07:00
parent 4917fdf3da
commit e5bbcc6493

View file

@ -7,21 +7,40 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
type startEndCidr struct {
cidr string
start string
end string
}
func TestIPRangeErrOnInvalidIP(t *testing.T) { func TestIPRangeErrOnInvalidIP(t *testing.T) {
_, _, err := ParseIPRange("not an IP") rangeTestCases := []string{
assert.Error(t, err) "not an IP",
_, _, err = ParseIPRange("") "",
assert.Error(t, err) "192.168.56.0/",
_, _, err = ParseIPRange("192.168.56.0/") "192.168.56.0/24/1",
assert.Error(t, err) }
_, _, err = ParseIPRange("192.168.56.0/24/1") var err error
assert.Error(t, err) for _, input := range rangeTestCases {
_, err = GetIPRangeSubnet("not", "ip") t.Run(input, func(tr *testing.T) {
assert.Error(t, err) _, _, err = ParseIPRange(input)
_, err = GetIPRangeSubnet("::1", "ip") assert.Error(tr, err)
assert.Error(t, err) })
_, err = GetIPRangeSubnet("::1", "127.0.0.1") }
assert.Error(t, err)
subnetTestCases := []startEndCidr{
{start: "not", end: "ip"},
{start: "::1", end: "ip"},
{start: "ip", end: "::1"},
{start: "127.0.0.1", end: "::1"},
{start: "::1", end: "127.0.0.1"},
}
for _, tC := range subnetTestCases {
t.Run("start = "+tC.start+", end = "+tC.end, func(tr *testing.T) {
_, err = GetIPRangeSubnet(tC.start, tC.end)
assert.Error(tr, err)
})
}
} }
func TestIPRangeSingleIP(t *testing.T) { func TestIPRangeSingleIP(t *testing.T) {
@ -34,133 +53,74 @@ func TestIPRangeSingleIP(t *testing.T) {
} }
func TestIPRangeIPv4Range(t *testing.T) { func TestIPRangeIPv4Range(t *testing.T) {
ranges := []string{"192.168.56.0/24", "192.168.0.0/16", "192.0.0.0/8"} testCases := []startEndCidr{
starts := []string{"192.168.56.0", "192.168.0.0", "192.0.0.0"} {cidr: "192.168.56.0/24", start: "192.168.56.0", end: "192.168.56.255"},
ends := []string{"192.168.56.255", "192.168.255.255", "192.255.255.255"} {cidr: "192.168.0.0/16", start: "192.168.0.0", end: "192.168.255.255"},
{cidr: "192.0.0.0/8", start: "192.0.0.0", end: "192.255.255.255"},
}
var start, end string var start, end string
var err error var err error
var ipn *net.IPNet var ipn *net.IPNet
for i := range ranges { for _, tC := range testCases {
start, end, err = ParseIPRange(ranges[i]) t.Run(tC.cidr, func(tr *testing.T) {
assert.NoError(t, err) start, end, err = ParseIPRange(tC.cidr)
assert.Equal(t, starts[i], start) assert.NoError(tr, err)
assert.Equal(t, ends[i], end) assert.Equal(tr, tC.start, start)
ipn, err = GetIPRangeSubnet(start, end) assert.Equal(tr, tC.end, end)
assert.NoError(t, err) ipn, err = GetIPRangeSubnet(start, end)
assert.Equal(t, ranges[i], ipn.String()) assert.NoError(tr, err)
assert.Equal(tr, tC.cidr, ipn.String())
})
} }
} }
func TestIPRangeIPv6Range(t *testing.T) { func TestIPRangeIPv6Range(t *testing.T) {
ranges := []string{ testCases := []startEndCidr{
"2607:f8b0:400a:80a::2010/124", {cidr: "2607:f8b0:400a:80a::2010/124", start: "2607:f8b0:400a:80a::2010", end: "2607:f8b0:400a:80a::201f"},
"2607:f8b0:400a:80a::2000/120", {cidr: "2607:f8b0:400a:80a::2000/120", start: "2607:f8b0:400a:80a::2000", end: "2607:f8b0:400a:80a::20ff"},
"2607:f8b0:400a:80a::2000/116", {cidr: "2607:f8b0:400a:80a::2000/116", start: "2607:f8b0:400a:80a::2000", end: "2607:f8b0:400a:80a::2fff"},
"2607:f8b0:400a:80a::/112", {cidr: "2607:f8b0:400a:80a::/112", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a::ffff"},
"2607:f8b0:400a:80a::/108", {cidr: "2607:f8b0:400a:80a::/108", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a::f:ffff"},
"2607:f8b0:400a:80a::/104", {cidr: "2607:f8b0:400a:80a::/104", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a::ff:ffff"},
"2607:f8b0:400a:80a::/100", {cidr: "2607:f8b0:400a:80a::/100", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a::fff:ffff"},
"2607:f8b0:400a:80a::/96", {cidr: "2607:f8b0:400a:80a::/96", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a::ffff:ffff"},
"2607:f8b0:400a:80a::/92", {cidr: "2607:f8b0:400a:80a::/92", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a:0:f:ffff:ffff"},
"2607:f8b0:400a:80a::/88", {cidr: "2607:f8b0:400a:80a::/88", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a:0:ff:ffff:ffff"},
"2607:f8b0:400a:80a::/84", {cidr: "2607:f8b0:400a:80a::/84", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a:0:fff:ffff:ffff"},
"2607:f8b0:400a:80a::/80", {cidr: "2607:f8b0:400a:80a::/80", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a:0:ffff:ffff:ffff"},
"2607:f8b0:400a:80a::/76", {cidr: "2607:f8b0:400a:80a::/76", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a:f:ffff:ffff:ffff"},
"2607:f8b0:400a:80a::/72", {cidr: "2607:f8b0:400a:80a::/72", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a:ff:ffff:ffff:ffff"},
"2607:f8b0:400a:80a::/68", {cidr: "2607:f8b0:400a:80a::/68", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a:fff:ffff:ffff:ffff"},
"2607:f8b0:400a:80a::/64", {cidr: "2607:f8b0:400a:80a::/64", start: "2607:f8b0:400a:80a::", end: "2607:f8b0:400a:80a:ffff:ffff:ffff:ffff"},
"2607:f8b0:400a:800::/60", {cidr: "2607:f8b0:400a:800::/60", start: "2607:f8b0:400a:800::", end: "2607:f8b0:400a:80f:ffff:ffff:ffff:ffff"},
"2607:f8b0:400a:800::/56", {cidr: "2607:f8b0:400a:800::/56", start: "2607:f8b0:400a:800::", end: "2607:f8b0:400a:8ff:ffff:ffff:ffff:ffff"},
"2607:f8b0:400a::/52", {cidr: "2607:f8b0:400a::/52", start: "2607:f8b0:400a::", end: "2607:f8b0:400a:fff:ffff:ffff:ffff:ffff"},
"2607:f8b0:400a::/48", {cidr: "2607:f8b0:400a::/48", start: "2607:f8b0:400a::", end: "2607:f8b0:400a:ffff:ffff:ffff:ffff:ffff"},
"2607:f8b0:4000::/44", {cidr: "2607:f8b0:4000::/44", start: "2607:f8b0:4000::", end: "2607:f8b0:400f:ffff:ffff:ffff:ffff:ffff"},
"2607:f8b0:4000::/40", {cidr: "2607:f8b0:4000::/40", start: "2607:f8b0:4000::", end: "2607:f8b0:40ff:ffff:ffff:ffff:ffff:ffff"},
"2607:f8b0:4000::/36", {cidr: "2607:f8b0:4000::/36", start: "2607:f8b0:4000::", end: "2607:f8b0:4fff:ffff:ffff:ffff:ffff:ffff"},
"2607:f8b0::/32", {cidr: "2607:f8b0::/32", start: "2607:f8b0::", end: "2607:f8b0:ffff:ffff:ffff:ffff:ffff:ffff"},
"2607:f8b0::/28", {cidr: "2607:f8b0::/28", start: "2607:f8b0::", end: "2607:f8bf:ffff:ffff:ffff:ffff:ffff:ffff"},
"2607:f800::/24", {cidr: "2607:f800::/24", start: "2607:f800::", end: "2607:f8ff:ffff:ffff:ffff:ffff:ffff:ffff"},
"2607:f000::/20", {cidr: "2607:f000::/20", start: "2607:f000::", end: "2607:ffff:ffff:ffff:ffff:ffff:ffff:ffff"},
"2607::/16", {cidr: "2607::/16", start: "2607::", end: "2607:ffff:ffff:ffff:ffff:ffff:ffff:ffff"},
"2600::/12", {cidr: "2600::/12", start: "2600::", end: "260f:ffff:ffff:ffff:ffff:ffff:ffff:ffff"},
"2600::/8", {cidr: "2600::/8", start: "2600::", end: "26ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"},
"2000::/4", {cidr: "2000::/4", start: "2000::", end: "2fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"},
}
starts := []string{
"2607:f8b0:400a:80a::2010",
"2607:f8b0:400a:80a::2000",
"2607:f8b0:400a:80a::2000",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:80a::",
"2607:f8b0:400a:800::",
"2607:f8b0:400a:800::",
"2607:f8b0:400a::",
"2607:f8b0:400a::",
"2607:f8b0:4000::",
"2607:f8b0:4000::",
"2607:f8b0:4000::",
"2607:f8b0::",
"2607:f8b0::",
"2607:f800::",
"2607:f000::",
"2607::",
"2600::",
"2600::",
"2000::",
}
ends := []string{
"2607:f8b0:400a:80a::201f",
"2607:f8b0:400a:80a::20ff",
"2607:f8b0:400a:80a::2fff",
"2607:f8b0:400a:80a::ffff",
"2607:f8b0:400a:80a::f:ffff",
"2607:f8b0:400a:80a::ff:ffff",
"2607:f8b0:400a:80a::fff:ffff",
"2607:f8b0:400a:80a::ffff:ffff",
"2607:f8b0:400a:80a:0:f:ffff:ffff",
"2607:f8b0:400a:80a:0:ff:ffff:ffff",
"2607:f8b0:400a:80a:0:fff:ffff:ffff",
"2607:f8b0:400a:80a:0:ffff:ffff:ffff",
"2607:f8b0:400a:80a:f:ffff:ffff:ffff",
"2607:f8b0:400a:80a:ff:ffff:ffff:ffff",
"2607:f8b0:400a:80a:fff:ffff:ffff:ffff",
"2607:f8b0:400a:80a:ffff:ffff:ffff:ffff",
"2607:f8b0:400a:80f:ffff:ffff:ffff:ffff",
"2607:f8b0:400a:8ff:ffff:ffff:ffff:ffff",
"2607:f8b0:400a:fff:ffff:ffff:ffff:ffff",
"2607:f8b0:400a:ffff:ffff:ffff:ffff:ffff",
"2607:f8b0:400f:ffff:ffff:ffff:ffff:ffff",
"2607:f8b0:40ff:ffff:ffff:ffff:ffff:ffff",
"2607:f8b0:4fff:ffff:ffff:ffff:ffff:ffff",
"2607:f8b0:ffff:ffff:ffff:ffff:ffff:ffff",
"2607:f8bf:ffff:ffff:ffff:ffff:ffff:ffff",
"2607:f8ff:ffff:ffff:ffff:ffff:ffff:ffff",
"2607:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
"2607:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
"260f:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
"26ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
"2fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
} }
var start, end string var start, end string
var err error var err error
var ipn *net.IPNet var ipn *net.IPNet
for i := range ranges { for _, tC := range testCases {
start, end, err = ParseIPRange(ranges[i]) t.Run(tC.cidr, func(tr *testing.T) {
assert.NoError(t, err) start, end, err = ParseIPRange(tC.cidr)
assert.Equal(t, starts[i], start, "unequal values at index %d", i) assert.NoError(tr, err)
assert.Equal(t, ends[i], end, "unequal values at index %d", i) assert.Equal(tr, tC.start, start)
ipn, err = GetIPRangeSubnet(start, end) assert.Equal(tr, tC.end, end)
assert.NoError(t, err)
assert.Equal(t, ranges[i], ipn.String()) ipn, err = GetIPRangeSubnet(start, end)
assert.NoError(t, err)
assert.Equal(t, tC.cidr, ipn.String())
})
} }
} }