Skip to content

Commit 0ca11be

Browse files
committed
Merge pull request #99
f16583f more tests for bitcoin/net.py (Antoine Le Calvez) bfd852e removed unused imports (Antoine Le Calvez)
2 parents 339c4f7 + f16583f commit 0ca11be

File tree

6 files changed

+78
-31
lines changed

6 files changed

+78
-31
lines changed

bitcoin/core/serialize.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ def __new__(cls):
172172
@classmethod
173173
def stream_serialize(cls, obj, f):
174174
raise NotImplementedError
175+
175176
@classmethod
176177
def stream_deserialize(cls, f):
177178
raise NotImplementedError
@@ -184,7 +185,9 @@ def serialize(cls, obj):
184185

185186
@classmethod
186187
def deserialize(cls, buf):
187-
return cls.stream_deserialize(_BytesIO(buf))
188+
if isinstance(buf, str) or isinstance(buf, bytes):
189+
buf = _BytesIO(buf)
190+
return cls.stream_deserialize(buf)
188191

189192

190193
class VarIntSerializer(Serializer):
@@ -266,7 +269,8 @@ def stream_deserialize(cls, f):
266269
return r
267270

268271

269-
class intVectorSerialzer(Serializer):
272+
class intVectorSerializer(Serializer):
273+
270274
@classmethod
271275
def stream_serialize(cls, ints, f):
272276
l = len(ints)
@@ -279,7 +283,8 @@ def stream_deserialize(cls, f):
279283
l = VarIntSerializer.stream_deserialize(f)
280284
ints = []
281285
for i in range(l):
282-
ints.append(struct.unpack(b"<i", ser_read(f, 4)))
286+
ints.append(struct.unpack(b"<i", ser_read(f, 4))[0])
287+
return ints
283288

284289

285290
class VarStringSerializer(Serializer):
@@ -362,7 +367,7 @@ def uint256_to_shortstr(u):
362367
'BytesSerializer',
363368
'VectorSerializer',
364369
'uint256VectorSerializer',
365-
'intVectorSerialzer',
370+
'intVectorSerializer',
366371
'VarStringSerializer',
367372
'uint256_from_str',
368373
'uint256_from_compact',

bitcoin/net.py

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from bitcoin.core.serialize import (
1818
Serializable,
1919
VarStringSerializer,
20+
intVectorSerializer,
2021
ser_read,
2122
uint256VectorSerializer,
2223
)
@@ -42,35 +43,30 @@ def stream_deserialize(cls, f, without_time=False):
4243
if c.protover >= CADDR_TIME_VERSION and not without_time:
4344
c.nTime = struct.unpack(b"<I", ser_read(f, 4))[0]
4445
c.nServices = struct.unpack(b"<Q", ser_read(f, 8))[0]
45-
46+
4647
packedIP = ser_read(f, 16)
4748

48-
if bytes(packedIP[0:12]) == IPV4_COMPAT: # IPv4
49+
if bytes(packedIP[0:12]) == IPV4_COMPAT: # IPv4
4950
c.ip = socket.inet_ntop(socket.AF_INET, packedIP[12:16])
5051
else: #IPv6
5152
c.ip = socket.inet_ntop(socket.AF_INET6, packedIP)
5253

5354
c.port = struct.unpack(b">H", ser_read(f, 2))[0]
5455
return c
5556

56-
5757
def stream_serialize(self, f, without_time=False):
5858
if self.protover >= CADDR_TIME_VERSION and not without_time:
5959
f.write(struct.pack(b"<I", self.nTime))
6060
f.write(struct.pack(b"<Q", self.nServices))
6161

62-
protocol = socket.AF_INET
6362
if ":" in self.ip: # determine if address is IPv6
6463
f.write(socket.inet_pton(socket.AF_INET6, self.ip))
65-
else:
64+
else:
6665
f.write(self.pchReserved)
6766
f.write(socket.inet_pton(socket.AF_INET, self.ip))
6867

6968
f.write(struct.pack(b">H", self.port))
7069

71-
72-
73-
7470
def __repr__(self):
7571
return "CAddress(nTime=%d nServices=%i ip=%s port=%i)" % (self.nTime, self.nServices, self.ip, self.port)
7672

@@ -145,10 +141,10 @@ def stream_deserialize(cls, f):
145141
c.nExpiration = struct.unpack(b"<q", ser_read(f,8))[0]
146142
c.nID = struct.unpack(b"<i", ser_read(f,4))[0]
147143
c.nCancel = struct.unpack(b"<i", ser_read(f,4))[0]
148-
c.setCancel = intVectorSerialzer.deserialize(f)
144+
c.setCancel = intVectorSerializer.deserialize(f)
149145
c.nMinVer = struct.unpack(b"<i", ser_read(f,4))[0]
150146
c.nMaxVer = struct.unpack(b"<i", ser_read(f,4))[0]
151-
c.setSubVer = VarStringSerializer.deserialize(f)
147+
c.setSubVer = intVectorSerializer.deserialize(f)
152148
c.nPriority = struct.unpack(b"<i", ser_read(f,4))[0]
153149
c.strComment = VarStringSerializer.deserialize(f)
154150
c.strStatusBar = VarStringSerializer.deserialize(f)
@@ -161,14 +157,14 @@ def stream_serialize(self, f):
161157
f.write(struct.pack(b"<q", self.nExpiration))
162158
f.write(struct.pack(b"<i", self.nID))
163159
f.write(struct.pack(b"<i", self.nCancel))
164-
f.write(ser_int_vector(self.setCancel))
160+
f.write(intVectorSerializer.serialize(self.setCancel))
165161
f.write(struct.pack(b"<i", self.nMinVer))
166162
f.write(struct.pack(b"<i", self.nMaxVer))
167-
f.write(ser_string_vector(self.setSubVer))
163+
f.write(intVectorSerializer.serialize(self.setSubVer))
168164
f.write(struct.pack(b"<i", self.nPriority))
169-
f.write(ser_string(self.strComment))
170-
f.write(ser_string(self.strStatusBar))
171-
f.write(ser_string(self.strReserved))
165+
f.write(VarStringSerializer.serialize(self.strComment))
166+
f.write(VarStringSerializer.serialize(self.strStatusBar))
167+
f.write(VarStringSerializer.serialize(self.strReserved))
172168

