|
9 | 9 | from .test_app import PARAMS, generate_token |
10 | 10 | from testfixtures import TempDirectory |
11 | 11 | from test.support.os_helper import EnvironmentVarGuard |
| 12 | +from beacon_api.conf import OAUTH2_CONFIG |
12 | 13 |
|
13 | 14 |
|
14 | 15 | def mock_token(bona_fide, permissions, auth): |
@@ -70,6 +71,11 @@ async def load_datafile(self, vcf, datafile, datasetId, n=1000, min_ac=1): |
70 | 71 | return ["datasetId", "variants"] |
71 | 72 |
|
72 | 73 |
|
| 74 | +async def mock_get_ga4gh_controlled(input): |
| 75 | + """Mock retrieve dataset permissions.""" |
| 76 | + return input |
| 77 | + |
| 78 | + |
73 | 79 | class TestBasicFunctions(unittest.IsolatedAsyncioTestCase): |
74 | 80 | """Test supporting functions.""" |
75 | 81 |
|
@@ -482,5 +488,50 @@ async def test_get_ga4gh_permissions(self, m_userinfo, m_decode, m_controlled, m |
482 | 488 | self.assertEqual(bona_fide_status, True) |
483 | 489 |
|
484 | 490 |
|
| 491 | +class TestCaseCheckJku(unittest.IsolatedAsyncioTestCase): |
| 492 | + """Test case.""" |
| 493 | + |
| 494 | + @unittest.mock.patch("beacon_api.permissions.ga4gh.get_ga4gh_bona_fide") |
| 495 | + @unittest.mock.patch("beacon_api.permissions.ga4gh.get_ga4gh_controlled", side_effect=mock_get_ga4gh_controlled) |
| 496 | + @unittest.mock.patch("beacon_api.permissions.ga4gh.decode_passport") |
| 497 | + @unittest.mock.patch("beacon_api.permissions.ga4gh.retrieve_user_data") |
| 498 | + async def test_jku_check(self, m_userinfo, m_decode, m_controller, m_bonafide): |
| 499 | + """Test trusted and untrusted jku.""" |
| 500 | + # Test: trusted jku |
| 501 | + m_userinfo.return_value = [""] |
| 502 | + header = {"jku": "http://test.csc.fi/jwk"} |
| 503 | + payload = {"ga4gh_visa_v1": {"type": "ControlledAccessGrants"}} |
| 504 | + m_decode.return_value = header, payload |
| 505 | + m_bonafide.return_value = False |
| 506 | + dataset_permissions, bona_fide_status = await get_ga4gh_permissions({}) |
| 507 | + self.assertEqual(dataset_permissions, [("", header)]) |
| 508 | + self.assertEqual(bona_fide_status, False) |
| 509 | + # Test: untrusted jku |
| 510 | + m_userinfo.return_value = [""] |
| 511 | + header = {"jku": "untrusted_jku"} |
| 512 | + payload = {"ga4gh_visa_v1": {"type": "ControlledAccessGrants"}} |
| 513 | + m_decode.return_value = header, payload |
| 514 | + m_bonafide.return_value = False |
| 515 | + dataset_permissions, bona_fide_status = await get_ga4gh_permissions({}) |
| 516 | + self.assertEqual(dataset_permissions, []) |
| 517 | + self.assertEqual(bona_fide_status, False) |
| 518 | + |
| 519 | + @unittest.mock.patch("beacon_api.permissions.ga4gh.OAUTH2_CONFIG", new=OAUTH2_CONFIG._replace(trusted_jkus=[""])) |
| 520 | + @unittest.mock.patch("beacon_api.permissions.ga4gh.get_ga4gh_bona_fide") |
| 521 | + @unittest.mock.patch("beacon_api.permissions.ga4gh.get_ga4gh_controlled", side_effect=mock_get_ga4gh_controlled) |
| 522 | + @unittest.mock.patch("beacon_api.permissions.ga4gh.decode_passport") |
| 523 | + @unittest.mock.patch("beacon_api.permissions.ga4gh.retrieve_user_data") |
| 524 | + async def test_jku_check_not_active(self, m_userinfo, m_decode, m_controller, m_bonafide): |
| 525 | + """Test if jku check is skipped when trusted_jkus config var is not set.""" |
| 526 | + m_userinfo.return_value = [""] |
| 527 | + header = {"jku": "untrusted_jku"} |
| 528 | + payload = {"ga4gh_visa_v1": {"type": "ControlledAccessGrants"}} |
| 529 | + m_decode.return_value = header, payload |
| 530 | + m_bonafide.return_value = False |
| 531 | + dataset_permissions, bona_fide_status = await get_ga4gh_permissions({}) |
| 532 | + self.assertEqual(dataset_permissions, [("", header)]) |
| 533 | + self.assertEqual(bona_fide_status, False) |
| 534 | + |
| 535 | + |
485 | 536 | if __name__ == "__main__": |
486 | 537 | unittest.main() |
0 commit comments