blob: ed9afd5c5906ba70613ad588d915107bb1f3e19c [file] [log] [blame]
# 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.
"""Writes a subset device data to the RW VPD.
Data is all written as strings."""
import unittest
import factory_common # pylint: disable=unused-import
from cros.factory.device import device_utils
from cros.factory.test.i18n import test_ui as i18n_test_ui
from cros.factory.test import shopfloor
from cros.factory.test import test_ui
from cros.factory.test import ui_templates
from cros.factory.utils.arg_utils import Arg
_MSG_WRITING_VPD = lambda vpd_section: i18n_test_ui.MakeI18nLabel(
'Writing device data to {vpd_section} VPD...',
vpd_section=vpd_section.upper())
class CallShopfloor(unittest.TestCase):
ARGS = [
Arg('device_data_keys', list,
('List of keys for device_data we want to write into RW_VPD.'
'Each key is a tuple of (prefix, key) meaning that the pair '
'(prefix + key, value) should be added into RW_VPD if there is '
'a pair (key, value) in device_data.')),
Arg('vpd_section', str,
'It should be rw or ro which means RW_VPD or RO_VPD to write.',
default='rw', optional=True),
]
def setUp(self):
self.dut = device_utils.CreateDUTInterface()
def runTest(self):
if self.args.vpd_section not in ['ro', 'rw']:
self.fail('Invalid vpd_section:% r, should be %r or %r.' %
(self.args.vpd_section, 'ro', 'rw'))
ui = test_ui.UI()
template = ui_templates.OneSection(ui)
template.SetState(_MSG_WRITING_VPD(self.args.vpd_section))
device_data = shopfloor.GetDeviceData()
data_to_write = {}
for prefix, key in self.args.device_data_keys:
data_to_write[prefix + key] = device_data.get(key)
missing_keys = [k for k, v in data_to_write.iteritems() if v is None]
if missing_keys:
self.fail('Missing device data keys: %r' % sorted(missing_keys))
vpd = self.dut.vpd
getattr(vpd, self.args.vpd_section).Update(
dict((k, str(v)) for k, v in data_to_write.iteritems()))