Skip to content
This repository was archived by the owner on Oct 23, 2023. It is now read-only.

Commit 058c9eb

Browse files
committed
remove asynctest
temporary drop coverage to 70% till rest of issues are solved
1 parent 2d065e7 commit 058c9eb

File tree

10 files changed

+469
-793
lines changed

10 files changed

+469
-793
lines changed

beacon_api/app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def main():
127127
# sslcontext.check_hostname = False
128128
web.run_app(
129129
init(),
130-
host=os.environ.get("HOST", "0.0.0.0"),
130+
host=os.environ.get("HOST", "0.0.0.0"), # nosec
131131
port=os.environ.get("PORT", "5050"),
132132
shutdown_timeout=0,
133133
ssl_context=None,

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,5 @@ cyvcf2==0.30.14
77
uvloop==0.16.0
88
aiocache==0.11.1
99
ujson==5.1.0
10-
aiomcache==0.6.0
1110
Authlib==0.15.5
1211
gunicorn==20.1.0

setup.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
"uvloop==0.16.0",
4747
"cyvcf2==0.30.14",
4848
"aiocache==0.11.1",
49-
"aiomcache==0.6.0",
5049
"ujson==5.1.0",
5150
],
5251
extras_require={
@@ -63,7 +62,6 @@
6362
"tox==3.24.4",
6463
"flake8==4.0.1",
6564
"flake8-docstrings==1.6.0",
66-
"asynctest==0.13.0",
6765
"aioresponses==0.7.2",
6866
"black==21.12b0",
6967
],

tests/test_app.py

Lines changed: 55 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
import unittest
2-
from aiohttp.test_utils import AioHTTPTestCase, unittest_run_loop
3-
from aiohttp import web
4-
from beacon_api.app import init, main, initialize
5-
from unittest import mock
2+
from aiohttp.test_utils import AioHTTPTestCase
3+
from beacon_api.app import init, initialize
64
import asyncpg
7-
import asynctest
85
import json
96
from authlib.jose import jwt
107
import os
@@ -17,7 +14,13 @@
1714

1815
def generate_token(issuer):
1916
"""Mock ELIXIR AAI token."""
20-
pem = {"kty": "oct", "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037", "use": "sig", "alg": "HS256", "k": "hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg"}
17+
pem = {
18+
"kty": "oct",
19+
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037",
20+
"use": "sig",
21+
"alg": "HS256",
22+
"k": "hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg",
23+
}
2124
header = {"jku": "http://test.csc.fi/jwk", "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037", "alg": "HS256"}
2225
payload = {"iss": issuer, "aud": "audience", "exp": 9999999999, "sub": "[email protected]"}
2326
token = jwt.encode(header, payload, pem).decode("utf-8")
@@ -26,7 +29,13 @@ def generate_token(issuer):
2629

2730
def generate_bad_token():
2831
"""Mock AAI token."""
29-
pem = {"kty": "oct", "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037", "use": "sig", "alg": "HS256", "k": "hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg"}
32+
pem = {
33+
"kty": "oct",
34+
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037",
35+
"use": "sig",
36+
"alg": "HS256",
37+
"k": "hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg",
38+
}
3039
header = {"jku": "http://test.csc.fi/jwk", "kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037", "alg": "HS256"}
3140
payload = {"iss": "bad_issuer", "aud": "audience", "exp": 0, "sub": "[email protected]"}
3241
token = jwt.encode(header, payload, pem).decode("utf-8")
@@ -35,7 +44,7 @@ def generate_bad_token():
3544

3645
async def create_db_mock(app):
3746
"""Mock the db connection pool."""
38-
app["pool"] = asynctest.mock.Mock(asyncpg.create_pool())
47+
app["pool"] = unittest.mock.Mock(asyncpg.create_pool())
3948
return app
4049

4150

