From daeee61f323dc4bd61f8ad40c1416cfd4048fe72 Mon Sep 17 00:00:00 2001 From: shadeofblue <blue@golem.network> Date: Wed, 12 Jun 2019 09:59:30 +0200 Subject: [PATCH] fix issue when nodekeeper doesn't have information about a payer node in the Income list --- golem/ethereum/transactionsystem.py | 6 ++--- tests/factories/model.py | 3 ++- .../golem/ethereum/test_transactionsystem.py | 22 +++++++++++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/golem/ethereum/transactionsystem.py b/golem/ethereum/transactionsystem.py index 0080d9a497..bdc237c8ed 100644 --- a/golem/ethereum/transactionsystem.py +++ b/golem/ethereum/transactionsystem.py @@ -399,6 +399,7 @@ def get_incomes_list(self) -> List[Dict[str, Any]]: lru_node = functools.lru_cache()(nodeskeeper.get) def item(o): + node = lru_node(o.sender_node) if o.sender_node else None return { "subtask": common.to_unicode(o.subtask), "payer": common.to_unicode(o.sender_node), @@ -407,11 +408,8 @@ def item(o): "transaction": common.to_unicode(o.transaction), "created": common.datetime_to_timestamp_utc(o.created_date), "modified": common.datetime_to_timestamp_utc(o.modified_date), - "node": - lru_node(o.sender_node).to_dict() - if o.sender_node else None, + "node": node.to_dict() if node else None, } - return [item(income) for income in incomes] def get_available_eth(self) -> int: diff --git a/tests/factories/model.py b/tests/factories/model.py index 5fb9d7e238..f9408e96c8 100644 --- a/tests/factories/model.py +++ b/tests/factories/model.py @@ -1,6 +1,7 @@ import factory from golem_messages.factories.datastructures import p2p +from golem_messages.factories.helpers import random_eth_pub_key from golem import model @@ -8,7 +9,7 @@ class Income(factory.Factory): class Meta: model = model.Income - sender_node = '00adbeef' + 'deadbeef' * 15 + sender_node = factory.LazyFunction(lambda: random_eth_pub_key()) payer_address = '0x' + 40 * '3' subtask = factory.Faker('uuid4') value = factory.Faker('random_int', min=1, max=10 << 20) diff --git a/tests/golem/ethereum/test_transactionsystem.py b/tests/golem/ethereum/test_transactionsystem.py index 6c78943a89..a903aaf9d5 100644 --- a/tests/golem/ethereum/test_transactionsystem.py +++ b/tests/golem/ethereum/test_transactionsystem.py @@ -792,3 +792,25 @@ def test_one(self): ], self.ets.get_incomes_list(), ) + + def test_nodeskeeper_record_not_present(self): + income = model_factory.Income() + self.assertEqual( + income.save(force_insert=True), + 1, + ) + self.assertEqual( + [ + { + 'created': ANY, + 'modified': ANY, + 'node': None, + 'payer': income.sender_node, + 'status': 'awaiting', + 'subtask': income.subtask, + 'transaction': None, + 'value': str(income.value), + }, + ], + self.ets.get_incomes_list(), + )