Skip to content

Commit 604e2a9

Browse files
committed
test: rpc_users: Add function for auth'd requests.
1 parent c799976 commit 604e2a9

File tree

1 file changed

+23
-106
lines changed

1 file changed

+23
-106
lines changed

test/functional/rpc_users.py

Lines changed: 23 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,17 @@
2020
import configparser
2121
import sys
2222

23+
def call_with_auth(node, user, password):
24+
url = urllib.parse.urlparse(node.url)
25+
headers = {"Authorization": "Basic " + str_to_b64str('{}:{}'.format(user, password))}
26+
27+
conn = http.client.HTTPConnection(url.hostname, url.port)
28+
conn.connect()
29+
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
30+
resp = conn.getresponse()
31+
conn.close()
32+
return resp
33+
2334

2435
class HTTPBasicsTest(BitcoinTestFramework):
2536
def set_test_params(self):
@@ -57,108 +68,39 @@ def run_test(self):
5768
##################################################
5869
url = urllib.parse.urlparse(self.nodes[0].url)
5970

60-
#Old authpair
61-
authpair = url.username + ':' + url.password
62-
63-
#New authpair generated via share/rpcauth tool
6471
password = "cA773lm788buwYe4g4WT+05pKyNruVKjQ25x3n0DQcM="
65-
66-
#Second authpair with different username
6772
password2 = "8/F3uMDw4KSEbw96U3CA1C4X05dkHDN2BPFjTgZW4KI="
68-
authpairnew = "rt:"+password
6973

7074
self.log.info('Correct...')
71-
headers = {"Authorization": "Basic " + str_to_b64str(authpair)}
72-
73-
conn = http.client.HTTPConnection(url.hostname, url.port)
74-
conn.connect()
75-
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
76-
resp = conn.getresponse()
77-
assert_equal(resp.status, 200)
78-
conn.close()
75+
assert_equal(200, call_with_auth(self.nodes[0], url.username, url.password).status)
7976

8077
#Use new authpair to confirm both work
8178
self.log.info('Correct...')
82-
headers = {"Authorization": "Basic " + str_to_b64str(authpairnew)}
83-
84-
conn = http.client.HTTPConnection(url.hostname, url.port)
85-
conn.connect()
86-
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
87-
resp = conn.getresponse()
88-
assert_equal(resp.status, 200)
89-
conn.close()
79+
assert_equal(200, call_with_auth(self.nodes[0], 'rt', password).status)
9080

9181
#Wrong login name with rt's password
9282
self.log.info('Wrong...')
93-
authpairnew = "rtwrong:"+password
94-
headers = {"Authorization": "Basic " + str_to_b64str(authpairnew)}
95-
96-
conn = http.client.HTTPConnection(url.hostname, url.port)
97-
conn.connect()
98-
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
99-
resp = conn.getresponse()
100-
assert_equal(resp.status, 401)
101-
conn.close()
83+
assert_equal(401, call_with_auth(self.nodes[0], 'rtwrong', password).status)
10284

10385
#Wrong password for rt
10486
self.log.info('Wrong...')
105-
authpairnew = "rt:"+password+"wrong"
106-
headers = {"Authorization": "Basic " + str_to_b64str(authpairnew)}
107-
108-
conn = http.client.HTTPConnection(url.hostname, url.port)
109-
conn.connect()
110-
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
111-
resp = conn.getresponse()
112-
assert_equal(resp.status, 401)
113-
conn.close()
87+
assert_equal(401, call_with_auth(self.nodes[0], 'rt', password+'wrong').status)
11488

11589
#Correct for rt2
11690
self.log.info('Correct...')
117-
authpairnew = "rt2:"+password2
118-
headers = {"Authorization": "Basic " + str_to_b64str(authpairnew)}
119-
120-
conn = http.client.HTTPConnection(url.hostname, url.port)
121-
conn.connect()
122-
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
123-
resp = conn.getresponse()
124-
assert_equal(resp.status, 200)
125-
conn.close()
91+
assert_equal(200, call_with_auth(self.nodes[0], 'rt2', password2).status)
12692

