diff --git a/tests/PerformanceHarness/README.md b/tests/PerformanceHarness/README.md index 69c16b0cf8..764223d004 100644 --- a/tests/PerformanceHarness/README.md +++ b/tests/PerformanceHarness/README.md @@ -1,5 +1,21 @@ # Performance Harness +## Notes and Overview + +### Protocol +HTTP connection recommended as we can get back more information. P2P will not have the same robust information. P2P will handle more troughput. + +#### HTTPS Support +Currently no support for HTTPS. + +### Generating Load +Use the `TestHarness/TransactionGeneratorLancher.py` to spin up many transactions generators to generate lots of load. + +### Responsibilities +PerformanceHarness generate loads against an existing network, and generate reports on that network. +PerformanceHarness delegates setup of nodoes instances and cluster to the TestHarness +PerformanceHarness can toggle and tweak config settings in test harness + The Performance Harness is a module which provides the framework and utilities to run performance load tests on node infrastructure. `PerformanceHarnessScenarioRunner.py` is currently the main entry point and provides the utility to configure and run such tests. It also serves as an example of how one can import the `PerformanceHarness` module to configure and run performance tests. The `PerformanceHarnessScenarioRunner` currently provides two options for running performance tests. The first `findMax` uses the `PerformanceTest` class to run a suite of `PerformanceTestBasic` test run to zero in on a max performance (see section on `PerformanceTest` following.). The second is `singleTest` which allows a user to run a single `PerformanceTestBasic` and see the results of a single configuration (see `PerformanceTestBasic` section following). @@ -569,11 +585,11 @@ Performance Test Basic Base: --read-only-read-window-time-us READ_ONLY_READ_WINDOW_TIME_US Time in microseconds the read window lasts. --http-max-in-flight-requests HTTP_MAX_IN_FLIGHT_REQUESTS - Maximum number of requests http_plugin should use for processing http requests. 429 error response when exceeded. -1 for unlimited + Maximum number of requests http_plugin should use for processing http requests. 503 error response when exceeded. -1 for unlimited --http-max-response-time-ms HTTP_MAX_RESPONSE_TIME_MS Maximum time for processing a request, -1 for unlimited --http-max-bytes-in-flight-mb HTTP_MAX_BYTES_IN_FLIGHT_MB - Maximum size in megabytes http_plugin should use for processing http requests. -1 for unlimited. 429 error response when exceeded. + Maximum size in megabytes http_plugin should use for processing http requests. -1 for unlimited. 503 error response when exceeded. --del-perf-logs Whether to delete performance test specific logs. --del-report Whether to delete overarching performance run report. --save-state Whether to save node state. (Warning: large disk usage) @@ -726,11 +742,11 @@ Performance Test Basic Base: The number of milliseconds early the last block of a production round should be produced. --http-max-in-flight-requests HTTP_MAX_IN_FLIGHT_REQUESTS - Maximum number of requests http_plugin should use for processing http requests. 429 error response when exceeded. -1 for unlimited (default: -1) + Maximum number of requests http_plugin should use for processing http requests. 503 error response when exceeded. -1 for unlimited (default: -1) --http-max-response-time-ms HTTP_MAX_RESPONSE_TIME_MS Maximum time for processing a request, -1 for unlimited (default: -1) --http-max-bytes-in-flight-mb HTTP_MAX_BYTES_IN_FLIGHT_MB - Maximum size in megabytes http_plugin should use for processing http requests. -1 for unlimited. 429 error response when exceeded. (default: -1) + Maximum size in megabytes http_plugin should use for processing http requests. -1 for unlimited. 503 error response when exceeded. (default: -1) --del-perf-logs Whether to delete performance test specific logs. (default: False) --del-report Whether to delete overarching performance run report. (default: False) --save-state Whether to save node state. (Warning: large disk usage) diff --git a/tests/PerformanceHarness/example_trx_generator_run.md b/tests/PerformanceHarness/example_trx_generator_run.md new file mode 100644 index 0000000000..e28c66844d --- /dev/null +++ b/tests/PerformanceHarness/example_trx_generator_run.md @@ -0,0 +1,97 @@ + +## Command +Sleep is needed otherwise subjective transaction may reject transactions as too soon. +``` +CHAIN_ID=$(cleos --url $HTTP_URL get info | grep chain_id | cut -d: -f2 | sed 's/[ ",]//g') +LIB_ID=$(cleos --url $HTTP_URL get info | grep last_irreversible_block_id | cut -d: -f2 | sed 's/[ ",]//g') +sleep 3 +${BUILD_TEST_DIR}/trx_generator/trx_generator --generator-id $GENERATORID \ + --chain-id $CHAIN_ID \ + --contract-owner-account eosio \ + --accounts $COMMA_SEP_ACCOUNTS \ + --priv-keys $COMMA_SEP_KEYS \ + --last-irreversible-block-id $LIB_ID \ + --log-dir $TRX_LOG_DIR \ + --peer-endpoint-type p2p \ + --peer-endpoint $P2P_HOST \ + --port $PEER2PEERPORT +``` + +## Output +Why is this 0us +``` +info 2024-06-12T21:14:31.379 trx_gener main.cpp:128 main ] Initializing accounts. Attempt to create name for purplepurple +info 2024-06-12T21:14:31.379 trx_gener main.cpp:128 main ] Initializing accounts. Attempt to create name for orangeorange +info 2024-06-12T21:14:31.379 trx_gener main.cpp:128 main ] Initializing accounts. Attempt to create name for pinkpink1111 +info 2024-06-12T21:14:31.379 trx_gener main.cpp:128 main ] Initializing accounts. Attempt to create name for blueblue1111 +info 2024-06-12T21:14:31.379 trx_gener main.cpp:128 main ] Initializing accounts. Attempt to create name for yellowyellow +info 2024-06-12T21:14:31.379 trx_gener main.cpp:128 main ] Initializing accounts. Attempt to create name for greengreen11 +info 2024-06-12T21:14:31.379 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.379 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.379 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.379 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.379 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.379 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.379 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.379 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.379 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.380 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.380 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.380 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.380 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.380 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.380 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.380 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.380 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.380 trx_gener main.cpp:141 main ] Initializing private keys. Attempt to create private_key for 5JX...ZZZ : gen key 5JX...ZZZ +info 2024-06-12T21:14:31.380 trx_gener main.cpp:189 main ] Initial Trx Generator config: generator id: 0 chain id: b836a453e919f3dc7be91cd60cb949c625af7dc0f0a1f129f84763238d8bbc50 contract owner account: eosio trx expiration seconds: 3600 lib id: 0010f26923a1c9b094a778c2e58a19808af8ebaaa4346d72e1d3d19842fa5d2c log dir: /bigata1/log/trx_generator stop on trx failed: 1 +info 2024-06-12T21:14:31.380 trx_gener main.cpp:190 main ] Initial Provider config: Provider base config endpoint type: p2p peer_endpoint: p2p.spring-beta2.jungletestnet.io port: 9898 api endpoint: /v1/chain/send_transaction2 +info 2024-06-12T21:14:31.380 trx_gener main.cpp:191 main ] Initial Accounts config: Accounts Specified: accounts: [ purplepurple, orangeorange, pinkpink1111, blueblue1111, yellowyellow, greengreen11 ] keys: [ 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ, 5JX...ZZZ ] +info 2024-06-12T21:14:31.380 trx_gener main.cpp:192 main ] Transaction TPS Tester config: Trx Tps Tester Config: duration: 60 target tps: 1 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:103 setup ] Stop Generation (form potential ongoing generation in preparation for starting new generation run). +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:342 stop_generation ] Stopping transaction generation +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:106 setup ] Create All Initial Transfer Action/Reaction Pairs (acct 1 -> acct 2, acct 2 -> acct 1) between all provided accounts. +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from purplepurple to orangeorange +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from orangeorange to purplepurple +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from purplepurple to pinkpink1111 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from pinkpink1111 to purplepurple +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from purplepurple to blueblue1111 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from blueblue1111 to purplepurple +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from purplepurple to yellowyellow +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from yellowyellow to purplepurple +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from purplepurple to greengreen11 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from greengreen11 to purplepurple +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from orangeorange to pinkpink1111 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from pinkpink1111 to orangeorange +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from orangeorange to blueblue1111 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from blueblue1111 to orangeorange +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from orangeorange to yellowyellow +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from yellowyellow to orangeorange +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from orangeorange to greengreen11 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from greengreen11 to orangeorange +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from pinkpink1111 to blueblue1111 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from blueblue1111 to pinkpink1111 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from pinkpink1111 to yellowyellow +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from yellowyellow to pinkpink1111 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from pinkpink1111 to greengreen11 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from greengreen11 to pinkpink1111 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from blueblue1111 to yellowyellow +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from yellowyellow to blueblue1111 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from blueblue1111 to greengreen11 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from greengreen11 to blueblue1111 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:74 create_initial_trans ] create_initial_transfer_actions: creating transfer from yellowyellow to greengreen11 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:79 create_initial_trans ] create_initial_transfer_actions: creating transfer from greengreen11 to yellowyellow +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:87 create_initial_trans ] create_initial_transfer_actions: total action pairs created: 15 +info 2024-06-12T21:14:31.380 trx_gener trx_generator.cpp:109 setup ] Create All Initial Transfer Transactions (one for each created action). +info 2024-06-12T21:14:31.382 trx_gener trx_generator.cpp:112 setup ] Setup p2p transaction provider +info 2024-06-12T21:14:31.382 trx_gener trx_generator.cpp:114 setup ] Update each trx to qualify as unique and fresh timestamps, re-sign trx, and send each updated transactions via p2p transaction provider +info 2024-06-12T21:14:31.382 trx_gener trx_provider.cpp:71 connect ] Attempting P2P connection to p2p.spring-beta2.jungletestnet.io:9898. +info 2024-06-12T21:14:31.750 trx_gener trx_provider.cpp:75 connect ] Connected to p2p.spring-beta2.jungletestnet.io:9898. +info 2024-06-12T21:15:30.751 trx_gener trx_provider.cpp:84 disconnect ] disconnect waiting on ack - sent 60 | acked 59 | waited 0 +info 2024-06-12T21:15:31.751 trx_gener trx_generator.cpp:292 tear_down ] Sent transactions: 60 +info 2024-06-12T21:15:31.751 trx_gener trx_generator.cpp:293 tear_down ] Tear down p2p transaction provider +info 2024-06-12T21:15:31.751 trx_gener trx_generator.cpp:296 tear_down ] Stop Generation. +info 2024-06-12T21:15:31.751 trx_gener trx_generator.cpp:342 stop_generation ] Stopping transaction generation +info 2024-06-12T21:15:31.751 trx_gener trx_generator.cpp:345 stop_generation ] 60 transactions executed, 0.00000000000000000us / transaction +info 2024-06-12T21:15:31.751 trx_gener main.cpp:226 main ] Exiting main SUCCESS +``` diff --git a/tests/PerformanceHarness/performance_test_basic.py b/tests/PerformanceHarness/performance_test_basic.py index bc581dbb22..1c8a552edb 100755 --- a/tests/PerformanceHarness/performance_test_basic.py +++ b/tests/PerformanceHarness/performance_test_basic.py @@ -722,9 +722,9 @@ def _createBaseArgumentParser(defEndpointApiDef: str, defProdNodeCnt: int, defVa ptbBaseParserGroup.add_argument("--produce-block-offset-ms", type=int, help=argparse.SUPPRESS if suppressHelp else "The minimum time to reserve at the end of a production round for blocks to propagate to the next block producer.", default=0) ptbBaseParserGroup.add_argument("--read-only-write-window-time-us", type=int, help=argparse.SUPPRESS if suppressHelp else "Time in microseconds the write window lasts.", default=200000) ptbBaseParserGroup.add_argument("--read-only-read-window-time-us", type=int, help=argparse.SUPPRESS if suppressHelp else "Time in microseconds the read window lasts.", default=60000) - ptbBaseParserGroup.add_argument("--http-max-in-flight-requests", type=int, help=argparse.SUPPRESS if suppressHelp else "Maximum number of requests http_plugin should use for processing http requests. 429 error response when exceeded. -1 for unlimited", default=-1) + ptbBaseParserGroup.add_argument("--http-max-in-flight-requests", type=int, help=argparse.SUPPRESS if suppressHelp else "Maximum number of requests http_plugin should use for processing http requests. 503 error response when exceeded. -1 for unlimited", default=-1) ptbBaseParserGroup.add_argument("--http-max-response-time-ms", type=int, help=argparse.SUPPRESS if suppressHelp else "Maximum time for processing a request, -1 for unlimited", default=-1) - ptbBaseParserGroup.add_argument("--http-max-bytes-in-flight-mb", type=int, help=argparse.SUPPRESS if suppressHelp else "Maximum size in megabytes http_plugin should use for processing http requests. -1 for unlimited. 429\ + ptbBaseParserGroup.add_argument("--http-max-bytes-in-flight-mb", type=int, help=argparse.SUPPRESS if suppressHelp else "Maximum size in megabytes http_plugin should use for processing http requests. -1 for unlimited. 503\ error response when exceeded.", default=-1) ptbBaseParserGroup.add_argument("--del-perf-logs", help=argparse.SUPPRESS if suppressHelp else "Whether to delete performance test specific logs.", action='store_true') ptbBaseParserGroup.add_argument("--del-report", help=argparse.SUPPRESS if suppressHelp else "Whether to delete overarching performance run report.", action='store_true') diff --git a/tests/TestHarness/Node.py b/tests/TestHarness/Node.py index d386121fba..f8e18ffb63 100644 --- a/tests/TestHarness/Node.py +++ b/tests/TestHarness/Node.py @@ -33,6 +33,7 @@ class KeyStrings(object): # pylint: disable=too-many-public-methods class Node(Transactions): + """Python Representation of a Node. Tracks nodes you use on a cluser""" # Node number is used as an addend to determine the node listen ports. # This value extends that pattern to all nodes, not just the numbered nodes. biosNodeId = -100 @@ -538,7 +539,7 @@ def createSnapshot(self): def scheduleSnapshot(self): return self.processUrllibRequest("producer", "schedule_snapshot") - + def scheduleSnapshotAt(self, sbn): param = { "start_block_num": sbn, "end_block_num": sbn } return self.processUrllibRequest("producer", "schedule_snapshot", param) diff --git a/tests/TestHarness/README.md b/tests/TestHarness/README.md new file mode 100644 index 0000000000..72a4557bb3 --- /dev/null +++ b/tests/TestHarness/README.md @@ -0,0 +1,15 @@ +## Files +- accounts.py - create the accounts with keys, initialize accounts +- cluster.py - very important, creates and setups the nodes, launch has lots of config settings and nodes management +- depresolver.py - ???? +- interface.py - low level socket support needed to support interfaces when launcher was moved from c to python +- launcher.py - spins up the cluster , called by cluster.py , was c, converted to python +- libc.py - get access to constants +- logging.py - contains one function emulate C logging +- queries.py - API queries , check up on a node +- Node.py - python representation of a node, and function to interact with a node and state of a node +- testUtils.py - functions and utilities outside of nodeos or the cluster, for example getting access to a nodes datta directory +- TestHelper.py - abstracts aways arguments and config into a few lifecycle events +- TransactionGeneratorsLaunch.py - concurrent load generation by spinning up multiple trx generators +- transactions.py - refactored , to consolidate transaction logic together +- WalletMgr.py - python representation of a wallet, uses external wallet manager diff --git a/tests/TestHarness/TestHelper.py b/tests/TestHarness/TestHelper.py index fe98e97c1b..0a72a7ebf5 100644 --- a/tests/TestHarness/TestHelper.py +++ b/tests/TestHarness/TestHelper.py @@ -148,7 +148,7 @@ def printSystemInfo(prefix): Utils.Print("EOS Client version: %s" % (clientVersion)) Utils.Print("Processor: %s" % (platform.processor())) Utils.Print("OS name: %s" % (platform.platform())) - + @staticmethod def shutdown(cluster, walletMgr, testSuccessful=True, dumpErrorDetails=False): """Cluster and WalletMgr shutdown and cleanup.""" diff --git a/tests/TestHarness/TransactionGeneratorsLauncher.py b/tests/TestHarness/TransactionGeneratorsLauncher.py index 1285c1523a..dc67e9a85d 100644 --- a/tests/TestHarness/TransactionGeneratorsLauncher.py +++ b/tests/TestHarness/TransactionGeneratorsLauncher.py @@ -15,7 +15,7 @@ Print = Utils.Print class TpsTrxGensConfig: - + """Specifing for TPS testing; distinct config""" def __init__(self, targetTps: int, tpsLimitPerGenerator: int, connectionPairList: list): self.targetTps: int = targetTps self.tpsLimitPerGenerator: int = tpsLimitPerGenerator @@ -36,7 +36,7 @@ def __init__(self, targetTps: int, tpsLimitPerGenerator: int, connectionPairList self.targetTpsPerGenList.append(curTps) class TransactionGeneratorsLauncher: - + """Lanches multiple trx generator for simulatous load uses os POpen""" def __init__(self, trxGenerator: Path, chainId: int, lastIrreversibleBlockId: int, contractOwnerAccount: str, accts: str, privateKeys: str, trxGenDurationSec: int, logDir: str, abiFile: Path, actionsData, actionsAuths, tpsTrxGensConfig: TpsTrxGensConfig, endpointMode: str, apiEndpoint: str=None): self.trxGenerator = trxGenerator diff --git a/tests/TestHarness/WalletMgr.py b/tests/TestHarness/WalletMgr.py index 3fc05c2f31..fb78802b89 100644 --- a/tests/TestHarness/WalletMgr.py +++ b/tests/TestHarness/WalletMgr.py @@ -13,6 +13,7 @@ Wallet=namedtuple("Wallet", "name password host port") # pylint: disable=too-many-instance-attributes class WalletMgr(object): + """Python representation of Wallet, lauches wallet manager""" __walletDataDir=f"{Utils.DataPath}/test_wallet_0" __walletLogOutFile=f"{__walletDataDir}/test_keosd_out.log" __walletLogErrFile=f"{__walletDataDir}/test_keosd_err.log" diff --git a/tests/TestHarness/accounts.py b/tests/TestHarness/accounts.py index 45a370921d..2f5b67923c 100644 --- a/tests/TestHarness/accounts.py +++ b/tests/TestHarness/accounts.py @@ -40,6 +40,7 @@ def setName(self, num): ########################################################################################### class Account(object): + """EOS representation of the account, and allows you to populate the account keys""" # pylint: disable=too-few-public-methods def __init__(self, name):