mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-13 08:26:15 +00:00
Merge pull request #744 from alexjacks92/timingTest
Timing testing capabilities added
This commit is contained in:
commit
2923f90a61
@ -142,7 +142,7 @@ class TestRunner(object):
|
|||||||
test_data.printerror = Errors.printerror
|
test_data.printerror = Errors.printerror
|
||||||
# give solr process time to die.
|
# give solr process time to die.
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
print("Total ingest time was " + test_data.total_ingest_time)
|
|
||||||
Reports.write_html_foot(test_config.html_log)
|
Reports.write_html_foot(test_config.html_log)
|
||||||
|
|
||||||
if test_config.jenkins:
|
if test_config.jenkins:
|
||||||
@ -182,7 +182,7 @@ class TestRunner(object):
|
|||||||
except sqlite3.OperationalError as e:
|
except sqlite3.OperationalError as e:
|
||||||
print("Ingest did not run properly.",
|
print("Ingest did not run properly.",
|
||||||
"Make sure no other instances of Autopsy are open and try again.")
|
"Make sure no other instances of Autopsy are open and try again.")
|
||||||
sys.exit()
|
sys.exit(1)
|
||||||
|
|
||||||
# merges logs into a single log for later diff / rebuild
|
# merges logs into a single log for later diff / rebuild
|
||||||
copy_logs(test_data)
|
copy_logs(test_data)
|
||||||
@ -211,8 +211,21 @@ class TestRunner(object):
|
|||||||
print("Html report passed: ", test_data.html_report_passed)
|
print("Html report passed: ", test_data.html_report_passed)
|
||||||
print("Errors diff passed: ", test_data.errors_diff_passed)
|
print("Errors diff passed: ", test_data.errors_diff_passed)
|
||||||
print("DB diff passed: ", test_data.db_diff_passed)
|
print("DB diff passed: ", test_data.db_diff_passed)
|
||||||
test_data.overall_passed = (test_data.html_report_passed and
|
|
||||||
test_data.errors_diff_passed and test_data.db_diff_passed)
|
# run time test only for the specific jenkins test
|
||||||
|
if test_data.main_config.timing:
|
||||||
|
if test_data.main_config.timing:
|
||||||
|
old_time_path = test_data.get_run_time_path()
|
||||||
|
passed = TestResultsDiffer._run_time_diff(test_data, old_time_path)
|
||||||
|
test_data.run_time_passed = passed
|
||||||
|
print("Run time test passed: ", test_data.run_time_passed)
|
||||||
|
test_data.overall_passed = (test_data.html_report_passed and
|
||||||
|
test_data.errors_diff_passed and test_data.db_diff_passed and
|
||||||
|
test_data.run_time_passed)
|
||||||
|
# otherwise, do the usual
|
||||||
|
else:
|
||||||
|
test_data.overall_passed = (test_data.html_report_passed and
|
||||||
|
test_data.errors_diff_passed and test_data.db_diff_passed)
|
||||||
|
|
||||||
Reports.generate_reports(test_data)
|
Reports.generate_reports(test_data)
|
||||||
if(not test_data.overall_passed):
|
if(not test_data.overall_passed):
|
||||||
@ -394,6 +407,7 @@ class TestData(object):
|
|||||||
html_report_passed: a boolean, did the HTML report diff pass?
|
html_report_passed: a boolean, did the HTML report diff pass?
|
||||||
errors_diff_passed: a boolean, did the error diff pass?
|
errors_diff_passed: a boolean, did the error diff pass?
|
||||||
db_diff_passed: a boolean, did the db diff pass?
|
db_diff_passed: a boolean, did the db diff pass?
|
||||||
|
run_time_passed: a boolean, did the run time test pass?
|
||||||
overall_passed: a boolean, did the test pass?
|
overall_passed: a boolean, did the test pass?
|
||||||
total_test_time: a String representation of the test duration
|
total_test_time: a String representation of the test duration
|
||||||
start_date: a String representation of this TestData's start date
|
start_date: a String representation of this TestData's start date
|
||||||
@ -445,6 +459,7 @@ class TestData(object):
|
|||||||
self.html_report_passed = False
|
self.html_report_passed = False
|
||||||
self.errors_diff_passed = False
|
self.errors_diff_passed = False
|
||||||
self.db_diff_passed = False
|
self.db_diff_passed = False
|
||||||
|
self.run_time_passed = False
|
||||||
self.overall_passed = False
|
self.overall_passed = False
|
||||||
# Ingest info
|
# Ingest info
|
||||||
self.total_test_time = ""
|
self.total_test_time = ""
|
||||||
@ -527,6 +542,11 @@ class TestData(object):
|
|||||||
"""
|
"""
|
||||||
return self._get_path_to_file(file_type, "DBDump.txt")
|
return self._get_path_to_file(file_type, "DBDump.txt")
|
||||||
|
|
||||||
|
def get_run_time_path(self):
|
||||||
|
"""Get the path to the run time storage file."
|
||||||
|
"""
|
||||||
|
return os.path.join("..", "input")
|
||||||
|
|
||||||
def _get_path_to_file(self, file_type, file_name):
|
def _get_path_to_file(self, file_type, file_name):
|
||||||
"""Get the path to the specified file with the specified type.
|
"""Get the path to the specified file with the specified type.
|
||||||
|
|
||||||
@ -569,6 +589,7 @@ class TestConfiguration(object):
|
|||||||
timeout: a Nat, the amount of time before killing the test
|
timeout: a Nat, the amount of time before killing the test
|
||||||
ant: a listof_String, the ant command to run the tests
|
ant: a listof_String, the ant command to run the tests
|
||||||
jenkins: a boolean, is this test running through a Jenkins job?
|
jenkins: a boolean, is this test running through a Jenkins job?
|
||||||
|
timing: are we doing a running time test?
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, args):
|
def __init__(self, args):
|
||||||
@ -596,6 +617,7 @@ class TestConfiguration(object):
|
|||||||
timer = 0
|
timer = 0
|
||||||
self.images = []
|
self.images = []
|
||||||
self.jenkins = False
|
self.jenkins = False
|
||||||
|
self.timing = False
|
||||||
# Set the timeout to something huge
|
# Set the timeout to something huge
|
||||||
# The entire tester should not timeout before this number in ms
|
# The entire tester should not timeout before this number in ms
|
||||||
# However it only seems to take about half this time
|
# However it only seems to take about half this time
|
||||||
@ -639,6 +661,10 @@ class TestConfiguration(object):
|
|||||||
self.diff_dir = parsed_config.getElementsByTagName("diffdir")[0].getAttribute("value").encode().decode("utf_8")
|
self.diff_dir = parsed_config.getElementsByTagName("diffdir")[0].getAttribute("value").encode().decode("utf_8")
|
||||||
else:
|
else:
|
||||||
self.jenkins = False
|
self.jenkins = False
|
||||||
|
if parsed_config.getElementsByTagName("timing"):
|
||||||
|
self.timing = True
|
||||||
|
else:
|
||||||
|
self.timing = False
|
||||||
self._init_imgs(parsed_config)
|
self._init_imgs(parsed_config)
|
||||||
self._init_build_info(parsed_config)
|
self._init_build_info(parsed_config)
|
||||||
|
|
||||||
@ -729,6 +755,7 @@ class TestResultsDiffer(object):
|
|||||||
passed = TestResultsDiffer._html_report_diff(gold_report_path,
|
passed = TestResultsDiffer._html_report_diff(gold_report_path,
|
||||||
output_report_path)
|
output_report_path)
|
||||||
test_data.html_report_passed = passed
|
test_data.html_report_passed = passed
|
||||||
|
|
||||||
|
|
||||||
# Clean up tmp folder
|
# Clean up tmp folder
|
||||||
del_dir(test_data.gold_data_dir)
|
del_dir(test_data.gold_data_dir)
|
||||||
@ -847,6 +874,33 @@ class TestResultsDiffer(object):
|
|||||||
else:
|
else:
|
||||||
return (0, 0)
|
return (0, 0)
|
||||||
|
|
||||||
|
def _run_time_diff(test_data, old_time_path):
|
||||||
|
""" Compare run times for this run, and the run previous.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
test_data: the TestData
|
||||||
|
old_time_path: path to the log containing the run time from a previous test
|
||||||
|
"""
|
||||||
|
# read in time
|
||||||
|
file = open(old_time_path + '/' + test_data.image + "_time.txt", "r")
|
||||||
|
line = file.readline()
|
||||||
|
oldtime = int(line[:line.find("ms")].replace(',', ''))
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
newtime = test_data.total_ingest_time
|
||||||
|
newtime = int(newtime[:newtime.find("ms")].replace(',', ''))
|
||||||
|
|
||||||
|
# run the test, 5% tolerance
|
||||||
|
if oldtime * 1.05 >= newtime: # new run was faster
|
||||||
|
return True
|
||||||
|
else: # old run was faster
|
||||||
|
print("The last run took: " + str(oldtime))
|
||||||
|
print("This run took: " + str(newtime))
|
||||||
|
diff = ((newtime / oldtime) * 100) - 100
|
||||||
|
diff = str(diff)[:str(diff).find('.') + 3]
|
||||||
|
print("This run took " + diff + "% longer to run than the last run.")
|
||||||
|
return False
|
||||||
|
|
||||||
# Split a string into an array of string of the given size
|
# Split a string into an array of string of the given size
|
||||||
def _split(input, size):
|
def _split(input, size):
|
||||||
return [input[start:start+size] for start in range(0, len(input), size)]
|
return [input[start:start+size] for start in range(0, len(input), size)]
|
||||||
@ -864,7 +918,10 @@ class Reports(object):
|
|||||||
Reports._generate_csv(test_data.main_config.global_csv, test_data)
|
Reports._generate_csv(test_data.main_config.global_csv, test_data)
|
||||||
else:
|
else:
|
||||||
Reports._generate_csv(test_data.main_config.csv, test_data)
|
Reports._generate_csv(test_data.main_config.csv, test_data)
|
||||||
|
|
||||||
|
if test_data.main_config.timing:
|
||||||
|
Reports._write_time(test_data)
|
||||||
|
|
||||||
def _generate_html(test_data):
|
def _generate_html(test_data):
|
||||||
"""Generate the HTML log file."""
|
"""Generate the HTML log file."""
|
||||||
# If the file doesn't exist yet, this is the first test_config to run for
|
# If the file doesn't exist yet, this is the first test_config to run for
|
||||||
@ -1122,6 +1179,18 @@ class Reports(object):
|
|||||||
output += "\n"
|
output += "\n"
|
||||||
csv.write(output)
|
csv.write(output)
|
||||||
|
|
||||||
|
def _write_time(test_data):
|
||||||
|
"""Write out the time ingest took. For jenkins purposes.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
test_data: the TestData
|
||||||
|
"""
|
||||||
|
filename = test_data.image + "_time.txt"
|
||||||
|
new_file = open(filename, "w")
|
||||||
|
new_file.write(test_data.total_ingest_time)
|
||||||
|
new_file.close()
|
||||||
|
shutil.copy(new_file.name, test_data.main_config.input_dir)
|
||||||
|
|
||||||
def _get_num_memory_errors(type, test_data):
|
def _get_num_memory_errors(type, test_data):
|
||||||
"""Get the number of OutOfMemory errors and Exceptions.
|
"""Get the number of OutOfMemory errors and Exceptions.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user