paygen_payload_lib: use binary mode in more places
There's a few APIs in here that read binary data, so make sure we
use mode='b' for them. This is also enough to get the tests passing
under Python 3, so add it to the list.
BUG=chromium:997354
TEST=`./run_tests` passes
Change-Id: Ib27fe0586a261b5d2a8ed011803241c92f42d4ff
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1851185
Reviewed-by: Amin Hassani <ahassani@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
diff --git a/lib/paygen/paygen_payload_lib.py b/lib/paygen/paygen_payload_lib.py
index 4fe9367..07b0414 100644
--- a/lib/paygen/paygen_payload_lib.py
+++ b/lib/paygen/paygen_payload_lib.py
@@ -554,8 +554,8 @@
self._RunGeneratorCmd(cmd)
- return (osutils.ReadFile(self.payload_hash_file),
- osutils.ReadFile(self.metadata_hash_file))
+ return (osutils.ReadFile(self.payload_hash_file, mode='rb'),
+ osutils.ReadFile(self.metadata_hash_file, mode='rb'))
def _GenerateSignerResultsError(self, format_str, *args):
"""Helper for reporting errors with signer results."""
@@ -673,7 +673,7 @@
encoded_signature = base64.b64encode(signatures[0])
- with open(self.metadata_signature_file, 'w+') as f:
+ with open(self.metadata_signature_file, 'w+b') as f:
f.write(encoded_signature)
def GetPayloadPropertiesMap(self, payload_path):
@@ -726,7 +726,7 @@
# Add the public key if it exists.
if self._public_key:
props_map['public_key'] = base64.b64encode(
- osutils.ReadFile(self._public_key))
+ osutils.ReadFile(self._public_key, mode='rb')).decode('utf-8')
# We need the metadata size later for payload verification. Just grab it
# from the properties file.
diff --git a/lib/paygen/paygen_payload_lib_unittest.py b/lib/paygen/paygen_payload_lib_unittest.py
index 31451a3..0357ef8 100644
--- a/lib/paygen/paygen_payload_lib_unittest.py
+++ b/lib/paygen/paygen_payload_lib_unittest.py
@@ -523,10 +523,11 @@
# Stub out the required functions.
run_mock = self.PatchObject(paygen_payload_lib.PaygenPayload,
'_RunGeneratorCmd')
- read_mock = self.PatchObject(osutils, 'ReadFile', return_value='')
+ osutils.WriteFile(gen.payload_hash_file, 'payload')
+ osutils.WriteFile(gen.metadata_hash_file, 'hash')
# Run the test.
- self.assertEqual(gen._GenerateHashes(), ('', ''))
+ self.assertEqual(gen._GenerateHashes(), (b'payload', b'hash'))
# Check the expected function calls.
cmd = ['delta_generator',
@@ -534,13 +535,11 @@
'--signature_size=256',
partial_mock.HasString('--out_hash_file='),
partial_mock.HasString('--out_metadata_hash_file=')]
- read_mock.assert_any_call(gen.payload_hash_file)
- read_mock.assert_any_call(gen.metadata_hash_file)
run_mock.assert_called_once_with(cmd)
def testSignHashes(self):
"""Test _SignHashes."""
- hashes = ('foo', 'bar')
+ hashes = (b'foo', b'bar')
signatures = (('0' * 256,), ('1' * 256,))
gen = self._GetStdGenerator(work_dir='/work')
@@ -595,7 +594,7 @@
def testStoreMetadataSignatures(self):
"""Test how we store metadata signatures."""
gen = self._GetStdGenerator(payload=self.delta_payload)
- metadata_signatures = ('1' * 256,)
+ metadata_signatures = (b'1' * 256,)
encoded_metadata_signature = (
'MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMT'
'ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx'
@@ -606,8 +605,8 @@
gen._StoreMetadataSignatures(metadata_signatures)
- with open(gen.metadata_signature_file, 'rb') as f:
- self.assertEqual(f.read(), encoded_metadata_signature)
+ self.assertEqual(osutils.ReadFile(gen.metadata_signature_file),
+ encoded_metadata_signature)
def testVerifyPayloadDelta(self):
"""Test _VerifyPayload with delta payload."""
diff --git a/scripts/run_tests.py b/scripts/run_tests.py
index ed4e2d1..0f266ae 100644
--- a/scripts/run_tests.py
+++ b/scripts/run_tests.py
@@ -205,6 +205,7 @@
'lib/path_util_unittest',
'lib/paygen/gslock_unittest',
'lib/paygen/partition_lib_unittest',
+ 'lib/paygen/paygen_payload_lib_unittest',
'lib/paygen/paygen_stateful_payload_lib_unittest',
'lib/paygen/urilib_unittest',
'lib/paygen/utils_unittest',