From 7a9fe77c99ab0722535055c57ea8b4cd37042786 Mon Sep 17 00:00:00 2001 From: Holger Nahrstaedt <holger@nahrstaedt.de> Date: Tue, 5 Jun 2018 12:55:34 +0200 Subject: [PATCH] Use fullnodeupdate for updating the node score in all unit tests CLI * updatenodes added, this command can be used to update the nodes list NodeList * update_nodes added, this command reads the metadata from fullnodeupdate, which contain newest nodes information * add option wss and https fo get_nodes Unit tests * use updatenodes in all tests --- beem/cli.py | 41 ++++++++ beem/nodelist.py | 47 ++++++++- beemapi/graphenerpc.py | 2 +- beemapi/steemnoderpc.py | 2 + tests/beem/test_account.py | 6 +- tests/beem/test_amount.py | 1 + tests/beem/test_asset.py | 1 + tests/beem/test_base_objects.py | 1 + tests/beem/test_block.py | 1 + tests/beem/test_blockchain.py | 1 + tests/beem/test_blockchain_batch.py | 1 + tests/beem/test_blockchain_threading.py | 1 + tests/beem/test_cli.py | 134 ++++++++++-------------- tests/beem/test_comment.py | 1 + tests/beem/test_connection.py | 2 + tests/beem/test_constants.py | 1 + tests/beem/test_discussions.py | 1 + tests/beem/test_instance.py | 10 +- tests/beem/test_market.py | 1 + tests/beem/test_message.py | 8 +- tests/beem/test_nodelist.py | 36 +++++++ tests/beem/test_notify.py | 1 + tests/beem/test_price.py | 1 + tests/beem/test_steem.py | 30 +++--- tests/beem/test_steemconnect.py | 1 + tests/beem/test_storage.py | 1 + tests/beem/test_txbuffers.py | 1 + tests/beem/test_vote.py | 3 +- tests/beem/test_wallet.py | 1 + tests/beem/test_witness.py | 1 + tests/beemapi/test_steemnoderpc.py | 43 ++++---- tests/beemapi/test_websocket.py | 1 + 32 files changed, 249 insertions(+), 134 deletions(-) create mode 100644 tests/beem/test_nodelist.py diff --git a/beem/cli.py b/beem/cli.py index 5bd0d58f..999a27eb 100644 --- a/beem/cli.py +++ b/beem/cli.py @@ -40,6 +40,7 @@ from timeit import default_timer as timer from beembase import operations from beemgraphenebase.account import PrivateKey, PublicKey from beemgraphenebase.base58 import Base58 +from beem.nodelist import NodeList click.disable_unicode_literals_warning = True @@ -388,6 +389,46 @@ def currentnode(version, url): print(t) +@cli.command() +@click.option( + '--show', '-s', is_flag=True, default=False, + help="Prints the updated nodes") +@click.option( + '--test', '-t', is_flag=True, default=False, + help="Do change the node list, only print the newest nodes setup.") +@click.option( + '--only-https', '-h', is_flag=True, default=False, + help="Use only https nodes.") +@click.option( + '--only-wss', '-w', is_flag=True, default=False, + help="Use only websocket nodes.") +@click.option( + '--only-appbase', '-a', is_flag=True, default=False, + help="Use only appbase nodes") +@click.option( + '--only-non-appbase', '-n', is_flag=True, default=False, + help="Use only non-appbase nodes") +def updatenodes(show, test, only_https, only_wss, only_appbase, only_non_appbase): + """ Update the nodelist from @fullnodeupdate + """ + stm = shared_steem_instance() + if stm.rpc is not None: + stm.rpc.rpcconnect() + t = PrettyTable(["node", "Version", "score"]) + t.align = "l" + nodelist = NodeList() + nodelist.update_nodes(steem_instance=stm) + nodes = nodelist.get_nodes(normal=not only_appbase, appbase=not only_non_appbase, wss=not only_https, https=not only_wss) + if show or test: + sorted_nodes = sorted(nodelist, key=lambda node: node["score"], reverse=True) + for node in sorted_nodes: + score = float("{0:.1f}".format(node["score"])) + t.add_row([node["url"], node["version"], score]) + print(t) + if not test: + stm.set_default_nodes(nodes) + + @cli.command() def config(): """ Shows local configuration diff --git a/beem/nodelist.py b/beem/nodelist.py index 7b206439..e260caed 100644 --- a/beem/nodelist.py +++ b/beem/nodelist.py @@ -7,6 +7,11 @@ from builtins import next import re import time import math +import json +from beem.instance import shared_steem_instance +from beem.account import Account +import logging +log = logging.getLogger(__name__) class NodeList(list): @@ -226,7 +231,40 @@ class NodeList(list): }] super(NodeList, self).__init__(nodes) - def get_nodes(self, normal=True, appbase=True, dev=False, testnet=False): + def update_nodes(self, steem_instance=None): + """ Reads metadata from fullnodeupdate""" + steem = steem_instance or shared_steem_instance() + account = Account("fullnodeupdate", steem_instance=steem) + metadata = json.loads(account["json_metadata"]) + report = metadata["report"] + failing_nodes = metadata["failing_nodes"] + parameter = metadata["parameter"] + benchmarks = parameter["benchmarks"] + max_score = len(report) + 1 + new_nodes = [] + for node in self: + new_node = node.copy() + for report_node in report: + if node["url"] == report_node["node"]: + new_node["version"] = report_node["version"] + ranks = [] + for benchmark in benchmarks: + result = report_node[benchmark] + rank = result["rank"] + if not result["ok"]: + rank = max_score + 1 + ranks.append(rank) + sum_rank = 0 + for rank in ranks: + sum_rank += rank + new_node["score"] = ((3 * max_score) - sum_rank) / len(ranks) * 10 + for node_failing in failing_nodes: + if node["url"] == node_failing: + new_node["score"] = -1 + new_nodes.append(new_node) + super(NodeList, self).__init__(new_nodes) + + def get_nodes(self, normal=True, appbase=True, dev=False, testnet=False, wss=True, https=True): """ Returns nodes as list :param bool normal: when True, nodes with version 0.19.2 or 0.19.3 are included @@ -246,8 +284,13 @@ class NodeList(list): if testnet: node_type_list.append("testnet") for node in self: - if node["type"] in node_type_list: + if node["type"] in node_type_list and node["score"] >= 0: + if not https and node["url"][:5] == 'https': + continue + if not wss and node["url"][:3] == 'wss': + continue node_list.append(node) + return [node["url"] for node in sorted(node_list, key=lambda self: self['score'], reverse=True)] def get_testnet(self): diff --git a/beemapi/graphenerpc.py b/beemapi/graphenerpc.py index bf8a7012..8d9328a7 100644 --- a/beemapi/graphenerpc.py +++ b/beemapi/graphenerpc.py @@ -328,7 +328,7 @@ class GrapheneRPC(object): if self.nodes.working_nodes_count == 0: raise WorkingNodeMissing if self.url is None: - self.rpcconnect() + raise RPCConnection("RPC is not connected!") reply = {} while True: self.nodes.increase_error_cnt_call() diff --git a/beemapi/steemnoderpc.py b/beemapi/steemnoderpc.py index 59b5265d..f1b2d5eb 100644 --- a/beemapi/steemnoderpc.py +++ b/beemapi/steemnoderpc.py @@ -54,6 +54,8 @@ class SteemNodeRPC(GrapheneRPC): :raises ValueError: if the server does not respond in proper JSON format :raises RPCError: if the server returns an error """ + if self.url is None: + raise exceptions.RPCConnection("RPC is not connected!") doRetry = True maxRetryCountReached = False while doRetry and not maxRetryCountReached: diff --git a/tests/beem/test_account.py b/tests/beem/test_account.py index 22964e39..c0ca6e7f 100644 --- a/tests/beem/test_account.py +++ b/tests/beem/test_account.py @@ -27,6 +27,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(normal=True, appbase=False), nobroadcast=True, @@ -277,11 +278,12 @@ class Testcases(unittest.TestCase): ]) def test_history_block_num(self, node_param): if node_param == "non_appbase": - account = self.account + stm = self.bts zero_element = 0 else: - account = self.account_appbase + stm = self.appbase zero_element = 0 # bug in steem + account = Account("fullnodeupdate", steem_instance=stm) h_all_raw = [] for h in account.history_reverse(raw_output=True): h_all_raw.append(h) diff --git a/tests/beem/test_amount.py b/tests/beem/test_amount.py index 05b4aa32..abde3a11 100644 --- a/tests/beem/test_amount.py +++ b/tests/beem/test_amount.py @@ -16,6 +16,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, diff --git a/tests/beem/test_asset.py b/tests/beem/test_asset.py index e41f2426..7be22de4 100644 --- a/tests/beem/test_asset.py +++ b/tests/beem/test_asset.py @@ -17,6 +17,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, diff --git a/tests/beem/test_base_objects.py b/tests/beem/test_base_objects.py index f5de5526..3ffb6a24 100644 --- a/tests/beem/test_base_objects.py +++ b/tests/beem/test_base_objects.py @@ -15,6 +15,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, diff --git a/tests/beem/test_block.py b/tests/beem/test_block.py index 5456f1fa..6b354c29 100644 --- a/tests/beem/test_block.py +++ b/tests/beem/test_block.py @@ -20,6 +20,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, diff --git a/tests/beem/test_blockchain.py b/tests/beem/test_blockchain.py index 3b9ad761..82bd2ca8 100644 --- a/tests/beem/test_blockchain.py +++ b/tests/beem/test_blockchain.py @@ -23,6 +23,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, diff --git a/tests/beem/test_blockchain_batch.py b/tests/beem/test_blockchain_batch.py index 5eab0900..b376068a 100644 --- a/tests/beem/test_blockchain_batch.py +++ b/tests/beem/test_blockchain_batch.py @@ -23,6 +23,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(normal=False, appbase=True, dev=True), nobroadcast=True, diff --git a/tests/beem/test_blockchain_threading.py b/tests/beem/test_blockchain_threading.py index e234d91c..83256f45 100644 --- a/tests/beem/test_blockchain_threading.py +++ b/tests/beem/test_blockchain_threading.py @@ -22,6 +22,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, diff --git a/tests/beem/test_cli.py b/tests/beem/test_cli.py index 0c9d5644..35d39444 100644 --- a/tests/beem/test_cli.py +++ b/tests/beem/test_cli.py @@ -27,7 +27,8 @@ pub_key = "STX52xMqKegLk4tdpNcUXU9Rw5DtdM9fxf3f12Gp55v1UjLX3ELZf" class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): - nodelist = NodeList() + cls.nodelist = NodeList() + cls.nodelist.update_nodes(steem_instance=Steem(node=cls.nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) stm = shared_steem_instance() stm.config.refreshBackup() runner = CliRunner() @@ -37,7 +38,7 @@ class Testcases(unittest.TestCase): result = runner.invoke(cli, ['-o', 'set', 'default_account', 'beem']) if result.exit_code != 0: raise AssertionError(str(result)) - result = runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + result = runner.invoke(cli, ['-o', 'set', 'nodes', str(cls.nodelist.get_testnet())]) if result.exit_code != 0: raise AssertionError(str(result)) result = runner.invoke(cli, ['createwallet', '--wipe'], input="test\ntest\n") @@ -60,15 +61,13 @@ class Testcases(unittest.TestCase): def test_balance(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['balance', 'beem', 'beem1']) self.assertEqual(result.exit_code, 0) def test_interest(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['interest', 'beem', 'beem1']) self.assertEqual(result.exit_code, 0) @@ -112,8 +111,7 @@ class Testcases(unittest.TestCase): def test_info(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['info']) self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['info', 'beem']) @@ -127,15 +125,14 @@ class Testcases(unittest.TestCase): def test_info2(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['info', '--', '-1:1']) self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['info', 'gtg']) self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['info', "@gtg/witness-gtg-log"]) self.assertEqual(result.exit_code, 0) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) def test_changepassword(self): runner = CliRunner() @@ -172,22 +169,19 @@ class Testcases(unittest.TestCase): def test_transfer(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['transfer', 'beem1', '1', 'SBD', 'test'], input="test\n") self.assertEqual(result.exit_code, 0) def test_powerdownroute(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['powerdownroute', 'beem1'], input="test\n") self.assertEqual(result.exit_code, 0) def test_convert(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['convert', '1'], input="test\n") self.assertEqual(result.exit_code, 0) @@ -198,8 +192,7 @@ class Testcases(unittest.TestCase): def test_powerdown(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['powerdown', '1e3'], input="test\n") self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['powerdown', '0'], input="test\n") @@ -207,8 +200,7 @@ class Testcases(unittest.TestCase): def test_updatememokey(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['-d', 'updatememokey'], input="test\ntest\ntest\n") self.assertEqual(result.exit_code, 0) @@ -219,36 +211,31 @@ class Testcases(unittest.TestCase): def test_follower(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['follower', 'beem2']) self.assertEqual(result.exit_code, 0) def test_following(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['following', 'beem']) self.assertEqual(result.exit_code, 0) def test_muter(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['muter', 'beem2']) self.assertEqual(result.exit_code, 0) def test_muting(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['muting', 'beem']) self.assertEqual(result.exit_code, 0) def test_allow_disallow(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['-d', 'allow', '--account', 'beem', '--permission', 'posting', 'beem1'], input="test\n") self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['-d', 'disallow', '--account', 'beem', '--permission', 'posting', 'beem1'], input="test\n") @@ -261,32 +248,28 @@ class Testcases(unittest.TestCase): def test_votes(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['votes', '--direction', 'out', 'test']) self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['votes', '--direction', 'in', 'test']) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) self.assertEqual(result.exit_code, 0) def test_approvewitness(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['-o', 'approvewitness', 'beem1'], input="test\n") self.assertEqual(result.exit_code, 0) def test_disapprovewitness(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['-o', 'disapprovewitness', 'beem1'], input="test\n") self.assertEqual(result.exit_code, 0) def test_newaccount(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['-d', 'newaccount', 'beem3'], input="test\ntest\ntest\n") self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['-d', 'newaccount', '--fee', '6 STEEM', 'beem3'], input="test\ntest\ntest\n") @@ -294,8 +277,7 @@ class Testcases(unittest.TestCase): def test_importaccount(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['importaccount', '--roles', '["owner", "active", "posting", "memo"]', 'beem2'], input="test\ntest\n") self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['delkey', '--confirm', 'STX7mLs2hns87f7kbf3o2HBqNoEaXiTeeU89eVF6iUCrMQJFzBsPo'], input="test\n") @@ -309,14 +291,13 @@ class Testcases(unittest.TestCase): def test_orderbook(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['orderbook']) self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['orderbook', '--show-date']) self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['orderbook', '--chart']) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) self.assertEqual(result.exit_code, 0) def test_buy(self): @@ -358,8 +339,7 @@ class Testcases(unittest.TestCase): def test_follow_unfollow(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['follow', 'beem1'], input="test\n") self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['unfollow', 'beem1'], input="test\n") @@ -367,8 +347,7 @@ class Testcases(unittest.TestCase): def test_mute_unmute(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['mute', 'beem1'], input="test\n") self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['unfollow', 'beem1'], input="test\n") @@ -376,14 +355,13 @@ class Testcases(unittest.TestCase): def test_witnesscreate(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) result = runner.invoke(cli, ['-d', 'witnesscreate', 'beem', pub_key], input="test\n") self.assertEqual(result.exit_code, 0) def test_witnessupdate(self): runner = CliRunner() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['-o', 'nextnode']) runner.invoke(cli, ['-o', 'witnessupdate', 'gtg', '--maximum_block_size', 65000, '--account_creation_fee', 0.1, '--sbd_interest_rate', 0, '--url', 'https://google.de', '--signing_key', wif]) self.assertEqual(result.exit_code, 0) @@ -407,11 +385,10 @@ class Testcases(unittest.TestCase): def test_nextnode(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['-o', 'nextnode']) self.assertEqual(result.exit_code, 0) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) def test_pingnode(self): runner = CliRunner() @@ -420,38 +397,41 @@ class Testcases(unittest.TestCase): result = runner.invoke(cli, ['pingnode', '--raw']) self.assertEqual(result.exit_code, 0) + def test_updatenodes(self): + runner = CliRunner() + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) + result = runner.invoke(cli, ['updatenodes', '--test']) + self.assertEqual(result.exit_code, 0) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) + def test_currentnode(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['currentnode']) self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['currentnode', '--url']) self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['currentnode', '--version']) self.assertEqual(result.exit_code, 0) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) def test_ticker(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['ticker']) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) self.assertEqual(result.exit_code, 0) def test_pricehistory(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['pricehistory']) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) self.assertEqual(result.exit_code, 0) def test_pending(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['pending', 'test']) self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['pending', '--post', '--comment', '--curation', 'test']) @@ -464,12 +444,11 @@ class Testcases(unittest.TestCase): self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['pending', '--post', '--comment', '--curation', '--author', '--permlink', '--length', '30', 'test']) self.assertEqual(result.exit_code, 0) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) def test_rewards(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['rewards', 'test']) self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['rewards', '--post', '--comment', '--curation', 'test']) @@ -482,28 +461,25 @@ class Testcases(unittest.TestCase): self.assertEqual(result.exit_code, 0) result = runner.invoke(cli, ['rewards', '--post', '--comment', '--curation', '--author', '--permlink', '--length', '30', 'test']) self.assertEqual(result.exit_code, 0) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) def test_curation(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['curation', "@gtg/witness-gtg-log"]) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) self.assertEqual(result.exit_code, 0) def test_verify(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['verify', '--trx', '0']) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) self.assertEqual(result.exit_code, 0) def test_tradehistory(self): runner = CliRunner() - nodelist = NodeList() - runner.invoke(cli, ['-o', 'set', 'nodes', '']) + runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()]) result = runner.invoke(cli, ['tradehistory']) - runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())]) + runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())]) self.assertEqual(result.exit_code, 0) diff --git a/tests/beem/test_comment.py b/tests/beem/test_comment.py index f5767a7f..2b8c4255 100644 --- a/tests/beem/test_comment.py +++ b/tests/beem/test_comment.py @@ -20,6 +20,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), use_condenser=True, diff --git a/tests/beem/test_connection.py b/tests/beem/test_connection.py index 1e9c04aa..6356ad8c 100644 --- a/tests/beem/test_connection.py +++ b/tests/beem/test_connection.py @@ -13,6 +13,7 @@ class Testcases(unittest.TestCase): def test_stm1stm2(self): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) b1 = Steem( node=nodelist.get_testnet(), nobroadcast=True, @@ -29,6 +30,7 @@ class Testcases(unittest.TestCase): def test_default_connection(self): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) b1 = Steem( node=nodelist.get_testnet(), nobroadcast=True, diff --git a/tests/beem/test_constants.py b/tests/beem/test_constants.py index 99f3ecd1..9e2f5638 100644 --- a/tests/beem/test_constants.py +++ b/tests/beem/test_constants.py @@ -21,6 +21,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, diff --git a/tests/beem/test_discussions.py b/tests/beem/test_discussions.py index ba8419ce..742673dc 100644 --- a/tests/beem/test_discussions.py +++ b/tests/beem/test_discussions.py @@ -25,6 +25,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), use_condenser=True, diff --git a/tests/beem/test_instance.py b/tests/beem/test_instance.py index eec91a37..5f82d9cd 100644 --- a/tests/beem/test_instance.py +++ b/tests/beem/test_instance.py @@ -38,13 +38,14 @@ core_unit = "STM" class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): - nodelist = NodeList() - stm = Steem(node=nodelist.get_nodes()) + cls.nodelist = NodeList() + cls.nodelist.update_nodes(steem_instance=Steem(node=cls.nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) + stm = Steem(node=cls.nodelist.get_nodes()) stm.config.refreshBackup() stm.set_default_nodes(["xyz"]) del stm - cls.urls = nodelist.get_nodes() + cls.urls = cls.nodelist.get_nodes() cls.bts = Steem( node=cls.urls, nobroadcast=True, @@ -54,8 +55,7 @@ class Testcases(unittest.TestCase): @classmethod def tearDownClass(cls): - nodelist = NodeList() - stm = Steem(node=nodelist.get_nodes()) + stm = Steem(node=cls.nodelist.get_nodes()) stm.config.recover_with_latest_backup() @parameterized.expand([ diff --git a/tests/beem/test_market.py b/tests/beem/test_market.py index 306983b1..49165625 100644 --- a/tests/beem/test_market.py +++ b/tests/beem/test_market.py @@ -22,6 +22,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, diff --git a/tests/beem/test_message.py b/tests/beem/test_message.py index a9ab4e8f..53dae03b 100644 --- a/tests/beem/test_message.py +++ b/tests/beem/test_message.py @@ -5,20 +5,20 @@ from beem import Steem from beem.message import Message from beem.account import Account from beem.instance import set_shared_steem_instance +from beem.nodelist import NodeList wif = "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3" core_unit = "STM" -nodes = ["wss://steemd.pevo.science", "wss://gtg.steem.house:8090", "wss://rpc.steemliberator.com", "wss://rpc.buildteam.io", - "wss://rpc.steemviz.com", "wss://seed.bitcoiner.me", "wss://node.steem.ws", "wss://steemd.steemgigs.org", "wss://steemd.steemit.com", - "wss://steemd.minnowsupportproject.org"] class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): + nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( - node=nodes, + node=nodelist.get_nodes(), nobroadcast=True, keys=[wif], num_retries=10 diff --git a/tests/beem/test_nodelist.py b/tests/beem/test_nodelist.py new file mode 100644 index 00000000..c318f19a --- /dev/null +++ b/tests/beem/test_nodelist.py @@ -0,0 +1,36 @@ +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals +from builtins import super +import unittest +from beem import Steem, exceptions +from beem.instance import set_shared_steem_instance +from beem.account import Account +from beem.nodelist import NodeList + + +class Testcases(unittest.TestCase): + @classmethod + def setUpClass(cls): + nodelist = NodeList() + cls.bts = Steem( + node=nodelist.get_nodes(appbase=False), + nobroadcast=True, + num_retries=10 + ) + set_shared_steem_instance(cls.bts) + + def test_get_nodes(self): + nodelist = NodeList() + all_nodes = nodelist.get_nodes(normal=True, appbase=True, dev=True, testnet=True) + self.assertEqual(len(nodelist), len(all_nodes)) + https_nodes = nodelist.get_nodes(wss=False) + self.assertEqual(https_nodes[0][:5], 'https') + + def test_nodes_update(self): + nodelist = NodeList() + all_nodes = nodelist.get_nodes(normal=True, appbase=True, dev=True, testnet=True) + nodelist.update_nodes(steem_instance=self.bts) + nodes = nodelist.get_nodes() + self.assertIn(nodes[0], all_nodes) diff --git a/tests/beem/test_notify.py b/tests/beem/test_notify.py index 1a483a33..39c7f8ad 100644 --- a/tests/beem/test_notify.py +++ b/tests/beem/test_notify.py @@ -39,6 +39,7 @@ class Testcases(unittest.TestCase): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) self.bts = Steem( node=nodelist.get_nodes(), nobroadcast=True, diff --git a/tests/beem/test_price.py b/tests/beem/test_price.py index 1cf88da4..14beb82f 100644 --- a/tests/beem/test_price.py +++ b/tests/beem/test_price.py @@ -15,6 +15,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) steem = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, diff --git a/tests/beem/test_steem.py b/tests/beem/test_steem.py index f8f8621d..43c9a8f9 100644 --- a/tests/beem/test_steem.py +++ b/tests/beem/test_steem.py @@ -31,16 +31,17 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): - nodelist = NodeList() + cls.nodelist = NodeList() + cls.nodelist.update_nodes(steem_instance=Steem(node=cls.nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( - node=nodelist.get_nodes(appbase=False), + node=cls.nodelist.get_nodes(appbase=False), nobroadcast=True, unsigned=True, data_refresh_time_seconds=900, keys={"active": wif, "owner": wif, "memo": wif}, num_retries=10) cls.appbase = Steem( - node=nodelist.get_nodes(normal=False, appbase=True), + node=cls.nodelist.get_nodes(normal=False, appbase=True), nobroadcast=True, unsigned=True, data_refresh_time_seconds=900, @@ -82,16 +83,15 @@ class Testcases(unittest.TestCase): ("appbase"), ]) def test_create_account(self, node_param): - nodelist = NodeList() if node_param == "non_appbase": - bts = Steem(node=nodelist.get_nodes(appbase=False), + bts = Steem(node=self.nodelist.get_nodes(appbase=False), nobroadcast=True, unsigned=True, data_refresh_time_seconds=900, keys={"active": wif, "owner": wif, "memo": wif}, num_retries=10) elif node_param == "appbase": - bts = Steem(node=nodelist.get_nodes(normal=False, appbase=True), + bts = Steem(node=self.nodelist.get_nodes(normal=False, appbase=True), nobroadcast=True, unsigned=True, data_refresh_time_seconds=900, @@ -163,16 +163,15 @@ class Testcases(unittest.TestCase): ("appbase"), ]) def test_create_account_password(self, node_param): - nodelist = NodeList() if node_param == "non_appbase": - bts = Steem(node=nodelist.get_nodes(appbase=False), + bts = Steem(node=self.nodelist.get_nodes(appbase=False), nobroadcast=True, unsigned=True, data_refresh_time_seconds=900, keys={"active": wif, "owner": wif, "memo": wif}, num_retries=10) elif node_param == "appbase": - bts = Steem(node=nodelist.get_nodes(normal=False, appbase=True), + bts = Steem(node=self.nodelist.get_nodes(normal=False, appbase=True), nobroadcast=True, unsigned=True, data_refresh_time_seconds=900, @@ -227,16 +226,15 @@ class Testcases(unittest.TestCase): ("appbase"), ]) def test_create_account_with_delegation(self, node_param): - nodelist = NodeList() if node_param == "non_appbase": - bts = Steem(node=nodelist.get_nodes(appbase=False), + bts = Steem(node=self.nodelist.get_nodes(appbase=False), nobroadcast=True, unsigned=True, data_refresh_time_seconds=900, keys={"active": wif, "owner": wif, "memo": wif}, num_retries=10) elif node_param == "appbase": - bts = Steem(node=nodelist.get_nodes(normal=False, appbase=True), + bts = Steem(node=self.nodelist.get_nodes(normal=False, appbase=True), nobroadcast=True, unsigned=True, data_refresh_time_seconds=900, @@ -521,8 +519,7 @@ class Testcases(unittest.TestCase): self.assertFalse(bts.get_blockchain_version() == '0.0.0') def test_offline(self): - nodelist = NodeList() - bts = Steem(node=nodelist.get_nodes(appbase=False), + bts = Steem(node=self.nodelist.get_nodes(appbase=False), offline=True, data_refresh_time_seconds=900, keys={"active": wif, "owner": wif, "memo": wif}) @@ -551,15 +548,14 @@ class Testcases(unittest.TestCase): ("appbase"), ]) def test_properties(self, node_param): - nodelist = NodeList() if node_param == "non_appbase": - bts = Steem(node=nodelist.get_nodes(appbase=False), + bts = Steem(node=self.nodelist.get_nodes(appbase=False), nobroadcast=True, data_refresh_time_seconds=900, keys={"active": wif, "owner": wif, "memo": wif}, num_retries=10) elif node_param == "appbase": - bts = Steem(node=nodelist.get_nodes(normal=False, appbase=True), + bts = Steem(node=self.nodelist.get_nodes(normal=False, appbase=True), nobroadcast=True, data_refresh_time_seconds=900, keys={"active": wif, "owner": wif, "memo": wif}, diff --git a/tests/beem/test_steemconnect.py b/tests/beem/test_steemconnect.py index 818ae1ec..e5cdb03a 100644 --- a/tests/beem/test_steemconnect.py +++ b/tests/beem/test_steemconnect.py @@ -32,6 +32,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, diff --git a/tests/beem/test_storage.py b/tests/beem/test_storage.py index e68cd7e8..314da3aa 100644 --- a/tests/beem/test_storage.py +++ b/tests/beem/test_storage.py @@ -33,6 +33,7 @@ class Testcases(unittest.TestCase): stm = shared_steem_instance() stm.config.refreshBackup() nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.stm = Steem( node=nodelist.get_nodes(appbase=False), diff --git a/tests/beem/test_txbuffers.py b/tests/beem/test_txbuffers.py index 458ac61d..7763cc1a 100644 --- a/tests/beem/test_txbuffers.py +++ b/tests/beem/test_txbuffers.py @@ -32,6 +32,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.stm = Steem( node=nodelist.get_nodes(appbase=False), keys={"active": wif, "owner": wif, "memo": wif}, diff --git a/tests/beem/test_vote.py b/tests/beem/test_vote.py index 259298b2..8bae9f54 100644 --- a/tests/beem/test_vote.py +++ b/tests/beem/test_vote.py @@ -21,6 +21,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, @@ -40,7 +41,7 @@ class Testcases(unittest.TestCase): acc = Account("holger80", steem_instance=cls.bts) votes = acc.get_account_votes() - last_vote = votes[0] + last_vote = votes[-1] cls.authorpermvoter = '@' + last_vote['authorperm'] + '|' + acc["name"] [author, permlink, voter] = resolve_authorpermvoter(cls.authorpermvoter) diff --git a/tests/beem/test_wallet.py b/tests/beem/test_wallet.py index 8bb5b0df..a3213b79 100644 --- a/tests/beem/test_wallet.py +++ b/tests/beem/test_wallet.py @@ -24,6 +24,7 @@ class Testcases(unittest.TestCase): stm = shared_steem_instance() stm.config.refreshBackup() nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.stm = Steem( node=nodelist.get_nodes(appbase=False), diff --git a/tests/beem/test_witness.py b/tests/beem/test_witness.py index 9ad9958a..5eb482a7 100644 --- a/tests/beem/test_witness.py +++ b/tests/beem/test_witness.py @@ -18,6 +18,7 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) cls.bts = Steem( node=nodelist.get_nodes(appbase=False), nobroadcast=True, diff --git a/tests/beemapi/test_steemnoderpc.py b/tests/beemapi/test_steemnoderpc.py index d9c4df99..3ea0d22f 100644 --- a/tests/beemapi/test_steemnoderpc.py +++ b/tests/beemapi/test_steemnoderpc.py @@ -17,40 +17,37 @@ from beemapi.websocket import SteemWebsocket from beemapi import exceptions from beemapi.exceptions import NumRetriesReached, CallRetriesReached from beem.instance import set_shared_steem_instance +from beem.nodelist import NodeList # Py3 compatibility import sys wif = "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3" core_unit = "STM" -nodes = ["wss://steemd.pevo.science", "wss://gtg.steem.house:8090", "wss://rpc.steemliberator.com", "wss://rpc.buildteam.io", - "wss://rpc.steemviz.com", "wss://seed.bitcoiner.me", "wss://node.steem.ws", "wss://steemd.steemgigs.org", "wss://steemd.steemit.com", - "wss://steemd.minnowsupportproject.org"] -nodes_https = ['https://api.steemit.com', 'https://steemd.privex.io', 'https://steemd.pevo.science', 'https://rpc.steemliberator.com', - 'https://rpc.buildteam.io', 'https://steemd.minnowsupportproject.org', 'https://gtg.steem.house:8090', 'https://seed.bitcoiner.me'] -nodes_appbase = ["https://api.steemit.com", "wss://appbasetest.timcliff.com"] -test_list = ["wss://steemd.doesnot.exists", "wss://api.steemit.com", "wss://steemd.pevo.science", "wss://gtg.steem.house:8090", - "https://api.steemit.com", "wss://appbasetest.timcliff.com", 'https://steemd.privex.io', - 'https://steemd.pevo.science', 'https://rpc.steemliberator.com', - 'https://rpc.buildteam.io', 'https://steemd.minnowsupportproject.org', 'https://gtg.steem.house:8090', 'https://seed.bitcoiner.me'] class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): + nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) + cls.nodes = nodelist.get_nodes(https=False, appbase=False) + cls.nodes_https = nodelist.get_nodes(wss=False, appbase=False) + cls.nodes_appbase = nodelist.get_nodes(normal=False) + cls.test_list = nodelist.get_nodes() cls.bts = Steem( - node=nodes, + node=cls.nodes, nobroadcast=True, keys={"active": wif, "owner": wif, "memo": wif}, num_retries=10 ) cls.appbase = Steem( - node=nodes_appbase, + node=cls.nodes_appbase, nobroadcast=True, keys={"active": wif, "owner": wif, "memo": wif}, num_retries=10 ) - cls.rpc = SteemNodeRPC(urls=test_list) + cls.rpc = SteemNodeRPC(urls=cls.test_list) # from getpass import getpass # self.bts.wallet.unlock(getpass()) set_shared_steem_instance(cls.bts) @@ -87,30 +84,30 @@ class Testcases(unittest.TestCase): def test_connect_test_node(self): rpc = self.rpc - self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https) + self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https) rpc.rpcclose() rpc.rpcconnect() - self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https) + self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https) def test_connect_test_node2(self): rpc = self.rpc - self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https) + self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https) rpc.next() - self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https) + self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https) def test_connect_test_str_list(self): str_list = "wss://steemd.pevo.science;wss://gtg.steem.house:8090;wss://rpc.steemliberator.com;wss://rpc.buildteam.io" rpc = SteemNodeRPC(urls=str_list) - self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https) + self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https) rpc.next() - self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https) + self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https) def test_connect_test_str_list2(self): str_list = "wss://steemd.pevo.science, wss://gtg.steem.house:8090, wss://rpc.steemliberator.com, wss://rpc.buildteam.io" rpc = SteemNodeRPC(urls=str_list) - self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https) + self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https) rpc.next() - self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https) + self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https) def test_server_error(self): rpc = self.rpc @@ -189,7 +186,7 @@ class Testcases(unittest.TestCase): SteemNodeRPC(urls=nodes, num_retries=0, num_retries_call=0, timeout=1) def test_error_handling(self): - rpc = SteemNodeRPC(urls=nodes, num_retries=2, num_retries_call=3) + rpc = SteemNodeRPC(urls=self.nodes, num_retries=2, num_retries_call=3) with self.assertRaises( exceptions.NoMethodWithName ): @@ -200,7 +197,7 @@ class Testcases(unittest.TestCase): rpc.get_accounts("test") def test_error_handling_appbase(self): - rpc = SteemNodeRPC(urls=nodes_appbase, num_retries=2, num_retries_call=3) + rpc = SteemNodeRPC(urls=self.nodes_appbase, num_retries=2, num_retries_call=3) with self.assertRaises( exceptions.NoMethodWithName ): diff --git a/tests/beemapi/test_websocket.py b/tests/beemapi/test_websocket.py index 9b314bf5..0b2bb21c 100644 --- a/tests/beemapi/test_websocket.py +++ b/tests/beemapi/test_websocket.py @@ -26,6 +26,7 @@ class Testcases(unittest.TestCase): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) nodelist = NodeList() + nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10)) stm = Steem(node=nodelist.get_nodes(appbase=False)) self.ws = SteemWebsocket( -- GitLab