class TestReporter: CONFIG = """ [reporter_tests] enabled = on """ def setUp(self): self.tmp = tempfile.mkdtemp() self.cfg = tempfile.mkstemp()[1] f = open(self.cfg, "w") f.write(self.CONFIG) f.close() self.r = Reporter(self.tmp) self.r.cfg = Config(self.cfg) def test_run_report(self): results = {} self.r._run_report(ReportMock, results) def test_run_report_alter_results(self): """@note: Regression test.""" results = {"foo": "bar"} self.r._run_report(ReportAlterMock, results) assert_equals(results, {"foo": "bar"}) def tearDown(self): os.rmdir(os.path.join(self.tmp, "reports")) os.rmdir(self.tmp) os.remove(self.cfg)
def setUp(self): self.tmp = tempfile.mkdtemp() self.cfg = tempfile.mkstemp()[1] f = open(self.cfg, "w") f.write(self.CONFIG) f.close() self.r = Reporter(self.tmp) self.r.cfg = Config(self.cfg)
def process_results(self): """Process the analysis results and generate the enabled reports.""" try: logs_path = os.path.join(self.storage, "logs") for csv in os.listdir(logs_path): if not '.raw' in csv: continue csv = os.path.join(logs_path, csv) if os.stat( csv).st_size > self.cfg.processing.analysis_size_limit: log.error( "Analysis file %s is too big to be processed, " "analysis aborted. Process it manually with the " "provided utilities", csv) return False except OSError as e: log.warning("Error accessing analysis logs (task=%d): %s", self.task.id, e) results = Processor(self.task.id).run() Reporter(self.task.id).run(results) # If the target is a file and the user enabled the option, # delete the original copy. if self.task.category == "file" and self.cfg.cuckoo.delete_original: try: os.remove(self.task.target) except OSError as e: log.error( "Unable to delete original file at path \"%s\": " "%s", self.task.target, e) log.info("Task #%d: reports generation completed (path=%s)", self.task.id, self.storage) return True
def main(): parser = argparse.ArgumentParser() parser.add_argument("id", type=str, help="ID of the analysis to process") parser.add_argument("-r", "--report", help="Re-generate report", action="store_true", required=False) parser.add_argument("-f", "--failed", help="Mark the analysis as failed", action="store_true", required=False) args = parser.parse_args() init_modules() if args.failed: results = {"success" : False} else: results = Processor(args.id).run() results["success"] = True if args.report: Reporter(args.id).run(results)