112 lines
3.6 KiB
Python
112 lines
3.6 KiB
Python
from __future__ import absolute_import
|
|
import mock
|
|
try:
|
|
import unittest2 as unittest
|
|
except ImportError:
|
|
import unittest
|
|
|
|
import koji.daemon
|
|
import koji
|
|
|
|
|
|
class TestDelayTimes(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.options = mock.MagicMock()
|
|
self.session = mock.MagicMock()
|
|
self.tm = koji.daemon.TaskManager(self.options, self.session)
|
|
self.time = mock.patch('time.time').start()
|
|
|
|
def tearDown(self):
|
|
mock.patch.stopall()
|
|
|
|
def test_check_avail_delay(self):
|
|
self.options.task_avail_delay = 180 # same as default
|
|
|
|
# highest capacity, no skip entry
|
|
start = 10000
|
|
task = {'id': 100}
|
|
self.tm.skipped_tasks = {}
|
|
self.time.return_value = start
|
|
bin_avail = [10.0, 9.0, 8.0, 7.0]
|
|
our_avail = 10.0
|
|
chk = self.tm.checkAvailDelay(task, bin_avail, our_avail)
|
|
self.assertEqual(chk, False)
|
|
|
|
# not highest, no skip entry
|
|
our_avail = 9.0
|
|
self.tm.skipped_tasks = {}
|
|
chk = self.tm.checkAvailDelay(task, bin_avail, our_avail)
|
|
self.assertEqual(chk, True)
|
|
|
|
# last, but past full delay
|
|
self.tm.skipped_tasks = {task['id']: start}
|
|
our_avail = 7.0
|
|
self.options.task_avail_delay = 500
|
|
self.time.return_value = start + 500
|
|
chk = self.tm.checkAvailDelay(task, bin_avail, our_avail)
|
|
self.assertEqual(chk, False)
|
|
|
|
# last, but less than delay
|
|
self.tm.skipped_tasks = {task['id']: start}
|
|
our_avail = 7.0
|
|
self.time.return_value = start + 499
|
|
chk = self.tm.checkAvailDelay(task, bin_avail, our_avail)
|
|
self.assertEqual(chk, True)
|
|
|
|
# median, but less than scaled delay
|
|
self.tm.skipped_tasks = {task['id']: start}
|
|
bin_avail = [10.0, 9.0, 8.0, 7.0, 6.0]
|
|
our_avail = 8.0
|
|
# rank = 2/4 = 0.5, so adjusted delay is 250
|
|
self.time.return_value = start + 249
|
|
chk = self.tm.checkAvailDelay(task, bin_avail, our_avail)
|
|
self.assertEqual(chk, True)
|
|
|
|
# median, but past scaled delay
|
|
self.tm.skipped_tasks = {task['id']: start}
|
|
bin_avail = [10.0, 9.0, 8.0, 7.0, 6.0]
|
|
our_avail = 8.0
|
|
# rank = 2/4 = 0.5, so adjusted delay is 250
|
|
self.time.return_value = start + 251
|
|
chk = self.tm.checkAvailDelay(task, bin_avail, our_avail)
|
|
self.assertEqual(chk, False)
|
|
|
|
# only one in bin
|
|
self.tm.skipped_tasks = {}
|
|
bin_avail = [5.0]
|
|
our_avail = 5.0
|
|
self.time.return_value = start
|
|
chk = self.tm.checkAvailDelay(task, bin_avail, our_avail)
|
|
self.assertEqual(chk, False)
|
|
|
|
|
|
def test_clean_delay_times(self):
|
|
self.options.task_avail_delay = 180 # same as default
|
|
|
|
# test no skipped entries
|
|
start = 10000
|
|
self.time.return_value = start + 100
|
|
self.tm.skipped_tasks = {}
|
|
self.tm.cleanDelayTimes()
|
|
self.assertEqual(self.tm.skipped_tasks, {})
|
|
|
|
# test all skipped entries
|
|
self.time.return_value = start + 5000
|
|
skipped = {}
|
|
for i in range(25):
|
|
skipped[i] = start + i
|
|
# all older than 180 in age
|
|
self.tm.skipped_tasks = skipped
|
|
self.tm.cleanDelayTimes()
|
|
self.assertEqual(self.tm.skipped_tasks, {})
|
|
|
|
# test mixed entries
|
|
skipped = {100: start + 5000}
|
|
expected = skipped.copy()
|
|
for i in range(25):
|
|
skipped[i] = start + i
|
|
# all older than 180 in age
|
|
self.tm.skipped_tasks = skipped
|
|
self.tm.cleanDelayTimes()
|
|
self.assertEqual(self.tm.skipped_tasks, expected)
|