hwid: Temporary hack for R26 AU checksum check.
This should be removed after R27.
BUG=None
TEST=make lint test
Change-Id: I825821bac3bfd13d3ab86dee5e5e1670fa9097ec
Reviewed-on: https://gerrit.chromium.org/gerrit/44725
Reviewed-by: Shuo-Peng Liao <deanliao@chromium.org>
Commit-Queue: Ricky Liang <jcliang@chromium.org>
Tested-by: Ricky Liang <jcliang@chromium.org>
diff --git a/py/hwid/__init__.py b/py/hwid/__init__.py
index 439f942..bd298a1 100644
--- a/py/hwid/__init__.py
+++ b/py/hwid/__init__.py
@@ -250,7 +250,10 @@
...
]
"""
- _HWID_FORMAT = re.compile(r'^([A-Z0-9]+) ((?:[A-Z2-7]{4}-)*[A-Z2-7]{1,4})$')
+ # TODO(jcliang): Change back in R27.
+ #_HWID_FORMAT = re.compile(r'^([A-Z0-9]+) ((?:[A-Z2-7]{4}-)*[A-Z2-7]{1,4})$')
+ _HWID_FORMAT = re.compile(
+ r'^([A-Z0-9]+) ((?:[A-Z2-7]{4}-)*[A-Z2-7]{1,4}) ([0-9]+)$')
def __init__(self, board, encoding_patterns, image_id, pattern,
encoded_fields, probeable_components, components,
@@ -491,7 +494,10 @@
HWIDException if verification fails.
"""
try:
- board, bom_checksum = Database._HWID_FORMAT.findall(encoded_string)[0]
+ # TODO(jcliang): Change back in R27.
+ #board, bom_checksum = Database._HWID_FORMAT.findall(encoded_string)[0]
+ board, bom_checksum, dummy_checksum = (
+ Database._HWID_FORMAT.findall(encoded_string)[0])
except IndexError:
raise HWIDException('Invalid HWID string format: %r' % encoded_string)
if len(bom_checksum) < 2:
@@ -502,6 +508,9 @@
raise HWIDException('Invalid board name: %r' % board)
# Verify the checksum
stripped = encoded_string.replace('-', '')
+ # TODO(jcliang): Change back in R27.
+ # Remove dummy checksum.
+ stripped = stripped[:-5]
hwid = stripped[:-2]
checksum = stripped[-2:]
if not checksum == Base32.Checksum(hwid):
diff --git a/py/hwid/__init___unittest.py b/py/hwid/__init___unittest.py
index 1aca44c..b04bebd 100755
--- a/py/hwid/__init___unittest.py
+++ b/py/hwid/__init___unittest.py
@@ -54,7 +54,9 @@
hwid.binary_string = original_value
original_value = hwid.encoded_string
- hwid.encoded_string = 'ASDF QWER-TY'
+ # TODO(jcliang): Change back in R27.
+ #hwid.encoded_string = 'ASDF QWER-TY'
+ hwid.encoded_string = 'ASDF QWER-TY 1111'
self.assertRaisesRegexp(
HWIDException, r'Invalid board name', hwid.VerifySelf)
hwid.encoded_string = original_value
@@ -256,19 +258,27 @@
def testVerifyEncodedString(self):
self.assertEquals(
- None, self.database.VerifyEncodedString('CHROMEBOOK AW3L-M7I7-V'))
+ # TODO(jcliang): Change back in R27.
+ #None, self.database.VerifyEncodedString('CHROMEBOOK AW3L-M7I7-V'))
+ None, self.database.VerifyEncodedString('CHROMEBOOK AW3L-M7I7-V 1111'))
self.assertRaisesRegexp(
HWIDException, r'Invalid HWID string format',
self.database.VerifyEncodedString, 'AW3L-M7I5-4')
self.assertRaisesRegexp(
HWIDException, r'Length of encoded string .* is less than 2 characters',
- self.database.VerifyEncodedString, 'FOO A')
+ # TODO(jcliang): Change back in R27.
+ #self.database.VerifyEncodedString, 'FOO A')
+ self.database.VerifyEncodedString, 'FOO A 1111')
self.assertRaisesRegexp(
HWIDException, r'Invalid board name', self.database.VerifyEncodedString,
- 'FOO AW3L-M7IK-W')
+ # TODO(jcliang): Change back in R27.
+ #'FOO AW3L-M7IK-W')
+ 'FOO AW3L-M7IK-W 1111')
self.assertRaisesRegexp(
HWIDException, r'Checksum of .* mismatch',
- self.database.VerifyEncodedString, 'CHROMEBOOK AW3L-M7IA-B')
+ # TODO(jcliang): Change back in R27.
+ #self.database.VerifyEncodedString, 'CHROMEBOOK AW3L-M7IA-B')
+ self.database.VerifyEncodedString, 'CHROMEBOOK AW3L-M7IA-B 1111')
def testVerifyBOM(self):
result = open(os.path.join(_TEST_DATA_PATH,
diff --git a/py/hwid/decoder.py b/py/hwid/decoder.py
index c408dca..754496a 100644
--- a/py/hwid/decoder.py
+++ b/py/hwid/decoder.py
@@ -70,7 +70,9 @@
A binary string.
"""
database.VerifyEncodedString(encoded_string)
- _, hwid_string = encoded_string.split(' ')
+ # TODO(jcliang): Change back in R27.
+ #_, hwid_string = encoded_string.split(' ')
+ _, hwid_string, _ = encoded_string.split(' ')
hwid_string = hwid_string.replace('-', '')
# Remove the 10-bit checksum at tail
hwid_string = hwid_string[0:-2]
diff --git a/py/hwid/decoder_unittest.py b/py/hwid/decoder_unittest.py
index 000d50e..5487156 100755
--- a/py/hwid/decoder_unittest.py
+++ b/py/hwid/decoder_unittest.py
@@ -60,7 +60,9 @@
def testEncodedStringToBinaryString(self):
self.assertEquals('00000111010000010100',
EncodedStringToBinaryString(
- self.database, 'CHROMEBOOK A5AU-LU'))
+ # TODO(jcliang): Change back in R27.
+ #self.database, 'CHROMEBOOK A5AU-LU'))
+ self.database, 'CHROMEBOOK A5AU-LU 3324'))
def testBinaryStringToBOM(self):
result = open(os.path.join(_TEST_DATA_PATH,
@@ -78,9 +80,13 @@
result = open(os.path.join(_TEST_DATA_PATH,
'test_probe_result.yaml'), 'r').read()
reference_bom = self.database.ProbeResultToBOM(result)
- hwid = Decode(self.database, 'CHROMEBOOK A5AU-LU')
+ # TODO(jcliang): Change back in R27.
+ #hwid = Decode(self.database, 'CHROMEBOOK A5AU-LU')
+ hwid = Decode(self.database, 'CHROMEBOOK A5AU-LU 3324')
self.assertEquals('00000111010000010100', hwid.binary_string)
- self.assertEquals('CHROMEBOOK A5AU-LU', hwid.encoded_string)
+ # TODO(jcliang): Change back in R27.
+ #self.assertEquals('CHROMEBOOK A5AU-LU', hwid.encoded_string)
+ self.assertEquals('CHROMEBOOK A5AU-LU 3324', hwid.encoded_string)
self.assertEquals(reference_bom.board, hwid.bom.board)
self.assertEquals(reference_bom.encoding_pattern_index,
hwid.bom.encoding_pattern_index)
diff --git a/py/hwid/encoder.py b/py/hwid/encoder.py
index 266a10e..0558504 100644
--- a/py/hwid/encoder.py
+++ b/py/hwid/encoder.py
@@ -6,7 +6,7 @@
# found in the LICENSE file.
"""Implementation of HWID v3 encoder."""
-
+from zlib import crc32
import factory_common # pylint: disable=W0611
from cros.factory.hwid import HWID
@@ -60,7 +60,11 @@
# Insert dashes to increase readibility
b32_string = (
'-'.join([b32_string[i:i + 4] for i in xrange(0, len(b32_string), 4)]))
- return database.board.upper() + ' ' + b32_string
+ # TODO(jcliang): Change back into R27.
+ def DummyChecksum(text):
+ return ('%04u' % (crc32(text) & 0xffffffffL))[-4:]
+ result = database.board.upper() + ' ' + b32_string
+ return result + ' ' + DummyChecksum(result)
def Encode(database, bom):
diff --git a/py/hwid/encoder_unittest.py b/py/hwid/encoder_unittest.py
index 28e4948..1a6e2f5 100755
--- a/py/hwid/encoder_unittest.py
+++ b/py/hwid/encoder_unittest.py
@@ -29,7 +29,9 @@
'00000111010000010100', BOMToBinaryString(self.database, bom))
def testBinaryStringToEncodedString(self):
- self.assertEquals('CHROMEBOOK A5AU-LU',
+ # TODO(jcliang): Change back in R27.
+ #self.assertEquals('CHROMEBOOK A5AU-LU',
+ self.assertEquals('CHROMEBOOK A5AU-LU 3324',
BinaryStringToEncodedString(
self.database, '00000111010000010100'))
@@ -39,7 +41,9 @@
bom = self.database.ProbeResultToBOM(result)
hwid = Encode(self.database, bom)
self.assertEquals('00000111010000010100', hwid.binary_string)
- self.assertEquals('CHROMEBOOK A5AU-LU', hwid.encoded_string)
+ # TODO(jcliang): Change back in R27.
+ #self.assertEquals('CHROMEBOOK A5AU-LU', hwid.encoded_string)
+ self.assertEquals('CHROMEBOOK A5AU-LU 3324', hwid.encoded_string)
if __name__ == '__main__':