-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathtest_deserializer.py
More file actions
94 lines (73 loc) · 4.78 KB
/
Copy pathtest_deserializer.py
File metadata and controls
94 lines (73 loc) · 4.78 KB
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from crypto.transactions.deserializer import Deserializer
from crypto.transactions.types.multipayment import Multipayment
from crypto.transactions.types.transfer import Transfer
from crypto.transactions.types.username_registration import UsernameRegistration
from crypto.transactions.types.username_resignation import UsernameResignation
from crypto.transactions.types.vote import Vote
from crypto.transactions.types.unvote import Unvote
from crypto.transactions.types.validator_registration import ValidatorRegistration
from crypto.transactions.types.validator_resignation import ValidatorResignation
def assert_deserialized(fixture, keys):
deserializer = Deserializer.new(fixture['serialized'])
transaction = deserializer.deserialize()
for key in keys:
assert transaction.data[key] == fixture['data'][key], f"Mismatch in {key}"
assert transaction.serialize().hex() == fixture['serialized']
assert transaction.verify()
return transaction
def test_deserialize_transfer(load_transaction_fixture):
fixture = load_transaction_fixture('transactions/transfer')
transaction = assert_deserialized(fixture, ['hash', 'nonce', 'gasPrice', 'gas', 'value', 'v', 'r', 's'])
assert isinstance(transaction, Transfer)
assert transaction.data['value'] == '100000000'
def test_deserialize_vote(load_transaction_fixture):
fixture = load_transaction_fixture('transactions/vote')
transaction = assert_deserialized(fixture, ['hash', 'nonce', 'gasPrice', 'gas', 'v', 'r', 's'])
assert isinstance(transaction, Vote)
assert transaction.data['vote'].lower() == '0xc3bbe9b1cee1ff85ad72b87414b0e9b7f2366763'
assert transaction.data['hash'] == fixture['data']['hash']
def test_deserialize_unvote(load_transaction_fixture):
fixture = load_transaction_fixture('transactions/unvote')
transaction = assert_deserialized(fixture, ['hash', 'nonce', 'gasPrice', 'gas', 'v', 'r', 's'])
assert isinstance(transaction, Unvote)
def test_deserialize_validator_registration(load_transaction_fixture):
fixture = load_transaction_fixture('transactions/validator-registration')
transaction = assert_deserialized(fixture, ['hash', 'nonce', 'gasPrice', 'gas', 'value', 'v', 'r', 's'])
assert isinstance(transaction, ValidatorRegistration)
assert transaction.data['value'] == '250000000000000000000'
def test_deserialize_validator_resignation(load_transaction_fixture):
fixture = load_transaction_fixture('transactions/validator-resignation')
transaction = assert_deserialized(fixture, ['hash', 'nonce', 'gasPrice', 'gas', 'v', 'r', 's'])
assert isinstance(transaction, ValidatorResignation)
def test_deserialize_username_registration(load_transaction_fixture):
fixture = load_transaction_fixture('transactions/username-registration')
transaction = assert_deserialized(fixture, ['hash', 'nonce', 'gasPrice', 'gas', 'v', 'r', 's'])
assert isinstance(transaction, UsernameRegistration)
def test_deserialize_username_resignation(load_transaction_fixture):
fixture = load_transaction_fixture('transactions/username-resignation')
transaction = assert_deserialized(fixture, ['hash', 'nonce', 'gasPrice', 'gas', 'v', 'r', 's'])
assert isinstance(transaction, UsernameResignation)
def test_deserialize_multipayment(load_transaction_fixture):
fixture = load_transaction_fixture('transactions/multipayment')
transaction = assert_deserialized(fixture, ['hash', 'nonce', 'gasPrice', 'gas', 'value', 'v', 'r', 's'])
assert isinstance(transaction, Multipayment)
def test_parse_number():
assert Deserializer._Deserializer__parse_number('0x01') == 1
assert Deserializer._Deserializer__parse_number('0x0100') == 256
assert Deserializer._Deserializer__parse_number('0x010000') == 65536
assert Deserializer._Deserializer__parse_number('0x') == 0
def test_parse_hex():
assert Deserializer._Deserializer__parse_hex('0x01') == '01'
assert Deserializer._Deserializer__parse_hex('0x0100') == '0100'
assert Deserializer._Deserializer__parse_hex('0x010000') == '010000'
assert Deserializer._Deserializer__parse_hex('0x') == ''
assert Deserializer._Deserializer__parse_hex('0x52B7D2DCC80CD2E4000000') == '52B7D2DCC80CD2E4000000'
def test_parse_big_number():
assert Deserializer._Deserializer__parse_big_number('0x01') == '1'
assert Deserializer._Deserializer__parse_big_number('0x0100') == '256'
assert Deserializer._Deserializer__parse_big_number('0x010000') == '65536'
assert Deserializer._Deserializer__parse_big_number('0x') == '0'
assert Deserializer._Deserializer__parse_big_number('0x52B7D2DCC80CD2E4000000') == '100000000000000000000000000'
def test_parse_address():
assert Deserializer._Deserializer__parse_address('0x52B7D2DCC80CD2E4000000') == '0x52B7D2DCC80CD2E4000000'
assert Deserializer._Deserializer__parse_address('0x') is None