blob: b4ea382ae52bcd5485c25139cbb3811182c09470 [file] [log] [blame]
#!/usr/bin/python
# Copyright 2009 Google Inc. Released under the GPL v2
import unittest
import common
from autotest_lib.mirror import trigger
from autotest_lib.client.common_lib.test_utils import mock
from aututest_lib.client.common_lib import control_data
CLIENT = control_data.CONTROL_TYPE_NAMES.CLIENT
class map_action_unittest(unittest.TestCase):
def setUp(self):
self.god = mock.mock_god()
def tearDown(self):
pass
def test_machine_info_api(self):
tests = object()
configs = object()
info = trigger.map_action.machine_info(tests, configs)
self.assertEquals(tests, info.tests)
self.assertEquals(configs, info.kernel_configs)
@staticmethod
def _make_control_dict(contents, is_server=False, synch_count=1,
dependencies=()):
class ControlFile(object):
def __init__(self, contents, is_server, synch_count, dependencies):
self.control_file = contents
self.is_server = is_server
self.synch_count = synch_count
self.dependencies = dependencies
return ControlFile(contents, is_server, synch_count, dependencies)
def test_job_grouping(self):
tests_map = {
'mach1': trigger.map_action.machine_info(
('test1', 'test2'), {'2.6.20': 'config1'}),
'mach2': trigger.map_action.machine_info(
('test3',), {'2.6.10': 'config2', '2.6.20': 'config1'}),
'mach3': trigger.map_action.machine_info(
('test2', 'test3'), {'2.6.20': 'config1'}),
}
action = trigger.map_action(tests_map, 'jobname %s')
self.assertTrue(isinstance(action._afe, trigger.frontend.AFE))
action._afe = self.god.create_mock_class(trigger.frontend.AFE, 'AFE')
control2 = self._make_control_dict('control contents2')
(action._afe.generate_control_file.expect_call(
tests=['test2'],
kernel=[dict(version='2.6.21', config_file='config1')],
upload_kernel_config=False)
.and_return(control2))
action._afe.create_job.expect_call(
control2.control_file, 'jobname 2.6.21',
control_type=CLIENT, hosts=['mach1', 'mach3'])
control3 = self._make_control_dict('control contents3', is_server=True)
(action._afe.generate_control_file.expect_call(
tests=['test3'],
kernel=[dict(version='2.6.21', config_file='config1')],
upload_kernel_config=False)
.and_return(control3))
action._afe.create_job.expect_call(
control3.control_file, 'jobname 2.6.21',
control_type='Server', hosts=['mach2', 'mach3'])
control1 = self._make_control_dict('control contents1')
(action._afe.generate_control_file.expect_call(
tests=['test1'],
kernel=[dict(version='2.6.21', config_file='config1')],
upload_kernel_config=False)
.and_return(control1))
action._afe.create_job.expect_call(
control1.control_file, 'jobname 2.6.21',
control_type=CLIENT, hosts=['mach1'])
action(['2.6.21'])
self.god.check_playback()
def test_kver_cmp(self):
def check_cmp(ver1, ver2):
# function to make sure "cmp" invariants are followed
cmp_func = trigger.map_action._kver_cmp
if ver1 != ver2:
self.assertEquals(cmp_func(ver1, ver2), -1)
self.assertEquals(cmp_func(ver2, ver1), 1)
else:
self.assertEquals(cmp_func(ver1, ver2), 0)
self.assertEquals(cmp_func(ver2, ver1), 0)
check_cmp('2.6.20', '2.6.20')
check_cmp('2.6.20', '2.6.21')
check_cmp('2.6.20', '2.6.21-rc2')
check_cmp('2.6.20-rc2-git2', '2.6.20-rc2')
def test_upload_kernel_config(self):
tests_map = {
'mach1': trigger.map_action.machine_info(
('test1',), {'2.6.20': 'config1'}),
'mach3': trigger.map_action.machine_info(
('test1',), {'2.6.20': 'config1'})
}
action = trigger.map_action(tests_map, 'jobname %s',
upload_kernel_config=True)
self.assertTrue(isinstance(action._afe, trigger.frontend.AFE))
action._afe = self.god.create_mock_class(trigger.frontend.AFE, 'AFE')
control = self._make_control_dict('control contents', is_server=True)
(action._afe.generate_control_file.expect_call(
tests=['test1'],
kernel=[dict(version='2.6.21', config_file='config1')],
upload_kernel_config=True)
.and_return(control))
action._afe.create_job.expect_call(
control.control_file, 'jobname 2.6.21',
control_type='Server', hosts=['mach1', 'mach3'])
action(['2.6.21'])
self.god.check_playback()
if __name__ == "__main__":
unittest.main()