diff --git a/beem/cli.py b/beem/cli.py index 5bd0d58f943df341ee068d8e8aeda14c7d9277bc..999a27eb25b10cf1c764f7197a41b2df13dae2d1 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 7b206439e152a065bffd509168af9f19ef504dc6..e260caeda741872c745bd2db0d5b10bbac25a012 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 bf8a7012df55fbeded786bda3fb62e17cddb96ad..8d9328a7ed0171f05b3d270e69f75bc949fdb920 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 59b5265d6d644432852451d5e236cbbd334ba810..f1b2d5eb47f04b781520d5036cd3ec1944f7bf9e 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 22964e39b30a5caf238528a3a1974a9deb87bb54..c0ca6e7feed7b6132c26395cbbd0e7f630563944 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 05b4aa32735e53b381c7c2fc62ff844e50408f63..abde3a1147be46a8ef4c3699cb890af652fdf916 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 e41f2426a24835e9414165adacd15dee0627f3aa..7be22de43b0252ec0eed31ce8ca1b384e2f0d1e8 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 f5de5526ecc9ba668abb60bad8c58ed6d205c735..3ffb6a24b94b7727674e159120799dbf590ec9e9 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 5456f1fa3c443bb6fe12193c0089257005403cb8..6b354c29fecb812db1e099129ef2061608a1a13e 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 3b9ad761650df3834c90631b3a4a38342c3e4a4e..82bd2ca86fddb47b29c0ce524a863c91a8c94165 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 5eab09002d399f6e5e3ddbe5e248d6c44ec19675..b376068a04bcd3fc322df61345450c68802fcc44 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 e234d91c5ecded41c0434dfa2a4773a7e73ca479..83256f45f27df088dd1c48d6317f9cbbc6a28cd3 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 0c9d56443fe190af2121da26502cfada9758800e..35d394442579bfa1c3f3d2bb9220bcfd32615b9b 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 f5767a7f18b710cc136b3e09818568a4dc350766..2b8c425596cd6c345fa63f56bbcc1e9f4633e00f 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 1e9c04aab265af98da37b17adc003a56b0b25f8c..6356ad8c595c75caadc9640b97d756c5c2151a1e 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 99f3ecd1cab9efd0c07d0241170d899fe72ca07d..9e2f5638161670935f1cfd095c31390f7b13cbdd 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 ba8419cec95fd0dd9c2dad04d5c0ebe1a22d4716..742673dca170861f5b953cb3149ba29365e30cf2 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 eec91a37b19a996289b66c13ac648a7a31af7a2d..5f82d9cd6cb653e4153ec507c97c900bd3a11fb2 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 306983b1cd5998e8437568c581f9027f7677a8d2..4916562545db9ef941e0d1d5294678dc9a1d8e97 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 a9ab4e8f673d3c5c934ee38d819ad08070a1d9aa..53dae03bf406109afc6277381a69593b29ee28f9 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 0000000000000000000000000000000000000000..c318f19afa76d4d156b53d1b1852e51133971d6a --- /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 1a483a338b0e625311c39681dff6cb84cc342586..39c7f8ad0294fa4c72edb9952280d7b5b39f2c99 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 1cf88da4faa65f9747f5b27b0fc0591f66dffa7f..14beb82f9a5dbf99476a86d9a38a619015c28da7 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 f8f8621d1a5feaca83f7f9aa130bdebec50416ed..43c9a8f960cab819168eff8c21b618dfacff4029 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 818ae1ec13996cd693bc12d1de77fcef12a1aedc..e5cdb03a1f26146cf20fec0460f4908c64a99e51 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 e68cd7e832baf9d12c121aff80984bbcf4e41fe0..314da3aa8304b9da94e96cba64976badc031d396 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 458ac61d8811ed544003927c4cb846c648ecb511..7763cc1ad2fe2b1409abcd8331450612d92da539 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 259298b2fa0fa155cf78d4a0c7c6e06c9f939575..8bae9f54d11169e20371b4a4d1a13186d7d74c58 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 8bb5b0df71be963b54c39faca34c78395c38657b..a3213b7981353118766eb8b782ab18107dd28cf1 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 9ad9958a29cc995d995f2ea43b816328d14d386c..5eb482a739f9b01a903a85002a4381e83e5a3daf 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 d9c4df99f2ed01c49a0569895742bc0b6d14bc76..3ea0d22f632e0f2ee3ca752583b788c8a26d9758 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 9b314bf54537a5d1309cfb8b5f9856ccd9aa7ce3..0b2bb21cb66b19d40bad6ca9ad75903a46db0eaf 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(