blob: 123b357e9229088093c4dc89e49a88bbbb147842 [file] [log] [blame]
#!/usr/bin/python
# Copyright (c) 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.
from __future__ import print_function
import collections
import mox
import os
import unittest
import factory_common # pylint: disable=unused-import
from cros.factory.device.boards import chromeos
from cros.factory.device.vpd import Partition
from cros.factory.test.factory import FactoryTestFailure
from cros.factory.test.factory_task import FactoryTask
from cros.factory.test.pytests import vpd
from cros.factory.test import shopfloor
from cros.factory.test.ui_templates import OneSection
from cros.factory.utils.type_utils import LazyProperty
from cros.factory.utils.type_utils import Obj
# Legacy unique/group codes for testing.
LEGACY_UNIQUE_CODE = ('323232323232323232323232323232323232'
'323232323232323232323232323256850612')
LEGACY_GROUP_CODE = ('333333333333333333333333333333333333'
'33333333333333333333333333332dbecc73')
class VPDBrandingFieldsTest(unittest.TestCase):
def setUp(self):
self.test_case = vpd.VPDTest()
self.test_case.vpd = dict(ro={})
self.device_data = {}
self.mox = mox.Mox()
self.mox.StubOutWithMock(shopfloor, 'GetDeviceData')
def tearDown(self):
self.mox.VerifyAll()
self.mox.UnsetStubs()
def testFixed(self):
self.test_case.args = Obj(rlz_brand_code='ABCD', customization_id='FOO')
self.mox.ReplayAll()
self.test_case.ReadBrandingFields()
self.assertEquals(dict(rlz_brand_code='ABCD', customization_id='FOO'),
self.test_case.vpd['ro'])
def testBrandCodeOnly(self):
self.test_case.args = Obj(rlz_brand_code='ABCD', customization_id=None)
self.mox.ReplayAll()
self.test_case.ReadBrandingFields()
self.assertEquals(dict(rlz_brand_code='ABCD'), self.test_case.vpd['ro'])
def testConfigurationIdOnly(self):
self.test_case.args = Obj(rlz_brand_code=None, customization_id='FOO')
self.mox.ReplayAll()
self.test_case.ReadBrandingFields()
self.assertEquals(dict(customization_id='FOO'), self.test_case.vpd['ro'])
def testFromShopFloor(self):
self.test_case.args = Obj(rlz_brand_code=vpd.FROM_DEVICE_DATA,
customization_id=vpd.FROM_DEVICE_DATA)
shopfloor.GetDeviceData().AndReturn(dict(rlz_brand_code='ABCD',
customization_id='FOO-BAR'))
self.mox.ReplayAll()
self.test_case.ReadBrandingFields()
self.assertEquals(dict(rlz_brand_code='ABCD', customization_id='FOO-BAR'),
self.test_case.vpd['ro'])
def testBadBrandCode(self):
self.test_case.args = Obj(rlz_brand_code='ABCDx')
self.mox.ReplayAll()
self.assertRaisesRegexp(ValueError, 'Bad format for rlz_brand_code',
self.test_case.ReadBrandingFields)
def testBadConfigurationId(self):
self.test_case.args = Obj(rlz_brand_code=None, customization_id='FOO-BARx')
self.mox.ReplayAll()
self.assertRaisesRegexp(ValueError, 'Bad format for customization_id',
self.test_case.ReadBrandingFields)
class WriteVPDTaskTest(unittest.TestCase):
def setUp(self):
self.test_case = vpd.VPDTest()
self.test_case.vpd = dict(ro={}, rw={})
self.test_case.args = collections.namedtuple(
'args', 'override_registration_codes_device')(None)
self.write_vpd_task = vpd.WriteVPDTask(self.test_case)
self.mox = mox.Mox()
self.test_case.dut = chromeos.ChromeOSBoard()
self.vpd_ro = self.mox.CreateMock(Partition)
self.vpd_rw = self.mox.CreateMock(Partition)
LazyProperty.Override(self.test_case.dut.vpd, 'ro', self.vpd_ro)
LazyProperty.Override(self.test_case.dut.vpd, 'rw', self.vpd_rw)
def tearDown(self):
self.mox.VerifyAll()
self.mox.UnsetStubs()
def testGoodLegacyUserGroupCode(self):
self.test_case.registration_code_map = dict(user=LEGACY_UNIQUE_CODE,
group=LEGACY_GROUP_CODE)
# Stub out self.test.template.SetState().
self.test_case.template = self.mox.CreateMock(OneSection)
self.mox.StubOutWithMock(self.test_case.template, 'SetState')
self.test_case.template.SetState(mox.IsA(basestring)).AndReturn(0)
self.test_case.template.SetState(mox.IsA(basestring),
append=True).AndReturn(0)
# Stub out BuildBoard().short_name. Actually this is not required for
# legacy code, we just use 'x86-generic' to pass the unit test.
src = os.path.join(os.environ['CROS_WORKON_SRCROOT'], 'src')
default_board_path = os.path.join(src, 'scripts', '.default_board')
with open(default_board_path, 'w') as f:
f.write('x86-generic')
# Stub out vpd.Update()
self.vpd_ro.Update({}).AndReturn(0)
self.vpd_rw.Update({}).AndReturn(0)
self.vpd_rw.Update({'ubind_attribute': LEGACY_UNIQUE_CODE,
'gbind_attribute': LEGACY_GROUP_CODE}).AndReturn(0)
# Stub out self.Pass().
self.mox.StubOutWithMock(FactoryTask, 'Pass')
FactoryTask.Pass().AndReturn(0) # pylint: disable=E1120
self.mox.ReplayAll()
self.write_vpd_task.Run()
def testTheSameLegacyUserGroupCodeFailure(self):
self.test_case.registration_code_map = dict(user=LEGACY_UNIQUE_CODE,
group=LEGACY_UNIQUE_CODE)
# Stub out self.test.template.SetState().
self.test_case.template = self.mox.CreateMock(OneSection)
self.mox.StubOutWithMock(self.test_case.template, 'SetState')
self.test_case.template.SetState(mox.IsA(basestring)).AndReturn(0)
self.test_case.template.SetState(mox.IsA(basestring),
append=True).AndReturn(0)
# Stub out vpd.Update()
self.vpd_ro.Update({}).AndReturn(0)
self.vpd_rw.Update({}).AndReturn(0)
self.mox.ReplayAll()
self.assertRaisesRegexp(FactoryTestFailure,
'^user code and group code should not be the same$',
self.write_vpd_task.Run)
if __name__ == '__main__':
unittest.main()