Skip to content

Commit 732acfe

Browse files
Updates from testing
1 parent 36d04bc commit 732acfe

File tree

5 files changed

+47
-35
lines changed

5 files changed

+47
-35
lines changed

qiita_client/plugin.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,12 @@ def __call__(self, server_url, job_id, output_dir):
245245

246246
qclient = QiitaClient(server_url, config.get('oauth2', 'CLIENT_ID'),
247247
config.get('oauth2', 'CLIENT_SECRET'),
248-
server_cert=config.get('oauth2', 'SERVER_CERT'))
248+
# for this group of tests, confirm optional
249+
# ca_cert parameter works as intended. Setting
250+
# this value will prevent underlying libraries
251+
# from validating the server's cert using
252+
# certifi's pem cache.
253+
ca_cert=environ['QIITA_ROOT_CA'])
249254

250255
if job_id == 'register':
251256
self._register(qclient)

qiita_client/qiita_client.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -166,16 +166,16 @@ class QiitaClient(object):
166166
The client id to connect to the Qiita server
167167
client_secret : str
168168
The client secret id to connect to the Qiita server
169-
server_cert : str, optional
170-
The server certificate, in case that it is not verified
169+
ca_cert : str, optional
170+
CA cert used to sign and verify cert@server_url
171171
172172
173173
Methods
174174
-------
175175
get
176176
post
177177
"""
178-
def __init__(self, server_url, client_id, client_secret, server_cert=None):
178+
def __init__(self, server_url, client_id, client_secret, ca_cert=None):
179179
self._server_url = server_url
180180
self._session = requests.Session()
181181

@@ -186,16 +186,21 @@ def __init__(self, server_url, client_id, client_secret, server_cert=None):
186186
# if certificate verification should be performed or not, or a
187187
# string with the path to the certificate file that needs to be used
188188
# to verify the identity of the server.
189-
# We are setting this attribute at __init__ time so we can avoid
190-
# executing this if statement for each request issued.
191-
if not server_cert:
189+
# We are setting this attribute at __init__ time to avoid executing
190+
# this if statement for each request issued.
191+
192+
# As self-signed server certs are no longer allowed in one or more of
193+
# our dependencies, ca_cert (if provided) must now reference a file
194+
# that can be used to verify the certificate used by the server
195+
# referenced by server_url, rather than the server's own certificate.
196+
if not ca_cert:
192197
# The server certificate is not provided, use standard certificate
193198
# verification methods
194199
self._verify = True
195200
else:
196201
# The server certificate is provided, use it to verify the identity
197202
# of the server
198-
self._verify = server_cert
203+
self._verify = ca_cert
199204

200205
# Set up oauth2
201206
self._client_id = client_id
@@ -543,8 +548,8 @@ def update_job_step(self, job_id, new_step, ignore_error=False):
543548
json_payload = dumps({'step': new_step})
544549
try:
545550
self.post("/qiita_db/jobs/%s/step/" % job_id, data=json_payload)
546-
except RuntimeError as e:
547-
if ignore_error is True:
551+
except BaseException as e:
552+
if ignore_error is False:
548553
raise e
549554

550555
def complete_job(self, job_id, success, error_msg=None,

qiita_client/testing.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ def setUpClass(cls):
2424
cls.client_id = '19ndkO3oMKsoChjVVWluF7QkxHRfYhTKSFbAVt8IhK7gZgDaO4'
2525
cls.client_secret = ('J7FfQ7CQdOxuKhQAf1eoGgBAE81Ns8Gu3EKaWFm3IO2JKh'
2626
'AmmCWZuabe0O5Mp28s1')
27-
cls.server_cert = environ.get('QIITA_SERVER_CERT', None)
2827
qiita_port = int(environ.get('QIITA_PORT', 21174))
29-
cls.qclient = QiitaClient(
30-
"https://localhost:%d" % qiita_port, cls.client_id,
31-
cls.client_secret)
28+
29+
# do not rely on defining ca_cert for these tests. Instead append
30+
# the appropriate CA cert to certifi's pem file.
31+
cls.qclient = QiitaClient("https://localhost:%d" % qiita_port,
32+
cls.client_id, cls.client_secret)
3233
logger.debug(
3334
'PluginTestCase.setUpClass() token %s' % cls.qclient._token)
3435
cls.qclient.post('/apitest/reload_plugins/')

qiita_client/tests/test_plugin.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,7 @@ def html_generator_func(a, b, c, d):
168168
validate_func, html_generator_func, atypes)
169169

170170
# Generate the config file for the new plugin
171-
tester.generate_config('ls', 'echo',
172-
server_cert=self.server_cert)
171+
tester.generate_config('ls', 'echo')
173172
# Ask Qiita to reload the plugins
174173
self.qclient.post('/apitest/reload_plugins/')
175174

@@ -213,8 +212,7 @@ def func(qclient, job_id, job_params, working_dir):
213212
{'out1': 'Demultiplexed'})
214213
tester.register_command(a_cmd)
215214

216-
tester.generate_config('ls', 'echo',
217-
server_cert=self.server_cert)
215+
tester.generate_config('ls', 'echo')
218216
self.qclient.post('/apitest/reload_plugins/')
219217
tester("https://localhost:21174", 'register', 'ignored')
220218

qiita_client/tests/test_qiita_client.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
# -----------------------------------------------------------------------------
88

99
from unittest import TestCase, main
10-
from os import environ, remove, close
10+
from os import remove, close
1111
from os.path import basename, exists
1212
from tempfile import mkstemp
1313
from json import dumps
@@ -97,12 +97,13 @@ def test_format_payload_error(self):
9797

9898
class QiitaClientTests(PluginTestCase):
9999
def setUp(self):
100-
self.server_cert = environ.get('QIITA_SERVER_CERT', None)
101-
self.tester = QiitaClient("https://localhost:21174", CLIENT_ID,
102-
CLIENT_SECRET, server_cert=self.server_cert)
103-
self.bad_tester = QiitaClient("https://localhost:21174", BAD_CLIENT_ID,
104-
CLIENT_SECRET,
105-
server_cert=self.server_cert)
100+
# self.server_cert = environ.get('QIITA_SERVER_CERT', None)
101+
self.tester = QiitaClient("https://localhost:21174",
102+
CLIENT_ID,
103+
CLIENT_SECRET)
104+
self.bad_tester = QiitaClient("https://localhost:21174",
105+
BAD_CLIENT_ID,
106+
CLIENT_SECRET)
106107
self.clean_up_files = []
107108

108109
# making assertRaisesRegex compatible with Python 2.7 and 3.9
@@ -115,12 +116,11 @@ def tearDown(self):
115116
remove(fp)
116117

117118
def test_init(self):
118-
obs = QiitaClient("https://localhost:21174", CLIENT_ID,
119-
CLIENT_SECRET, server_cert=self.server_cert)
119+
obs = QiitaClient("https://localhost:21174", CLIENT_ID, CLIENT_SECRET)
120120
self.assertEqual(obs._server_url, "https://localhost:21174")
121121
self.assertEqual(obs._client_id, CLIENT_ID)
122122
self.assertEqual(obs._client_secret, CLIENT_SECRET)
123-
self.assertEqual(obs._verify, self.server_cert)
123+
self.assertEqual(obs._verify, True)
124124

125125
def test_get(self):
126126
obs = self.tester.get("/qiita_db/artifacts/1/")
@@ -243,26 +243,29 @@ def test_update_job_step_ignore_failure(self):
243243
# confirm that update_job_step behaves as before when ignore_error
244244
# parameter absent or set to False.
245245

246-
with self.assertRaises(RuntimeError):
246+
with self.assertRaises(BaseException):
247247
self.bad_tester.update_job_step(job_id, new_step)
248248

249-
with self.assertRaises(RuntimeError):
250-
self.bad_tester.update_job_step(job_id, new_step,
249+
with self.assertRaises(BaseException):
250+
self.bad_tester.update_job_step(job_id,
251+
new_step,
251252
ignore_error=False)
252253

253254
# confirm that when ignore_error is set to True, an Error is NOT
254255
# raised.
255256
try:
256-
self.bad_tester.update_job_step(job_id, new_step,
257+
self.bad_tester.update_job_step(job_id,
258+
new_step,
257259
ignore_error=True)
258-
except RuntimeError:
259-
self.fail("update_job_step raised RuntimeError unexpectedly")
260+
except BaseException as e:
261+
self.fail("update_job_step() raised an error: %s" % str(e))
260262

261263
def test_complete_job(self):
262264
# Create a new job
263265
data = {
264266
'user': '[email protected]',
265-
'command': dumps(['QIIME', '1.9.1', 'Pick closed-reference OTUs']),
267+
'command': dumps(['QIIMEq2', '1.9.1',
268+
'Pick closed-reference OTUs']),
266269
'status': 'running',
267270
'parameters': dumps({"reference": 1,
268271
"sortmerna_e_value": 1,

0 commit comments

Comments
 (0)