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

Commit a0f55ee9 authored by Tao Bao's avatar Tao Bao Committed by Gerrit Code Review
Browse files

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

parents 35ee1898 17e4e616
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


+19 −5
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#

import os
import subprocess
import tempfile
import time
import unittest
@@ -402,6 +403,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()

@@ -479,17 +483,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 CommonUtilsTest(unittest.TestCase):