Add "regcode check" to check reg codes.
BUG=chrome-os-partner:27661
TEST=Manual on device with valid and invalid codes
Change-Id: I22a645dcc7ab8ad1fd35d88826f2a922acdfbe7a
Reviewed-on: https://chromium-review.googlesource.com/195719
Tested-by: Jon Salz <jsalz@chromium.org>
Reviewed-by: Oscar (Ang) Pan <oscarpan@google.com>
Reviewed-by: Ricky Liang <jcliang@chromium.org>
Commit-Queue: Jon Salz <jsalz@chromium.org>
diff --git a/py/tools/regcode.py b/py/tools/regcode.py
index 41dae95..d7a60e9 100755
--- a/py/tools/regcode.py
+++ b/py/tools/regcode.py
@@ -9,14 +9,18 @@
import binascii
+import logging
import random
import sys
import factory_common # pylint: disable=W0611
from cros.factory.hacked_argparse import CmdArg, Command, ParseCmdline
from cros.factory.proto import reg_code_pb2
+from cros.factory.system import vpd
from cros.factory.test import registration_codes
+from cros.factory.test import utils
from cros.factory.test.registration_codes import RegistrationCode
+from cros.factory.tools.build_board import BuildBoard
@Command('decode',
@@ -78,7 +82,56 @@
print encoded_string
+@Command(
+ 'check',
+ CmdArg(
+ '--unique-code', '-u', metavar='UNIQUE_CODE',
+ help='Unique/user code to check (default: ubind_attribute RW VPD value)'),
+ CmdArg(
+ '--group-code', '-g', metavar='GROUP_CODE',
+ help='Group code to check (default: gbind_attribute RW VPD value)'),
+ CmdArg(
+ '--board', '-b', metavar='BOARD',
+ help='Board to check (default: from .default_board or lsb-release)'))
+def Check(options):
+ if not options.board:
+ options.board = BuildBoard().short_name
+ logging.info('Device name: %s', options.board)
+
+ rw_vpd = None
+ success = True
+
+ for code_type, vpd_attribute, code in (
+ (RegistrationCode.Type.UNIQUE_CODE,
+ 'ubind_attribute', options.unique_code),
+ (RegistrationCode.Type.GROUP_CODE,
+ 'gbind_attribute', options.group_code)):
+
+ if not code:
+ if rw_vpd is None:
+ if utils.in_chroot():
+ sys.stderr.write('error: cannot read VPD from chroot; use -u/-g\n')
+ sys.exit(1)
+
+ rw_vpd = vpd.rw.GetAll()
+ code = rw_vpd.get(vpd_attribute)
+ if not code:
+ sys.stderr.write('error: %s is not present in RW VPD\n' %
+ vpd_attribute)
+ sys.exit(1)
+
+ try:
+ registration_codes.CheckRegistrationCode(code, code_type, options.board)
+ logging.info('%s: success', code_type)
+ except registration_codes.RegistrationCodeException as e:
+ success = False
+ logging.error('%s: failed: %s', code_type, str(e))
+
+ sys.exit(0 if success else 1)
+
+
def main():
+ logging.basicConfig(level=logging.INFO)
options = ParseCmdline('Registration code tool.')
options.command(options)