def test_load_from_ext_id_multiple(self): m_session = MagicMock() external_id = "whatever" m_filter = m_session.query().options().filter m_filter.side_effect = MultipleResultsFound() with self.assertRaises(IrmaDatabaseError): Scan.load_from_ext_id(external_id, m_session)
def test_load_from_ext_id(self): m_session = MagicMock() m_query = MagicMock() m_session.query.return_value = m_query external_id = "whatever" Scan.load_from_ext_id(external_id, m_session) m_filter = m_query.options().filter m_filter.assert_called_once()
def scan_launch(scan_id): with session_transaction() as session: scan = None try: log.debug("scan: %s launching", scan_id) # Part for common action for whole scan scan = Scan.load_from_ext_id(scan_id, session) scan_request = scan_ctrl._create_scan_request( scan.files_ext, scan.get_probelist(), scan.mimetype_filtering) scan_request = scan_ctrl._add_empty_results( scan.files_ext, scan_request, scan, session) # Nothing to do if scan_request.nb_files == 0: scan.set_status(IrmaScanStatus.finished) log.warning("scan %s: finished nothing to do", scan_id) return # Part for action file_ext by file_ext file_ext_id_list = [file.external_id for file in scan.files_ext] celery.group(scan_launch_file_ext.si(file_ext_id) for file_ext_id in file_ext_id_list)() scan.set_status(IrmaScanStatus.launched) session.commit() log.info("scan %s: launched", scan_id) return except Exception as e: log.exception(e) if scan is not None: scan.set_status(IrmaScanStatus.error)
def test_launch_v1_ok(self, m_Scan, m_check_probe, m_celery_frontend): scan_id = "whatever" probes = ["probe1", "probe2"] force = "False" mimetype_filtering = "False" resubmit_files = "False" m_check_probe.return_value = [] m_scan = Scan("date", "ip") m_check_probe.assert_called_once_with(None) m_scan.force = None m_scan.mimetype_filtering = None m_scan.resubmit_files = None m_scan.events = [ScanEvents(IrmaScanStatus.empty, m_scan)] m_Scan.load_from_ext_id.return_value = m_scan result = api_scans.launch_v1(scan_id=scan_id, probes=probes, force=force, mimetype_filtering=mimetype_filtering, resubmit_files=resubmit_files) m_check_probe.assert_called() m_Scan.load_from_ext_id.assert_called_once_with(scan_id, self.session) m_celery_frontend.scan_launch.assert_called_once_with(scan_id) self.assertIsScan(result) self.assertEqual(result["force"], force, "force") self.assertEqual(result["mimetype_filtering"], mimetype_filtering, "mimetype") self.assertEqual(result["resubmit_files"], resubmit_files, "resubmit")
def is_finished(scan_id): with session_transaction() as session: scan = Scan.load_from_ext_id(scan_id, session) log.debug("scan %s: is_finished %d/%d", scan_id, scan.probes_finished, scan.probes_total) if scan.finished() and scan.status != IrmaScanStatus.finished: # call finished hook for each files for file_ext in scan.files_ext: file_ext.hook_finished() scan.set_status(IrmaScanStatus.finished) session.commit() # launch flush celery task on brain log.debug("scan %s: calling scan_flush", scan.external_id) celery_brain.scan_flush(scan.external_id)
def set_status(scan_id, status): log.debug("scan %s: set status %s", scan_id, status) with session_transaction() as session: scan = Scan.load_from_ext_id(scan_id, session=session) scan.set_status(status)
def setUp(self, m_check_probe): m_check_probe.return_value = [] self.date = "date" self.ip = "ip" self.scan = Scan(self.date, self.ip)
class TestScan(TestCase): @patch("api.probes.services.check_probe") def setUp(self, m_check_probe): m_check_probe.return_value = [] self.date = "date" self.ip = "ip" self.scan = Scan(self.date, self.ip) def tearDown(self): del self.scan def test_finished_not_uploaded(self): status = choice([IrmaScanStatus.empty, IrmaScanStatus.ready]) self.scan.set_status(status) self.assertFalse(self.scan.finished()) def test_finished_launched_not_finished(self): file_ext = MagicMock() file_ext.status = None self.scan.files_ext = [file_ext] self.scan.set_status(IrmaScanStatus.launched) self.assertFalse(self.scan.finished()) def test_finished_launched_finished(self): a, b = MagicMock(), MagicMock() a.doc = "something" b.doc = "anotherthing" fw = MagicMock() fw.probe_results = [a, b] self.scan.files_web = [fw] self.scan.set_status(IrmaScanStatus.launched) self.assertTrue(self.scan.finished()) def test_finished_finished(self): self.scan.set_status(IrmaScanStatus.launched) res = self.scan.finished() self.assertTrue(res) def test_probes_total(self): file_ext1, file_ext2 = MagicMock(), MagicMock() pt1, pt2 = randint(0, 20), randint(0, 20) file_ext1.probes_total = pt1 file_ext2.probes_total = pt2 self.scan.files_ext = [file_ext1, file_ext2] self.assertEqual(self.scan.probes_total, pt1 + pt2) def test_probes_finished(self): file_ext1, file_ext2 = MagicMock(), MagicMock() pf1, pf2 = randint(0, 20), randint(0, 20) file_ext1.probes_finished = pf1 file_ext2.probes_finished = pf2 self.scan.files_ext = [file_ext1, file_ext2] self.assertEqual(self.scan.probes_finished, pf1 + pf2) def test_files(self): file_ext = MagicMock() self.scan.files_ext = [file_ext] self.assertEqual(self.scan.files, [file_ext.file]) def test_set_status(self): with self.assertRaises(IrmaCoreError): self.scan.set_status("whatever") def test_load_from_ext_id(self): m_session = MagicMock() m_query = MagicMock() m_session.query.return_value = m_query external_id = "whatever" Scan.load_from_ext_id(external_id, m_session) m_filter = m_query.options().filter m_filter.assert_called_once() def test_load_from_ext_id_none(self): m_session = MagicMock() external_id = "whatever" m_filter = m_session.query().options().filter m_filter.side_effect = NoResultFound() with self.assertRaises(IrmaDatabaseResultNotFound): Scan.load_from_ext_id(external_id, m_session) def test_load_from_ext_id_multiple(self): m_session = MagicMock() external_id = "whatever" m_filter = m_session.query().options().filter m_filter.side_effect = MultipleResultsFound() with self.assertRaises(IrmaDatabaseError): Scan.load_from_ext_id(external_id, m_session) def test_set_get_probelist(self): probelist = ["probe1", "probe2"] self.scan.set_probelist(probelist) self.assertCountEqual(self.scan.get_probelist(), probelist) def test_finished(self): self.scan.set_status(IrmaScanStatus.finished) self.assertTrue(self.scan.finished())