blob: 92fea5f0e719d0a4438f53e082e211ee3c9983b0 [file] [log] [blame] [edit]
"""Tests for devicemap.yaml config file."""
import unittest
from catatester.devicemap import devicemap_lib
class DeviceMapConfigTest(unittest.TestCase):
"""Tests for devicemap config file."""
def assertBotConfigMatchesSwarmingSchema(self, bot_config):
self.assertIn('dimensions', bot_config)
self.assertIn('state', bot_config)
for value in bot_config['dimensions'].values():
self.assertTrue(hasattr(value, '__iter__'))
def assertDimensionsAllowed(self, config, configs):
"""Checks that all the given dimensions are in allowed_dimensions."""
allowed_dimensions = configs.GetAllowedDimensions(config.type)
allowed_dimensions.add('extra_state')
dimensions = set(config.dimensions)
if not dimensions.issubset(allowed_dimensions):
raise devicemap_lib.DeviceMapError(
'Dimensions not currently allowed: %s' % ', '.join(
dimensions - allowed_dimensions))
def testAllowedDimensionsAreDefined(self):
configs = devicemap_lib.Configs()
self.assertTrue(configs.GetAllowedDimensions('Testbed'))
self.assertTrue(configs.GetAllowedDimensions('Device'))
def testEveryConfigIsValid(self):
configs = devicemap_lib.Configs()
for host in configs.hosts:
for bot_num in range(1, configs.GetNumBotConfigs(host) + 1):
try:
config = configs.GetBotConfig(host, bot_num)
self.assertIn('dimensions', config.as_dict)
self.assertDimensionsAllowed(config, configs)
except devicemap_lib.DeviceMapError as e:
raise AssertionError('config failure for %s--%s:\n%s\n%s' % (
host, bot_num, config, e))
def testNoDuplicateDevices(self):
configs = devicemap_lib.Configs()
device_ips = set()
device_serials = set()
for host in configs.hosts:
for bot_num in range(1, configs.GetNumBotConfigs(host) + 1):
config = configs.GetBotConfig(host, bot_num)
if config.type == 'Device':
dimensions = config.dimensions
if 'device_ip' in dimensions:
ip = dimensions['device_ip']
self.assertNotIn(ip, device_ips, 'duplicate ip found: %s' % ip)
device_ips.add(ip)
if 'serial' in dimensions:
serial = dimensions['serial']
device_serials.add(serial)
self.assertNotIn(ip, device_serials,
'duplicate serial found: %s' % serial)
def testMultizoneHostConfig(self):
"""Tests the configuration of multizone hosts."""
configs = devicemap_lib.Configs()
for host in configs.hosts:
if 'multizone' not in host:
continue
for bot_num in range(1, configs.GetNumBotConfigs(host) + 1):
config = configs.GetBotConfig(host, bot_num)
self.assertIn('audio_card_id', config.state,
'No "audio_card_id" in %r:%r.' % (host, bot_num))
self.assertRegexpMatches(
config.state['audio_card_id'], r'hw:\d,\d',
'"audio_card_id" in %r:%r is invalid.' % (host, bot_num))
self.assertIn('audio_card_ports', config.state,
'No "audio_card_ports" in %r:%r.' % (host, bot_num))
self.assertIsInstance(
config.state['audio_card_ports'], list,
'"audio_card_ports" in %r:%r is not a list.' % (host, bot_num))
self.assertIn('devices', config.state,
'No "devices" in %r:%r.' % (host, bot_num))
self.assertIsInstance(
config.state['devices'], list,
'"devices" in %r:%r is not a list.' % (host, bot_num))
if __name__ == '__main__':
unittest.main()