-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcidr_test.go
77 lines (73 loc) · 2.21 KB
/
cidr_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package ipv4
import (
"fmt"
"log"
"testing"
)
func TestCIDR2Range(t *testing.T) {
tests := []struct {
cidr string
left string
right string
err error
}{
{"10.0.1.32/27", "10.0.1.32", "10.0.1.63", nil},
{"199.27.72.0/24", "199.27.72.0", "199.27.72.255", nil},
{"192.0.2.100/24", "192.0.2.0", "192.0.2.255", nil},
{"199.27.72.0/21", "199.27.72.0", "199.27.79.255", nil},
{"192.168.100.0/22", "192.168.100.0", "192.168.103.255", nil},
{"192.0.2.100/22", "192.0.0.0", "192.0.3.255", nil},
{"192.0.0.100/16", "192.0.0.0", "192.0.255.255", nil},
{"192.0.0.0/16", "192.0.0.0", "192.0.255.255", nil},
{"169.254.0.0/16", "169.254.0.0", "169.254.255.255", nil},
{"169.254.9.9/16", "169.254.0.0", "169.254.255.255", nil},
{"172.16.0.0/12", "172.16.0.0", "172.31.255.255", nil},
{"192.0.0.0/8", "192.0.0.0", "192.255.255.255", nil},
{"192.0.2.0/8", "192.0.0.0", "192.255.255.255", nil},
{"2001:db8:a0b:12f0::1/32", "", "", ErrBadIP},
}
for pos, tt := range tests {
left, right, err := CIDR2Range(tt.cidr)
if left != tt.left || right != tt.right || err != tt.err {
t.Errorf("%d: %s got [%s, %s], want [%s, %s]", pos, tt.cidr, left, right, tt.left, tt.right)
}
}
}
func TestRange2CIDRs(t *testing.T) {
tests := []struct {
left string
right string
ranges []string
}{
{"127.0.0.1", "127.0.0.0", nil},
{"junk", "127.0.0.0", nil},
{"127.0.0.1", "junk", nil},
{"0.0.0.0", "255.255.255.255", []string{"0.0.0.0/0"}},
{"127.0.0.1", "127.0.0.18", []string{"127.0.0.1/32", "127.0.0.2/31", "127.0.0.4/30", "127.0.0.8/29", "127.0.0.16/31", "127.0.0.18/32"}},
{"127.0.0.1", "127.0.0.1", []string{"127.0.0.1/32"}},
}
for _, tt := range tests {
val := Range2CIDRs(tt.left, tt.right)
if tt.ranges == nil && val != nil {
t.Errorf("mismatch")
} else {
want := fmt.Sprintf("%v", tt.ranges)
got := fmt.Sprintf("%v", val)
if got != want {
t.Errorf("Range2CIDRs: got %s, want %s", got, want)
}
}
}
}
func ExampleCIDR2Range() {
left, right, err := CIDR2Range("199.27.72.0/21")
if err != nil {
log.Fatal(err)
}
fmt.Println(left, right)
// Output: 199.27.72.0 199.27.79.255
}
func ExampleRange2CIDRs() {
fmt.Println(Range2CIDRs("127.0.0.0", "127.0.0.255"))
// Output: [127.0.0.0/24]
}