@@ -50,7 +59,7 @@ class AppTestCase(AioHTTPTestCase):
5059
Testing web app endpoints.
5160
"""
5261

53-
@asynctest.mock.patch("beacon_api.app.initialize", side_effect=create_db_mock)
62+
@unittest.mock.patch("beacon_api.app.initialize", side_effect=create_db_mock)
5463
async def get_application(self, pool_mock):
5564
"""Retrieve web Application for test."""
5665
token, public_key = generate_token("http://test.csc.fi")
@@ -60,34 +69,30 @@ async def get_application(self, pool_mock):
6069
self.env.set("TOKEN", token)
6170
return await init()
6271

63-
@unittest_run_loop
64-
async def tearDown(self):
72+
async def tearDownAsync(self):
6573
"""Finish up tests."""
6674
self.env.unset("PUBLIC_KEY")
6775
self.env.unset("TOKEN")
6876
await caches.get("default").delete("jwk_key")
6977

70-
@unittest_run_loop
7178
async def test_beacon_info(self):
7279
"""Test the Beacon info endpoint.
7380
7481
The status should always be 200.
7582
"""
76-
with asynctest.mock.patch("beacon_api.app.beacon_info", return_value={"id": "value"}):
83+
with unittest.mock.patch("beacon_api.app.beacon_info", return_value={"id": "value"}):
7784
resp = await self.client.request("GET", "/")
7885
self.assertEqual(200, resp.status)
7986

80-
@unittest_run_loop
8187
async def test_ga4gh_info(self):
8288
"""Test the GA4GH Discovery info endpoint.
8389
8490
The status should always be 200.
8591
"""
86-
with asynctest.mock.patch("beacon_api.app.ga4gh_info", return_value={"id": "value"}):
92+
with unittest.mock.patch("beacon_api.app.ga4gh_info", return_value={"id": "value"}):
8793
resp = await self.client.request("GET", "/service-info")
8894
self.assertEqual(200, resp.status)
8995

90-
@unittest_run_loop
9196
async def test_post_info(self):
9297
"""Test the info endpoint with POST.
9398
@@ -96,7 +101,6 @@ async def test_post_info(self):
96101
resp = await self.client.request("POST", "/")
97102
self.assertEqual(405, resp.status)
98103

