173 lines
4.5 KiB
Go
173 lines
4.5 KiB
Go
|
package iprange
|
||
|
|
||
|
import (
|
||
|
"net"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
func TestSimpleAddress(t *testing.T) {
|
||
|
ipRange, err := Parse("192.168.1.1")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
assert.Equal(t, net.IPv4(192, 168, 1, 1).To4(), ipRange.Min)
|
||
|
assert.Equal(t, ipRange.Min, ipRange.Max)
|
||
|
}
|
||
|
|
||
|
func TestCIDRAddress(t *testing.T) {
|
||
|
{
|
||
|
ipRange, err := Parse("192.168.1.1/24")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
assert.Equal(t, net.IPv4(192, 168, 1, 0).To4(), ipRange.Min)
|
||
|
assert.Equal(t, net.IPv4(192, 168, 1, 255).To4(), ipRange.Max)
|
||
|
}
|
||
|
|
||
|
{
|
||
|
ipRange, err := Parse("192.168.2.1/24")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
assert.Equal(t, net.IPv4(192, 168, 2, 0).To4(), ipRange.Min)
|
||
|
assert.Equal(t, net.IPv4(192, 168, 2, 255).To4(), ipRange.Max)
|
||
|
|
||
|
out := ipRange.Expand()
|
||
|
assert.Equal(t, int(0xffffffff-0xffffff00), len(out)-1)
|
||
|
for i := 0; i < 256; i++ {
|
||
|
assert.Equal(t, net.IP([]byte{192, 168, 2, byte(i)}), out[i])
|
||
|
}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
ipRange, err := Parse("10.1.2.3/16")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
assert.Equal(t, net.IPv4(10, 1, 0, 0).To4(), ipRange.Min)
|
||
|
assert.Equal(t, net.IPv4(10, 1, 255, 255).To4(), ipRange.Max)
|
||
|
|
||
|
out := ipRange.Expand()
|
||
|
assert.Equal(t, int(0xffffffff-0xffff0000), len(out)-1)
|
||
|
for i := 0; i < 65536; i++ {
|
||
|
assert.Equal(t, net.IP([]byte{10, 1, byte(i / 256), byte(i % 256)}), out[i])
|
||
|
}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
ipRange, err := Parse("10.1.2.3/32")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
assert.Equal(t, net.IPv4(10, 1, 2, 3).To4(), ipRange.Min)
|
||
|
assert.Equal(t, ipRange.Min, ipRange.Max)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestWildcardAddress(t *testing.T) {
|
||
|
ipRange, err := Parse("192.168.1.*")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
assert.Equal(t, net.IPv4(192, 168, 1, 0).To4(), ipRange.Min)
|
||
|
assert.Equal(t, net.IPv4(192, 168, 1, 255).To4(), ipRange.Max)
|
||
|
}
|
||
|
|
||
|
func TestRangeAddress(t *testing.T) {
|
||
|
{
|
||
|
ipRange, err := Parse("192.168.1.10-20")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
assert.Equal(t, net.IPv4(192, 168, 1, 10).To4(), ipRange.Min)
|
||
|
assert.Equal(t, net.IPv4(192, 168, 1, 20).To4(), ipRange.Max)
|
||
|
}
|
||
|
|
||
|
{
|
||
|
ipRange, err := Parse("192.168.10-20.1")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
assert.Equal(t, net.IPv4(192, 168, 10, 1).To4(), ipRange.Min)
|
||
|
assert.Equal(t, net.IPv4(192, 168, 20, 1).To4(), ipRange.Max)
|
||
|
}
|
||
|
|
||
|
{
|
||
|
ipRange, err := Parse("0-255.1.1.1")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
assert.Equal(t, net.IPv4(0, 1, 1, 1).To4(), ipRange.Min)
|
||
|
assert.Equal(t, net.IPv4(255, 1, 1, 1).To4(), ipRange.Max)
|
||
|
}
|
||
|
|
||
|
{
|
||
|
ipRange, err := Parse("1-2.3-4.5-6.7-8")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
assert.Equal(t, net.IPv4(1, 3, 5, 7).To4(), ipRange.Min)
|
||
|
assert.Equal(t, net.IPv4(2, 4, 6, 8).To4(), ipRange.Max)
|
||
|
|
||
|
out := ipRange.Expand()
|
||
|
|
||
|
assert.Equal(t, 16, len(out))
|
||
|
assert.Equal(t, out, []net.IP{
|
||
|
net.IP([]byte{1, 3, 5, 7}),
|
||
|
net.IP([]byte{1, 3, 5, 8}),
|
||
|
net.IP([]byte{1, 3, 6, 7}),
|
||
|
net.IP([]byte{1, 3, 6, 8}),
|
||
|
net.IP([]byte{1, 4, 5, 7}),
|
||
|
net.IP([]byte{1, 4, 5, 8}),
|
||
|
net.IP([]byte{1, 4, 6, 7}),
|
||
|
net.IP([]byte{1, 4, 6, 8}),
|
||
|
net.IP([]byte{2, 3, 5, 7}),
|
||
|
net.IP([]byte{2, 3, 5, 8}),
|
||
|
net.IP([]byte{2, 3, 6, 7}),
|
||
|
net.IP([]byte{2, 3, 6, 8}),
|
||
|
net.IP([]byte{2, 4, 5, 7}),
|
||
|
net.IP([]byte{2, 4, 5, 8}),
|
||
|
net.IP([]byte{2, 4, 6, 7}),
|
||
|
net.IP([]byte{2, 4, 6, 8}),
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestMixedAddress(t *testing.T) {
|
||
|
ipRange, err := Parse("192.168.10-20.*/25")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
assert.Equal(t, net.IPv4(192, 168, 10, 0).To4(), ipRange.Min)
|
||
|
assert.Equal(t, net.IPv4(192, 168, 10, 127).To4(), ipRange.Max)
|
||
|
}
|
||
|
|
||
|
func TestList(t *testing.T) {
|
||
|
rangeList, err := ParseList("192.168.1.1, 192.168.1.1/24, 192.168.1.*, 192.168.1.10-20")
|
||
|
assert.Nil(t, err)
|
||
|
assert.Len(t, rangeList, 4)
|
||
|
|
||
|
assert.Equal(t, net.IP([]byte{192, 168, 1, 1}), rangeList[0].Min)
|
||
|
assert.Equal(t, net.IP([]byte{192, 168, 1, 1}), rangeList[0].Max)
|
||
|
|
||
|
assert.Equal(t, net.IP([]byte{192, 168, 1, 0}), rangeList[1].Min)
|
||
|
assert.Equal(t, net.IP([]byte{192, 168, 1, 255}), rangeList[1].Max)
|
||
|
|
||
|
assert.Equal(t, net.IP([]byte{192, 168, 1, 0}), rangeList[2].Min)
|
||
|
assert.Equal(t, net.IP([]byte{192, 168, 1, 255}), rangeList[2].Max)
|
||
|
|
||
|
assert.Equal(t, net.IP([]byte{192, 168, 1, 10}), rangeList[3].Min)
|
||
|
assert.Equal(t, net.IP([]byte{192, 168, 1, 20}), rangeList[3].Max)
|
||
|
}
|
||
|
|
||
|
func TestBadAddress(t *testing.T) {
|
||
|
ipRange, err := Parse("192.168.10")
|
||
|
assert.Nil(t, ipRange)
|
||
|
assert.Error(t, err)
|
||
|
}
|
||
|
|
||
|
func TestBadList(t *testing.T) {
|
||
|
rangeList, err := ParseList("192.168.1,, 192.168.1.1/24, 192.168.1.*, 192.168.1.10-20")
|
||
|
assert.Error(t, err)
|
||
|
assert.Nil(t, rangeList)
|
||
|
}
|
||
|
|
||
|
func TestListExpansion(t *testing.T) {
|
||
|
rangeList, err := ParseList("192.168.1.10, 192.168.1.1-20, 192.168.1.10/29")
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
expanded := rangeList.Expand()
|
||
|
assert.Len(t, expanded, 20)
|
||
|
}
|