diff --git a/tests/api/bma/test_blockchain.py b/tests/api/bma/test_blockchain.py index a4c3b41d9ed1ac66b195466e9006ce08b2ac46cd..dd509f79f5d89f0a62e06adfa1d991510ddcf5ba 100644 --- a/tests/api/bma/test_blockchain.py +++ b/tests/api/bma/test_blockchain.py @@ -1,37 +1,39 @@ import unittest + import jsonschema -import aiohttp -from tests.api.webserver import WebFunctionalSetupMixin, web, asyncio -from duniterpy.documents import BMAEndpoint -from duniterpy.api.bma.blockchain import API, parameters, block, current, hardship, memberships, newcomers, \ - certifications, joiners, actives, leavers, ud, tx, blocks, \ - BLOCK_NUMBERS_SCHEMA, BLOCK_SCHEMA, BLOCKS_SCHEMA, HARDSHIP_SCHEMA, MEMBERSHIPS_SCHEMA, PARAMETERS_SCHEMA + +from duniterpy.api.bma.blockchain import parameters, block, current, hardship, memberships, newcomers, \ + certifications, joiners, actives, leavers, ud, tx, BLOCK_NUMBERS_SCHEMA, BLOCK_SCHEMA, BLOCKS_SCHEMA, \ + HARDSHIP_SCHEMA, MEMBERSHIPS_SCHEMA, PARAMETERS_SCHEMA +from duniterpy.api.client import Client +from duniterpy.api.endpoint import BMAEndpoint +from tests.api.webserver import WebFunctionalSetupMixin, web -class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): +class TestBmaBlockchain(WebFunctionalSetupMixin, unittest.TestCase): def test_parameters(self): json_sample = { - "currency": "g1", - "c": 0.0488, - "dt": 86400, - "ud0": 1000, - "sigPeriod": 432000, - "sigStock": 100, - "sigWindow": 5259600, - "sigValidity": 63115200, - "sigQty": 5, - "idtyWindow": 5259600, - "msWindow": 5259600, - "xpercent": 0.8, - "msValidity": 31557600, - "stepMax": 5, - "medianTimeBlocks": 24, - "avgGenTime": 300, - "dtDiffEval": 12, - "percentRot": 0.67, - "udTime0": 1488970800, - "udReevalTime0": 1490094000, - "dtReeval": 15778800 + "currency": "g1", + "c": 0.0488, + "dt": 86400, + "ud0": 1000, + "sigPeriod": 432000, + "sigStock": 100, + "sigWindow": 5259600, + "sigValidity": 63115200, + "sigQty": 5, + "idtyWindow": 5259600, + "msWindow": 5259600, + "xpercent": 0.8, + "msValidity": 31557600, + "stepMax": 5, + "medianTimeBlocks": 24, + "avgGenTime": 300, + "dtDiffEval": 12, + "percentRot": 0.67, + "udTime0": 1488970800, + "udReevalTime0": 1490094000, + "dtReeval": 15778800 } jsonschema.validate(json_sample, PARAMETERS_SCHEMA) @@ -43,65 +45,158 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/blockchain/parameters', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await parameters(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(parameters) + await client.close() self.loop.run_until_complete(go()) def test_schema_block_0(self): json_sample = { - "version": 2, - "nonce": 10144, - "number": 0, - "powMin": 3, - "time": 1421838980, - "medianTime": 1421838980, - "membersCount": 4, - "monetaryMass": 0, - "currency": "meta_brouzouf", - "issuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", - "signature": "+78w7251vvRdhoIJ6IWHEiEOLxNrmfQf45Y5sYvPdnAdXkVpO1unMV5YA/G5Vhphyz1dICrbeKCPM5qbFsoWAQ==", - "hash": "00063EB6E83F8717CEF1D25B3E2EE308374A14B1", - "inner_hash": "00063EB6E83F8717CEF1D25B3E2EE308374A14B1", - "parameters": "0.1:86400:100:604800:2629800:3:3:2629800:3:11:600:20:144:0.67", - "previousHash": None, - "previousIssuer": None, - "dividend": None, - "membersChanges": [], - "identities": [ - "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:Ot3zIp/nsHT3zgJy+2YcXPL6vaM5WFsD+F8w3qnJoBRuBG6lv761zoaExp2iyUnm8fDAyKPpMxRK2kf437QSCw==:1421787800:inso", - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:GZKLgaxJKL+GqxVLePMt8OVLJ6qTLrib5Mr/j2gjiNRY2k485YLB2OlzhBzZVnD3xLs0xi69JUfmLnM54j3aCA==:1421786393:cgeek", - "BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:th576H89dfymkG7/sH+DAIzjlmIqNEW6zY3ONrGeAml+k3f1ver399kYnEgG5YCaKXnnVM7P0oJHah80BV3mDw==:1421790376:moul", - "37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:XRmbTYFkPeGVEU2mJzzN4h1oVNDsZ4yyNZlDAfBm9CWhBsZ82QqX9GPHye2hBxxiu4Nz1BHgQiME6B4JcAC8BA==:1421787461:galuel" - ], - "joiners": [ - "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:ccJm3F44eLMhQtnQY/7+14SWCDqVTL3Miw65hBVpV+YiUSUknIGhBNN0C0Cf+Pf0/pa1tjucW8Us3z5IklFSDg==:0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421787800:inso", - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:1lFIiaR0QX0jibr5zQpXVGzBvMGqcsTRlmHiwGz5HOAZT8PTdVUb5q6YGZ6qAUZjdMjPmhLaiMIpYc47wUnzBA==:0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421786393:cgeek", - "BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:ctyAhpTRrAAOhFJukWI8RBr//nqYYdQibVzjOfaCdcWLb3TNFKrNBBothNsq/YrYHr7gKrpoftucf/oxLF8zAg==:0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421790376:moul", - "37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:uoiGaC5b7kWqtqdPxwatPk9QajZHCNT9rf8/8ud9Rli24z/igcOf0Zr4A6RTAIKWUq9foW39VqJe+Y9R3rhACw==:0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421787461:galuel" - ], - "actives": [], - "leavers": [], - "excluded": [], - "revoked": [], - "certifications": [ - "37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:3wmCVW8AbVxRFm2PuLXD9UTCIg93MhUblZJvlYrDldSV4xuA7mZCd8TV4vb/6Bkc0FMQgBdHtpXrQ7dpo20uBA==", - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:7UMQsUjLvuiZKIzOH5rrZDdDi5rXUo69EuQulY1Zm42xpRx/Gt5CkoTcJ/Mu83oElQbcZZTz/lVJ6IS0jzMiCQ==", - "BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:twWSY9etI82FLEHzhdqIoHsC9ehWCA7DCPiGxDLCWGPO4TG77hwtn3RcC68qoKHCib577JCp+fcKyp2vyI6FDA==", - "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:7K5MHkO8ibf5SchmPkRrmsg9owEZZ23uEMJJSQYG7L3PUmAKmmV/0VSjivxXH8gJGQBGsXQoK79x1jsYnj2nAg==", - "BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:Jua4FcEJFptSE5OoG1/Mgzx4e9jgGnYu7t8g1sqqPujI9hRhLFNXbQXedPS1q1OD5vWivA045gKOq/gnj8opDg==", - "37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:R/DV4/wYjvBG09QSOGtnxd3bfPFhVjEE5Uy3BsBMVUvjLsgxjf8NgLhYVozcHTRWS43ArxlXKfS5m3+KIPhhAQ==", - "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:4hP+ahJK021akL4UxB6c5QLaGJXa9eapd3nfdFQe+Xy87f/XLhj8BCa22XbbOlyGdaZRT3AYzbCL2UD5tI8mCw==", - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:sZTQJr0d/xQnxrIIdSePUJpSTOa8v6IYGXMF2fVDZxQU8vwfzPm2dUKTaF0nU6E9wOYszzkBHaXL85nir+WtCQ==", - "37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:hDuBkoFhWhR/FgOU1+9SbQGBMIr47xqUzw1ZMERaPQo4aWm0WFbZurG4lvuJZzTyG6RF/gSw4VPvYZFPxWmADg==", - "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:79ZVrBehElVZh82fJdR18IJx06GkEVZTbwdHH4zb0S6VaGwdtLh1rvomm4ukBvUc8r/suTweG/SScsJairXNAg==", - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:e/ai9E4G5CFB9Qi329e0ffYpZMgxj8mM4rviqIr2+UESA0UG86OuAAyHO11hYeyolZRiU8I7WdtNE98B1uZuBg==", - "BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:q4PCneYkcPH8AHEqEvqTtYQWslhlYO2B87aReuOl1uPczn5Q3VkZFAsU48ZTYryeyWp2nxdQojdFYhlAUNchAw==" - ], - "transactions": [], - "raw": "Version: 1\nType: block\nCurrency: meta_brouzouf\nNonce: 10144\nNumber: 0\nPoWMin: 3\nTime: 1421838980\nMedianTime: 1421838980\nIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nparameters: 0.1:86400:100:604800:2629800:3:3:2629800:3:11:600:20:144:0.67\nMembersCount: 4\nIdentities:\n8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:Ot3zIp/nsHT3zgJy+2YcXPL6vaM5WFsD+F8w3qnJoBRuBG6lv761zoaExp2iyUnm8fDAyKPpMxRK2kf437QSCw==:1421787800:inso\nHnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:GZKLgaxJKL+GqxVLePMt8OVLJ6qTLrib5Mr/j2gjiNRY2k485YLB2OlzhBzZVnD3xLs0xi69JUfmLnM54j3aCA==:1421786393:cgeek\nBMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:th576H89dfymkG7/sH+DAIzjlmIqNEW6zY3ONrGeAml+k3f1ver399kYnEgG5YCaKXnnVM7P0oJHah80BV3mDw==:1421790376:moul\n37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:XRmbTYFkPeGVEU2mJzzN4h1oVNDsZ4yyNZlDAfBm9CWhBsZ82QqX9GPHye2hBxxiu4Nz1BHgQiME6B4JcAC8BA==:1421787461:galuel\nJoiners:\n8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:ccJm3F44eLMhQtnQY/7+14SWCDqVTL3Miw65hBVpV+YiUSUknIGhBNN0C0Cf+Pf0/pa1tjucW8Us3z5IklFSDg==:0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421787800:inso\nHnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:1lFIiaR0QX0jibr5zQpXVGzBvMGqcsTRlmHiwGz5HOAZT8PTdVUb5q6YGZ6qAUZjdMjPmhLaiMIpYc47wUnzBA==:0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421786393:cgeek\nBMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:ctyAhpTRrAAOhFJukWI8RBr//nqYYdQibVzjOfaCdcWLb3TNFKrNBBothNsq/YrYHr7gKrpoftucf/oxLF8zAg==:0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421790376:moul\n37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:uoiGaC5b7kWqtqdPxwatPk9QajZHCNT9rf8/8ud9Rli24z/igcOf0Zr4A6RTAIKWUq9foW39VqJe+Y9R3rhACw==:0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421787461:galuel\nActives:\nLeavers:\nExcluded:\nCertifications:\n37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:3wmCVW8AbVxRFm2PuLXD9UTCIg93MhUblZJvlYrDldSV4xuA7mZCd8TV4vb/6Bkc0FMQgBdHtpXrQ7dpo20uBA==\nHnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:7UMQsUjLvuiZKIzOH5rrZDdDi5rXUo69EuQulY1Zm42xpRx/Gt5CkoTcJ/Mu83oElQbcZZTz/lVJ6IS0jzMiCQ==\nBMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:twWSY9etI82FLEHzhdqIoHsC9ehWCA7DCPiGxDLCWGPO4TG77hwtn3RcC68qoKHCib577JCp+fcKyp2vyI6FDA==\n8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:7K5MHkO8ibf5SchmPkRrmsg9owEZZ23uEMJJSQYG7L3PUmAKmmV/0VSjivxXH8gJGQBGsXQoK79x1jsYnj2nAg==\nBMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:Jua4FcEJFptSE5OoG1/Mgzx4e9jgGnYu7t8g1sqqPujI9hRhLFNXbQXedPS1q1OD5vWivA045gKOq/gnj8opDg==\n37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:R/DV4/wYjvBG09QSOGtnxd3bfPFhVjEE5Uy3BsBMVUvjLsgxjf8NgLhYVozcHTRWS43ArxlXKfS5m3+KIPhhAQ==\n8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:4hP+ahJK021akL4UxB6c5QLaGJXa9eapd3nfdFQe+Xy87f/XLhj8BCa22XbbOlyGdaZRT3AYzbCL2UD5tI8mCw==\nHnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:sZTQJr0d/xQnxrIIdSePUJpSTOa8v6IYGXMF2fVDZxQU8vwfzPm2dUKTaF0nU6E9wOYszzkBHaXL85nir+WtCQ==\n37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:hDuBkoFhWhR/FgOU1+9SbQGBMIr47xqUzw1ZMERaPQo4aWm0WFbZurG4lvuJZzTyG6RF/gSw4VPvYZFPxWmADg==\n8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:79ZVrBehElVZh82fJdR18IJx06GkEVZTbwdHH4zb0S6VaGwdtLh1rvomm4ukBvUc8r/suTweG/SScsJairXNAg==\nHnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:e/ai9E4G5CFB9Qi329e0ffYpZMgxj8mM4rviqIr2+UESA0UG86OuAAyHO11hYeyolZRiU8I7WdtNE98B1uZuBg==\nBMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:q4PCneYkcPH8AHEqEvqTtYQWslhlYO2B87aReuOl1uPczn5Q3VkZFAsU48ZTYryeyWp2nxdQojdFYhlAUNchAw==\nTransactions:\n" -} + "version": 2, + "nonce": 10144, + "number": 0, + "powMin": 3, + "time": 1421838980, + "medianTime": 1421838980, + "membersCount": 4, + "monetaryMass": 0, + "currency": "meta_brouzouf", + "issuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", + "signature": "+78w7251vvRdhoIJ6IWHEiEOLxNrmfQf45Y5sYvPdnAdXkVpO1unMV5YA/G5Vhphyz1dICrbeKCPM5qbFsoWAQ==", + "hash": "00063EB6E83F8717CEF1D25B3E2EE308374A14B1", + "inner_hash": "00063EB6E83F8717CEF1D25B3E2EE308374A14B1", + "parameters": "0.1:86400:100:604800:2629800:3:3:2629800:3:11:600:20:144:0.67", + "previousHash": None, + "previousIssuer": None, + "dividend": None, + "membersChanges": [], + "identities": [ + "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:\ + Ot3zIp/nsHT3zgJy+2YcXPL6vaM5WFsD+F8w3qnJoBRuBG6lv761zoaExp2iyUnm8fDAyKPpMxRK2kf437QSCw==:\ + 1421787800:inso", + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:\ + GZKLgaxJKL+GqxVLePMt8OVLJ6qTLrib5Mr/j2gjiNRY2k485YLB2OlzhBzZVnD3xLs0xi69JUfmLnM54j3aCA==:\ + 1421786393:cgeek", + "BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:\ + th576H89dfymkG7/sH+DAIzjlmIqNEW6zY3ONrGeAml+k3f1ver399kYnEgG5YCaKXnnVM7P0oJHah80BV3mDw==:\ + 1421790376:moul", + "37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:\ + XRmbTYFkPeGVEU2mJzzN4h1oVNDsZ4yyNZlDAfBm9CWhBsZ82QqX9GPHye2hBxxiu4Nz1BHgQiME6B4JcAC8BA==:\ + 1421787461:galuel" + ], + "joiners": [ + "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:\ + ccJm3F44eLMhQtnQY/7+14SWCDqVTL3Miw65hBVpV+YiUSUknIGhBNN0C0Cf+Pf0/pa1tjucW8Us3z5IklFSDg==:\ + 0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421787800:inso", + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:\ + 1lFIiaR0QX0jibr5zQpXVGzBvMGqcsTRlmHiwGz5HOAZT8PTdVUb5q6YGZ6qAUZjdMjPmhLaiMIpYc47wUnzBA==:\ + 0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421786393:cgeek", + "BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:\ + ctyAhpTRrAAOhFJukWI8RBr//nqYYdQibVzjOfaCdcWLb3TNFKrNBBothNsq/YrYHr7gKrpoftucf/oxLF8zAg==:\ + 0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421790376:moul", + "37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:\ + uoiGaC5b7kWqtqdPxwatPk9QajZHCNT9rf8/8ud9Rli24z/igcOf0Zr4A6RTAIKWUq9foW39VqJe+Y9R3rhACw==:\ + 0:DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421787461:galuel" + ], + "actives": [], + "leavers": [], + "excluded": [], + "revoked": [], + "certifications": [ + "37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:\ + 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:\ + 3wmCVW8AbVxRFm2PuLXD9UTCIg93MhUblZJvlYrDldSV4xuA7mZCd8TV4vb/6Bkc0FMQgBdHtpXrQ7dpo20uBA==", + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:\ + 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:\ + 7UMQsUjLvuiZKIzOH5rrZDdDi5rXUo69EuQulY1Zm42xpRx/Gt5CkoTcJ/Mu83oElQbcZZTz/lVJ6IS0jzMiCQ==", + "BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:\ + 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:\ + twWSY9etI82FLEHzhdqIoHsC9ehWCA7DCPiGxDLCWGPO4TG77hwtn3RcC68qoKHCib577JCp+fcKyp2vyI6FDA==", + "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:\ + HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:\ + 7K5MHkO8ibf5SchmPkRrmsg9owEZZ23uEMJJSQYG7L3PUmAKmmV/0VSjivxXH8gJGQBGsXQoK79x1jsYnj2nAg==", + "BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:\ + HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:\ + Jua4FcEJFptSE5OoG1/Mgzx4e9jgGnYu7t8g1sqqPujI9hRhLFNXbQXedPS1q1OD5vWivA045gKOq/gnj8opDg==", + "37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:\ + HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:\ + R/DV4/wYjvBG09QSOGtnxd3bfPFhVjEE5Uy3BsBMVUvjLsgxjf8NgLhYVozcHTRWS43ArxlXKfS5m3+KIPhhAQ==", + "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:\ + BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:\ + 4hP+ahJK021akL4UxB6c5QLaGJXa9eapd3nfdFQe+Xy87f/XLhj8BCa22XbbOlyGdaZRT3AYzbCL2UD5tI8mCw==", + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:\ + BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:\ + sZTQJr0d/xQnxrIIdSePUJpSTOa8v6IYGXMF2fVDZxQU8vwfzPm2dUKTaF0nU6E9wOYszzkBHaXL85nir+WtCQ==", + "37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:\ + BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:\ + hDuBkoFhWhR/FgOU1+9SbQGBMIr47xqUzw1ZMERaPQo4aWm0WFbZurG4lvuJZzTyG6RF/gSw4VPvYZFPxWmADg==", + "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:\ + 37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:\ + 79ZVrBehElVZh82fJdR18IJx06GkEVZTbwdHH4zb0S6VaGwdtLh1rvomm4ukBvUc8r/suTweG/SScsJairXNAg==", + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:\ + 37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:\ + e/ai9E4G5CFB9Qi329e0ffYpZMgxj8mM4rviqIr2+UESA0UG86OuAAyHO11hYeyolZRiU8I7WdtNE98B1uZuBg==", + "BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:\ + 37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:\ + q4PCneYkcPH8AHEqEvqTtYQWslhlYO2B87aReuOl1uPczn5Q3VkZFAsU48ZTYryeyWp2nxdQojdFYhlAUNchAw==" + ], + "transactions": [], + "raw": "Version: 1\nType: block\nCurrency: meta_brouzouf\nNonce: 10144\nNumber: 0\nPoWMin: 3\n\ + Time: 1421838980\nMedianTime: 1421838980\nIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n\ + parameters: 0.1:86400:100:604800:2629800:3:3:2629800:3:11:600:20:144:0.67\nMembersCount: 4\n\ + Identities:\n\ + 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:\ + Ot3zIp/nsHT3zgJy+2YcXPL6vaM5WFsD+F8w3qnJoBRuBG6lv761zoaExp2iyUnm8fDAyKPpMxRK2kf437QSCw==:\ + 1421787800:inso\n\ + HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:\ + GZKLgaxJKL+GqxVLePMt8OVLJ6qTLrib5Mr/j2gjiNRY2k485YLB2OlzhBzZVnD3xLs0xi69JUfmLnM54j3aCA==:\ + 1421786393:cgeek\n\ + BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:\ + th576H89dfymkG7/sH+DAIzjlmIqNEW6zY3ONrGeAml+k3f1ver399kYnEgG5YCaKXnnVM7P0oJHah80BV3mDw==:\ + 1421790376:moul\n\ + 37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:\ + XRmbTYFkPeGVEU2mJzzN4h1oVNDsZ4yyNZlDAfBm9CWhBsZ82QqX9GPHye2hBxxiu4Nz1BHgQiME6B4JcAC8BA==:\ + 1421787461:galuel\n\ + Joiners:\n8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:\ + ccJm3F44eLMhQtnQY/7+14SWCDqVTL3Miw65hBVpV+YiUSUknIGhBNN0C0Cf+Pf0/pa1tjucW8Us3z5IklFSDg==:0:\ + DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421787800:inso\n\ + HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:\ + 1lFIiaR0QX0jibr5zQpXVGzBvMGqcsTRlmHiwGz5HOAZT8PTdVUb5q6YGZ6qAUZjdMjPmhLaiMIpYc47wUnzBA==:0:\ + DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421786393:cgeek\n\ + BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:\ + ctyAhpTRrAAOhFJukWI8RBr//nqYYdQibVzjOfaCdcWLb3TNFKrNBBothNsq/YrYHr7gKrpoftucf/oxLF8zAg==:0:\ + DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421790376:moul\n\ + 37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:\ + uoiGaC5b7kWqtqdPxwatPk9QajZHCNT9rf8/8ud9Rli24z/igcOf0Zr4A6RTAIKWUq9foW39VqJe+Y9R3rhACw==:0:\ + DA39A3EE5E6B4B0D3255BFEF95601890AFD80709:1421787461:galuel\n\ + Actives:\nLeavers:\nExcluded:\nCertifications:\n\ + 37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:\ + 3wmCVW8AbVxRFm2PuLXD9UTCIg93MhUblZJvlYrDldSV4xuA7mZCd8TV4vb/6Bkc0FMQgBdHtpXrQ7dpo20uBA==\n\ + HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:\ + 7UMQsUjLvuiZKIzOH5rrZDdDi5rXUo69EuQulY1Zm42xpRx/Gt5CkoTcJ/Mu83oElQbcZZTz/lVJ6IS0jzMiCQ==\n\ + BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:0:\ + twWSY9etI82FLEHzhdqIoHsC9ehWCA7DCPiGxDLCWGPO4TG77hwtn3RcC68qoKHCib577JCp+fcKyp2vyI6FDA==\n\ + 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:\ + 7K5MHkO8ibf5SchmPkRrmsg9owEZZ23uEMJJSQYG7L3PUmAKmmV/0VSjivxXH8gJGQBGsXQoK79x1jsYnj2nAg==\n\ + BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:\ + Jua4FcEJFptSE5OoG1/Mgzx4e9jgGnYu7t8g1sqqPujI9hRhLFNXbQXedPS1q1OD5vWivA045gKOq/gnj8opDg==\n\ + 37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:0:\ + R/DV4/wYjvBG09QSOGtnxd3bfPFhVjEE5Uy3BsBMVUvjLsgxjf8NgLhYVozcHTRWS43ArxlXKfS5m3+KIPhhAQ==\n\ + 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:\ + 4hP+ahJK021akL4UxB6c5QLaGJXa9eapd3nfdFQe+Xy87f/XLhj8BCa22XbbOlyGdaZRT3AYzbCL2UD5tI8mCw==\n\ + HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:\ + sZTQJr0d/xQnxrIIdSePUJpSTOa8v6IYGXMF2fVDZxQU8vwfzPm2dUKTaF0nU6E9wOYszzkBHaXL85nir+WtCQ==\n\ + 37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:0:\ + hDuBkoFhWhR/FgOU1+9SbQGBMIr47xqUzw1ZMERaPQo4aWm0WFbZurG4lvuJZzTyG6RF/gSw4VPvYZFPxWmADg==\n\ + 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:\ + 79ZVrBehElVZh82fJdR18IJx06GkEVZTbwdHH4zb0S6VaGwdtLh1rvomm4ukBvUc8r/suTweG/SScsJairXNAg==\n\ + HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:\ + e/ai9E4G5CFB9Qi329e0ffYpZMgxj8mM4rviqIr2+UESA0UG86OuAAyHO11hYeyolZRiU8I7WdtNE98B1uZuBg==\n\ + BMAVuMDcGhYAV4wA27DL1VXX2ZARZGJYaMwpf7DJFMYH:37qBxM4hLV2jfyYo2bNzAjkeLngLr2r7G2HpdpKieVxw:0:\ + q4PCneYkcPH8AHEqEvqTtYQWslhlYO2B87aReuOl1uPczn5Q3VkZFAsU48ZTYryeyWp2nxdQojdFYhlAUNchAw==\n\ + Transactions:\n" + } jsonschema.validate(json_sample, BLOCK_SCHEMA) def test_block_bad(self): @@ -112,9 +207,9 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/blockchain/block/100', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await block(connection, 100) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(block, 100) + await client.close() self.loop.run_until_complete(go()) @@ -126,9 +221,9 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/blockchain/current', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await current(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(current) + await client.close() self.loop.run_until_complete(go()) @@ -152,10 +247,14 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): "dividend": None, "membersChanges": [], "identities": [ - "APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:Lld5KezKGDUgrvnNjKuEGZmWJZNYDYtsPJajuOdrEr7MKXIwJYBRTouWPlCoPP9OQBF7qi7dpX+qKeYcjVPPDA==:1443950660:Alcide" + "APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:\ + Lld5KezKGDUgrvnNjKuEGZmWJZNYDYtsPJajuOdrEr7MKXIwJYBRTouWPlCoPP9OQBF7qi7dpX+qKeYcjVPPDA==:\ + 1443950660:Alcide" ], "joiners": [ - "APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:XpdVaX1TKnvjRfJRpFnpVDQOmxfDKKUp3YuSG/Ic8DHAT2SJKFSr+th3mK14JHiBtKMsNpVwFyV7TlKNHgnjAw==:34428:0000074D458E92EF09C2305BF0D191DD7CF1D452:1443950660:Alcide" + "APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:\ + XpdVaX1TKnvjRfJRpFnpVDQOmxfDKKUp3YuSG/Ic8DHAT2SJKFSr+th3mK14JHiBtKMsNpVwFyV7TlKNHgnjAw==:34428:\ + 0000074D458E92EF09C2305BF0D191DD7CF1D452:1443950660:Alcide" ], "actives": [], "leavers": [], @@ -163,19 +262,48 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): "revoked": [], "inner_hash": "00063EB6E83F8717CEF1D25B3E2EE308374A14B1", "certifications": [ - "ATkjQPa4sn4LBF69jqEPzFtRdHYJs6MJQjvP8JdN7MtN:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34434:oGGiYVBAfhreOzWS1M7HQ0OHHUWAA3NdU29XAca3/3mbfD581QBxeADVR+Bj7kTBqrAxwpwyODtaHyZZNYI3AA==", - "2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34432:KFKYioosI3FAvyfTKiWyQqRGUros03S/NITNxShB/3L1LI4P7XSLp2+hFbCK375ODm1g/fnwfzOoorOKPGIOAw==", - "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34431:nKDTapgYR/nMEEkLaT4ygLCHlxmiACzi4Zv+gzRJN8hGdirQAMN1FNpJ2RVli4V4z+7y3lklPidOX2Aln8ZNBA==" + "ATkjQPa4sn4LBF69jqEPzFtRdHYJs6MJQjvP8JdN7MtN:\ + APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34434:\ + oGGiYVBAfhreOzWS1M7HQ0OHHUWAA3NdU29XAca3/3mbfD581QBxeADVR+Bj7kTBqrAxwpwyODtaHyZZNYI3AA==", + "2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:\ + APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34432:\ + KFKYioosI3FAvyfTKiWyQqRGUros03S/NITNxShB/3L1LI4P7XSLp2+hFbCK375ODm1g/fnwfzOoorOKPGIOAw==", + "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:\ + APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34431:\ + nKDTapgYR/nMEEkLaT4ygLCHlxmiACzi4Zv+gzRJN8hGdirQAMN1FNpJ2RVli4V4z+7y3lklPidOX2Aln8ZNBA==" ], "transactions": [], - "raw": "Version: 1\nType: block\nCurrency: meta_brouzouf\nNonce: 162294\nNumber: 34435\nPoWMin: 5\nTime: 1443895887\nMedianTime: 1443881487\nIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nPreviousHash: 00000D21F80687248A8C02F16BB19A975B4F983D\nPreviousIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nMembersCount: 19\nIdentities:\nAPGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:Lld5KezKGDUgrvnNjKuEGZmWJZNYDYtsPJajuOdrEr7MKXIwJYBRTouWPlCoPP9OQBF7qi7dpX+qKeYcjVPPDA==:1443950660:Alcide\nJoiners:\nAPGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:XpdVaX1TKnvjRfJRpFnpVDQOmxfDKKUp3YuSG/Ic8DHAT2SJKFSr+th3mK14JHiBtKMsNpVwFyV7TlKNHgnjAw==:34428:0000074D458E92EF09C2305BF0D191DD7CF1D452:1443950660:Alcide\nActives:\nLeavers:\nExcluded:\nCertifications:\nATkjQPa4sn4LBF69jqEPzFtRdHYJs6MJQjvP8JdN7MtN:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34434:oGGiYVBAfhreOzWS1M7HQ0OHHUWAA3NdU29XAca3/3mbfD581QBxeADVR+Bj7kTBqrAxwpwyODtaHyZZNYI3AA==\n2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34432:KFKYioosI3FAvyfTKiWyQqRGUros03S/NITNxShB/3L1LI4P7XSLp2+hFbCK375ODm1g/fnwfzOoorOKPGIOAw==\n8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34431:nKDTapgYR/nMEEkLaT4ygLCHlxmiACzi4Zv+gzRJN8hGdirQAMN1FNpJ2RVli4V4z+7y3lklPidOX2Aln8ZNBA==\nTransactions:\n" - } + "raw": "Version: 1\nType: block\nCurrency: meta_brouzouf\nNonce: 162294\nNumber: 34435\nPoWMin: 5\n\ + Time: 1443895887\nMedianTime: 1443881487\nIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n\ + PreviousHash: 00000D21F80687248A8C02F16BB19A975B4F983D\n\ + PreviousIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nMembersCount: 19\n\ + Identities:\n\ + APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:\ + Lld5KezKGDUgrvnNjKuEGZmWJZNYDYtsPJajuOdrEr7MKXIwJYBRTouWPlCoPP9OQBF7qi7dpX+qKeYcjVPPDA==:\ + 1443950660:Alcide\n\ + Joiners:\n\ + APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:\ + XpdVaX1TKnvjRfJRpFnpVDQOmxfDKKUp3YuSG/Ic8DHAT2SJKFSr+th3mK14JHiBtKMsNpVwFyV7TlKNHgnjAw==:34428:\ + 0000074D458E92EF09C2305BF0D191DD7CF1D452:1443950660:Alcide\n\ + Actives:\nLeavers:\nExcluded:\n\ + Certifications:\n\ + ATkjQPa4sn4LBF69jqEPzFtRdHYJs6MJQjvP8JdN7MtN:\ + APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34434:\ + oGGiYVBAfhreOzWS1M7HQ0OHHUWAA3NdU29XAca3/3mbfD581QBxeADVR+Bj7kTBqrAxwpwyODtaHyZZNYI3AA==\n\ + 2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:\ + APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34432:\ + KFKYioosI3FAvyfTKiWyQqRGUros03S/NITNxShB/3L1LI4P7XSLp2+hFbCK375ODm1g/fnwfzOoorOKPGIOAw==\n\ + 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:\ + APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34431:\ + nKDTapgYR/nMEEkLaT4ygLCHlxmiACzi4Zv+gzRJN8hGdirQAMN1FNpJ2RVli4V4z+7y3lklPidOX2Aln8ZNBA==\n\ + Transactions:\n" + } jsonschema.validate(json_sample, BLOCK_SCHEMA) def test_schema_hardship(self): json_sample = { - "block": 40432, - "level": 4 + "block": 40432, + "level": 4 } jsonschema.validate(json_sample, HARDSHIP_SCHEMA) @@ -185,11 +313,13 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): return web.Response(body=b'{}', content_type='application/json') async def go(): - _, port, url = await self.create_server('GET', '/blockchain/hardship/8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU', handler) + _, port, url = await self.create_server('GET', + '/blockchain/hardship/8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU', + handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await hardship(connection, "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU") + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(hardship, "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU") + await client.close() self.loop.run_until_complete(go()) @@ -225,11 +355,13 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): return web.Response(body=b'{}', content_type='application/json') async def go(): - _, port, url = await self.create_server('GET', '/blockchain/memberships/8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU', handler) + _, port, url = await self.create_server('GET', + '/blockchain/memberships/8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU', + handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await memberships(connection, "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU") + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(memberships, "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU") + await client.close() self.loop.run_until_complete(go()) @@ -249,9 +381,9 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/blockchain/with/newcomers', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await newcomers(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(newcomers) + await client.close() self.loop.run_until_complete(go()) @@ -271,9 +403,9 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/blockchain/with/certs', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await certifications(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(certifications) + await client.close() self.loop.run_until_complete(go()) @@ -293,9 +425,9 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/blockchain/with/joiners', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await joiners(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(joiners) + await client.close() self.loop.run_until_complete(go()) @@ -315,9 +447,9 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/blockchain/with/actives', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await actives(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(actives) + await client.close() self.loop.run_until_complete(go()) @@ -337,9 +469,9 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/blockchain/with/leavers', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await leavers(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(leavers) + await client.close() self.loop.run_until_complete(go()) @@ -353,102 +485,117 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): def test_schema_blocks(self): json_sample = [ - { - "version": 2, - "nonce": 1, - "number": 100, - "powMin": 4, - "time": 1461847414, - "medianTime": 1461847412, - "membersCount": 2, - "monetaryMass": 0, - "unitbase": 0, - "issuersCount": 0, - "issuersFrame": 0, - "issuersFrameVar": 0, - "currency": "test_net", - "issuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", - "signature": "R6XzQ7DDTam+koGCoEeygxFAuy9Uh/by6GS8mMx5rFWqusxaUYRJW4QkeGmqT9yHTpXCbHwZZbpIgm3SbrrVDg==", - "hash": "2C49A15983AEA3EBFD6B430876933A72C11D8D20E49ED94C4066557C1B528973", - "parameters": "", - "previousHash": "12DD8737F97BD3AC0B7E4B10F770F101A0D3EB3EEC858023CBCA06BB4AA9EBE6", - "previousIssuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", - "inner_hash": "0C9002C192ADB5D913C78D813216E56677CCF53A4DE0764C30E46E858D4854A5", - "dividend": None, - "identities": [], - "joiners": [], - "actives": [], - "leavers": [], - "revoked": [], - "excluded": [], - "certifications": [], - "transactions": [], - "raw": "Version: 2\nType: block\nCurrency: test_net\nNumber: 100\nPoWMin: 4\nTime: 1461847414\nMedianTime: 1461847412\nIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nPreviousHash: 12DD8737F97BD3AC0B7E4B10F770F101A0D3EB3EEC858023CBCA06BB4AA9EBE6\nPreviousIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nMembersCount: 2\nIdentities:\nJoiners:\nActives:\nLeavers:\nRevoked:\nExcluded:\nCertifications:\nTransactions:\nInnerHash: 0C9002C192ADB5D913C78D813216E56677CCF53A4DE0764C30E46E858D4854A5\nNonce: 1\n" - }, - { - "version": 2, - "nonce": 1, - "number": 101, - "powMin": 4, - "time": 1461847414, - "medianTime": 1461847412, - "membersCount": 2, - "monetaryMass": 0, - "unitbase": 0, - "issuersCount": 0, - "issuersFrame": 0, - "issuersFrameVar": 0, - "currency": "test_net", - "issuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", - "signature": "IDWQCVtI8XxRVqakKc822ayZ8qNzm0kYK3ew1heqMf8aqsMhiS/1IKBi4gBFBXMpO49bX8GkZW/R/TDxiYsUAg==", - "hash": "9A29E79EC06444EEC4ADC9F7C9B720A91A9FC1B66219F641EF71661BD2F28F8F", - "parameters": "", - "previousHash": "2C49A15983AEA3EBFD6B430876933A72C11D8D20E49ED94C4066557C1B528973", - "previousIssuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", - "inner_hash": "A91B10BA4EEB7CF712DC92CAE7F6FF761571929B8BF1A13E1FF5CC402442A10A", - "dividend": None, - "identities": [], - "joiners": [], - "actives": [], - "leavers": [], - "revoked": [], - "excluded": [], - "certifications": [], - "transactions": [], - "raw": "Version: 2\nType: block\nCurrency: test_net\nNumber: 101\nPoWMin: 4\nTime: 1461847414\nMedianTime: 1461847412\nIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nPreviousHash: 2C49A15983AEA3EBFD6B430876933A72C11D8D20E49ED94C4066557C1B528973\nPreviousIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nMembersCount: 2\nIdentities:\nJoiners:\nActives:\nLeavers:\nRevoked:\nExcluded:\nCertifications:\nTransactions:\nInnerHash: A91B10BA4EEB7CF712DC92CAE7F6FF761571929B8BF1A13E1FF5CC402442A10A\nNonce: 1\n" - }, - { - "version": 2, - "nonce": 1, - "number": 102, - "powMin": 4, - "time": 1461847414, - "medianTime": 1461847413, - "membersCount": 2, - "monetaryMass": 0, - "unitbase": 0, - "issuersCount": 0, - "issuersFrame": 0, - "issuersFrameVar": 0, - "currency": "test_net", - "issuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", - "signature": "jUfBfFwzsXyPGi/seEonWHOfq5/lAudASpnpiHhfr7OQhOTYL3RRECy2RVlZAoqJ9FqlcdTSaj+I+FFPBomoBA==", - "hash": "8B6F0E8EA4B9D5A078D679E6004F891CAB5BDE827B51B1090E6B71B1FFB3E727", - "parameters": "", - "previousHash": "9A29E79EC06444EEC4ADC9F7C9B720A91A9FC1B66219F641EF71661BD2F28F8F", - "previousIssuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", - "inner_hash": "301236A7771CBDE30F253E2A42E34BF758450DADDDB37A832328701B04213A59", - "dividend": None, - "identities": [], - "joiners": [], - "actives": [], - "leavers": [], - "revoked": [], - "excluded": [], - "certifications": [], - "transactions": [], - "raw": "Version: 2\nType: block\nCurrency: test_net\nNumber: 102\nPoWMin: 4\nTime: 1461847414\nMedianTime: 1461847413\nIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nPreviousHash: 9A29E79EC06444EEC4ADC9F7C9B720A91A9FC1B66219F641EF71661BD2F28F8F\nPreviousIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nMembersCount: 2\nIdentities:\nJoiners:\nActives:\nLeavers:\nRevoked:\nExcluded:\nCertifications:\nTransactions:\nInnerHash: 301236A7771CBDE30F253E2A42E34BF758450DADDDB37A832328701B04213A59\nNonce: 1\n" - } + { + "version": 2, + "nonce": 1, + "number": 100, + "powMin": 4, + "time": 1461847414, + "medianTime": 1461847412, + "membersCount": 2, + "monetaryMass": 0, + "unitbase": 0, + "issuersCount": 0, + "issuersFrame": 0, + "issuersFrameVar": 0, + "currency": "test_net", + "issuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", + "signature": "R6XzQ7DDTam+koGCoEeygxFAuy9Uh/by6GS8mMx5rFWqusxaUYRJW4QkeGmqT9yHTpXCbHwZZbpIgm3SbrrVDg==", + "hash": "2C49A15983AEA3EBFD6B430876933A72C11D8D20E49ED94C4066557C1B528973", + "parameters": "", + "previousHash": "12DD8737F97BD3AC0B7E4B10F770F101A0D3EB3EEC858023CBCA06BB4AA9EBE6", + "previousIssuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", + "inner_hash": "0C9002C192ADB5D913C78D813216E56677CCF53A4DE0764C30E46E858D4854A5", + "dividend": None, + "identities": [], + "joiners": [], + "actives": [], + "leavers": [], + "revoked": [], + "excluded": [], + "certifications": [], + "transactions": [], + "raw": "Version: 2\nType: block\nCurrency: test_net\nNumber: 100\nPoWMin: 4\nTime: 1461847414\n\ + MedianTime: 1461847412\nIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n\ + PreviousHash: 12DD8737F97BD3AC0B7E4B10F770F101A0D3EB3EEC858023CBCA06BB4AA9EBE6\n\ + PreviousIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n\ + MembersCount: 2\nIdentities:\nJoiners:\nActives:\nLeavers:\nRevoked:\nExcluded:\nCertifications:\n\ + Transactions:\nInnerHash: 0C9002C192ADB5D913C78D813216E56677CCF53A4DE0764C30E46E858D4854A5\nNonce: 1\n" + }, + { + "version": 2, + "nonce": 1, + "number": 101, + "powMin": 4, + "time": 1461847414, + "medianTime": 1461847412, + "membersCount": 2, + "monetaryMass": 0, + "unitbase": 0, + "issuersCount": 0, + "issuersFrame": 0, + "issuersFrameVar": 0, + "currency": "test_net", + "issuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", + "signature": "IDWQCVtI8XxRVqakKc822ayZ8qNzm0kYK3ew1heqMf8aqsMhiS/1IKBi4gBFBXMpO49bX8GkZW/R/TDxiYsUAg==", + "hash": "9A29E79EC06444EEC4ADC9F7C9B720A91A9FC1B66219F641EF71661BD2F28F8F", + "parameters": "", + "previousHash": "2C49A15983AEA3EBFD6B430876933A72C11D8D20E49ED94C4066557C1B528973", + "previousIssuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", + "inner_hash": "A91B10BA4EEB7CF712DC92CAE7F6FF761571929B8BF1A13E1FF5CC402442A10A", + "dividend": None, + "identities": [], + "joiners": [], + "actives": [], + "leavers": [], + "revoked": [], + "excluded": [], + "certifications": [], + "transactions": [], + "raw": "Version: 2\nType: block\nCurrency: test_net\nNumber: 101\nPoWMin: 4\nTime: 1461847414\n\ + MedianTime: 1461847412\nIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n\ + PreviousHash: 2C49A15983AEA3EBFD6B430876933A72C11D8D20E49ED94C4066557C1B528973\n\ + PreviousIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nMembersCount: 2\nIdentities:\nJoiners:\n\ + Actives:\nLeavers:\nRevoked:\nExcluded:\nCertifications:\nTransactions:\n\ + InnerHash: A91B10BA4EEB7CF712DC92CAE7F6FF761571929B8BF1A13E1FF5CC402442A10A\nNonce: 1\n" + }, + { + "version": 2, + "nonce": 1, + "number": 102, + "powMin": 4, + "time": 1461847414, + "medianTime": 1461847413, + "membersCount": 2, + "monetaryMass": 0, + "unitbase": 0, + "issuersCount": 0, + "issuersFrame": 0, + "issuersFrameVar": 0, + "currency": "test_net", + "issuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", + "signature": "jUfBfFwzsXyPGi/seEonWHOfq5/lAudASpnpiHhfr7OQhOTYL3RRECy2RVlZAoqJ9FqlcdTSaj+I+FFPBomoBA==", + "hash": "8B6F0E8EA4B9D5A078D679E6004F891CAB5BDE827B51B1090E6B71B1FFB3E727", + "parameters": "", + "previousHash": "9A29E79EC06444EEC4ADC9F7C9B720A91A9FC1B66219F641EF71661BD2F28F8F", + "previousIssuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", + "inner_hash": "301236A7771CBDE30F253E2A42E34BF758450DADDDB37A832328701B04213A59", + "dividend": None, + "identities": [], + "joiners": [], + "actives": [], + "leavers": [], + "revoked": [], + "excluded": [], + "certifications": [], + "transactions": [], + "raw": "Version: 2\nType: block\nCurrency: test_net\nNumber: 102\nPoWMin: 4\nTime: 1461847414\n\ + MedianTime: 1461847413\nIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n\ + PreviousHash: 9A29E79EC06444EEC4ADC9F7C9B720A91A9FC1B66219F641EF71661BD2F28F8F\n\ + PreviousIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nMembersCount: 2\nIdentities:\nJoiners:\n\ + Actives:\nLeavers:\nRevoked:\nExcluded:\nCertifications:\nTransactions:\n\ + InnerHash: 301236A7771CBDE30F253E2A42E34BF758450DADDDB37A832328701B04213A59\nNonce: 1\n" + } ] jsonschema.validate(json_sample, BLOCKS_SCHEMA) @@ -460,9 +607,9 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/blockchain/with/ud', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await ud(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(ud) + await client.close() self.loop.run_until_complete(go()) @@ -482,8 +629,8 @@ class Test_BMA_blockchain(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/blockchain/with/tx', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await tx(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(tx) + await client.close() self.loop.run_until_complete(go()) diff --git a/tests/api/bma/test_network.py b/tests/api/bma/test_network.py index a4600ab7e087699b123428fe7763797f4c7f6697..7b5db693a2927a0e5d3bed1f61d097ce38de03fd 100644 --- a/tests/api/bma/test_network.py +++ b/tests/api/bma/test_network.py @@ -1,26 +1,26 @@ import unittest -import aiohttp import jsonschema -from duniterpy.documents import BMAEndpoint -from tests.api.webserver import WebFunctionalSetupMixin, web from duniterpy.api.bma import network +from duniterpy.api.client import Client +from duniterpy.api.endpoint import BMAEndpoint +from tests.api.webserver import WebFunctionalSetupMixin, web -class TestBMANetwork(WebFunctionalSetupMixin, unittest.TestCase): +class TestBmaNetwork(WebFunctionalSetupMixin, unittest.TestCase): def test_peering(self): json_sample = { - "version": "1", - "currency": "beta_brouzouf", - "pubkey": "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY", - "endpoints": [ - "BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9001", - "BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9002", - "OTHER_PROTOCOL 88.77.66.55 9001", - ], - "signature": "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r" + "version": "1", + "currency": "beta_brouzouf", + "pubkey": "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY", + "endpoints": [ + "BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9001", + "BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9002", + "OTHER_PROTOCOL 88.77.66.55 9001", + ], + "signature": "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r" } jsonschema.validate(json_sample, network.PEERING_SCHEMA) @@ -32,35 +32,35 @@ class TestBMANetwork(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/network/peering', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await network.peering(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(network.peering) + await client.close() self.loop.run_until_complete(go()) def test_peers_root(self): json_sample = { - "depth": 3, - "nodesCount": 6, - "leavesCount": 5, - "root": "114B6E61CB5BB93D862CA3C1DFA8B99E313E66E9" + "depth": 3, + "nodesCount": 6, + "leavesCount": 5, + "root": "114B6E61CB5BB93D862CA3C1DFA8B99E313E66E9" } jsonschema.validate(json_sample, network.PEERS_SCHEMA) def test_peers_leaf(self): json_sample = { - "hash": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", - "value": { - "version": "1", - "currency": "beta_brouzouf", - "pubkey": "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY", - "endpoints": [ - "BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9001", - "BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9002", - "OTHER_PROTOCOL 88.77.66.55 9001", - ], - "signature": "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r" - } + "hash": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "value": { + "version": "1", + "currency": "beta_brouzouf", + "pubkey": "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY", + "endpoints": [ + "BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9001", + "BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9002", + "OTHER_PROTOCOL 88.77.66.55 9001", + ], + "signature": "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r" + } } jsonschema.validate(json_sample, network.PEERS_SCHEMA) @@ -72,8 +72,8 @@ class TestBMANetwork(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/network/peering/peers', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await network.peers(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(network.peers) + await client.close() self.loop.run_until_complete(go()) diff --git a/tests/api/bma/test_tx.py b/tests/api/bma/test_tx.py index 3e8d78fb78f1fdd93510151caaedcff03c6bf757..e9d7676ba080360416eb7f31a99f2f166f5c3db1 100644 --- a/tests/api/bma/test_tx.py +++ b/tests/api/bma/test_tx.py @@ -1,122 +1,124 @@ import unittest + import jsonschema -import aiohttp -from duniterpy.documents import BMAEndpoint + from duniterpy.api.bma.tx import history, sources, blocks, HISTORY_SCHEMA, SOURCES_SCHEMA -from tests.api.webserver import WebFunctionalSetupMixin, web, asyncio +from duniterpy.api.client import Client +from duniterpy.api.endpoint import BMAEndpoint +from tests.api.webserver import WebFunctionalSetupMixin, web -class Test_BMA_TX(WebFunctionalSetupMixin, unittest.TestCase): +class TestBmaTx(WebFunctionalSetupMixin, unittest.TestCase): def test_bma_tx_history(self): json_sample = { - "currency": "meta_brouzouf", - "pubkey": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", - "history": { - "sent": [ - { - "version": 1, - "issuers": [ - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk" - ], - "inputs": [ - "0:D:125:000A8362AE0C1B8045569CE07735DE4C18E81586:100" - ], - "outputs": [ - "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:5", - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:95" - ], - "comment": "Essai", - "signatures": [ - "8zzWSU+GNSNURnH1NKPT/TBoxngEc/0wcpPSbs7FqknGxud+94knvT+dpe99k6NwyB5RXvOVnKAr4p9/KEluCw==" - ], - "hash": "FC7BAC2D94AC9C16AFC5C0150C2C9E7FBB2E2A09", - "block_number": 173, - "time": 1421932545 - } - ], - "received": [ - { - "version": 1, - "issuers": [ - "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU" - ], - "inputs": [ - "0:D:125:000A8362AE0C1B8045569CE07735DE4C18E81586:100" - ], - "outputs": [ - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:7", - "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:93" - ], - "comment": "", - "signatures": [ - "1Mn8q3K7N+R4GZEpAUm+XSyty1Uu+BuOy5t7BIRqgZcKqiaxfhAUfDBOcuk2i4TJy1oA5Rntby8hDN+cUCpvDg==" - ], - "hash": "5FB3CB80A982E2BDFBB3EA94673A74763F58CB2A", - "block_number": 207, - "time": 1421955525 - }, - { - "version": 1, - "issuers": [ - "J78bPUvLjxmjaEkdjxWLeENQtcfXm7iobqB49uT1Bgp3" - ], - "inputs": [ - "0:T:15128:6A50FF82410387B239489CE38B34E0FDDE1697FE:10000" - ], - "outputs": [ - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:42", - "J78bPUvLjxmjaEkdjxWLeENQtcfXm7iobqB49uT1Bgp3:9958" - ], - "comment": "", - "signatures": [ - "XhBcCPizPiWdKeXWg1DX/FTQst6DppEjsYEtoAZNA0P11reXtgc9IduiIxNWzNjt/KvTw8APkSI8/Uf31QQVDA==" - ], - "hash": "ADE7D1C4002D6BC10013C34CE22733A55173BAD4", - "block_number": 15778, - "time": 1432314584 - } - ], - "sending": [ - { - "version": 1, - "issuers": [ - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk" - ], - "inputs": [ - "0:D:8196:000022AD426FE727C707D847EC2168A64C577706:5872" - ], - "outputs": [ - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:5871" - "2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:1", - ], - "comment": "some comment", - "signatures": [ - "kLOAAy7/UldQk7zz4I7Jhv9ICuGYRx7upl8wH8RYL43MMF6+7MbPh3QRN1qNFGpAfa3XMWIQmbUWtjZKP6OfDA==" - ], - "hash": "BA41013F2CD38EDFFA9D38A275F8532DD906A2DE" - } - ], - "receiving": [ - { - "version": 1, - "issuers": [ - "2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX" - ], - "inputs": [ - "0:D:8196:000022AD426FE727C707D847EC2168A64C577706:4334" - ], - "outputs": [ - "2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:1", - "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:4333" - ], - "comment": "some comment", - "signatures": [ - "DRiZinUEKrrLiJNogtydzwEbmETrvWiLNYXCiJsRekxTLyU5g4LjnwiLp/XlvmIekjJK5n/gullLWrHUBvFSAw==" - ], - "hash": "A0A511131CD0E837204A9441B3354918AC4CE671" - } - ] - } + "currency": "meta_brouzouf", + "pubkey": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", + "history": { + "sent": [ + { + "version": 1, + "issuers": [ + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk" + ], + "inputs": [ + "0:D:125:000A8362AE0C1B8045569CE07735DE4C18E81586:100" + ], + "outputs": [ + "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:5", + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:95" + ], + "comment": "Essai", + "signatures": [ + "8zzWSU+GNSNURnH1NKPT/TBoxngEc/0wcpPSbs7FqknGxud+94knvT+dpe99k6NwyB5RXvOVnKAr4p9/KEluCw==" + ], + "hash": "FC7BAC2D94AC9C16AFC5C0150C2C9E7FBB2E2A09", + "block_number": 173, + "time": 1421932545 + } + ], + "received": [ + { + "version": 1, + "issuers": [ + "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU" + ], + "inputs": [ + "0:D:125:000A8362AE0C1B8045569CE07735DE4C18E81586:100" + ], + "outputs": [ + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:7", + "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:93" + ], + "comment": "", + "signatures": [ + "1Mn8q3K7N+R4GZEpAUm+XSyty1Uu+BuOy5t7BIRqgZcKqiaxfhAUfDBOcuk2i4TJy1oA5Rntby8hDN+cUCpvDg==" + ], + "hash": "5FB3CB80A982E2BDFBB3EA94673A74763F58CB2A", + "block_number": 207, + "time": 1421955525 + }, + { + "version": 1, + "issuers": [ + "J78bPUvLjxmjaEkdjxWLeENQtcfXm7iobqB49uT1Bgp3" + ], + "inputs": [ + "0:T:15128:6A50FF82410387B239489CE38B34E0FDDE1697FE:10000" + ], + "outputs": [ + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:42", + "J78bPUvLjxmjaEkdjxWLeENQtcfXm7iobqB49uT1Bgp3:9958" + ], + "comment": "", + "signatures": [ + "XhBcCPizPiWdKeXWg1DX/FTQst6DppEjsYEtoAZNA0P11reXtgc9IduiIxNWzNjt/KvTw8APkSI8/Uf31QQVDA==" + ], + "hash": "ADE7D1C4002D6BC10013C34CE22733A55173BAD4", + "block_number": 15778, + "time": 1432314584 + } + ], + "sending": [ + { + "version": 1, + "issuers": [ + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk" + ], + "inputs": [ + "0:D:8196:000022AD426FE727C707D847EC2168A64C577706:5872" + ], + "outputs": [ + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:5871" + "2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:1", + ], + "comment": "some comment", + "signatures": [ + "kLOAAy7/UldQk7zz4I7Jhv9ICuGYRx7upl8wH8RYL43MMF6+7MbPh3QRN1qNFGpAfa3XMWIQmbUWtjZKP6OfDA==" + ], + "hash": "BA41013F2CD38EDFFA9D38A275F8532DD906A2DE" + } + ], + "receiving": [ + { + "version": 1, + "issuers": [ + "2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX" + ], + "inputs": [ + "0:D:8196:000022AD426FE727C707D847EC2168A64C577706:4334" + ], + "outputs": [ + "2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:1", + "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:4333" + ], + "comment": "some comment", + "signatures": [ + "DRiZinUEKrrLiJNogtydzwEbmETrvWiLNYXCiJsRekxTLyU5g4LjnwiLp/XlvmIekjJK5n/gullLWrHUBvFSAw==" + ], + "hash": "A0A511131CD0E837204A9441B3354918AC4CE671" + } + ] + } } jsonschema.validate(json_sample, HISTORY_SCHEMA) @@ -128,9 +130,9 @@ class Test_BMA_TX(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/tx/history/pubkey', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await history(connection, 'pubkey') + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(history, 'pubkey') + await client.close() self.loop.run_until_complete(go()) @@ -142,34 +144,34 @@ class Test_BMA_TX(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/tx/history/pubkey/blocks/0/100', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await blocks(connection, 'pubkey', 0, 100) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(blocks, 'pubkey', 0, 100) + await client.close() self.loop.run_until_complete(go()) def test_bma_tx_sources(self): json_sample = { - "currency": "meta_brouzouf", - "pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU", - "sources": [ - { - "pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU", - "type": "T", - "noffset": 34444, - "identifier": "6ACECB199D1B054B2633D0E42C066939B7F8EF1D", - "amount": 1000000, - "base": 1 - }, - { - "pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU", - "type": "D", - "noffset": 34989, - "identifier": "0007CCC9755067008C28E791E6F2B0D4CBE9B894", - "amount": 1730543585843, - "base": 2 - } - ] + "currency": "meta_brouzouf", + "pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU", + "sources": [ + { + "pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU", + "type": "T", + "noffset": 34444, + "identifier": "6ACECB199D1B054B2633D0E42C066939B7F8EF1D", + "amount": 1000000, + "base": 1 + }, + { + "pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU", + "type": "D", + "noffset": 34989, + "identifier": "0007CCC9755067008C28E791E6F2B0D4CBE9B894", + "amount": 1730543585843, + "base": 2 + } + ] } jsonschema.validate(json_sample, SOURCES_SCHEMA) @@ -181,8 +183,8 @@ class Test_BMA_TX(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/tx/sources/pubkey', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await sources(connection, 'pubkey') + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(sources, 'pubkey') + await client.close() self.loop.run_until_complete(go()) diff --git a/tests/api/bma/test_wot.py b/tests/api/bma/test_wot.py index 061890e925ebbc12f92f381c482bac7b18b84ed4..b1d68712da56001b3d2f513e2e40908321700114 100644 --- a/tests/api/bma/test_wot.py +++ b/tests/api/bma/test_wot.py @@ -1,162 +1,164 @@ -import aiohttp +import json import unittest + import jsonschema -import json -from tests.api.webserver import WebFunctionalSetupMixin, web, asyncio -from duniterpy.documents import BMAEndpoint -from duniterpy.api.bma.wot import lookup, members, certified_by, certifiers_of, requirements, \ - REQUIREMENTS_SCHEMA, CERTIFICATIONS_SCHEMA, LOOKUP_SCHEMA, MEMBERS_SCHEMA +from duniterpy.api.bma.wot import lookup, members, certified_by, certifiers_of, REQUIREMENTS_SCHEMA, \ + CERTIFICATIONS_SCHEMA, LOOKUP_SCHEMA, MEMBERS_SCHEMA +from duniterpy.api.client import Client +from duniterpy.api.endpoint import BMAEndpoint +from tests.api.webserver import WebFunctionalSetupMixin, web -class Test_BMA_Wot(WebFunctionalSetupMixin, unittest.TestCase): + +class TestBmaWot(WebFunctionalSetupMixin, unittest.TestCase): def test_bma_wot_lookup(self): json_sample = { - "partial": False, - "results": [ - { - "pubkey": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv", - "uids": [ + "partial": False, + "results": [ { - "uid": "inso", - "meta": { - "timestamp": "0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855" - }, - "revoked": False, - "revoked_on": None, - "revocation_sig": None, - "self": "gTUSERA3IqEzMDvdpiFkTgBBFKwUl7M62e+VCzwyHJTrxvBSB+C+8ImoKsd7pYFAnZ+HL6cJ1p7jyVUIOZGqCw==", - "others": [ - { - "pubkey": "Ds1z6Wd8hNTexBoo3LVG2oXLZN4dC9ZWxoWwnDbF1NEW", - "meta": { - "block_number": 0, - "block_hash": "000003D02B95D3296A4F06DBAC51775C4336A4DC09D0E958DC40033BE7E20F3D" - }, - "uids": [ - "Galuel" - ], - "isMember": True, - "wasMember": True, - "signature": "iK3TOdqrHhUbHNB3cPpmWd8sTL2hz0wiScZmXlRc8WhLg2et3xMjAHMuF+wuiM9/7R3daKZq5dOGF3drOuApAg==" - }, - { - "pubkey": "7F6oyFQywURCACWZZGtG97Girh9EL1kg2WBwftEZxDoJ", - "meta": { - "block_number": 0, - "block_hash": "000003D02B95D3296A4F06DBAC51775C4336A4DC09D0E958DC40033BE7E20F3D" - }, - "uids": [ - "vit" - ], - "isMember": True, - "wasMember": True, - "signature": "eTdxT+2VikgYgdFENy/zmYxFyDDpBuGDBHedS7CzlEfYWU7iClZ9se06QdtzkFtiOtQ1BBkWPVMXxbqF8KSECw==" - }, - ] + "pubkey": "5cnvo5bmR8QbtyNVnkDXWq6n5My6oNLd1o6auJApGCsv", + "uids": [ + { + "uid": "inso", + "meta": { + "timestamp": "0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855" + }, + "revoked": False, + "revoked_on": None, + "revocation_sig": None, + "self": "gTUSERA3IqEzMDvdpiFkTgBBFKwUl7M62e+VCzwyHJTrxvBSB+C+8ImoKsd7pYFAnZ+HL6cJ1p7jyVUIOZGqCw==", + "others": [ + { + "pubkey": "Ds1z6Wd8hNTexBoo3LVG2oXLZN4dC9ZWxoWwnDbF1NEW", + "meta": { + "block_number": 0, + "block_hash": "000003D02B95D3296A4F06DBAC51775C4336A4DC09D0E958DC40033BE7E20F3D" + }, + "uids": [ + "Galuel" + ], + "isMember": True, + "wasMember": True, + "signature": "iK3TOdqrHhUbHNB3cPpmWd8sTL2hz0wiScZmXlRc8WhLg2et3xMjAHMuF+wuiM9/7R3daKZq5dOGF3drOuApAg==" + }, + { + "pubkey": "7F6oyFQywURCACWZZGtG97Girh9EL1kg2WBwftEZxDoJ", + "meta": { + "block_number": 0, + "block_hash": "000003D02B95D3296A4F06DBAC51775C4336A4DC09D0E958DC40033BE7E20F3D" + }, + "uids": [ + "vit" + ], + "isMember": True, + "wasMember": True, + "signature": "eTdxT+2VikgYgdFENy/zmYxFyDDpBuGDBHedS7CzlEfYWU7iClZ9se06QdtzkFtiOtQ1BBkWPVMXxbqF8KSECw==" + }, + ] + }, + ], + "signed": [ + { + "uid": "yannlefranco", + "pubkey": "8SJZia3RJ36hp3wXy8AJXJj8z7yeLHCVaTtv2xSi2MBj", + "meta": { + "timestamp": "0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855" + }, + "cert_time": { + "block": 0 + }, + "isMember": True, + "wasMember": True, + "signature": "lYdOV3uLH3DQHzuODuaZXQnfPIKKF9AsT84b8pkmgU65trAojmTpuBgaYaPN0Yce+8dwtdHxby7h5pO0RWgRBw==" + }, + { + "uid": "Galuel", + "pubkey": "Ds1z6Wd8hNTexBoo3LVG2oXLZN4dC9ZWxoWwnDbF1NEW", + "meta": { + "timestamp": "0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855" + }, + "cert_time": { + "block": 0 + }, + "isMember": True, + "wasMember": True, + "signature": "PcZUAleSeR38CbL5zfcdN2+ir+s11Y6oIl2iO4t80M4PXKXWHeqd0uYore0JibMBVnIhpLqcC8SpyVmZnfdaAQ==" + } + ] }, - ], - "signed": [ - { - "uid": "yannlefranco", - "pubkey": "8SJZia3RJ36hp3wXy8AJXJj8z7yeLHCVaTtv2xSi2MBj", - "meta": { - "timestamp": "0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855" - }, - "cert_time": { - "block": 0 - }, - "isMember": True, - "wasMember": True, - "signature": "lYdOV3uLH3DQHzuODuaZXQnfPIKKF9AsT84b8pkmgU65trAojmTpuBgaYaPN0Yce+8dwtdHxby7h5pO0RWgRBw==" - }, - { - "uid": "Galuel", - "pubkey": "Ds1z6Wd8hNTexBoo3LVG2oXLZN4dC9ZWxoWwnDbF1NEW", - "meta": { - "timestamp": "0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855" - }, - "cert_time": { - "block": 0 - }, - "isMember": True, - "wasMember": True, - "signature": "PcZUAleSeR38CbL5zfcdN2+ir+s11Y6oIl2iO4t80M4PXKXWHeqd0uYore0JibMBVnIhpLqcC8SpyVmZnfdaAQ==" - } - ] - }, - { - "pubkey": "7hygreNPE4LJpQhB6zHqGsofKA2G3dDXQM2n6LkDBakB", - "uids": [ { - "uid": "Mymypinson", - "meta": { - "timestamp": "17524-00000C1533A49A4EC583B91148E2A38E91E39396BAD0C8D3A5B93338E905EF83" - }, - "revoked": False, - "revoked_on": None, - "revocation_sig": None, - "self": "trkirggMe9HsnO4T2FV9h1NKzxiZncXB5D5znhuq3zDZaY3MTja2edWaJhO0KcFU4yZdQPudt8ltldYL0rk1Cg==", - "others": [ - { - "pubkey": "zio4Jp8hnqkYmoz5FMYm1siCjGmjWzVUg27KMfDoefA", - "meta": { - "block_number": 19452, - "block_hash": "00000B96722EC36F4089D2490929931B3CF26994A8ED6708C6C71370D60AA25F" - }, - "uids": [ - "eliadem" - ], - "isMember": True, - "wasMember": True, - "signature": "GJJa4T9eOJf6oL+SYLGQDnD4K1TpC1492ItGa4+51imkJRXMTvvYmZguwbOuBn8GRISxlMqfgzbHzj5SFG0ODg==" - }, - { - "pubkey": "5SwfQubSat5SunNafCsunEGTY93nVM4kLSsuprNqQb6S", - "meta": { - "block_number": 19452, - "block_hash": "00000B96722EC36F4089D2490929931B3CF26994A8ED6708C6C71370D60AA25F" - }, - "uids": [ - "Patrice_F" - ], - "isMember": True, - "wasMember": True, - "signature": "E2Km7x6L8/iiFuWVa+UHailM/AOsM/1COj9aQM7B0bDRMx6h+iSfOPxnUSXydiaeT1FPlNeLZOEKIcNmRk6gCA==" - }, - ], + "pubkey": "7hygreNPE4LJpQhB6zHqGsofKA2G3dDXQM2n6LkDBakB", + "uids": [ + { + "uid": "Mymypinson", + "meta": { + "timestamp": "17524-00000C1533A49A4EC583B91148E2A38E91E39396BAD0C8D3A5B93338E905EF83" + }, + "revoked": False, + "revoked_on": None, + "revocation_sig": None, + "self": "trkirggMe9HsnO4T2FV9h1NKzxiZncXB5D5znhuq3zDZaY3MTja2edWaJhO0KcFU4yZdQPudt8ltldYL0rk1Cg==", + "others": [ + { + "pubkey": "zio4Jp8hnqkYmoz5FMYm1siCjGmjWzVUg27KMfDoefA", + "meta": { + "block_number": 19452, + "block_hash": "00000B96722EC36F4089D2490929931B3CF26994A8ED6708C6C71370D60AA25F" + }, + "uids": [ + "eliadem" + ], + "isMember": True, + "wasMember": True, + "signature": "GJJa4T9eOJf6oL+SYLGQDnD4K1TpC1492ItGa4+51imkJRXMTvvYmZguwbOuBn8GRISxlMqfgzbHzj5SFG0ODg==" + }, + { + "pubkey": "5SwfQubSat5SunNafCsunEGTY93nVM4kLSsuprNqQb6S", + "meta": { + "block_number": 19452, + "block_hash": "00000B96722EC36F4089D2490929931B3CF26994A8ED6708C6C71370D60AA25F" + }, + "uids": [ + "Patrice_F" + ], + "isMember": True, + "wasMember": True, + "signature": "E2Km7x6L8/iiFuWVa+UHailM/AOsM/1COj9aQM7B0bDRMx6h+iSfOPxnUSXydiaeT1FPlNeLZOEKIcNmRk6gCA==" + }, + ], + } + ], + "signed": [ + { + "uid": "Duarte", + "pubkey": "GRBPV3Y7PQnB9LaZhSGuS3BqBJbSHyibzYq65kTh1nQ4", + "meta": { + "timestamp": "20544-000008FFA0AABEA96759559DA426D92880EA35878C680479135A5C9A3FFA8BF9" + }, + "cert_time": { + "block": 35202 + }, + "isMember": True, + "wasMember": True, + "signature": "regfnOZWIrA4Tkj+MU6PFwHcfm/8G+ygDlNGKUP7b5pLhBHGVVMIw3xh6PcLHSkUUmnxlTImuqGJg+ky6dl3CA==" + }, + { + "uid": "NicolasCARRAT", + "pubkey": "44PxHAjt5L9vasbgruPeccs1kjhG3sdzP3ATRWvXSLop", + "meta": { + "timestamp": "21924-000007B75B75D8E6393F609BD42423776FAB90500BCAE7EAAC498BD8EC6DFABB" + }, + "cert_time": { + "block": 36645 + }, + "isMember": True, + "wasMember": True, + "signature": "kC8hoeM2b0wiis5iaF4aHEzRUs0YQy7qJyPFD4rGtZ6II+EN5WbvmxQaN7PckoRUbbSFhNC4gMcnrClNdchBBQ==" + }, + ] } - ], - "signed": [ - { - "uid": "Duarte", - "pubkey": "GRBPV3Y7PQnB9LaZhSGuS3BqBJbSHyibzYq65kTh1nQ4", - "meta": { - "timestamp": "20544-000008FFA0AABEA96759559DA426D92880EA35878C680479135A5C9A3FFA8BF9" - }, - "cert_time": { - "block": 35202 - }, - "isMember": True, - "wasMember": True, - "signature": "regfnOZWIrA4Tkj+MU6PFwHcfm/8G+ygDlNGKUP7b5pLhBHGVVMIw3xh6PcLHSkUUmnxlTImuqGJg+ky6dl3CA==" - }, - { - "uid": "NicolasCARRAT", - "pubkey": "44PxHAjt5L9vasbgruPeccs1kjhG3sdzP3ATRWvXSLop", - "meta": { - "timestamp": "21924-000007B75B75D8E6393F609BD42423776FAB90500BCAE7EAAC498BD8EC6DFABB" - }, - "cert_time": { - "block": 36645 - }, - "isMember": True, - "wasMember": True, - "signature": "kC8hoeM2b0wiis5iaF4aHEzRUs0YQy7qJyPFD4rGtZ6II+EN5WbvmxQaN7PckoRUbbSFhNC4gMcnrClNdchBBQ==" - }, - ] - } - ] - } + ] + } jsonschema.validate(json_sample, LOOKUP_SCHEMA) def test_bma_wot_lookup_bad(self): @@ -167,9 +169,9 @@ class Test_BMA_Wot(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/wot/lookup/pubkey', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await lookup(connection, 'pubkey') + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(lookup, 'pubkey') + await client.close() self.loop.run_until_complete(go()) @@ -191,9 +193,9 @@ class Test_BMA_Wot(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/wot/members', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await members(connection) + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(members) + await client.close() self.loop.run_until_complete(go()) @@ -245,9 +247,9 @@ class Test_BMA_Wot(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/wot/certifiers-of/pubkey', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await certifiers_of(connection, 'pubkey') + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(certifiers_of, 'pubkey') + await client.close() self.loop.run_until_complete(go()) @@ -277,9 +279,9 @@ class Test_BMA_Wot(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/wot/certifiers-of/pubkey', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await certifiers_of(connection, 'pubkey') + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(certifiers_of, 'pubkey') + await client.close() self.loop.run_until_complete(go()) @@ -291,9 +293,9 @@ class Test_BMA_Wot(WebFunctionalSetupMixin, unittest.TestCase): async def go(): _, port, url = await self.create_server('GET', '/wot/certified-by/pubkey', handler) with self.assertRaises(jsonschema.exceptions.ValidationError): - async with aiohttp.ClientSession() as session: - connection = BMAEndpoint("127.0.0.1", None, None, port).conn_handler(session) - await certified_by(connection, 'pubkey') + client = Client(BMAEndpoint("127.0.0.1", "", "", port)) + await client(certified_by, 'pubkey') + await client.close() self.loop.run_until_complete(go()) @@ -341,4 +343,3 @@ class Test_BMA_Wot(WebFunctionalSetupMixin, unittest.TestCase): ] } jsonschema.validate(json_sample, REQUIREMENTS_SCHEMA) - diff --git a/tests/api/test_bma.py b/tests/api/test_bma.py index f6791bc7c0c55cfe251e1e2f678245fdd4e0f0b2..f013f536cafac43ff6cdc3cbc501fe9489eef8e2 100644 --- a/tests/api/test_bma.py +++ b/tests/api/test_bma.py @@ -1,9 +1,10 @@ import unittest -from duniterpy.api.bma import API, parse_error -from duniterpy.documents.peer import BMAEndpoint +from duniterpy.api.client import API, parse_error +from duniterpy.api.endpoint import BMAEndpoint -class Test_BMA_API(unittest.TestCase): + +class TestBmaApi(unittest.TestCase): def test_reverse_url_complete(self): endpoint = BMAEndpoint("test.com", "124.2.2.1", "2001:0db8:0000:85a3:0000:0000:ac1f:8001 ", 9092) @@ -11,17 +12,17 @@ class Test_BMA_API(unittest.TestCase): self.assertEqual(api.reverse_url("http", "/test/url"), "http://test.com:9092/any/test/url") def test_reverse_url_only_ipv4(self): - endpoint = BMAEndpoint(None, "124.2.2.1", None, 9092) + endpoint = BMAEndpoint("", "124.2.2.1", "", 9092) api = API(endpoint.conn_handler(), "any") self.assertEqual(api.reverse_url("http", "/test/url"), "http://124.2.2.1:9092/any/test/url") def test_reverse_url_only_ipv6(self): - endpoint = BMAEndpoint(None, None, "2001:0db8:0000:85a3:0000:0000:ac1f:8001", 9092) + endpoint = BMAEndpoint("", "", "2001:0db8:0000:85a3:0000:0000:ac1f:8001", 9092) api = API(endpoint.conn_handler(), "any") - self.assertEqual(api.reverse_url("http", "/test/url"), "http://[2001:0db8:0000:85a3:0000:0000:ac1f:8001]:9092/any/test/url") + self.assertEqual(api.reverse_url("http", "/test/url"), + "http://[2001:0db8:0000:85a3:0000:0000:ac1f:8001]:9092/any/test/url") def test_parse_error(self): - api = API(None, "any") error = parse_error("""{ "ucode": 1005, "message": "Document has unkown fields or wrong line ending format" diff --git a/tests/api/webserver.py b/tests/api/webserver.py index 79bf3c30c4e71ffa3afe12565944a3f0a0f966a9..db6f529d1b595d7cb3d93481dae61bb413bbc39c 100644 --- a/tests/api/webserver.py +++ b/tests/api/webserver.py @@ -1,7 +1,6 @@ import asyncio import socket from aiohttp import web -from aiohttp import log # Thanks to aiohttp tests courtesy @@ -46,4 +45,4 @@ class WebFunctionalSetupMixin: protocol = "https" if ssl_ctx else "http" url = "{}://127.0.0.1:{}".format(protocol, port) + path - return app, port, url \ No newline at end of file + return app, port, url