10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
15 // Note the shared description "eff". The overlapping ranges at 1.2.8.2
16 // will cause problems. Don't overlap your ranges.
18 # List distributed by iblocklist.com
23 something:more detail:86.59.95.195-86.59.95.195
24 eff:127.0.0.0-127.0.0.1`
30 list, err := NewFromReader(strings.NewReader(sample))
34 err = list.WritePacked(&buf)
38 packedSample = buf.Bytes()
41 func TestIPv4RangeLen(t *testing.T) {
42 ranges, _ := sampleRanges(t)
43 for i := 0; i < 3; i += 1 {
44 if len(ranges[i].First) != 4 {
47 if len(ranges[i].Last) != 4 {
53 func sampleRanges(tb testing.TB) (ranges []Range, err error) {
54 scanner := bufio.NewScanner(strings.NewReader(sample))
56 r, ok, err := ParseBlocklistP2PLine(scanner.Bytes())
61 ranges = append(ranges, r)
68 func BenchmarkParseP2pBlocklist(b *testing.B) {
69 for i := 0; i < b.N; i++ {
74 func lookupOk(r Range, ok bool) bool {
78 func TestBadIP(t *testing.T) {
79 for _, iplist := range []Ranger{
81 NewFromPacked([]byte("\x00\x00\x00\x00\x00\x00\x00\x00")),
83 assert.False(t, lookupOk(iplist.Lookup(net.IP(make([]byte, 4)))), "%v", iplist)
84 assert.False(t, lookupOk(iplist.Lookup(net.IP(make([]byte, 16)))))
85 assert.Panics(t, func() { iplist.Lookup(nil) })
86 assert.Panics(t, func() { iplist.Lookup(net.IP(make([]byte, 5))) })
90 func testLookuperSimple(t *testing.T, iplist Ranger) {
91 for _, _case := range []struct {
96 {"1.2.3.255", false, ""},
97 {"1.2.8.0", true, "b"},
98 {"1.2.4.255", true, "a"},
99 // Try to roll over to the next octet on the parse. Note the final
100 // octet is overbounds. In the next case.
101 // {"1.2.7.256", true, "bad IP"},
102 {"1.2.8.1", true, "b"},
103 {"1.2.8.2", true, "eff"},
105 ip := net.ParseIP(_case.IP)
106 require.NotNil(t, ip, _case.IP)
107 r, ok := iplist.Lookup(ip)
108 assert.Equal(t, _case.Hit, ok, "%s", _case)
112 assert.Equal(t, _case.Desc, r.Description, "%T", iplist)
116 func TestSimple(t *testing.T) {
117 ranges, err := sampleRanges(t)
118 require.NoError(t, err)
119 require.Len(t, ranges, 5)
120 iplist := New(ranges)
121 testLookuperSimple(t, iplist)
122 packed := NewFromPacked(packedSample)
123 testLookuperSimple(t, packed)