Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 17e4e616 authored by Tao Bao's avatar Tao Bao
Browse files

releasetools: Add a testcase for common.ParseCertificate().

Also minor clean up to the function, to suppress the following lint
warning.
R:1813, 2: Redefinition of cert type from list to unicode (redefined-variable-type)

Test: python -m unittest -v test_common.CommonApkUtilsTest
Change-Id: Ib4b1dfa8b19e505fc70684b648efc36171c73bbf
parent 9452d84b
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -1800,17 +1800,23 @@ def GetTypeAndDevice(mount_point, info):


def ParseCertificate(data):
  """Parse a PEM-format certificate."""
  cert = []
  """Parses and converts a PEM-encoded certificate into DER-encoded.

  This gives the same result as `openssl x509 -in <filename> -outform DER`.

  Returns:
    The decoded certificate string.
  """
  cert_buffer = []
  save = False
  for line in data.split("\n"):
    if "--END CERTIFICATE--" in line:
      break
    if save:
      cert.append(line)
      cert_buffer.append(line)
    if "--BEGIN CERTIFICATE--" in line:
      save = True
  cert = "".join(cert).decode('base64')
  cert = "".join(cert_buffer).decode('base64')
  return cert


+20 −5
Original line number Diff line number Diff line
@@ -13,7 +13,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#

import os
import subprocess
import tempfile
import time
import unittest
@@ -400,6 +402,9 @@ class CommonApkUtilsTest(unittest.TestCase):
      'Compressed4.apk' : 'certs/compressed4',
  }

  def setUp(self):
    self.testdata_dir = test_utils.get_testdata_dir()

  def tearDown(self):
    common.Cleanup()

@@ -477,17 +482,27 @@ class CommonApkUtilsTest(unittest.TestCase):
      self.assertRaises(ValueError, common.ReadApkCerts, input_zip)

  def test_ExtractPublicKey(self):
    testdata_dir = test_utils.get_testdata_dir()
    cert = os.path.join(testdata_dir, 'testkey.x509.pem')
    pubkey = os.path.join(testdata_dir, 'testkey.pubkey.pem')
    cert = os.path.join(self.testdata_dir, 'testkey.x509.pem')
    pubkey = os.path.join(self.testdata_dir, 'testkey.pubkey.pem')
    with open(pubkey, 'rb') as pubkey_fp:
      self.assertEqual(pubkey_fp.read(), common.ExtractPublicKey(cert))

  def test_ExtractPublicKey_invalidInput(self):
    testdata_dir = test_utils.get_testdata_dir()
    wrong_input = os.path.join(testdata_dir, 'testkey.pk8')
    wrong_input = os.path.join(self.testdata_dir, 'testkey.pk8')
    self.assertRaises(AssertionError, common.ExtractPublicKey, wrong_input)

  def test_ParseCertificate(self):
    cert = os.path.join(self.testdata_dir, 'testkey.x509.pem')

    cmd = ['openssl', 'x509', '-in', cert, '-outform', 'DER']
    proc = common.Run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    expected, _ = proc.communicate()
    self.assertEqual(0, proc.returncode)

    with open(cert) as cert_fp:
      actual = common.ParseCertificate(cert_fp.read())
    self.assertEqual(expected, actual)


class InstallRecoveryScriptFormatTest(unittest.TestCase):
  """Checks the format of install-recovery.sh.