169 lines
5.9 KiB
Python
169 lines
5.9 KiB
Python
from __future__ import absolute_import
|
|
import mock
|
|
import unittest
|
|
|
|
import koji
|
|
import kojihub
|
|
|
|
UP = kojihub.UpdateProcessor
|
|
QP = kojihub.QueryProcessor
|
|
|
|
|
|
class TestHost(unittest.TestCase):
|
|
|
|
def getUpdate(self, *args, **kwargs):
|
|
update = UP(*args, **kwargs)
|
|
update.execute = mock.MagicMock()
|
|
self.updates.append(update)
|
|
return update
|
|
|
|
def getQuery(self, *args, **kwargs):
|
|
query = QP(*args, **kwargs)
|
|
query.execute = self.query_execute
|
|
self.queries.append(query)
|
|
return query
|
|
|
|
def setUp(self):
|
|
self.UpdateProcessor = mock.patch('kojihub.UpdateProcessor',
|
|
side_effect=self.getUpdate).start()
|
|
self.updates = []
|
|
self.QueryProcessor = mock.patch('kojihub.QueryProcessor',
|
|
side_effect=self.getQuery).start()
|
|
self.queries = []
|
|
self.query_execute = mock.MagicMock()
|
|
|
|
@mock.patch('kojihub.context')
|
|
def test_instantiation_not_a_host(self, context):
|
|
context.session.getHostId.return_value = None
|
|
context.session.logged_in = True
|
|
with self.assertRaises(koji.AuthError):
|
|
kojihub.Host(id=None)
|
|
|
|
@mock.patch('kojihub.context')
|
|
def test_instantiation_not_logged_in(self, context):
|
|
context.session.getHostId.return_value = None
|
|
context.session.logged_in = False
|
|
with self.assertRaises(koji.AuthError):
|
|
kojihub.Host()
|
|
|
|
@mock.patch('kojihub.context')
|
|
def test_instantiation_logged_in_as_host(self, context):
|
|
context.session.getHostId.return_value = 1234
|
|
context.session.logged_in = True
|
|
kojihub.Host(id=None) # No exception
|
|
|
|
@mock.patch('kojihub.context')
|
|
def test_verify_not_samehost(self, context):
|
|
context.session.getHostId.return_value = 1234
|
|
context.session.logged_in = True
|
|
host = kojihub.Host(id=5678)
|
|
with self.assertRaises(koji.AuthError):
|
|
host.verify()
|
|
|
|
@mock.patch('kojihub.context')
|
|
def test_verify_not_exclusive(self, context):
|
|
host = kojihub.Host(id=1234)
|
|
with self.assertRaises(koji.AuthError):
|
|
host.verify()
|
|
|
|
@mock.patch('kojihub.UpdateProcessor')
|
|
@mock.patch('kojihub.context')
|
|
def test_task_unwait(self, context, processor):
|
|
host = kojihub.Host(id=1234)
|
|
host.taskUnwait(parent=123)
|
|
self.assertEqual(len(processor.mock_calls), 6)
|
|
update1 = mock.call(
|
|
'task',
|
|
clauses=['id=%(parent)s'],
|
|
values=mock.ANY,
|
|
)
|
|
self.assertEqual(processor.call_args_list[0], update1)
|
|
update2 = mock.call(
|
|
'task',
|
|
clauses=['parent=%(parent)s'],
|
|
values=mock.ANY,
|
|
)
|
|
self.assertEqual(processor.call_args_list[1], update2)
|
|
|
|
@mock.patch('kojihub.UpdateProcessor')
|
|
@mock.patch('kojihub.context')
|
|
def test_task_set_wait_all_tasks(self, context, processor):
|
|
host = kojihub.Host(id=1234)
|
|
host.taskSetWait(parent=123, tasks=None)
|
|
self.assertEqual(len(processor.mock_calls), 6)
|
|
update1 = mock.call(
|
|
'task',
|
|
clauses=['id=%(parent)s'],
|
|
values=mock.ANY,
|
|
)
|
|
self.assertEqual(processor.call_args_list[0], update1)
|
|
update2 = mock.call(
|
|
'task',
|
|
clauses=['parent=%(parent)s'],
|
|
values=mock.ANY,
|
|
)
|
|
self.assertEqual(processor.call_args_list[1], update2)
|
|
|
|
@mock.patch('kojihub.UpdateProcessor')
|
|
@mock.patch('kojihub.context')
|
|
def test_task_set_wait_some_tasks(self, context, processor):
|
|
host = kojihub.Host(id=1234)
|
|
host.taskSetWait(parent=123, tasks=[234, 345])
|
|
self.assertEqual(len(processor.mock_calls), 9)
|
|
update1 = mock.call(
|
|
'task',
|
|
clauses=['id=%(parent)s'],
|
|
values=mock.ANY,
|
|
)
|
|
self.assertEqual(processor.call_args_list[0], update1)
|
|
update2 = mock.call(
|
|
'task',
|
|
clauses=['id IN %(tasks)s', 'parent=%(parent)s'],
|
|
values=mock.ANY,
|
|
)
|
|
self.assertEqual(processor.call_args_list[1], update2)
|
|
update3 = mock.call(
|
|
'task',
|
|
clauses=['id NOT IN %(tasks)s', 'parent=%(parent)s', 'awaited=true'],
|
|
values=mock.ANY,
|
|
)
|
|
self.assertEqual(processor.call_args_list[2], update3)
|
|
|
|
def test_task_wait_check(self):
|
|
self.query_execute.return_value = [{'id': 1, 'state': 1},
|
|
{'id': 2, 'state': 2},
|
|
{'id': 3, 'state': 3},
|
|
{'id': 4, 'state': 4}, ]
|
|
host = kojihub.Host(id=1234)
|
|
finished, unfinished = host.taskWaitCheck(parent=123)
|
|
self.assertEqual(finished, [2, 3])
|
|
self.assertEqual(unfinished, [1, 4])
|
|
|
|
@mock.patch('kojihub.context')
|
|
def test_task_wait(self, context):
|
|
self.query_execute.return_value = [{'id': 1, 'state': 1},
|
|
{'id': 2, 'state': 2},
|
|
{'id': 3, 'state': 3},
|
|
{'id': 4, 'state': 4}, ]
|
|
kojihub.Host.return_value = 1234
|
|
host = kojihub.Host(id=1234)
|
|
host.taskWait(parent=123)
|
|
self.assertEqual(len(self.updates), 2)
|
|
|
|
data = {'awaited': False}
|
|
|
|
update = self.updates[0]
|
|
values = {'id': 2}
|
|
self.assertEqual(update.table, 'task')
|
|
self.assertEqual(update.values, values)
|
|
self.assertEqual(update.data, data)
|
|
self.assertEqual(update.rawdata, {})
|
|
self.assertEqual(update.clauses, ['id=%(id)s'])
|
|
|
|
update = self.updates[1]
|
|
values = {'id': 3}
|
|
self.assertEqual(update.table, 'task')
|
|
self.assertEqual(update.values, values)
|
|
self.assertEqual(update.data, data)
|
|
self.assertEqual(update.rawdata, {})
|
|
self.assertEqual(update.clauses, ['id=%(id)s'])
|