From 62c13ddabacce5b753771cf89fa652a7aeee030b Mon Sep 17 00:00:00 2001 From: Jonathan Zernik Date: Wed, 6 Jan 2021 23:47:03 -0800 Subject: [PATCH] Create peer with default port (#569) * Added unit test for create peer * Got test working for create peer with default port * Use namedtuple for squeak peer class * Rename test name in test create peer * Use type hints for insert squeak peer --- squeaknode/config/config.py | 2 ++ squeaknode/core/squeak_controller.py | 3 ++- squeaknode/core/squeak_peer.py | 15 +++++++---- squeaknode/db/squeak_db.py | 2 +- tests/core/test_squeak_controller.py | 39 ++++++++++++++++++++++++++++ 5 files changed, 54 insertions(+), 7 deletions(-) diff --git a/squeaknode/config/config.py b/squeaknode/config/config.py index 5d9b59f2..268efd8e 100644 --- a/squeaknode/config/config.py +++ b/squeaknode/config/config.py @@ -89,6 +89,8 @@ class WebadminConfig(Config): @section('core') class CoreConfig(Config): network = key(cast=str, required=False, default=DEFAULT_NETWORK) + default_peer_rpc_port = key( + cast=int, required=False, default=DEFAULT_SERVER_RPC_PORT) price_msat = key(cast=int, required=False, default=DEFAULT_PRICE_MSAT) max_squeaks_per_address_per_hour = key( cast=int, required=False, default=DEFAULT_MAX_SQUEAKS_PER_ADDRESS_PER_HOUR) diff --git a/squeaknode/core/squeak_controller.py b/squeaknode/core/squeak_controller.py index bf954b86..8ca8469a 100644 --- a/squeaknode/core/squeak_controller.py +++ b/squeaknode/core/squeak_controller.py @@ -222,7 +222,8 @@ class SqueakController: logger.info("Deleted number of offers : {}".format(num_deleted_offers)) return self.squeak_store.delete_squeak(squeak_hash) - def create_peer(self, peer_name, host, port): + def create_peer(self, peer_name: str, host: str, port: int): + port = port or self.config.core.default_peer_rpc_port squeak_peer = SqueakPeer( peer_id=None, peer_name=peer_name, diff --git a/squeaknode/core/squeak_peer.py b/squeaknode/core/squeak_peer.py index f09ac0f6..75b2456b 100644 --- a/squeaknode/core/squeak_peer.py +++ b/squeaknode/core/squeak_peer.py @@ -1,6 +1,11 @@ -from collections import namedtuple +from typing import NamedTuple +from typing import Optional -SqueakPeer = namedtuple( - "SqueakPeer", - "peer_id, peer_name, host, port, uploading, downloading", -) + +class SqueakPeer(NamedTuple): + peer_id: Optional[int] + peer_name: str + host: str + port: int + uploading: bool + downloading: bool diff --git a/squeaknode/db/squeak_db.py b/squeaknode/db/squeak_db.py index 4a98c4d4..bd17450f 100644 --- a/squeaknode/db/squeak_db.py +++ b/squeaknode/db/squeak_db.py @@ -664,7 +664,7 @@ class SqueakDb: # with self.get_cursor() as curs: # curs.execute(sql, (squeak_hash_str,)) - def insert_peer(self, squeak_peer): + def insert_peer(self, squeak_peer: SqueakPeer): """ Insert a new squeak peer. """ ins = self.peers.insert().values( peer_name=squeak_peer.peer_name, diff --git a/tests/core/test_squeak_controller.py b/tests/core/test_squeak_controller.py index 27b0ef5e..9916b594 100644 --- a/tests/core/test_squeak_controller.py +++ b/tests/core/test_squeak_controller.py @@ -5,6 +5,7 @@ from squeaknode.bitcoin.blockchain_client import BlockchainClient from squeaknode.config.config import SqueaknodeConfig from squeaknode.core.lightning_address import LightningAddressHostPort from squeaknode.core.squeak_controller import SqueakController +from squeaknode.core.squeak_peer import SqueakPeer from squeaknode.db.squeak_db import SqueakDb from squeaknode.node.squeak_store import SqueakStore from squeaknode.node.squeak_whitelist import SqueakWhitelist @@ -128,3 +129,41 @@ def test_get_network_regtest(regtest_squeak_controller): # print(config.squeaknode_network) # assert squeak_controller.get_network() == "regtest" + + +def test_create_peer(squeak_db, squeak_controller): + squeak_controller.create_peer( + "fake_peer_name", + "fake_host", + 5678, + ) + + squeak_db.insert_peer.assert_called_with( + SqueakPeer( + peer_id=None, + peer_name="fake_peer_name", + host="fake_host", + port=5678, + uploading=False, + downloading=False, + ) + ) + + +def test_create_peer_default_port(config, squeak_db, squeak_controller): + squeak_controller.create_peer( + "fake_peer_name", + "fake_host", + 0, + ) + + squeak_db.insert_peer.assert_called_with( + SqueakPeer( + peer_id=None, + peer_name="fake_peer_name", + host="fake_host", + port=config.core.default_peer_rpc_port, + uploading=False, + downloading=False, + ) + )