Skip to content

Commit 9b43b3b

Browse files
committed
test: extend feature_proxy.py to test CJDNS
1 parent 508eb25 commit 9b43b3b

File tree

1 file changed

+46
-7
lines changed

1 file changed

+46
-7
lines changed

test/functional/feature_proxy.py

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
- `-proxy` (proxy everything)
1313
- `-onion` (proxy just onions)
1414
- `-proxyrandomize` Circuit randomization
15+
- `-cjdnsreachable`
1516
- Proxy configurations to test on proxy side,
1617
- support no authentication (other proxy)
1718
- support no authentication + user/pass authentication (Tor)
@@ -26,6 +27,7 @@
2627
addnode connect to IPv6
2728
addnode connect to onion
2829
addnode connect to generic DNS name
30+
addnode connect to a CJDNS address
2931
3032
- Test getnetworkinfo for each node
3133
"""
@@ -58,7 +60,7 @@
5860

5961
class ProxyTest(BitcoinTestFramework):
6062
def set_test_params(self):
61-
self.num_nodes = 4
63+
self.num_nodes = 5
6264
self.setup_clean_chain = True
6365

6466
def setup_nodes(self):
@@ -102,7 +104,9 @@ def setup_nodes(self):
102104
['-listen', f'-proxy={self.conf1.addr[0]}:{self.conf1.addr[1]}',f'-onion={self.conf2.addr[0]}:{self.conf2.addr[1]}',
103105
f'-i2psam={self.i2p_sam[0]}:{self.i2p_sam[1]}', '-i2pacceptincoming=0', '-proxyrandomize=0'],
104106
['-listen', f'-proxy={self.conf2.addr[0]}:{self.conf2.addr[1]}','-proxyrandomize=1'],
105-
[]
107+
[],
108+
['-listen', f'-proxy={self.conf1.addr[0]}:{self.conf1.addr[1]}','-proxyrandomize=1',
109+
'-cjdnsreachable']
106110
]
107111
if self.have_ipv6:
108112
args[3] = ['-listen', f'-proxy=[{self.conf3.addr[0]}]:{self.conf3.addr[1]}','-proxyrandomize=0', '-noonion']
@@ -114,7 +118,7 @@ def network_test(self, node, addr, network):
114118
if peer["addr"] == addr:
115119
assert_equal(peer["network"], network)
116120

117-
def node_test(self, node, *, proxies, auth, test_onion):
121+
def node_test(self, node, *, proxies, auth, test_onion, test_cjdns):
118122
rv = []
119123
addr = "15.61.23.23:1234"
120124
self.log.debug(f"Test: outgoing IPv4 connection through node for address {addr}")
@@ -162,6 +166,21 @@ def node_test(self, node, *, proxies, auth, test_onion):
162166
rv.append(cmd)
163167
self.network_test(node, addr, network=NET_ONION)
164168

169+
if test_cjdns:
170+
addr = "[fc00:1:2:3:4:5:6:7]:8888"
171+
self.log.debug(f"Test: outgoing CJDNS connection through node for address {addr}")
172+
node.addnode(addr, "onetry")
173+
cmd = proxies[1].queue.get()
174+
assert isinstance(cmd, Socks5Command)
175+
assert_equal(cmd.atyp, AddressType.DOMAINNAME)
176+
assert_equal(cmd.addr, b"fc00:1:2:3:4:5:6:7")
177+
assert_equal(cmd.port, 8888)
178+
if not auth:
179+
assert_equal(cmd.username, None)
180+
assert_equal(cmd.password, None)
181+
rv.append(cmd)
182+
self.network_test(node, addr, network=NET_CJDNS)
183+
165184
addr = "node.noumenon:8333"
166185
self.log.debug(f"Test: outgoing DNS name connection through node for address {addr}")
167186
node.addnode(addr, "onetry")
@@ -182,17 +201,17 @@ def run_test(self):
182201
# basic -proxy
183202
self.node_test(self.nodes[0],
184203
proxies=[self.serv1, self.serv1, self.serv1, self.serv1],
185-
auth=False, test_onion=True)
204+
auth=False, test_onion=True, test_cjdns=False)
186205

187206
# -proxy plus -onion
188207
self.node_test(self.nodes[1],
189208
proxies=[self.serv1, self.serv1, self.serv2, self.serv1],
190-
auth=False, test_onion=True)
209+
auth=False, test_onion=True, test_cjdns=False)
191210

192211
# -proxy plus -onion, -proxyrandomize
193212
rv = self.node_test(self.nodes[2],
194213
proxies=[self.serv2, self.serv2, self.serv2, self.serv2],
195-
auth=True, test_onion=True)
214+
auth=True, test_onion=True, test_cjdns=False)
196215
# Check that credentials as used for -proxyrandomize connections are unique
197216
credentials = set((x.username,x.password) for x in rv)
198217
assert_equal(len(credentials), len(rv))
@@ -201,7 +220,12 @@ def run_test(self):
201220
# proxy on IPv6 localhost
202221
self.node_test(self.nodes[3],
203222
proxies=[self.serv3, self.serv3, self.serv3, self.serv3],
204-
auth=False, test_onion=False)
223+
auth=False, test_onion=False, test_cjdns=False)
224+
225+
# -proxy=unauth -proxyrandomize=1 -cjdnsreachable
226+
self.node_test(self.nodes[4],
227+
proxies=[self.serv1, self.serv1, self.serv1, self.serv1],
228+
auth=False, test_onion=True, test_cjdns=True)
205229

206230
def networks_dict(d):
207231
r = {}
@@ -266,6 +290,21 @@ def networks_dict(d):
266290
assert_equal(n3['i2p']['reachable'], False)
267291
assert_equal(n3['cjdns']['reachable'], False)
268292

293+
n4 = networks_dict(self.nodes[4].getnetworkinfo())
294+
assert_equal(NETWORKS, n4.keys())
295+
for net in NETWORKS:
296+
if net == NET_I2P:
297+
expected_proxy = ''
298+
expected_randomize = False
299+
else:
300+
expected_proxy = '%s:%i' % (self.conf1.addr)
301+
expected_randomize = True
302+
assert_equal(n4[net]['proxy'], expected_proxy)
303+
assert_equal(n4[net]['proxy_randomize_credentials'], expected_randomize)
304+
assert_equal(n4['onion']['reachable'], True)
305+
assert_equal(n4['i2p']['reachable'], False)
306+
assert_equal(n4['cjdns']['reachable'], True)
307+
269308

270309
if __name__ == '__main__':
271310
ProxyTest().main()

0 commit comments

Comments
 (0)