Skip to content
This repository was archived by the owner on Nov 15, 2021. It is now read-only.

[refactor prompt] Add support for config maxpeers #762

Merged
merged 15 commits into from
Dec 24, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions neo/Prompt/Commands/Config.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ def __init__(self):
self.register_sub_command(CommandConfigDebugNotify())
self.register_sub_command(CommandConfigVMLog())
self.register_sub_command(CommandConfigNodeRequests())
self.register_sub_command(CommandConfigMaxpeers())

def command_desc(self):
return CommandDesc('config', 'configure internal settings')
Expand Down Expand Up @@ -157,6 +158,29 @@ def handle_help(self, arguments):
print(f"\nCurrent settings {self.command_desc().params[0].name}: {NodeLeader.Instance().BREQPART} {self.command_desc().params[1].name}: {NodeLeader.Instance().BREQMAX}")


class CommandConfigMaxpeers(CommandBase):
def __init__(self):
super().__init__()

def execute(self, arguments):
c1 = get_arg(arguments)
if c1 is not None:
try:
settings.set_max_peers(c1)
print("Maxpeers set to ", c1)
return c1
except ValueError:
print("Please supply a positive integer for maxpeers")
return
else:
print(f"Maintaining maxpeers at {settings.CONNECTED_PEER_MAX}")
return

def command_desc(self):
p1 = ParameterDesc('number', 'maximum number of nodes to connect to')
return CommandDesc('maxpeers', 'configure number of max peers', [p1])


def start_output_config():
# temporarily mute stdout while we try to reconfigure our settings
# components like `network` set at DEBUG level will spam through the console
Expand Down
25 changes: 25 additions & 0 deletions neo/Prompt/Commands/tests/test_config_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from copy import deepcopy
from neo.Network.NodeLeader import NodeLeader
from mock import patch
from io import StringIO


class CommandConfigTestCase(BlockchainFixtureTestCase):
Expand Down Expand Up @@ -152,3 +153,27 @@ def test_config_node_requests(self):

# restore whatever state the instance was in
NodeLeader._LEAD = old_leader

def test_config_maxpeers(self):
# test no input and verify output confirming current maxpeers
with patch('sys.stdout', new=StringIO()) as mock_print:
args = ['maxpeers']
res = CommandConfig().execute(args)
self.assertFalse(res)
self.assertIn("Maintaining maxpeers at 5", mock_print.getvalue())

# test changing the number of maxpeers
args = ['maxpeers', "6"]
res = CommandConfig().execute(args)
self.assertTrue(res)
self.assertEqual(int(res), settings.CONNECTED_PEER_MAX)

# test bad input
args = ['maxpeers', "blah"]
res = CommandConfig().execute(args)
self.assertFalse(res)

# test negative number
args = ['maxpeers', "-1"]
res = CommandConfig().execute(args)
self.assertFalse(res)
9 changes: 5 additions & 4 deletions neo/Settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,10 +260,11 @@ def set_data_dir(self, path):
os.makedirs(self.DATA_DIR_PATH)

def set_max_peers(self, num_peers):
try:
self.CONNECTED_PEER_MAX = int(num_peers)
except Exception as e:
logger.error("Please supply an integer number for max peers")
maxpeers = int(num_peers)
if maxpeers > 0:
self.CONNECTED_PEER_MAX = maxpeers
else:
raise ValueError

def set_log_smart_contract_events(self, is_enabled=True):
self.log_smart_contract_events = is_enabled
Expand Down
7 changes: 6 additions & 1 deletion neo/bin/api_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,12 @@ def main():
settings.setup_coznet()

if args.maxpeers:
settings.set_max_peers(args.maxpeers)
try:
settings.set_max_peers(args.maxpeers)
print("Maxpeers set to ", args.maxpeers)
except ValueError:
print("Please supply a positive integer for maxpeers")
return

if args.syslog or args.syslog_local is not None:
# Setup the syslog facility
Expand Down