示例#1
0
 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)
示例#2
0
 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()
示例#3
0
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)
示例#4
0
    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")
示例#5
0
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)
示例#6
0
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)
示例#7
0
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)
示例#8
0
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)
示例#9
0
 def setUp(self, m_check_probe):
     m_check_probe.return_value = []
     self.date = "date"
     self.ip = "ip"
     self.scan = Scan(self.date, self.ip)
示例#10
0
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())