173169
def __repr__(self):
174170
return "CUnsignedAlert(nVersion %d, nRelayUntil %d, nExpiration %d, nID %d, nCancel %d, nMinVer %d, nMaxVer %d, nPriority %d, strComment %s, strStatusBar %s, strReserved %s)" % (self.nVersion, self.nRelayUntil, self.nExpiration, self.nID, self.nCancel, self.nMinVer, self.nMaxVer, self.nPriority, self.strComment, self.strStatusBar, self.strReserved)

bitcoin/tests/test_bloom.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111

1212
from __future__ import absolute_import, division, print_function, unicode_literals
1313

14-
import json
15-
import os
1614
import unittest
1715

1816
import bitcoin.core

bitcoin/tests/test_key.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import unittest
1515

1616
from bitcoin.core.key import *
17-
from bitcoin.core import x, b2x
17+
from bitcoin.core import x
1818

1919
class Test_CPubKey(unittest.TestCase):
2020
def test(self):

bitcoin/tests/test_net.py

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,60 @@
1111

1212
import unittest
1313

14-
from bitcoin.net import CAddress
14+
from bitcoin.net import CAddress, CAlert, CUnsignedAlert, CInv
1515

16-
class Test_CAddress(unittest.TestCase):
16+
# Py3 compatibility
17+
import sys
18+
19+
if sys.version > '3':
20+
from io import BytesIO as _BytesIO
21+
else:
22+
from cStringIO import StringIO as _BytesIO
23+
24+
25+
class TestUnsignedAlert(unittest.TestCase):
26+
def test_serialization(self):
27+
alert = CUnsignedAlert()
28+
alert.setCancel = [1, 2, 3]
29+
alert.strComment = b"Comment"
30+
stream = _BytesIO()
31+
32+
alert.stream_serialize(stream)
33+
serialized = _BytesIO(stream.getvalue())
34+
35+
deserialized = CUnsignedAlert.stream_deserialize(serialized)
36+
self.assertEqual(deserialized, alert)
37+
38+
39+
class TestCAlert(unittest.TestCase):
40+
def test_serialization(self):
41+
alert = CAlert()
42+
alert.setCancel = [1, 2, 3]
43+
alert.strComment = b"Comment"
44+
stream = _BytesIO()
45+
46+
alert.stream_serialize(stream)
47+
serialized = _BytesIO(stream.getvalue())
48+
49+
deserialized = CAlert.stream_deserialize(serialized)
50+
self.assertEqual(deserialized, alert)
51+
52+
53+
class TestCInv(unittest.TestCase):
54+
def test_serialization(self):
55+
inv = CInv()
56+
inv.type = 123
57+
inv.hash = b"0" * 32
58+
stream = _BytesIO()
59+
60+
inv.stream_serialize(stream)
61+
serialized = _BytesIO(stream.getvalue())
62+
63+
deserialized = CInv.stream_deserialize(serialized)
64+
self.assertEqual(deserialized, inv)
65+
66+
67+
class TestCAddress(unittest.TestCase):
1768
def test_serializationSimple(self):
1869
c = CAddress()
1970
cSerialized = c.serialize()
@@ -29,13 +80,12 @@ def test_serializationIPv4(self):
2980

3081
cSerialized = c.serialize()
3182
cDeserialized = CAddress.deserialize(cSerialized)
32-
83+
3384
self.assertEqual(c, cDeserialized)
34-
85+
3586
cSerializedTwice = cDeserialized.serialize()
3687
self.assertEqual(cSerialized, cSerializedTwice)
3788

38-
3989
def test_serializationIPv6(self):
4090
c = CAddress()
4191
c.ip = "1234:ABCD:1234:ABCD:1234:00:ABCD:1234"
@@ -44,13 +94,12 @@ def test_serializationIPv6(self):
4494

4595
cSerialized = c.serialize()
4696
cDeserialized = CAddress.deserialize(cSerialized)
47-
97+
4898
self.assertEqual(c, cDeserialized)
49-
99+
50100
cSerializedTwice = cDeserialized.serialize()
51101
self.assertEqual(cSerialized, cSerializedTwice)
52102

53-
54103
def test_serializationDiff(self):
55104
# Sanity check that the serialization code preserves differences
56105
c1 = CAddress()

bitcoin/tests/test_serialize.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from __future__ import absolute_import, division, print_function, unicode_literals
1313

1414
import unittest
15-
import os
1615

1716
from binascii import unhexlify
1817

0 commit comments

Comments
 (0)