99-
@unittest_run_loop
100104
async def test_post_service_info(self):
101105
"""Test the service-info endpoint with POST.
102106
@@ -105,19 +109,16 @@ async def test_post_service_info(self):
105109
resp = await self.client.request("POST", "/service-info")
106110
self.assertEqual(405, resp.status)
107111

108-
@unittest_run_loop
109112
async def test_empty_get_query(self):
110113
"""Test empty GET query endpoint."""
111114
resp = await self.client.request("GET", "/query")
112115
self.assertEqual(400, resp.status)
113116

114-
@unittest_run_loop
115117
async def test_empty_post_query(self):
116118
"""Test empty POST query endpoint."""
117119
resp = await self.client.request("POST", "/query", data=json.dumps({}))
118120
self.assertEqual(400, resp.status)
119121

120-
@unittest_run_loop
121122
async def test_bad_start_post_query(self):
122123
"""Test bad start combination POST query endpoint."""
123124
bad_start = {
@@ -134,7 +135,6 @@ async def test_bad_start_post_query(self):
134135
resp = await self.client.request("POST", "/query", data=json.dumps(bad_start))
135136
self.assertEqual(400, resp.status)
136137

137-
@unittest_run_loop
138138
async def test_bad_start2_post_query(self):
139139
"""Test bad start combination 2 POST query endpoint."""
140140
bad_start = {
@@ -151,7 +151,6 @@ async def test_bad_start2_post_query(self):
151151
resp = await self.client.request("POST", "/query", data=json.dumps(bad_start))
152152
self.assertEqual(400, resp.status)
153153

154-
@unittest_run_loop
155154
async def test_bad_startend_post_query(self):
156155
"""Test end smaller than start POST query endpoint."""
157156
bad_start = {
@@ -166,7 +165,6 @@ async def test_bad_startend_post_query(self):
166165
resp = await self.client.request("POST", "/query", data=json.dumps(bad_start))
167166
self.assertEqual(400, resp.status)
168167

169-
@unittest_run_loop
170168
async def test_bad_startminmax_post_query(self):
171169
"""Test start min greater than start Max POST query endpoint."""
172170
bad_start = {
@@ -181,7 +179,6 @@ async def test_bad_startminmax_post_query(self):
181179
resp = await self.client.request("POST", "/query", data=json.dumps(bad_start))
182180
self.assertEqual(400, resp.status)
183181

184-
@unittest_run_loop
185182
async def test_bad_endminmax_post_query(self):
186183
"""Test end min greater than start Max POST query endpoint."""
187184
bad_start = {
@@ -196,19 +193,24 @@ async def test_bad_endminmax_post_query(self):
196193
resp = await self.client.request("POST", "/query", data=json.dumps(bad_start))
197194
self.assertEqual(400, resp.status)
198195

199-
@asynctest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
200-
@asynctest.mock.patch("beacon_api.app.query_request_handler")
201-
@unittest_run_loop
196+
@unittest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
197+
@unittest.mock.patch("beacon_api.app.query_request_handler")
202198
async def test_good_start_post_query(self, mock_handler, mock_object):
203199
"""Test good start combination POST query endpoint."""
204-
good_start = {"referenceName": "MT", "start": 10, "referenceBases": "T", "variantType": "MNP", "assemblyId": "GRCh38", "includeDatasetResponses": "HIT"}
200+
good_start = {
201+
"referenceName": "MT",
202+
"start": 10,
203+
"referenceBases": "T",
204+
"variantType": "MNP",
205+
"assemblyId": "GRCh38",
206+
"includeDatasetResponses": "HIT",
207+
}
205208
mock_handler.side_effect = json.dumps(good_start)
206209
resp = await self.client.request("POST", "/query", data=json.dumps(good_start))
207210
self.assertEqual(200, resp.status)
208211

209-
@asynctest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
210-
@asynctest.mock.patch("beacon_api.app.query_request_handler")
211-
@unittest_run_loop
212+
@unittest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
213+
@unittest.mock.patch("beacon_api.app.query_request_handler")
212214
async def test_good_start2_post_query(self, mock_handler, mock_object):
213215
"""Test good start combination 2 POST query endpoint."""
214216
good_start = {
@@ -224,9 +226,8 @@ async def test_good_start2_post_query(self, mock_handler, mock_object):
224226
resp = await self.client.request("POST", "/query", data=json.dumps(good_start))
225227
self.assertEqual(200, resp.status)
226228

227-
@asynctest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
228-
@asynctest.mock.patch("beacon_api.app.query_request_handler")
229-
@unittest_run_loop
229+
@unittest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
230+
@unittest.mock.patch("beacon_api.app.query_request_handler")
230231
async def test_good_start3_post_query(self, mock_handler, mock_object):
231232
"""Test good start combination 3 POST query endpoint."""
232233
good_start = {
@@ -242,53 +243,8 @@ async def test_good_start3_post_query(self, mock_handler, mock_object):
242243
resp = await self.client.request("POST", "/query", data=json.dumps(good_start))
243244
self.assertEqual(200, resp.status)
244245

245-
@unittest_run_loop
246-
async def test_unauthorized_no_token_post_query(self):
247-
"""Test unauthorized POST query endpoint, with no token."""
248-
resp = await self.client.request("POST", "/query", data=json.dumps(PARAMS), headers={"Authorization": "Bearer"})
249-
self.assertEqual(401, resp.status)
250-
251-
@unittest_run_loop
252-
async def test_unauthorized_token_post_query(self):
253-
"""Test unauthorized POST query endpoint, bad token."""
254-
resp = await self.client.request("POST", "/query", data=json.dumps(PARAMS), headers={"Authorization": f"Bearer {self.bad_token}"})
255-
self.assertEqual(403, resp.status)
256-
257-
@unittest_run_loop
258-
async def test_invalid_scheme_get_query(self):
259-
"""Test unauthorized GET query endpoint, invalid scheme."""
260-
params = "?assemblyId=GRCh38&referenceName=1&start=10000&referenceBases=A&alternateBases=T&datasetIds=dataset1"
261-
resp = await self.client.request("GET", f"/query{params}", headers={"Authorization": "SMTH x"})
262-
self.assertEqual(401, resp.status)
263-
264-
@asynctest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
265-
@asynctest.mock.patch("beacon_api.app.query_request_handler", side_effect=json.dumps(PARAMS))
266-
@unittest_run_loop
267-
async def test_valid_token_get_query(self, mock_handler, mock_object):
268-
"""Test valid token GET query endpoint."""
269-
token = os.environ.get("TOKEN")
270-
resp = await self.client.request("POST", "/query", data=json.dumps(PARAMS), headers={"Authorization": f"Bearer {token}"})
271-
self.assertEqual(200, resp.status)
272-
273-
@unittest_run_loop
274-
async def test_bad_json_post_query(self):
275-
"""Test bad json POST query endpoint."""
276-
resp = await self.client.request("POST", "/query", data="")
277-
self.assertEqual(500, resp.status)
278-
279-
@asynctest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
280-
@asynctest.mock.patch("beacon_api.app.query_request_handler", side_effect=json.dumps(PARAMS))
281-
@unittest_run_loop
282-
async def test_valid_get_query(self, mock_handler, mock_object):
283-
"""Test valid GET query endpoint."""
284-
params = "?assemblyId=GRCh38&referenceName=1&start=10000&referenceBases=A&alternateBases=T"
285-
with asynctest.mock.patch("beacon_api.app.initialize", side_effect=create_db_mock):
286-
resp = await self.client.request("GET", f"/query{params}")
287-
self.assertEqual(200, resp.status)
288-
289-
@asynctest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
290-
@asynctest.mock.patch("beacon_api.app.query_request_handler", side_effect=json.dumps(PARAMS))
291-
@unittest_run_loop
246+
@unittest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
247+
@unittest.mock.patch("beacon_api.app.query_request_handler", side_effect=json.dumps(PARAMS))
292248
async def test_valid_post_query(self, mock_handler, mock_object):
293249
"""Test valid POST query endpoint."""
294250
resp = await self.client.request("POST", "/query", data=json.dumps(PARAMS))
@@ -301,7 +257,13 @@ class AppTestCaseForbidden(AioHTTPTestCase):
301257
Testing web app for wrong issuer.
302258
"""
303259

