Files
mongo/buildscripts/resmokelib/testing/queue_element.py

49 lines
1.8 KiB
Python
Raw Normal View History

"""Queue entry interface."""
class QueueElemRepeatNum(object):
"""Base class for an element on the queue."""
def __init__(self, testcase, test_config, suite_options):
"""Initialize QueueElemRepeatNum class."""
self.testcase = testcase
self.test_config = test_config
self.repeat_num_min = suite_options.num_repeat_tests
self.repeat_time_elapsed = 0
self.repeat_num = 0
def job_completed(self, job_time):
"""Increment values when the job completes."""
self.repeat_num += 1
self.repeat_time_elapsed += job_time
def should_requeue(self):
"""Return True if the queue element should be requeued."""
return self.repeat_num < self.repeat_num_min
class QueueElemRepeatTime(QueueElemRepeatNum):
"""Queue element for repeat time."""
def __init__(self, testcase, config, suite_options):
"""Initialize QueueElemRepeatTime class."""
super(QueueElemRepeatTime, self).__init__(testcase, config, suite_options)
self.repeat_num_min = suite_options.num_repeat_tests_min
self.repeat_num_max = suite_options.num_repeat_tests_max
self.repeat_secs = suite_options.time_repeat_tests_secs
def should_requeue(self):
"""Return True if the queue element should be requeued."""
avg_time = 0 if self.repeat_num == 0 else self.repeat_time_elapsed / self.repeat_num
# Minumim number of tests has not been run.
if self.repeat_num_min and self.repeat_num < self.repeat_num_min:
return True
# Maximum number of tests has been run or elapsed time has been exceeded.
if ((self.repeat_num_max and self.repeat_num >= self.repeat_num_max)
or self.repeat_time_elapsed + avg_time > self.repeat_secs):
return False
return True