1
1
package iplib
2
2
3
3
import (
4
+ "bytes"
4
5
"math/big"
5
6
"net"
6
7
"reflect"
@@ -22,13 +23,14 @@ func TestCopyIP(t *testing.T) {
22
23
}
23
24
24
25
var IPTests = []struct {
25
- ipaddr net.IP
26
- next net.IP
27
- prev net.IP
28
- intval uint32
29
- hexval string
30
- inarpa string
31
- binval string
26
+ ipaddr net.IP
27
+ next net.IP
28
+ prev net.IP
29
+ intval uint32
30
+ hexval string
31
+ inarpa string
32
+ binval string
33
+ binslice []byte
32
34
}{
33
35
{
34
36
net .ParseIP ("10.1.2.3" ),
@@ -38,6 +40,7 @@ var IPTests = []struct {
38
40
"0a010203" ,
39
41
"3.2.1.10.in-addr.arpa" ,
40
42
"00001010.00000001.00000010.00000011" ,
43
+ []byte {0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 },
41
44
},
42
45
{
43
46
net .ParseIP ("10.1.2.255" ),
@@ -47,6 +50,7 @@ var IPTests = []struct {
47
50
"0a0102ff" ,
48
51
"255.2.1.10.in-addr.arpa" ,
49
52
"00001010.00000001.00000010.11111111" ,
53
+ []byte {0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
50
54
},
51
55
{
52
56
net .ParseIP ("10.1.2.0" ),
@@ -56,6 +60,7 @@ var IPTests = []struct {
56
60
"0a010200" ,
57
61
"0.2.1.10.in-addr.arpa" ,
58
62
"00001010.00000001.00000010.00000000" ,
63
+ []byte {0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
59
64
},
60
65
{
61
66
net .ParseIP ("255.255.255.255" ),
@@ -65,6 +70,7 @@ var IPTests = []struct {
65
70
"ffffffff" ,
66
71
"255.255.255.255.in-addr.arpa" ,
67
72
"11111111.11111111.11111111.11111111" ,
73
+ []byte {1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
68
74
},
69
75
{
70
76
net .ParseIP ("0.0.0.0" ),
@@ -74,6 +80,7 @@ var IPTests = []struct {
74
80
"00000000" ,
75
81
"0.0.0.0.in-addr.arpa" ,
76
82
"00000000.00000000.00000000.00000000" ,
83
+ []byte {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
77
84
},
78
85
}
79
86
@@ -113,6 +120,15 @@ func TestIPToHexString(t *testing.T) {
113
120
}
114
121
}
115
122
123
+ func TestIPToBinarySlice (t * testing.T ) {
124
+ for i , tt := range IPTests {
125
+ b := IPToBinarySlice (tt .ipaddr )
126
+ if ! bytes .Equal (b , tt .binslice ) {
127
+ t .Errorf ("[%d] expected %v, got %v" , i , tt .binslice , b )
128
+ }
129
+ }
130
+ }
131
+
116
132
func TestIPToBinaryString (t * testing.T ) {
117
133
for i , tt := range IPTests {
118
134
s := IPToBinaryString (tt .ipaddr )
@@ -183,6 +199,7 @@ var IP6Tests = []struct {
183
199
expand string
184
200
inarpa string
185
201
binval string
202
+ binslice []byte
186
203
}{
187
204
{
188
205
"2001:db8:85a3::8a2e:370:7334" ,
@@ -195,6 +212,7 @@ var IP6Tests = []struct {
195
212
"2001:0db8:85a3:0000:0000:8a2e:0370:7334" ,
196
213
"4.3.3.7.0.7.3.0.e.2.a.8.0.0.0.0.0.0.0.0.3.a.5.8.8.b.d.0.1.0.0.2.ip6.arpa" ,
197
214
"00100000.00000001.00001101.10111000.10000101.10100011.00000000.00000000.00000000.00000000.10001010.00101110.00000011.01110000.01110011.00110100" ,
215
+ []byte {0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 0 },
198
216
},
199
217
{
200
218
"::" ,
@@ -207,6 +225,7 @@ var IP6Tests = []struct {
207
225
"0000:0000:0000:0000:0000:0000:0000:0000" ,
208
226
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" ,
209
227
"00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000" ,
228
+ []byte {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
210
229
},
211
230
{
212
231
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ,
@@ -219,6 +238,7 @@ var IP6Tests = []struct {
219
238
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ,
220
239
"f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.ip6.arpa" ,
221
240
"11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111" ,
241
+ []byte {1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
222
242
},
223
243
}
224
244
@@ -268,6 +288,15 @@ func TestUint64ToIP6(t *testing.T) {
268
288
}
269
289
}
270
290
291
+ func TestIP6ToBinarySlice (t * testing.T ) {
292
+ for i , tt := range IP6Tests {
293
+ b := IPToBinarySlice (net .ParseIP (tt .ipaddr ))
294
+ if ! bytes .Equal (b , tt .binslice ) {
295
+ t .Errorf ("[%d] expected %v, got %v" , i , tt .binslice , b )
296
+ }
297
+ }
298
+ }
299
+
271
300
func TestIP6ToBinaryString (t * testing.T ) {
272
301
for i , tt := range IP6Tests {
273
302
s := IPToBinaryString (net .ParseIP (tt .ipaddr ))
0 commit comments