1 # Copyright (C) 2003-2007, 2009, 2010 Nominum, Inc.
3 # Permission to use, copy, modify, and distribute this software and its
4 # documentation for any purpose with or without fee is hereby granted,
5 # provided that the above copyright notice and this permission notice
6 # appear in all copies.
8 # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
9 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
11 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
14 # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 class NtoAAtoNTestCase(unittest
.TestCase
):
24 a
= dns
.ipv6
.inet_aton('::')
25 self
.failUnless(a
== '\x00' * 16)
28 a
= dns
.ipv6
.inet_aton('::1')
29 self
.failUnless(a
== '\x00' * 15 + '\x01')
32 a
= dns
.ipv6
.inet_aton('::10.0.0.1')
33 self
.failUnless(a
== '\x00' * 12 + '\x0a\x00\x00\x01')
36 a
= dns
.ipv6
.inet_aton('abcd::dcba')
37 self
.failUnless(a
== '\xab\xcd' + '\x00' * 12 + '\xdc\xba')
40 a
= dns
.ipv6
.inet_aton('1:2:3:4:5:6:7:8')
41 self
.failUnless(a
== \
42 '00010002000300040005000600070008'.decode('hex_codec'))
44 def test_bad_aton1(self
):
46 a
= dns
.ipv6
.inet_aton('abcd:dcba')
47 self
.failUnlessRaises(dns
.exception
.SyntaxError, bad
)
49 def test_bad_aton2(self
):
51 a
= dns
.ipv6
.inet_aton('abcd::dcba::1')
52 self
.failUnlessRaises(dns
.exception
.SyntaxError, bad
)
54 def test_bad_aton3(self
):
56 a
= dns
.ipv6
.inet_aton('1:2:3:4:5:6:7:8:9')
57 self
.failUnlessRaises(dns
.exception
.SyntaxError, bad
)
60 a
= dns
.ipv6
.inet_aton('::')
61 self
.failUnless(a
== '\x00' * 16)
64 a
= dns
.ipv6
.inet_aton('::1')
65 self
.failUnless(a
== '\x00' * 15 + '\x01')
68 a
= dns
.ipv6
.inet_aton('::10.0.0.1')
69 self
.failUnless(a
== '\x00' * 12 + '\x0a\x00\x00\x01')
72 a
= dns
.ipv6
.inet_aton('abcd::dcba')
73 self
.failUnless(a
== '\xab\xcd' + '\x00' * 12 + '\xdc\xba')
76 b
= '00010002000300040005000600070008'.decode('hex_codec')
77 t
= dns
.ipv6
.inet_ntoa(b
)
78 self
.failUnless(t
== '1:2:3:4:5:6:7:8')
82 t
= dns
.ipv6
.inet_ntoa(b
)
83 self
.failUnless(t
== '::')
86 b
= '\x00' * 15 + '\x01'
87 t
= dns
.ipv6
.inet_ntoa(b
)
88 self
.failUnless(t
== '::1')
91 b
= '\x80' + '\x00' * 15
92 t
= dns
.ipv6
.inet_ntoa(b
)
93 self
.failUnless(t
== '8000::')
96 b
= '\x01\xcd' + '\x00' * 12 + '\x03\xef'
97 t
= dns
.ipv6
.inet_ntoa(b
)
98 self
.failUnless(t
== '1cd::3ef')
100 def test_ntoa6(self
):
101 b
= 'ffff00000000ffff000000000000ffff'.decode('hex_codec')
102 t
= dns
.ipv6
.inet_ntoa(b
)
103 self
.failUnless(t
== 'ffff:0:0:ffff::ffff')
105 def test_ntoa7(self
):
106 b
= '00000000ffff000000000000ffffffff'.decode('hex_codec')
107 t
= dns
.ipv6
.inet_ntoa(b
)
108 self
.failUnless(t
== '0:0:ffff::ffff:ffff')
110 def test_ntoa8(self
):
111 b
= 'ffff0000ffff00000000ffff00000000'.decode('hex_codec')
112 t
= dns
.ipv6
.inet_ntoa(b
)
113 self
.failUnless(t
== 'ffff:0:ffff::ffff:0:0')
115 def test_ntoa9(self
):
116 b
= '0000000000000000000000000a000001'.decode('hex_codec')
117 t
= dns
.ipv6
.inet_ntoa(b
)
118 self
.failUnless(t
== '::10.0.0.1')
120 def test_ntoa10(self
):
121 b
= '0000000000000000000000010a000001'.decode('hex_codec')
122 t
= dns
.ipv6
.inet_ntoa(b
)
123 self
.failUnless(t
== '::1:a00:1')
125 def test_ntoa11(self
):
126 b
= '00000000000000000000ffff0a000001'.decode('hex_codec')
127 t
= dns
.ipv6
.inet_ntoa(b
)
128 self
.failUnless(t
== '::ffff:10.0.0.1')
130 def test_ntoa12(self
):
131 b
= '000000000000000000000000ffffffff'.decode('hex_codec')
132 t
= dns
.ipv6
.inet_ntoa(b
)
133 self
.failUnless(t
== '::255.255.255.255')
135 def test_ntoa13(self
):
136 b
= '00000000000000000000ffffffffffff'.decode('hex_codec')
137 t
= dns
.ipv6
.inet_ntoa(b
)
138 self
.failUnless(t
== '::ffff:255.255.255.255')
140 def test_ntoa14(self
):
141 b
= '0000000000000000000000000001ffff'.decode('hex_codec')
142 t
= dns
.ipv6
.inet_ntoa(b
)
143 self
.failUnless(t
== '::0.1.255.255')
145 def test_bad_ntoa1(self
):
147 a
= dns
.ipv6
.inet_ntoa('')
148 self
.failUnlessRaises(ValueError, bad
)
150 def test_bad_ntoa2(self
):
152 a
= dns
.ipv6
.inet_ntoa('\x00' * 17)
153 self
.failUnlessRaises(ValueError, bad
)
155 if __name__
== '__main__':