blob: 493ee61e2530baee3ba39d4920a7ea13b49789ce [file] [log] [blame] [edit]
#!/usr/bin/env python
# Copyright 2014 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unittest for UmpireClient."""
import logging
import mox
import unittest
import factory_common # pylint: disable=unused-import
from cros.factory.device import types
from cros.factory.umpire.client import umpire_client
class MockSystemInfo(object):
"""Mocked SystemInfo class."""
def __init__(self, serial_number, mlb_serial_number, firmware_version,
ec_version, pd_version, stage, eth_macs, wlan0_mac,
factory_image_version, release_image_version,
hwid_database_version, toolkit_version):
self.serial_number = serial_number
self.mlb_serial_number = mlb_serial_number
self.firmware_version = firmware_version
self.ec_version = ec_version
self.pd_version = pd_version
self.stage = stage
self.eth_macs = eth_macs
self.wlan0_mac = wlan0_mac
self.factory_image_version = factory_image_version
self.release_image_version = release_image_version
self.hwid_database_version = hwid_database_version
self.toolkit_version = toolkit_version
mock_system_info_1 = MockSystemInfo(
serial_number='DEV001',
mlb_serial_number='MLB001',
firmware_version='fw_001',
ec_version='ec_001',
pd_version='pd_001',
stage='SMT',
eth_macs={'eth0': 'EE:EE:EE:EE:EE:00', 'eth1': 'EE:EE:EE:EE:EE:01'},
wlan0_mac='FF:FF:FF:FF:FF:00',
factory_image_version='factory_001',
release_image_version='release_001',
hwid_database_version='hwid_001',
toolkit_version='ver_001')
# Uses a different serial_number than mock_system_info_1.
mock_system_info_2 = MockSystemInfo(
serial_number='DEV002',
mlb_serial_number='MLB001',
firmware_version='fw_001',
ec_version='ec_001',
pd_version='pd_001',
stage='SMT',
eth_macs={'eth0': 'EE:EE:EE:EE:EE:00', 'eth1': 'EE:EE:EE:EE:EE:01'},
wlan0_mac='FF:FF:FF:FF:FF:00',
factory_image_version='factory_001',
release_image_version='release_001',
hwid_database_version='hwid_001',
toolkit_version='ver_001')
# Uses a different eth0 MAC address than mock_system_info_2.
mock_system_info_3 = MockSystemInfo(
serial_number='DEV002',
mlb_serial_number='MLB001',
firmware_version='fw_001',
ec_version='ec_001',
pd_version='pd_001',
stage='SMT',
eth_macs={'eth0': 'EE:EE:EE:EE:EE:02', 'eth1': 'EE:EE:EE:EE:EE:01'},
wlan0_mac='FF:FF:FF:FF:FF:00',
factory_image_version='factory_001',
release_image_version='release_001',
hwid_database_version='hwid_001',
toolkit_version='ver_001')
# Uses a different factory_image than mock_system_info_3.
mock_system_info_4 = MockSystemInfo(
serial_number='DEV002',
mlb_serial_number='MLB001',
firmware_version='fw_001',
ec_version='ec_001',
pd_version='pd_001',
stage='SMT',
eth_macs={'eth0': 'EE:EE:EE:EE:EE:02', 'eth1': 'EE:EE:EE:EE:EE:01'},
wlan0_mac='FF:FF:FF:FF:FF:00',
factory_image_version='factory_002',
release_image_version='release_001',
hwid_database_version='hwid_001',
toolkit_version='ver_001')
# The output string of X-Umpire-DUT for mock_system_info_1.
# Note that the keys are sorted.
OUTPUT_X_UMPIRE_DUT = (
'ec=ec_001; firmware=fw_001; '
'mac.eth0=EE:EE:EE:EE:EE:00; mac.eth1=EE:EE:EE:EE:EE:01; '
'mac.wlan0=FF:FF:FF:FF:FF:00; mlb_sn=MLB001; pd=pd_001; '
'sn=DEV001; stage=SMT')
# The return value of GetDUTInfoComponents.
OUTPUT_GET_UPDATE_DUT_INFO = {
'x_umpire_dut': {
'sn': 'DEV001',
'mlb_sn': 'MLB001',
'firmware': 'fw_001',
'ec': 'ec_001',
'pd': 'pd_001',
'mac.eth0': 'EE:EE:EE:EE:EE:00',
'mac.eth1': 'EE:EE:EE:EE:EE:01',
'mac.wlan0': 'FF:FF:FF:FF:FF:00',
'stage': 'SMT'},
'components': {
'rootfs_test': 'factory_001',
'rootfs_release': 'release_001',
'firmware_ec': 'ec_001',
'firmware_bios': 'fw_001',
'firmware_pd': 'pd_001',
'netboot_firmware': None,
'hwid': 'hwid_001',
'device_factory_toolkit': 'ver_001'}}
class UmpireClientInfoTest(unittest.TestCase):
"""Tests UmpireClient"""
def setUp(self):
"""Setups mox and mock umpire_client_info used in tests."""
self.mox = mox.Mox()
self.dut = self.mox.CreateMock(types.DeviceInterface)
def tearDown(self):
"""Clean up for each test."""
self.mox.UnsetStubs()
def testGetXUmpireDUT(self):
"""Inits an UmpireClientInfo and checks GetXUmpireDUT."""
self.dut.info = mock_system_info_1
self.mox.ReplayAll()
client_info = umpire_client.UmpireClientInfo(self.dut)
output_x_umpire_dut = client_info.GetXUmpireDUT()
self.assertEqual(output_x_umpire_dut, OUTPUT_X_UMPIRE_DUT)
self.mox.VerifyAll()
logging.debug('Done')
def testGetDUTInfoComponents(self):
"""Inits an UmpireClientInfo and checks GetDUTInfoComponents."""
self.maxDiff = 2048
self.dut.info = mock_system_info_1
self.mox.ReplayAll()
client_info = umpire_client.UmpireClientInfo(self.dut)
output_get_update_dut_info = client_info.GetDUTInfoComponents()
self.assertEqual(output_get_update_dut_info, OUTPUT_GET_UPDATE_DUT_INFO)
self.mox.VerifyAll()
logging.debug('Done')
def testUpdate(self):
"""Inits an UmpireClientInfo and checks Update."""
self.mox.ReplayAll()
self.dut.info = mock_system_info_1
client_info = umpire_client.UmpireClientInfo(self.dut)
self.dut.info = mock_system_info_2
self.assertEqual(client_info.Update(), True)
self.dut.info = mock_system_info_2
self.assertEqual(client_info.Update(), False)
self.dut.info = mock_system_info_3
self.assertEqual(client_info.Update(), True)
self.dut.info = mock_system_info_4
self.assertEqual(client_info.Update(), False)
self.mox.VerifyAll()
logging.debug('Done')
if __name__ == '__main__':
logging.basicConfig(
format='%(asctime)s:%(levelname)s:%(filename)s:%(lineno)d:%(message)s',
level=logging.DEBUG)
unittest.main()