]> Sergey Matveev's repositories - btrtrc.git/blob - iplist/iplist_test.go
Implement iplist package, for block lists
[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 TestSimple(t *testing.T) {
17         var ranges []Range
18         scanner := bufio.NewScanner(strings.NewReader(sample))
19         for scanner.Scan() {
20                 r, ok, _ := ParseBlocklistP2PLine(scanner.Text())
21                 if ok {
22                         t.Log(r)
23                         ranges = append(ranges, r)
24                 }
25         }
26         if err := scanner.Err(); err != nil {
27                 t.Fatalf("error while scanning: %s", err)
28         }
29         if len(ranges) != 2 {
30                 t.Fatalf("expected 2 ranges but got %d", len(ranges))
31         }
32         iplist := New(ranges)
33         for _, _case := range []struct {
34                 IP   string
35                 Hit  bool
36                 Desc string
37         }{
38                 {"1.2.3.255", false, ""},
39                 {"1.2.8.0", true, "b"},
40                 {"1.2.4.255", true, "a"},
41                 // Try to roll over to the next octet on the parse.
42                 {"1.2.7.256", false, ""},
43                 {"1.2.8.254", true, "b"},
44         } {
45                 r := iplist.Lookup(net.ParseIP(_case.IP))
46                 if !_case.Hit {
47                         if r != nil {
48                                 t.Fatalf("got hit when none was expected")
49                         }
50                         continue
51                 }
52                 if r == nil {
53                         t.Fatalf("expected hit for %q", _case.IP)
54                 }
55                 if r.Description != _case.Desc {
56                         t.Fatalf("%q != %q", r.Description, _case.Desc)
57                 }
58         }
59 }