|
46 | 46 | # The size of the blocks xor key |
47 | 47 | # from InitBlocksdirXorKey::xor_key.size() |
48 | 48 | NUM_XOR_BYTES = 8 |
49 | | -CLI_MAX_ARG_SIZE = 131071 # many systems have a 128kb limit per arg (MAX_ARG_STRLEN) |
| 49 | +# Many systems have a 128kB limit for a command size. Depending on the |
| 50 | +# platform, this limit may be larger or smaller. Moreover, when using the |
| 51 | +# 'bitcoin' command, it may internally insert more args, which must be |
| 52 | +# accounted for. There is no need to pick the largest possible value here |
| 53 | +# anyway and it should be fine to set it to 1kB in tests. |
| 54 | +TEST_CLI_MAX_ARG_SIZE = 1024 |
50 | 55 |
|
51 | 56 | # The null blocks key (all 0s) |
52 | 57 | NULL_BLK_XOR_KEY = bytes([0] * NUM_XOR_BYTES) |
@@ -928,10 +933,14 @@ def send_cli(self, clicommand=None, *args, **kwargs): |
928 | 933 | if clicommand is not None: |
929 | 934 | p_args += [clicommand] |
930 | 935 | p_args += pos_args + named_args |
931 | | - max_arg_size = max(len(arg) for arg in p_args) |
| 936 | + |
| 937 | + # TEST_CLI_MAX_ARG_SIZE is set low enough that checking the string |
| 938 | + # length is enough and encoding to bytes is not needed before |
| 939 | + # calculating the sum. |
| 940 | + sum_arg_size = sum(len(arg) for arg in p_args) |
932 | 941 | stdin_data = self.input |
933 | | - if max_arg_size > CLI_MAX_ARG_SIZE: |
934 | | - self.log.debug(f"Cli: Command size {max_arg_size} too large, using stdin") |
| 942 | + if sum_arg_size >= TEST_CLI_MAX_ARG_SIZE: |
| 943 | + self.log.debug(f"Cli: Command size {sum_arg_size} too large, using stdin") |
935 | 944 | rpc_args = "\n".join([arg for arg in p_args[base_arg_pos:]]) |
936 | 945 | if stdin_data is not None: |
937 | 946 | stdin_data += "\n" + rpc_args |
|
0 commit comments