Changeset View
Changeset View
Standalone View
Standalone View
test/functional/interface_http.py
Show All 27 Lines | def run_test(self): | ||||
authpair = url.username + ':' + url.password | authpair = url.username + ':' + url.password | ||||
headers = {"Authorization": "Basic " + str_to_b64str(authpair)} | headers = {"Authorization": "Basic " + str_to_b64str(authpair)} | ||||
conn = http.client.HTTPConnection(url.hostname, url.port) | conn = http.client.HTTPConnection(url.hostname, url.port) | ||||
conn.connect() | conn.connect() | ||||
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers) | conn.request('POST', '/', '{"method": "getbestblockhash"}', headers) | ||||
out1 = conn.getresponse().read() | out1 = conn.getresponse().read() | ||||
assert b'"error":null' in out1 | assert b'"error":null' in out1 | ||||
assert conn.sock != None | assert conn.sock is not None | ||||
# according to http/1.1 connection must still be open! | # according to http/1.1 connection must still be open! | ||||
# send 2nd request without closing connection | # send 2nd request without closing connection | ||||
conn.request('POST', '/', '{"method": "getchaintips"}', headers) | conn.request('POST', '/', '{"method": "getchaintips"}', headers) | ||||
out1 = conn.getresponse().read() | out1 = conn.getresponse().read() | ||||
assert b'"error":null' in out1 | assert b'"error":null' in out1 | ||||
# must also response with a correct json-rpc message | # must also response with a correct json-rpc message | ||||
assert conn.sock != None | assert conn.sock is not None | ||||
# according to http/1.1 connection must still be open! | # according to http/1.1 connection must still be open! | ||||
conn.close() | conn.close() | ||||
# same should be if we add keep-alive because this should be the std. | # same should be if we add keep-alive because this should be the std. | ||||
# behaviour | # behaviour | ||||
headers = {"Authorization": "Basic " + | headers = {"Authorization": "Basic " + | ||||
str_to_b64str(authpair), "Connection": "keep-alive"} | str_to_b64str(authpair), "Connection": "keep-alive"} | ||||
conn = http.client.HTTPConnection(url.hostname, url.port) | conn = http.client.HTTPConnection(url.hostname, url.port) | ||||
conn.connect() | conn.connect() | ||||
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers) | conn.request('POST', '/', '{"method": "getbestblockhash"}', headers) | ||||
out1 = conn.getresponse().read() | out1 = conn.getresponse().read() | ||||
assert b'"error":null' in out1 | assert b'"error":null' in out1 | ||||
assert conn.sock != None | assert conn.sock is not None | ||||
# according to http/1.1 connection must still be open! | # according to http/1.1 connection must still be open! | ||||
# send 2nd request without closing connection | # send 2nd request without closing connection | ||||
conn.request('POST', '/', '{"method": "getchaintips"}', headers) | conn.request('POST', '/', '{"method": "getchaintips"}', headers) | ||||
out1 = conn.getresponse().read() | out1 = conn.getresponse().read() | ||||
assert b'"error":null' in out1 | assert b'"error":null' in out1 | ||||
# must also response with a correct json-rpc message | # must also response with a correct json-rpc message | ||||
assert conn.sock != None | assert conn.sock is not None | ||||
# according to http/1.1 connection must still be open! | # according to http/1.1 connection must still be open! | ||||
conn.close() | conn.close() | ||||
# now do the same with "Connection: close" | # now do the same with "Connection: close" | ||||
headers = {"Authorization": "Basic " + | headers = {"Authorization": "Basic " + | ||||
str_to_b64str(authpair), "Connection": "close"} | str_to_b64str(authpair), "Connection": "close"} | ||||
conn = http.client.HTTPConnection(url.hostname, url.port) | conn = http.client.HTTPConnection(url.hostname, url.port) | ||||
conn.connect() | conn.connect() | ||||
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers) | conn.request('POST', '/', '{"method": "getbestblockhash"}', headers) | ||||
out1 = conn.getresponse().read() | out1 = conn.getresponse().read() | ||||
assert b'"error":null' in out1 | assert b'"error":null' in out1 | ||||
assert conn.sock == None | assert conn.sock is None | ||||
# now the connection must be closed after the response | # now the connection must be closed after the response | ||||
# node1 (2nd node) is running with disabled keep-alive option | # node1 (2nd node) is running with disabled keep-alive option | ||||
urlNode1 = urllib.parse.urlparse(self.nodes[1].url) | urlNode1 = urllib.parse.urlparse(self.nodes[1].url) | ||||
authpair = urlNode1.username + ':' + urlNode1.password | authpair = urlNode1.username + ':' + urlNode1.password | ||||
headers = {"Authorization": "Basic " + str_to_b64str(authpair)} | headers = {"Authorization": "Basic " + str_to_b64str(authpair)} | ||||
conn = http.client.HTTPConnection(urlNode1.hostname, urlNode1.port) | conn = http.client.HTTPConnection(urlNode1.hostname, urlNode1.port) | ||||
conn.connect() | conn.connect() | ||||
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers) | conn.request('POST', '/', '{"method": "getbestblockhash"}', headers) | ||||
out1 = conn.getresponse().read() | out1 = conn.getresponse().read() | ||||
assert b'"error":null' in out1 | assert b'"error":null' in out1 | ||||
# node2 (third node) is running with standard keep-alive parameters | # node2 (third node) is running with standard keep-alive parameters | ||||
# which means keep-alive is on | # which means keep-alive is on | ||||
urlNode2 = urllib.parse.urlparse(self.nodes[2].url) | urlNode2 = urllib.parse.urlparse(self.nodes[2].url) | ||||
authpair = urlNode2.username + ':' + urlNode2.password | authpair = urlNode2.username + ':' + urlNode2.password | ||||
headers = {"Authorization": "Basic " + str_to_b64str(authpair)} | headers = {"Authorization": "Basic " + str_to_b64str(authpair)} | ||||
conn = http.client.HTTPConnection(urlNode2.hostname, urlNode2.port) | conn = http.client.HTTPConnection(urlNode2.hostname, urlNode2.port) | ||||
conn.connect() | conn.connect() | ||||
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers) | conn.request('POST', '/', '{"method": "getbestblockhash"}', headers) | ||||
out1 = conn.getresponse().read() | out1 = conn.getresponse().read() | ||||
assert b'"error":null' in out1 | assert b'"error":null' in out1 | ||||
assert conn.sock != None | assert conn.sock is not None | ||||
# connection must be closed because bitcoind should use | # connection must be closed because bitcoind should use | ||||
# keep-alive by default | # keep-alive by default | ||||
# Check excessive request size | # Check excessive request size | ||||
conn = http.client.HTTPConnection(urlNode2.hostname, urlNode2.port) | conn = http.client.HTTPConnection(urlNode2.hostname, urlNode2.port) | ||||
conn.connect() | conn.connect() | ||||
conn.request('GET', '/' + ('x' * 1000), '', headers) | conn.request('GET', '/' + ('x' * 1000), '', headers) | ||||
out1 = conn.getresponse() | out1 = conn.getresponse() | ||||
▲ Show 20 Lines • Show All 60 Lines • Show Last 20 Lines |