|
8 | 8 | import re
|
9 | 9 |
|
10 | 10 | from test_framework.blocktools import COINBASE_MATURITY
|
| 11 | +from test_framework.netutil import test_ipv6_local |
11 | 12 | from test_framework.test_framework import BitcoinTestFramework
|
12 | 13 | from test_framework.util import (
|
13 | 14 | assert_equal,
|
14 | 15 | assert_greater_than_or_equal,
|
15 | 16 | assert_raises_process_error,
|
16 | 17 | assert_raises_rpc_error,
|
17 | 18 | get_auth_cookie,
|
| 19 | + rpc_port, |
18 | 20 | )
|
19 | 21 | import time
|
20 | 22 |
|
@@ -107,6 +109,53 @@ def run_test(self):
|
107 | 109 | self.log.info("Test connecting to a non-existing server")
|
108 | 110 | assert_raises_process_error(1, "Could not connect to the server", self.nodes[0].cli('-rpcport=1').echo)
|
109 | 111 |
|
| 112 | + self.log.info("Test handling of invalid ports in rpcconnect") |
| 113 | + assert_raises_process_error(1, "Invalid port provided in -rpcconnect: 127.0.0.1:notaport", self.nodes[0].cli("-rpcconnect=127.0.0.1:notaport").echo) |
| 114 | + assert_raises_process_error(1, "Invalid port provided in -rpcconnect: 127.0.0.1:-1", self.nodes[0].cli("-rpcconnect=127.0.0.1:-1").echo) |
| 115 | + assert_raises_process_error(1, "Invalid port provided in -rpcconnect: 127.0.0.1:0", self.nodes[0].cli("-rpcconnect=127.0.0.1:0").echo) |
| 116 | + assert_raises_process_error(1, "Invalid port provided in -rpcconnect: 127.0.0.1:65536", self.nodes[0].cli("-rpcconnect=127.0.0.1:65536").echo) |
| 117 | + |
| 118 | + self.log.info("Checking for IPv6") |
| 119 | + have_ipv6 = test_ipv6_local() |
| 120 | + if not have_ipv6: |
| 121 | + self.log.info("Skipping IPv6 tests") |
| 122 | + |
| 123 | + if have_ipv6: |
| 124 | + assert_raises_process_error(1, "Invalid port provided in -rpcconnect: [::1]:notaport", self.nodes[0].cli("-rpcconnect=[::1]:notaport").echo) |
| 125 | + assert_raises_process_error(1, "Invalid port provided in -rpcconnect: [::1]:-1", self.nodes[0].cli("-rpcconnect=[::1]:-1").echo) |
| 126 | + assert_raises_process_error(1, "Invalid port provided in -rpcconnect: [::1]:0", self.nodes[0].cli("-rpcconnect=[::1]:0").echo) |
| 127 | + assert_raises_process_error(1, "Invalid port provided in -rpcconnect: [::1]:65536", self.nodes[0].cli("-rpcconnect=[::1]:65536").echo) |
| 128 | + |
| 129 | + self.log.info("Test handling of invalid ports in rpcport") |
| 130 | + assert_raises_process_error(1, "Invalid port provided in -rpcport: notaport", self.nodes[0].cli("-rpcport=notaport").echo) |
| 131 | + assert_raises_process_error(1, "Invalid port provided in -rpcport: -1", self.nodes[0].cli("-rpcport=-1").echo) |
| 132 | + assert_raises_process_error(1, "Invalid port provided in -rpcport: 0", self.nodes[0].cli("-rpcport=0").echo) |
| 133 | + assert_raises_process_error(1, "Invalid port provided in -rpcport: 65536", self.nodes[0].cli("-rpcport=65536").echo) |
| 134 | + |
| 135 | + self.log.info("Test port usage preferences") |
| 136 | + node_rpc_port = rpc_port(self.nodes[0].index) |
| 137 | + # Prevent bitcoin-cli from using existing rpcport in conf |
| 138 | + conf_rpcport = "rpcport=" + str(node_rpc_port) |
| 139 | + self.nodes[0].replace_in_config([(conf_rpcport, "#" + conf_rpcport)]) |
| 140 | + # prefer rpcport over rpcconnect |
| 141 | + assert_raises_process_error(1, "Could not connect to the server 127.0.0.1:1", self.nodes[0].cli(f"-rpcconnect=127.0.0.1:{node_rpc_port}", "-rpcport=1").echo) |
| 142 | + if have_ipv6: |
| 143 | + assert_raises_process_error(1, "Could not connect to the server ::1:1", self.nodes[0].cli(f"-rpcconnect=[::1]:{node_rpc_port}", "-rpcport=1").echo) |
| 144 | + |
| 145 | + assert_equal(BLOCKS, self.nodes[0].cli("-rpcconnect=127.0.0.1:18999", f'-rpcport={node_rpc_port}').getblockcount()) |
| 146 | + if have_ipv6: |
| 147 | + assert_equal(BLOCKS, self.nodes[0].cli("-rpcconnect=[::1]:18999", f'-rpcport={node_rpc_port}').getblockcount()) |
| 148 | + |
| 149 | + # prefer rpcconnect port over default |
| 150 | + assert_equal(BLOCKS, self.nodes[0].cli(f"-rpcconnect=127.0.0.1:{node_rpc_port}").getblockcount()) |
| 151 | + if have_ipv6: |
| 152 | + assert_equal(BLOCKS, self.nodes[0].cli(f"-rpcconnect=[::1]:{node_rpc_port}").getblockcount()) |
| 153 | + |
| 154 | + # prefer rpcport over default |
| 155 | + assert_equal(BLOCKS, self.nodes[0].cli(f'-rpcport={node_rpc_port}').getblockcount()) |
| 156 | + # Re-enable rpcport in conf if present |
| 157 | + self.nodes[0].replace_in_config([("#" + conf_rpcport, conf_rpcport)]) |
| 158 | + |
110 | 159 | self.log.info("Test connecting with non-existing RPC cookie file")
|
111 | 160 | assert_raises_process_error(1, "Could not locate RPC credentials", self.nodes[0].cli('-rpccookiefile=does-not-exist', '-rpcpassword=').echo)
|
112 | 161 |
|
|
0 commit comments