def test_probe(self): all_probe = Probe.get_all() probe = Probe.get_by_id(1) self.assertEqual(Probe.get_by_name("probe1"), Probe.get_by_id(1)) self.assertEqual(len(all_probe), 1) self.assertEqual(probe.name, "probe1") self.assertEqual(str(probe), "probe1") self.assertEqual(probe.description, "test") self.assertIn('Failed to get the uptime on the host :', probe.uptime()) self.assertFalse(probe.start()['status']) self.assertFalse(probe.restart()['status']) self.assertFalse(probe.stop()['status']) self.assertFalse(probe.reload()['status']) self.assertEqual('Failed to get status', probe.status()) probe.installed = False self.assertEqual('Not installed', probe.uptime()) probe = Probe.get_by_id(99) self.assertEqual(probe, None) with self.assertRaises(AttributeError): probe.name probe = Probe.get_by_name("probe99") self.assertEqual(probe, None) with self.assertRaises(AttributeError): probe.name with self.assertLogs('core.models', level='DEBUG'): Probe.get_by_id(99) with self.assertLogs('core.models', level='DEBUG'): Probe.get_by_name('probe99') with self.assertRaises(IntegrityError): Probe.objects.create(name="suricata1")
def test_create_check_task(self): create_check_task(Probe.get_by_id(1)) periodic_task = PeriodicTask.objects.get(name=Probe.get_by_id(1).name + '_check_task') self.assertEqual(periodic_task.task, 'core.tasks.check_probe') self.assertEqual(periodic_task.args, str([ Probe.get_by_id(1).name, ]).replace("'", '"')) self.assertEqual(periodic_task.crontab, CrontabSchedule.objects.get(id=4)) probe = Probe.objects.create( name="probe2", description="test", created_date="2017-09-23T21:00:53.094Z", secure_deployment=True, scheduled_check_enabled=True, scheduled_check_crontab=CrontabSchedule.objects.get(id=2), scheduled_rules_deployment_enabled=True, scheduled_rules_deployment_crontab=CrontabSchedule.objects.get( id=2), server=Server.get_by_id(1), installed=True) create_check_task(probe) periodic_task = PeriodicTask.objects.get(name='probe2_check_task') self.assertEqual(periodic_task.task, 'core.tasks.check_probe') self.assertEqual(periodic_task.args, str([ Probe.get_by_id(2).name, ]).replace("'", '"')) self.assertEqual(periodic_task.crontab, CrontabSchedule.objects.get(id=2))
def test_create_reload_task(self): create_reload_task(Probe.get_by_id(1)) periodic_task = PeriodicTask.objects.get(name=Probe.get_by_id(1).name + '_reload_task') self.assertEqual(periodic_task.task, 'core.tasks.reload_probe') self.assertEqual(periodic_task.args, str([ Probe.get_by_id(1).name, ]).replace("'", '"'))
def test_create_deploy_rules_task_with_schedule(self): probe = Probe.get_by_id(1) schedule = CrontabSchedule.objects.get(id=1) source = Source.objects.get(id=1) create_deploy_rules_task(probe, schedule, source) periodic_task = PeriodicTask.objects.get( name=probe.name + '_' + source.uri + '_deploy_rules_' + str(schedule)) self.assertEqual(periodic_task.task, 'core.tasks.deploy_rules') self.assertEqual(periodic_task.args, str([ probe.name, ]).replace("'", '"'))
def status_cve(probe_id): probe = Probe.get_by_id(probe_id) if probe is None: # pragma: no cover return { "message": "Error - probe is None - param id not set : " + str(probe_id) } my_class = getattr(importlib.import_module(probe.type.lower() + ".models"), probe.type) probe = my_class.get_by_id(probe_id) if probe.vulnerability_found: return 'danger' else: return 'success'
def test_software(self): all_software = Software.get_all() software = Software.get_by_id(1) self.assertEqual(len(all_software), 9) self.assertEqual(software.name, "dovecot-imapd") self.assertEqual(str(software), "dovecot-imapd - debian - apt") self.assertEqual(software.get_version(Probe.get_by_id(1)), "OK") software_brew = Software.objects.create(name='test', os=OsSupported.get_by_id(1), cpe='postfix:postfix', instaled_by='brew') self.assertEqual(software_brew.get_version(Checkcve.get_by_id(1)), 'OK') # ???? software_brew.delete()
def deploy_reputation_list(probe_name): job = Job.create_job('deploy_reputation_list', probe_name) probe = Probe.get_by_name(probe_name) if probe is None: return { "message": "Error - probe is None - param id not set : " + str(probe_name) } my_class = getattr(importlib.import_module(probe.type.lower() + ".models"), probe.type) probe = my_class.get_by_name(probe_name) try: response_cat = CategoryReputation.deploy(probe) response_ip = IPReputation.deploy(probe) if response_cat['status'] and response_ip['status']: job.update_job( str(response_cat) + " - " + str(response_ip), 'Completed') logger.info("task - deploy_reputation_list : " + str(probe_name) + " - " + str(response_cat) + " - " + str(response_ip)) else: logger.error(str(response_cat) + " - " + str(response_ip)) job.update_job( str(response_cat) + " - " + str(response_ip), 'Error') send_notification( "Error during deploy reputation list for " + str(probe.name), str(response_cat) + " - " + str(response_ip)) return { "message": "Error for probe " + str(probe.name) + " to deploy reputation list", "exception": str(response_cat) + " - " + str(response_ip) } except Exception as e: # pragma: no cover logger.exception(str(e)) job.update_job(repr_instance.repr(e), 'Error') send_notification( "Error during deploy reputation list for " + str(probe.name), str(e)) return { "message": "Error for probe " + str(probe.name) + " to deploy reputation list", "exception": str(e) } return { "message": "Probe " + str(probe.name) + " deployed successfully reputation list" }
def status(probe_id): probe = Probe.get_by_id(probe_id) if probe is None: # pragma: no cover return { "message": "Error - probe is None - param id not set : " + str(probe_id) } if probe.subtype: my_class = getattr( importlib.import_module(probe.type.lower() + ".models"), probe.subtype) else: my_class = getattr( importlib.import_module(probe.type.lower() + ".models"), probe.type) probe = my_class.get_by_id(probe_id) response = probe.status() if 'running' in response: return 'success' else: return 'danger'
def check_cve(request, pk): """ Check CVE for an instance. """ probe = Probe.get_by_id(pk) my_class = getattr(importlib.import_module(probe.type.lower() + ".models"), probe.type) probe = my_class.get_by_id(pk) if probe is None: # pragma: no cover return HttpResponseNotFound else: try: task_cve.delay(probe.name) messages.add_message( request, messages.SUCCESS, mark_safe("Check CVE launched with succeed. " + "<a href='/admin/core/job/'>View Job</a>")) except Exception as e: # pragma: no cover logger.exception('Check CVE failed ! ' + str(e)) messages.add_message(request, messages.ERROR, "Check CVE failed ! " + str(e)) return render(request, probe.type.lower() + '/index.html', {'probe': probe})