12793
#Wrong password for rt2
12894
self.log.info('Wrong...')
129-
authpairnew = "rt2:"+password2+"wrong"
130-
headers = {"Authorization": "Basic " + str_to_b64str(authpairnew)}
131-
132-
conn = http.client.HTTPConnection(url.hostname, url.port)
133-
conn.connect()
134-
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
135-
resp = conn.getresponse()
136-
assert_equal(resp.status, 401)
137-
conn.close()
95+
assert_equal(401, call_with_auth(self.nodes[0], 'rt2', password2+'wrong').status)
13896

13997
#Correct for randomly generated user
14098
self.log.info('Correct...')
141-
authpairnew = self.user+":"+self.password
142-
headers = {"Authorization": "Basic " + str_to_b64str(authpairnew)}
143-
144-
conn = http.client.HTTPConnection(url.hostname, url.port)
145-
conn.connect()
146-
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
147-
resp = conn.getresponse()
148-
assert_equal(resp.status, 200)
149-
conn.close()
99+
assert_equal(200, call_with_auth(self.nodes[0], self.user, self.password).status)
150100

151101
#Wrong password for randomly generated user
152102
self.log.info('Wrong...')
153-
authpairnew = self.user+":"+self.password+"Wrong"
154-
headers = {"Authorization": "Basic " + str_to_b64str(authpairnew)}
155-
156-
conn = http.client.HTTPConnection(url.hostname, url.port)
157-
conn.connect()
158-
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
159-
resp = conn.getresponse()
160-
assert_equal(resp.status, 401)
161-
conn.close()
103+
assert_equal(401, call_with_auth(self.nodes[0], self.user, self.password+'Wrong').status)
162104

163105
###############################################################
164106
# Check correctness of the rpcuser/rpcpassword config options #
@@ -167,40 +109,15 @@ def run_test(self):
167109

168110
# rpcuser and rpcpassword authpair
169111
self.log.info('Correct...')
170-
rpcuserauthpair = "rpcuser💻:rpcpassword🔑"
171-
172-
headers = {"Authorization": "Basic " + str_to_b64str(rpcuserauthpair)}
173-
174-
conn = http.client.HTTPConnection(url.hostname, url.port)
175-
conn.connect()
176-
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
177-
resp = conn.getresponse()
178-
assert_equal(resp.status, 200)
179-
conn.close()
112+
assert_equal(200, call_with_auth(self.nodes[1], "rpcuser💻", "rpcpassword🔑").status)
180113

181114
#Wrong login name with rpcuser's password
182-
rpcuserauthpair = "rpcuserwrong:rpcpassword"
183-
headers = {"Authorization": "Basic " + str_to_b64str(rpcuserauthpair)}
184-
185-
conn = http.client.HTTPConnection(url.hostname, url.port)
186-
conn.connect()
187-
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
188-
resp = conn.getresponse()
189-
assert_equal(resp.status, 401)
190-
conn.close()
115+
self.log.info('Wrong...')
116+
assert_equal(401, call_with_auth(self.nodes[1], 'rpcuserwrong', 'rpcpassword').status)
191117

192118
#Wrong password for rpcuser
193119
self.log.info('Wrong...')
194-
rpcuserauthpair = "rpcuser:rpcpasswordwrong"
195-
headers = {"Authorization": "Basic " + str_to_b64str(rpcuserauthpair)}
196-
197-
conn = http.client.HTTPConnection(url.hostname, url.port)
198-
conn.connect()
199-
conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
200-
resp = conn.getresponse()
201-
assert_equal(resp.status, 401)
202-
conn.close()
203-
120+
assert_equal(401, call_with_auth(self.nodes[1], 'rpcuser', 'rpcpasswordwrong').status)
204121

205122
if __name__ == '__main__':
206123
HTTPBasicsTest ().main ()

0 commit comments

Comments
 (0)