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, + ) + )