blob: 497239e4533484a1b5530a37a461b5269c96aed2 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2022 The Fuchsia Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import unittest
from antlion.controllers.bits_lib import bits_service_config
class BitsServiceConfigTest(unittest.TestCase):
def test_basic_config(self):
config_dic = bits_service_config.BitsServiceConfig({}).config_dic
self.assertIn('devices', config_dic)
self.assertIn('default_device', config_dic['devices'])
self.assertIn('collectors', config_dic['devices']['default_device'])
def test_bits_service_config_has_an_enabled_default_device(self):
config_dic = bits_service_config.BitsServiceConfig({}).config_dic
self.assertEqual(1, config_dic['devices']['default_device']['enabled'])
class BitsServiceConfigWithMonsoonTest(unittest.TestCase):
def test_monsoon_with_serial_less_than_20000_is_configured_as_non_hv(self):
config = bits_service_config._BitsMonsoonConfig(
{'serial_num': 19999, 'monsoon_voltage': 1},
lvpm_monsoon_bin='lvpm_bin', hvpm_monsoon_bin='hvpm_bin')
self.assertEqual(0, config.config_dic['hv_monsoon'])
self.assertEqual('lvpm_bin', config.config_dic['monsoon_binary_path'])
def test_lvpm_monsoon_requires_lvpm_binary(self):
self.assertRaisesRegex(ValueError,
r'lvpm_monsoon binary is needed but was None.',
bits_service_config._BitsMonsoonConfig,
{'serial_num': 19999, 'monsoon_voltage': 1},
hvpm_monsoon_bin='hvpm_bin')
def test_monsoon_with_serial_greater_than_20000_is_configured_as_hv(self):
config = bits_service_config._BitsMonsoonConfig(
{'serial_num': 20001, 'monsoon_voltage': 1},
lvpm_monsoon_bin='lvpm_bin', hvpm_monsoon_bin='hvpm_bin')
self.assertEqual(1, config.config_dic['hv_monsoon'])
self.assertEqual('hvpm_bin', config.config_dic['monsoon_binary_path'])
def test_hvpm_monsoon_requires_hvpm_binary(self):
self.assertRaisesRegex(ValueError,
r'hvpm_monsoon binary is needed but was None.',
bits_service_config._BitsMonsoonConfig,
{'serial_num': 20001, 'monsoon_voltage': 1},
lvpm_monsoon_bin='hvpm_bin')
def test_monsoon_config_fails_without_voltage(self):
self.assertRaisesRegex(ValueError,
r'Monsoon voltage can not be undefined.',
bits_service_config._BitsMonsoonConfig,
{'serial_num': 1},
lvpm_monsoon_bin='lvpm_bin')
def test_monsoon_config_fails_without_serial(self):
self.assertRaisesRegex(ValueError,
r'Monsoon serial_num can not be undefined.',
bits_service_config._BitsMonsoonConfig,
{'monsoon_voltage': 1},
lvpm_monsoon_bin='lvpm_bin')
def test_monsoon_config_is_always_enabled(self):
config = bits_service_config._BitsMonsoonConfig(
{'serial_num': 1, 'monsoon_voltage': 1},
lvpm_monsoon_bin='bin')
self.assertEqual(1, config.config_dic['enabled'])
def test_monsoon_config_disables_monsoon_reseting(self):
config = bits_service_config._BitsMonsoonConfig(
{'serial_num': 1, 'monsoon_voltage': 1},
lvpm_monsoon_bin='bin')
self.assertEqual(0, config.config_dic['monsoon_reset'])
def test_monsoon_config_type_is_monsooncollector(self):
config = bits_service_config._BitsMonsoonConfig(
{'serial_num': 1, 'monsoon_voltage': 1},
lvpm_monsoon_bin='bin')
self.assertEqual('monsooncollector', config.config_dic['type'])
def test_bits_service_config_without_monsoon(self):
service_config = bits_service_config.BitsServiceConfig({})
self.assertFalse(service_config.has_monsoon)
def test_bits_service_config_with_a_monsoon(self):
service_config = bits_service_config.BitsServiceConfig(
{'Monsoon': {'serial_num': 1, 'monsoon_voltage': 1}},
lvpm_monsoon_bin='bin')
config_dic = service_config.config_dic
self.assertTrue(service_config.has_monsoon)
self.assertIn('Monsoon',
config_dic['devices']['default_device'][
'collectors'])
monsoon_config = bits_service_config._BitsMonsoonConfig(
{'serial_num': 1, 'monsoon_voltage': 1},
lvpm_monsoon_bin='bin').config_dic
self.assertEqual(monsoon_config,
config_dic['devices']['default_device'][
'collectors']['Monsoon'])
class BitsServiceConfigWithKibblesTest(unittest.TestCase):
def test_bits_service_config_without_kibbles(self):
service_config = bits_service_config.BitsServiceConfig({})
self.assertFalse(service_config.has_kibbles)
def test_bits_service_config_with_kibbles_but_no_vm_files(self):
service_config = bits_service_config.BitsServiceConfig({'Kibbles': [
{'board': 'BOARD', 'connector': 'CONNECTOR', 'serial': 'SERIAL'}]},
kibble_bin='bin',
kibble_board_file='file.board')
self.assertFalse(service_config.has_virtual_metrics_file)
def test_bits_service_config_with_kibbles_and_vm_files(self):
service_config = bits_service_config.BitsServiceConfig({'Kibbles': [
{'board': 'BOARD', 'connector': 'CONNECTOR', 'serial': 'SERIAL'}]},
kibble_bin='bin',
kibble_board_file='file.board',
virtual_metrics_file='some_file.vm')
config_dic = service_config.config_dic
self.assertTrue(service_config.has_virtual_metrics_file)
self.assertIn('some_file.vm',
config_dic['devices']['default_device']['vm_files'])
def test_bits_service_config_with_kibbles(self):
service_config = bits_service_config.BitsServiceConfig({'Kibbles': [
{'board': 'BOARD', 'connector': 'CONNECTOR', 'serial': 'SERIAL'}]},
kibble_bin='bin',
kibble_board_file='file.board')
config_dic = service_config.config_dic
self.assertTrue(service_config.has_kibbles)
self.assertIn('BOARD',
config_dic['devices']['default_device']['collectors'])
boards_config = bits_service_config._BitsKibblesConfig([
{'board': 'BOARD', 'connector': 'CONNECTOR', 'serial': 'SERIAL'}],
kibble_bin='bin', kibble_board_file='file.board').boards_configs
self.assertEqual(boards_config['BOARD'],
config_dic['devices']['default_device'][
'collectors']['BOARD'])
def test_kibbles_get_grouped_by_board(self):
boards_config = bits_service_config._BitsKibblesConfig([
{'board': 'BOARD1', 'connector': 'A', 'serial': 'SERIAL1'},
{'board': 'BOARD2', 'connector': 'B', 'serial': 'SERIAL2'},
{'board': 'BOARD2', 'connector': 'C', 'serial': 'SERIAL3'}],
kibble_bin='bin',
kibble_board_file='file.board').boards_configs
self.assertIn('BOARD1', boards_config)
board1 = boards_config['BOARD1']
self.assertEqual(1, len(board1['attached_kibbles']))
self.assertIn('SERIAL1', board1['attached_kibbles'])
self.assertIn('BOARD2', boards_config)
board2 = boards_config['BOARD2']
self.assertEqual(2, len(board2['attached_kibbles']))
self.assertIn('SERIAL2', board2['attached_kibbles'])
self.assertIn('SERIAL3', board2['attached_kibbles'])
def test_kibble_config_type_is_kibblecollector(self):
board_config = bits_service_config._BitsKibblesConfig([
{'board': 'BOARD', 'connector': 'CONNECTOR', 'serial': 'SERIAL'}],
kibble_bin='bin',
kibble_board_file='file.board').boards_configs['BOARD']
self.assertEqual('kibblecollector', board_config['type'])
if __name__ == '__main__':
unittest.main()