|
1 | 1 | import datetime |
| 2 | +from unittest.mock import MagicMock, patch |
2 | 3 |
|
3 | 4 | from dojo.models import Test |
| 5 | +from dojo.tools.risk_recon.api import RiskReconAPI |
4 | 6 | from dojo.tools.risk_recon.parser import RiskReconParser |
| 7 | +from dojo.utils_ssrf import SSRFError |
5 | 8 | from unittests.dojo_test_case import DojoTestCase, get_unit_tests_scans_path |
6 | 9 |
|
7 | 10 |
|
@@ -32,3 +35,20 @@ def test_parser_without_api(self): |
32 | 35 | finding = findings[1] |
33 | 36 | self.assertEqual(datetime.date(2017, 3, 17), finding.date.date()) |
34 | 37 | self.assertEqual("ff2bbdbfc2b6gsrgwergwe6b1fasfwefb", finding.unique_id_from_tool) |
| 38 | + |
| 39 | + @patch("dojo.tools.risk_recon.api.validate_url_for_ssrf", side_effect=SSRFError("blocked: private address")) |
| 40 | + def test_ssrf_error_is_raised_as_exception(self, mock_validate): |
| 41 | + with self.assertRaisesRegex(Exception, "Invalid Risk Recon API url"): |
| 42 | + RiskReconAPI(api_key="somekey", endpoint="http://192.168.1.1/api", data=[]) |
| 43 | + mock_validate.assert_called_once_with("http://192.168.1.1/api") |
| 44 | + |
| 45 | + @patch.object(RiskReconAPI, "get_findings") |
| 46 | + @patch.object(RiskReconAPI, "map_toes") |
| 47 | + @patch("dojo.tools.risk_recon.api.make_ssrf_safe_session") |
| 48 | + @patch("dojo.tools.risk_recon.api.validate_url_for_ssrf") |
| 49 | + def test_make_ssrf_safe_session_called_on_init(self, mock_validate, mock_make_session, mock_map_toes, mock_get_findings): |
| 50 | + mock_session = MagicMock() |
| 51 | + mock_make_session.return_value = mock_session |
| 52 | + api = RiskReconAPI(api_key="somekey", endpoint="https://api.riskrecon.com/v1", data=[]) |
| 53 | + mock_make_session.assert_called_once() |
| 54 | + self.assertIs(api.session, mock_session) |
0 commit comments