mirror of https://github.com/MISP/PyMISP
434 lines
17 KiB
Python
434 lines
17 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
import unittest
|
|
|
|
from pymisp import MISPEvent
|
|
|
|
manual_testing = False
|
|
|
|
import logging
|
|
logging.disable(logging.CRITICAL)
|
|
|
|
try:
|
|
from pymisp.tools import reportlab_generator
|
|
except Exception:
|
|
if sys.version_info < (3, 6):
|
|
print('This test suite requires Python 3.6+, breaking.')
|
|
sys.exit(0)
|
|
else:
|
|
raise
|
|
|
|
|
|
class TestPDFExport(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.maxDiff = None
|
|
self.mispevent = MISPEvent()
|
|
if not manual_testing:
|
|
self.root = "tests/"
|
|
else:
|
|
self.root = ""
|
|
self.test_folder = self.root + "reportlab_testfiles/"
|
|
self.test_batch_folder = self.root + "OSINT_output/"
|
|
self.storage_folder_OSINT = self.root + "OSINT_PDF/"
|
|
self.test_image_folder = self.root + "image_json/"
|
|
self.storage_folder = self.root + "reportlab_testoutputs/"
|
|
self.storage_image_folder = self.root + "reportlab_test_image_outputs/"
|
|
self.moduleconfig = ["MISP_base_url_for_dynamic_link", "MISP_name_for_metadata", "Activate_textual_description",
|
|
"Activate_galaxy_description", "Activate_related_events", "Activate_internationalization_fonts", "Custom_fonts_path"]
|
|
|
|
def init_event(self):
|
|
self.mispevent.info = 'This is a test'
|
|
self.mispevent.distribution = 1
|
|
self.mispevent.threat_level_id = 1
|
|
self.mispevent.analysis = 1
|
|
self.mispevent.set_date("2017-12-31") # test the set date method
|
|
|
|
def check_python_2(self):
|
|
if sys.version_info.major < 3:
|
|
# we want Python2 test to pass
|
|
return True
|
|
|
|
def test_basic_event(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
self.init_event()
|
|
reportlab_generator.register_value_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent),
|
|
self.storage_folder + "basic_event.pdf")
|
|
|
|
def test_event(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'to_delete1.json')
|
|
reportlab_generator.register_value_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent),
|
|
self.storage_folder + "normal_event.pdf")
|
|
|
|
def test_HTML_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'HTML_event.json')
|
|
reportlab_generator.register_value_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent),
|
|
self.storage_folder + "HTML_event.pdf")
|
|
|
|
def test_long_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'long_event.json')
|
|
reportlab_generator.register_value_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent),
|
|
self.storage_folder + "long_event.pdf")
|
|
# Issue report : "We are not smart enough" : https://pairlist2.pair.net/pipermail/reportlab-users/2010-May/009529.html
|
|
# Not nice but working solution exposed there: https://pairlist2.pair.net/pipermail/reportlab-users/2016-March/011525.html
|
|
|
|
def test_very_long_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'very_long_event.json')
|
|
reportlab_generator.register_value_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent),
|
|
self.storage_folder + "very_long_event.pdf")
|
|
|
|
def test_full_config_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'very_long_event.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "config_complete_event.pdf")
|
|
|
|
def test_partial_0_config_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'very_long_event.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "config_partial_0_event.pdf")
|
|
|
|
def test_partial_1_config_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
|
|
config = {}
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'very_long_event.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "config_partial_1_event.pdf")
|
|
|
|
def test_image_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'image_event.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "image_event.pdf")
|
|
|
|
def test_objects_1_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'mainly_objects_1.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "mainly_objects_1.pdf")
|
|
|
|
def test_objects_2_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'mainly_objects_2.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "mainly_objects_2.pdf")
|
|
|
|
def test_sightings_1_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'sighting_1.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "sighting_1.pdf")
|
|
|
|
def test_sightings_2_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'sighting_2.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "sighting_2.pdf")
|
|
|
|
def test_textual_json(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
config[self.moduleconfig[2]] = True
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'very_long_event.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "textual.pdf")
|
|
|
|
def test_galaxy_1(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
config[self.moduleconfig[2]] = True
|
|
config[self.moduleconfig[3]] = True
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'galaxy_1.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "galaxy_1.pdf")
|
|
|
|
def test_related_events(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
config[self.moduleconfig[2]] = True
|
|
config[self.moduleconfig[3]] = True
|
|
config[self.moduleconfig[4]] = True
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'galaxy_1.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "related_events.pdf")
|
|
|
|
def test_related_events_too_simple(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
config[self.moduleconfig[2]] = True
|
|
config[self.moduleconfig[3]] = True
|
|
config[self.moduleconfig[4]] = True
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'to_delete1.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "related_events_no_related.pdf")
|
|
|
|
def test_utf(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
config[self.moduleconfig[2]] = True
|
|
config[self.moduleconfig[3]] = True
|
|
config[self.moduleconfig[4]] = True
|
|
config[self.moduleconfig[5]] = True
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'japanese_test.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "japanese_test.pdf")
|
|
|
|
def test_utf_heavy(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
else:
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
config[self.moduleconfig[2]] = True
|
|
config[self.moduleconfig[3]] = True
|
|
config[self.moduleconfig[4]] = True
|
|
config[self.moduleconfig[5]] = True
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'japanese_test_heavy.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "japanese_test_heavy.pdf")
|
|
|
|
def test_utf_ArialUNI_custompath(self):
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
elif not manual_testing:
|
|
self.assertTrue(True)
|
|
else:
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
config[self.moduleconfig[2]] = True
|
|
config[self.moduleconfig[3]] = True
|
|
config[self.moduleconfig[4]] = True
|
|
config[self.moduleconfig[5]] = True
|
|
config[self.moduleconfig[6]] = "/home/user/Desktop/PyMISP/pymisp/tools/pdf_fonts/arial-unicode-ms/ARIALUNI.TTF"
|
|
|
|
self.init_event()
|
|
self.mispevent.load_file(self.test_folder + 'japanese_test_heavy.json')
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder + "custom_path.pdf")
|
|
|
|
def test_batch_image_events(self):
|
|
# Test case ONLY for manual testing. Needs to download a full list of image events !
|
|
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
elif not manual_testing:
|
|
self.assertTrue(True)
|
|
else:
|
|
self.init_event()
|
|
|
|
file_nb = str(len(os.listdir(self.test_image_folder)))
|
|
i = 0
|
|
t = time.time()
|
|
for curr_file in os.listdir(self.test_image_folder):
|
|
self.mispevent = MISPEvent()
|
|
file_path = self.test_image_folder + curr_file
|
|
|
|
print("Current file : " + file_path + " " + str(i) + " over " + file_nb)
|
|
i += 1
|
|
|
|
self.mispevent.load_file(file_path)
|
|
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent),
|
|
self.storage_image_folder + curr_file + ".pdf")
|
|
print("Elapsed time : " + str(time.time() - t))
|
|
# Local run : 73.061s for 102 files
|
|
|
|
def test_batch_OSINT_events(self):
|
|
# Test case ONLY for manual testing. Needs to download a full list of OSINT events !
|
|
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
elif not manual_testing:
|
|
self.assertTrue(True)
|
|
else:
|
|
self.init_event()
|
|
|
|
file_nb = str(len(os.listdir(self.test_batch_folder)))
|
|
i = 0
|
|
t = time.time()
|
|
for curr_file in os.listdir(self.test_batch_folder):
|
|
self.mispevent = MISPEvent()
|
|
file_path = self.test_batch_folder + curr_file
|
|
|
|
print("Current file : " + file_path + " " + str(i) + " over " + file_nb)
|
|
i += 1
|
|
|
|
self.mispevent.load_file(file_path)
|
|
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent),
|
|
self.storage_folder_OSINT + curr_file + ".pdf")
|
|
print("Elapsed time : " + str(time.time() - t))
|
|
# Local run : 1958.930s for 1064 files
|
|
|
|
def test_batch_OSINT_with_config_events(self):
|
|
# Test case ONLY for manual testing. Needs to download a full list of OSINT events !
|
|
|
|
if self.check_python_2():
|
|
self.assertTrue(True)
|
|
elif not manual_testing:
|
|
self.assertTrue(True)
|
|
else:
|
|
self.init_event()
|
|
|
|
config = {}
|
|
config[self.moduleconfig[0]] = "http://localhost:8080"
|
|
config[self.moduleconfig[1]] = "My Wonderful CERT"
|
|
config[self.moduleconfig[2]] = True
|
|
config[self.moduleconfig[3]] = True
|
|
config[self.moduleconfig[4]] = True
|
|
config[self.moduleconfig[5]] = True
|
|
|
|
file_nb = str(len(os.listdir(self.test_batch_folder)))
|
|
i = 0
|
|
t = time.time()
|
|
for curr_file in os.listdir(self.test_batch_folder):
|
|
self.mispevent = MISPEvent()
|
|
file_path = self.test_batch_folder + curr_file
|
|
|
|
print("Current file : " + file_path + " " + str(i) + " over " + file_nb)
|
|
i += 1
|
|
|
|
self.mispevent.load_file(file_path)
|
|
|
|
reportlab_generator.register_value_to_file(
|
|
reportlab_generator.convert_event_in_pdf_buffer(self.mispevent, config),
|
|
self.storage_folder_OSINT + curr_file + ".pdf")
|
|
print("Elapsed time : " + str(time.time() - t))
|
|
# Local run : 1513.283s for 1064 files
|