]> Sergey Matveev's repositories - btrtrc.git/blob - iplist/iplist_test.go
iplist: Check for matches against IPv4 and IPv6 addresses
[btrtrc.git] / iplist / iplist_test.go
1 package iplist
2
3 import (
4         "bufio"
5         "net"
6         "strings"
7         "testing"
8 )
9
10 var sample = `
11 # List distributed by iblocklist.com
12
13 a:1.2.4.0-1.2.4.255
14 b:1.2.8.0-1.2.8.255`
15
16 func sampleRanges(tb testing.TB) (ranges []Range, err error) {
17         scanner := bufio.NewScanner(strings.NewReader(sample))
18         for scanner.Scan() {
19                 r, ok, _ := ParseBlocklistP2PLine(scanner.Bytes())
20                 if ok {
21                         // tb.Log(r)
22                         ranges = append(ranges, r)
23                 }
24         }
25         err = scanner.Err()
26         return
27 }
28
29 func BenchmarkParseP2pBlocklist(b *testing.B) {
30         for i := 0; i < b.N; i++ {
31                 sampleRanges(b)
32         }
33 }
34
35 func TestSimple(t *testing.T) {
36         ranges, err := sampleRanges(t)
37         if err != nil {
38                 t.Fatal(err)
39         }
40         if len(ranges) != 2 {
41                 t.Fatalf("expected 2 ranges but got %d", len(ranges))
42         }
43         iplist := New(ranges)
44         for _, _case := range []struct {
45                 IP   string
46                 Hit  bool
47                 Desc string
48         }{
49                 {"1.2.3.255", false, ""},
50                 {"1.2.8.0", true, "b"},
51                 {"1.2.4.255", true, "a"},
52                 // Try to roll over to the next octet on the parse.
53                 {"1.2.7.256", false, ""},
54                 {"1.2.8.254", true, "b"},
55         } {
56                 r := iplist.Lookup(net.ParseIP(_case.IP))
57                 if !_case.Hit {
58                         if r != nil {
59                                 t.Fatalf("got hit when none was expected")
60                         }
61                         continue
62                 }
63                 if r == nil {
64                         t.Fatalf("expected hit for %q", _case.IP)
65                 }
66                 if r.Description != _case.Desc {
67                         t.Fatalf("%q != %q", r.Description, _case.Desc)
68                 }
69         }
70 }