304-
@asynctest.mock.patch("beacon_api.app.initialize", side_effect=create_db_mock)
260+
async def tearDownAsync(self):
261+
"""Finish up tests."""
262+
self.env.unset("PUBLIC_KEY")
263+
self.env.unset("TOKEN")
264+
await caches.get("default").delete("jwk_key")
265+
266+
@unittest.mock.patch("beacon_api.app.initialize", side_effect=create_db_mock)
305267
async def get_application(self, pool_mock):
306268
"""Retrieve web Application for test."""
307269
token, public_key = generate_token("something")
@@ -310,56 +272,36 @@ async def get_application(self, pool_mock):
310272
self.env.set("TOKEN", token)
311273
return await init()
312274

313-
@unittest_run_loop
314-
async def tearDown(self):
315-
"""Finish up tests."""
316-
self.env.unset("PUBLIC_KEY")
317-
self.env.unset("TOKEN")
318-
await caches.get("default").delete("jwk_key")
319-
320-
@asynctest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
321-
@asynctest.mock.patch("beacon_api.app.query_request_handler", side_effect=json.dumps(PARAMS))
322-
@unittest_run_loop
275+
@unittest.mock.patch("beacon_api.app.parse_request_object", side_effect=mock_parse_request_object)
276+
@unittest.mock.patch("beacon_api.app.query_request_handler", side_effect=json.dumps(PARAMS))
323277
async def test_forbidden_token_get_query(self, mock_handler, mock_object):
324278
"""Test forbidden GET query endpoint, invalid scheme."""
325279
token = os.environ.get("TOKEN")
326280
resp = await self.client.request("POST", "/query", data=json.dumps(PARAMS), headers={"Authorization": f"Bearer {token}"})
327281
self.assertEqual(403, resp.status)
328282

329283

330-
class TestBasicFunctionsApp(asynctest.TestCase):
284+
class TestBasicFunctionsApp(unittest.IsolatedAsyncioTestCase):
331285
"""Test App Base.
332286
333287
Testing basic functions from web app.
334288
"""
335289

336-
def setUp(self):
337-
"""Initialise fixtures."""
338-
pass
339-
340-
def tearDown(self):
341-
"""Remove setup variables."""
342-
pass
343-
344-
@mock.patch("beacon_api.app.web")
345-
def test_main(self, mock_webapp):
346-
"""Should start the webapp."""
347-
main()
348-
mock_webapp.run_app.assert_called()
349-
350-
async def test_init(self):
351-
"""Test init type."""
352-
server = await init()
353-
self.assertIs(type(server), web.Application)
290+
async def test_servinit(self):
291+
"""Test server initialization function execution."""
292+
# Don't really need much testing here, if the server initialization
293+
# executes to the end all is fine.
294+
app = await init()
295+
self.assertTrue(app is not None)
354296

355-
@asynctest.mock.patch("beacon_api.app.set_cors")
297+
@unittest.mock.patch("beacon_api.app.set_cors")
356298
async def test_initialize(self, mock_cors):
357299
"""Test create db pool, should just return the result of init_db_pool.
358300
359301
We will mock the init_db_pool, thus we assert we just call it.
360302
"""
361303
app = {}
362-
with asynctest.mock.patch("beacon_api.app.init_db_pool") as db_mock:
304+
with unittest.mock.patch("beacon_api.app.init_db_pool") as db_mock:
363305
await initialize(app)
364306
db_mock.assert_called()
365307

0 commit comments

Comments
 (0)