entry.py (4969B)
1 import logging 2 import datetime 3 import unittest 4 import os 5 6 from usawa import EntryPart, Entry, DemoWallet, ACL, UnitIndex, Asset 7 from usawa.error import ACLError 8 import lxml.etree 9 10 logging.basicConfig(level=logging.DEBUG) 11 logg = logging.getLogger() 12 13 testdir = os.path.realpath(os.path.dirname(__file__)) 14 15 class TestEntry(unittest.TestCase): 16 17 def setUp(self): 18 self.parent = bytes.fromhex('0cf9180a764aba863a67b6d72f0918bc131c6772642cb2dce5a34f0a702f9470ddc2bf125c12198b1995c233c34b4afd346c54a2334c350a948a51b6e8b4e6b6') 19 self.ref = '1bda7dfa-b8fd-400d-8b42-1d2861ad7f70' 20 self.description = "foo bar baz" 21 self.dtreg = datetime.datetime.now() 22 self.uidx = UnitIndex('FOO') 23 24 25 def test_entry_serialize(self): 26 dst = EntryPart('FOO', 'asset', 'foo', 1337) 27 src = EntryPart('FOO', 'income', 'foo', 1337, debit=True) 28 o = Entry(42, datetime.datetime.strptime('2025-11-11', '%Y-%m-%d'), parent=self.parent, ref=self.ref, description=self.description, tx_datereg=self.dtreg) 29 o.add_part(src, debit=True) 30 o.add_part(dst) 31 32 s = o.serialize() 33 o = Entry.deserialize(s) 34 ss = o.serialize() 35 36 self.assertEqual(s, ss) 37 38 39 def test_wallet_create(self): 40 pk = bytes.fromhex('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c') 41 o = DemoWallet() 42 o = DemoWallet(privatekey=pk) 43 pubk = o.pubkey() 44 oo = DemoWallet(publickey=pubk) 45 self.assertEqual(o.pubkey(), oo.pubkey()) 46 47 48 def test_entry_sign_verify(self): 49 dst = EntryPart('FOO', 'asset', 'foo', 1337) 50 src = EntryPart('FOO', 'income', 'foo', 1337, debit=True) 51 o = Entry(42, datetime.datetime.strptime('2025-11-11', '%Y-%m-%d'), parent=self.parent, ref=self.ref, description=self.description, tx_datereg=self.dtreg) 52 o.add_part(src, debit=True) 53 o.add_part(dst) 54 wallet = DemoWallet() 55 data = o.wrap(wallet=wallet) 56 r = Entry.unwrap(data) 57 58 59 def test_entry_sign_verify_imported(self): 60 dst = EntryPart('FOO', 'asset', 'foo', 1337) 61 src = EntryPart('FOO', 'income', 'foo', 1337, debit=True) 62 o = Entry(42, datetime.datetime.strptime('2025-11-11', '%Y-%m-%d'), parent=self.parent, ref=self.ref, description=self.description, tx_datereg=self.dtreg) 63 o.add_part(src, debit=True) 64 o.add_part(dst) 65 wallet = DemoWallet() 66 (digest, sig, msg) = o.sign(wallet) 67 tree = o.to_tree() 68 s = lxml.etree.tostring(tree, method='c14n2') 69 logg.debug('string {}'.format(s)) 70 71 tree = lxml.etree.fromstring(s) 72 o = Entry.from_tree(tree, self.uidx) 73 o.verify(wallet) 74 75 76 def test_entry_acl_verify(self): 77 dst = EntryPart('FOO', 'asset', 'foo', 1337) 78 src = EntryPart('FOO', 'income', 'foo', 1337, debit=True) 79 o = Entry(42, datetime.datetime.strptime('2025-11-11', '%Y-%m-%d'), parent=self.parent, ref=self.ref, description=self.description, tx_datereg=self.dtreg) 80 o.add_part(src, debit=True) 81 o.add_part(dst) 82 wallet = DemoWallet() 83 data = o.wrap(wallet) 84 pubk_wrong = bytes.fromhex('72f25d90ef4cfecda8fa2c47561af5af0a10a92bfd15986b1f916358bf6ac8a37858a14d27329506a3766bad0f34d2e04caf397c1607b4380eb33c97d37dfc37') 85 acl = ACL() 86 with self.assertRaises(ACLError): 87 Entry.unwrap(data, acl=acl) 88 acl.add(pubk_wrong, label='wrong') 89 with self.assertRaises(ACLError): 90 Entry.unwrap(data, acl=acl) 91 acl.add(wallet.pubkey(), label='right') 92 Entry.unwrap(data, acl=acl) 93 94 95 def test_entry_export_import(self): 96 dst = EntryPart('FOO', 'asset', 'foo', 1337) 97 src = EntryPart('FOO', 'income', 'foo', 1337, debit=True) 98 o = Entry(42, datetime.datetime.strptime('2025-11-11', '%Y-%m-%d'), parent=self.parent, ref=self.ref, description=self.description, tx_datereg=self.dtreg) 99 o.add_part(src, debit=True) 100 o.add_part(dst) 101 wallet = DemoWallet() 102 o.sign(wallet) 103 tree = o.to_tree() 104 105 s = lxml.etree.tostring(tree) 106 tree = lxml.etree.fromstring(s) 107 tree = Entry.from_tree(tree, self.uidx) 108 109 110 def test_entry_attach(self): 111 dst = EntryPart('FOO', 'asset', 'foo', 1337) 112 src = EntryPart('FOO', 'income', 'foo', 1337, debit=True) 113 o = Entry(42, datetime.datetime.strptime('2025-11-11', '%Y-%m-%d'), parent=self.parent, ref=self.ref, description=self.description, tx_datereg=self.dtreg) 114 o.add_part(src, debit=True) 115 o.add_part(dst) 116 117 fp = os.path.join(testdir, 'test.xml') 118 asset = Asset.from_file(fp) 119 o.attach(asset) 120 wallet = DemoWallet() 121 o.sign(wallet) 122 tree = o.to_tree() 123 124 s = lxml.etree.tostring(tree) 125 tree = lxml.etree.fromstring(s) 126 entry = Entry.from_tree(tree, self.uidx) 127 128 129 if __name__ == '__main__': 130 unittest.main()