blob: b861b411ac43a68bc550347d718d9ad4c6e3a0fb [file] [log] [blame]
# Copyright 2019 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os.path
import unittest
from unittest import mock
from signing import model
from signing.test_config import TestConfig
def _get_identity_hash(i):
if i == '[IDENTITY]':
return 'identity'
raise
class TestCodeSignedProduct(unittest.TestCase):
def test_requirements_string_identifier(self):
product = model.CodeSignedProduct('path/binary', 'binary')
self.assertEqual('', product.requirements_string(TestConfig()))
def test_requirements_no_identifier(self):
product = model.CodeSignedProduct(
'path/binary', 'binary', identifier_requirement=False)
self.assertEqual('', product.requirements_string(TestConfig()))
def test_requirements_string_ad_hoc(self):
config = TestConfig(identity='-')
product = model.CodeSignedProduct('path/binary', 'binary')
self.assertEqual('', product.requirements_string(config))
product = model.CodeSignedProduct(
'path/binary', 'binary', requirements='req')
self.assertEqual('', product.requirements_string(config))
def test_requirements_product_requirement(self):
product = model.CodeSignedProduct(
'path/binary', 'binary', requirements='and another requirement')
self.assertEqual(
'designated => identifier "binary" and another requirement',
product.requirements_string(TestConfig()))
def test_requirements_config_requirement(self):
class RequirementConfig(TestConfig):
@property
def codesign_requirements_basic(self):
return 'and config requirement'
product = model.CodeSignedProduct(
'path/binary', 'binary', requirements='and another requirement')
self.assertEqual(
'designated => identifier "binary" and another requirement and config requirement',
product.requirements_string(RequirementConfig()))
self.assertEqual(
'', product.requirements_string(RequirementConfig(identity='-')))
@mock.patch('signing.model._get_identity_hash', _get_identity_hash)
class TestDistribution(unittest.TestCase):
def test_no_options(self):
base_config = TestConfig()
config = model.Distribution().to_config(base_config)
self.assertEqual(base_config, config.base_config)
self.assertEqual(base_config.app_product, config.app_product)
self.assertEqual(base_config.base_bundle_id, config.base_bundle_id)
self.assertEqual('provisiontest.identity',
config.provisioning_profile_basename)
self.assertEqual(base_config.packaging_basename,
config.packaging_basename)
def test_channel_no_customize(self):
base_config = TestConfig()
config = model.Distribution(
channel='Beta', app_name_fragment='Beta').to_config(base_config)
self.assertEqual(base_config.app_product, config.app_product)
self.assertEqual(base_config.product, config.product)
self.assertEqual(base_config.base_bundle_id, config.base_bundle_id)
self.assertEqual('provisiontest.identity',
config.provisioning_profile_basename)
self.assertEqual(base_config.packaging_basename,
config.packaging_basename)
def test_channel_customize(self):
base_config = TestConfig()
config = model.Distribution(
channel='beta',
app_name_fragment='Beta',
product_dirname='beta',
creator_code='beta',
channel_customize=True).to_config(base_config)
self.assertEqual('App Product Beta', config.app_product)
self.assertEqual(base_config.product, config.product)
self.assertEqual('test.signing.bundle_id.beta', config.base_bundle_id)
self.assertEqual('provisiontest_Beta.identity',
config.provisioning_profile_basename)
self.assertEqual('AppProductBeta-99.0.9999.99',
config.packaging_basename)
def test_packaging_basename_no_channel(self):
base_config = TestConfig()
config = model.Distribution(
packaging_name_fragment='Canary').to_config(base_config)
self.assertEqual(base_config, config.base_config)
self.assertEqual(base_config.app_product, config.app_product)
self.assertEqual(base_config.base_bundle_id, config.base_bundle_id)
self.assertEqual('provisiontest.identity',
config.provisioning_profile_basename)
self.assertEqual('AppProduct-99.0.9999.99-Canary',
config.packaging_basename)
def test_packaging_basename_channel(self):
dist = model.Distribution(
channel='dev',
app_name_fragment='Dev',
packaging_name_fragment='Dev',
product_dirname='dev',
creator_code='dev ',
channel_customize=True)
config = dist.to_config(TestConfig())
self.assertEqual('App Product Dev', config.app_product)
self.assertEqual('Product', config.product)
self.assertEqual('test.signing.bundle_id.dev', config.base_bundle_id)
self.assertEqual('provisiontest_Dev.identity',
config.provisioning_profile_basename)
self.assertEqual('AppProductDev-99.0.9999.99-Dev',
config.packaging_basename)
class TestPaths(unittest.TestCase):
def test_construct(self):
paths = model.Paths('[INPUT]', '/[OUTPUT]', '[WORK]')
self.assertEqual(os.path.abspath('[INPUT]'), paths.input)
self.assertEqual('/[OUTPUT]', paths.output)
self.assertEqual(os.path.abspath('[WORK]'), paths.work)
def test_packaging_dir(self):
paths = model.Paths('/[INPUT]', '/[OUTPUT]', '/[WORK]')
packaging_dir = paths.packaging_dir(TestConfig())
self.assertEqual('/[INPUT]/Product Packaging', packaging_dir)
def test_replace_work(self):
paths = model.Paths('/[INPUT]', '/[OUTPUT]', '/[WORK]')
self.assertEqual('/[WORK]', paths.work)
paths2 = paths.replace_work('{WORK2}')
self.assertEqual('/[WORK]', paths.work)
self.assertEqual(os.path.abspath('{WORK2}'), paths2.work)
class TestPick(unittest.TestCase):
def test_config(self):
config = TestConfig()
actual = model.pick(config, ['identity', 'app_product', ' missing '])
expected = {'identity': '[IDENTITY]', 'app_product': 'App Product'}
self.assertEqual(actual, expected)
def test_dict(self):
d = {'a': 1, 'b': 2, 'c': 3}
actual = model.pick(d, ['c', 'q'])
expected = {'c': 3}
self.assertEqual(actual, expected)