blob: c63fc31e678f687d6c6213e6a2d2bcec1c84b036 [file] [log] [blame] [edit]
#!/usr/bin/python -u
# -*- coding: utf-8 -*-
#
# Copyright (c) 2012 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.
import factory_common # pylint: disable=W0611
import os
import unittest2
from cros.factory.hwid import Database, HWIDException
from cros.factory.hwid.decoder import EncodedStringToBinaryString
from cros.factory.hwid.decoder import BinaryStringToBOM, Decode
_TEST_DATA_PATH = os.path.join(os.path.dirname(__file__), 'testdata')
class DecoderTest(unittest2.TestCase):
def setUp(self):
self.database = Database.LoadFile(os.path.join(_TEST_DATA_PATH,
'test_db.yaml'))
self.expected_components_from_db = {
'audio_codec': [('codec_1', 'Codec 1', None),
('hdmi_1', 'HDMI 1', None)],
'battery': [('battery_huge', 'Battery Li-ion 10000000', None)],
'bluetooth': [('bluetooth_0', '0123:abcd 0001', None)],
'camera': [('camera_0', '4567:abcd Camera', None)],
'cellular': [(None, None, None)],
'chipset': [('chipset_0', 'cdef:abcd', None)],
'cpu': [('cpu_5', 'CPU @ 2.80GHz [4 cores]', None)],
'display_panel': [('display_panel_0', 'FOO:0123 [1440x900]', None)],
'dram': [('dram_0', '0|2048|DDR3-800,DDR3-1066,DDR3-1333,DDR3-1600 '
'1|2048|DDR3-800,DDR3-1066,DDR3-1333,DDR3-1600', None)],
'ec_flash_chip': [('ec_flash_chip_0', 'EC Flash Chip', None)],
'embedded_controller': [('embedded_controller_0', 'Embedded Controller',
None)],
'flash_chip': [('flash_chip_0', 'Flash Chip', None)],
'hash_gbb': [('hash_gbb_0', 'gv2#aaaaaaaaaaaaaaaaaaaaaaaaaaaa'
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', None)],
'key_recovery': [('key_recovery_0', 'kv3#bbbbbbbbbbbbbbbbbbb'
'bbbbbbbbbbbbbbbbbbbbb', None)],
'key_root': [('key_root_0', 'kv3#cccccccccccccccccc'
'cccccccccccccccccccccc', None)],
'keyboard': [('keyboard_us', 'xkb:us::eng', None)],
'ro_ec_firmware': [('ro_ec_firmware_0',
'ev2#dddddddddddddddddddddddddddddddddddd'
'dddddddddddddddddddddddddddd#chromebook', None)],
'ro_main_firmware': [('ro_main_firmware_0',
'mv2#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'
'eeeeeeeeeeeeeeeeeeeeeeeeeee#chromebook', None)],
'storage': [('storage_0', '16G SSD #123456', None)],
'touchpad': [('touchpad_0', 'TouchPad', None)],
'tpm': [('tpm_0', '12340000:1.2.3', None)],
'usb_hosts': [('usb_host_0', '8086:0000', None),
('usb_host_1', '8086:0001', None)],
'vga': [('vga_0', '8086:0002', None)],
'wireless': [('wireless_0', '3210:abcd', None)]}
def testEncodedStringToBinaryString(self):
self.assertEquals('00000111010000010100',
EncodedStringToBinaryString(
self.database, 'CHROMEBOOK A5AU-LU'))
self.assertEquals('00101111010000010100',
EncodedStringToBinaryString(
self.database, 'CHROMEBOOK F5AU-ON'))
self.assertEquals('10000111010000010100',
EncodedStringToBinaryString(
self.database, 'CHROMEBOOK Q5AU-XL'))
def testBinaryStringToBOM(self):
result = open(os.path.join(_TEST_DATA_PATH,
'test_probe_result.yaml'), 'r').read()
reference_bom = self.database.ProbeResultToBOM(result)
reference_bom.encoded_fields['camera'] = 0
reference_bom.encoded_fields['display_panel'] = 0
bom = BinaryStringToBOM(self.database, '00000111010000010100')
self.assertEquals(reference_bom.board, bom.board)
self.assertEquals(reference_bom.encoding_pattern_index,
bom.encoding_pattern_index)
self.assertEquals(reference_bom.image_id, bom.image_id)
self.assertEquals(reference_bom.encoded_fields, bom.encoded_fields)
self.assertEquals(self.expected_components_from_db, bom.components)
self.assertEquals(5, BinaryStringToBOM(
self.database, '00101111010000010100').image_id)
self.assertEquals(1, BinaryStringToBOM(
self.database, '10000111010000010100').encoding_pattern_index)
self.assertRaisesRegexp(
HWIDException, r"Invalid encoded field index: {'cpu': 6}",
BinaryStringToBOM, self.database, '00000111000010010100')
def testDecode(self):
result = open(os.path.join(_TEST_DATA_PATH,
'test_probe_result.yaml'), 'r').read()
reference_bom = self.database.ProbeResultToBOM(result)
reference_bom.encoded_fields['camera'] = 0
reference_bom.encoded_fields['display_panel'] = 0
hwid = Decode(self.database, 'CHROMEBOOK A5AU-LU')
self.assertEquals('00000111010000010100', hwid.binary_string)
self.assertEquals('CHROMEBOOK A5AU-LU', hwid.encoded_string)
self.assertEquals(reference_bom.board, hwid.bom.board)
self.assertEquals(reference_bom.encoding_pattern_index,
hwid.bom.encoding_pattern_index)
self.assertEquals(reference_bom.image_id, hwid.bom.image_id)
self.assertEquals(reference_bom.encoded_fields, hwid.bom.encoded_fields)
self.assertEquals(self.expected_components_from_db, hwid.bom.components)
if __name__ == '__main__':
unittest2.main()