def test_true_false_not_resolved(self): bindings = YamlBindings() bindings.import_dict({'indirect': '${t}'}) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertFalse(validator.verify_true_false('indirect')) self.assertEqual('Missing "indirect".', validator.errors[0])
def test_load_key_not_found(self): bindings = YamlBindings() bindings.import_dict({'field': '${injected.value}', 'injected': {}}) with self.assertRaises(KeyError): bindings['unknown'] self.assertEqual(None, bindings.get('unknown', None))
def populate_google_yml(content): credentials = {'project': '', 'jsonPath': ''} google_dict = {'enabled': False, 'defaultRegion': 'us-central1', 'defaultZone': 'us-central1-f',} google_dict['primaryCredentials'] = credentials if is_google_instance(): zone = os.path.basename( check_fetch(GOOGLE_INSTANCE_METADATA_URL + '/zone', google=True).content) google_dict['enabled'] = 'true' google_dict['defaultRegion'] = zone[:-2] google_dict['defaultZone'] = zone credentials['project'] = check_fetch( GOOGLE_METADATA_URL + '/project/project-id', google=True).content bindings = YamlBindings() bindings.import_dict({'providers': {'google': google_dict}}) content = bindings.transform_yaml_source(content, 'providers.google.enabled') content = bindings.transform_yaml_source( content, 'providers.google.defaultRegion') content = bindings.transform_yaml_source( content, 'providers.google.defaultZone') content = bindings.transform_yaml_source( content, 'providers.google.primaryCredentials.project') content = bindings.transform_yaml_source( content, 'providers.google.primaryCredentials.jsonPath') return content
def test_load_transitive_indirect(self): bindings = YamlBindings() bindings.import_dict({'field': '${injected.value}', 'found': 'FOUND'}) bindings.import_dict({'injected': {'value': '${found}'}}) self.assertEqual('FOUND', bindings.get('field')) self.assertEqual('FOUND', bindings['field']) self.assertEqual('FOUND', bindings.get('field', None))
def test_update_field_union_child(self): bindings = YamlBindings() bindings.import_dict({'parent1': {'a': 'A'}, 'parent2': {'x': 'X'}}) bindings.import_dict({'parent1': {'b': 'B'}}) self.assertEqual({'parent1': {'a': 'A', 'b': 'B'}, 'parent2': {'x': 'X'}}, bindings.map)
def test_transform_ok(self): bindings = YamlBindings() bindings.import_dict({ 'a': { 'b': { 'space': 'WithSpace', 'empty': 'Empty' } }, 'x': { 'unique': True } }) template = """ a: b: space: {space} empty:{empty} unique: b: space: A empty: """ source = template.format(space='SPACE', empty='') expect = template.format(space='WithSpace', empty=' Empty') got = source for key in ['a.b.space', 'a.b.empty']: got = bindings.transform_yaml_source(got, key) self.assertEqual(expect, bindings.transform_yaml_source(expect, 'bogus')) self.assertEqual(expect, got)
def test_true_false_not_resolved(self): bindings = YamlBindings() bindings.import_dict({'indirect': '${t}'}) validator = ValidateConfig(configurator=Configurator( bindings=bindings)) self.assertFalse(validator.verify_true_false('indirect')) self.assertEqual('Missing "indirect".', validator.errors[0])
def test_update_field_union_child(self): bindings = YamlBindings() bindings.import_dict({'parent1': {'a': 'A'}, 'parent2': {'x': 'X'}}) bindings.import_dict({'parent1': {'b': 'B'}}) self.assertEqual({'parent1': {'a': 'A', 'b': 'B'}, 'parent2': {'x': 'X'}}, bindings.map)
def test_load_key_not_found(self): bindings = YamlBindings() bindings.import_dict({'field': '${injected.value}', 'injected': {}}) with self.assertRaises(KeyError): bindings['unknown'] self.assertEqual(None, bindings.get('unknown', None))
def populate_google_yml(content): credentials = {'project': '', 'jsonPath': ''} google_dict = { 'enabled': False, 'defaultRegion': 'us-central1', 'defaultZone': 'us-central1-f', } google_dict['primaryCredentials'] = credentials if is_google_instance(): zone = os.path.basename( check_fetch(GOOGLE_INSTANCE_METADATA_URL + '/zone', google=True).content) google_dict['enabled'] = 'true' google_dict['defaultRegion'] = zone[:-2] google_dict['defaultZone'] = zone credentials['project'] = check_fetch(GOOGLE_METADATA_URL + '/project/project-id', google=True).content bindings = YamlBindings() bindings.import_dict({'providers': {'google': google_dict}}) content = bindings.transform_yaml_source(content, 'providers.google.enabled') content = bindings.transform_yaml_source(content, 'providers.google.defaultRegion') content = bindings.transform_yaml_source(content, 'providers.google.defaultZone') content = bindings.transform_yaml_source( content, 'providers.google.primaryCredentials.project') content = bindings.transform_yaml_source( content, 'providers.google.primaryCredentials.jsonPath') return content
def test_transform_ok(self): bindings = YamlBindings() bindings.import_dict({'a': {'b': { 'space': 'WithSpace', 'nospace': 'WithoutSpace', 'empty': 'Empty'}}, 'x' : {'unique': True}}) template = """ a: b: space: {space} nospace:{nospace} empty:{empty} unique: b: space: A nospace:B empty: """ source = template.format(space='SPACE', nospace='NOSPACE', empty='') expect = template.format(space='WithSpace', nospace=' WithoutSpace', empty=' Empty') got = source for key in [ 'a.b.space', 'a.b.nospace', 'a.b.empty' ]: got = bindings.transform_yaml_source(got, key) self.assertEqual(expect, bindings.transform_yaml_source(expect, 'bogus')) self.assertEqual(expect, got)
def test_load_transitive_indirect(self): bindings = YamlBindings() bindings.import_dict({'field': '${injected.value}', 'found': 'FOUND'}) bindings.import_dict({'injected': {'value': '${found}'}}) self.assertEqual('FOUND', bindings.get('field')) self.assertEqual('FOUND', bindings['field']) self.assertEqual('FOUND', bindings.get('field', None))
def test_update_field_replace_child(self): bindings = YamlBindings() bindings.import_dict({'parent': {'a': 'A', 'b': 'B', 'c': 'C'}}) bindings.import_dict({'parent': {'a': 'X', 'b': 'Y', 'z': 'Z'}}) self.assertEqual({'parent': { 'a': 'X', 'b': 'Y', 'z': 'Z', 'c': 'C' }}, bindings.map)
def test_true_false_good(self): bindings = YamlBindings() bindings.import_dict( {'t': True, 'f':False, 'indirect':'${t}', 'default': '${x:true}'}) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertTrue(validator.verify_true_false('t')) self.assertTrue(validator.verify_true_false('f')) self.assertTrue(validator.verify_true_false('indirect')) self.assertTrue(validator.verify_true_false('default'))
def test_load_dict(self): expect = {'a': 'A', 'b': 0, 'c': ['A','B'], 'd': {'child': {'grandchild': 'x'}}, 'e': None} bindings = YamlBindings() bindings.import_dict(expect) self.assertEqual(expect, bindings.map)
def test_cyclic_reference(self): bindings = YamlBindings() bindings.import_dict({ 'field': '${injected.value}', 'injected': { 'value': '${field}' } }) with self.assertRaises(ValueError): bindings.get('field')
def test_true_false_good(self): bindings = YamlBindings() bindings.import_dict( {'t': True, 'f':False, 'indirect':'${t}', 'default': '${x:true}'}) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertTrue(validator.verify_true_false('t')) self.assertTrue(validator.verify_true_false('f')) self.assertTrue(validator.verify_true_false('indirect')) self.assertTrue(validator.verify_true_false('default'))
def test_load_dict(self): expect = {'a': 'A', 'b': 0, 'c': ['A','B'], 'd': {'child': {'grandchild': 'x'}}, 'e': None} bindings = YamlBindings() bindings.import_dict(expect) self.assertEqual(expect, bindings.map)
def test_transform_fail(self): bindings = YamlBindings() bindings.import_dict({'a': {'b': { 'child': 'Hello, World!'}}, 'x' : {'unique': True}}) yaml = """ a: b: child: Hello """ with self.assertRaises(ValueError): bindings.transform_yaml_source(yaml, 'x.unique')
def host_test_helper(self, tests, valid, required=False): bindings = YamlBindings() bindings.import_dict(tests) validator = ValidateConfig(configurator=Configurator( bindings=bindings)) for key, value in tests.items(): msg = '"{key}" was {valid}'.format( key=key, valid='invalid' if valid else 'valid') self.assertEqual(valid, validator.verify_host(key, required), msg) return validator
def test_update_deck_settings(self): temp_sourcedir = tempfile.mkdtemp() temp_targetdir = tempfile.mkdtemp() template = """ preamble // BEGIN reconfigure_spinnaker // var gateUrl = ${{services.gate.baseUrl}}; {gate_url_value} // var bakeryBaseUrl = ${{services.bakery.baseUrl}}; {bakery_url_value} // END reconfigure_spinnaker // var gateUrl = ${{services.gate.baseUrl}}; stuff here is left along. """ # This was originally just a comment, which was preserved. bakery_url_assignment = ("var bakeryBaseUrl = 'BAKERY_BASE_URL';" "\n# comment") # This was originally a different let statement that was removed. gate_url_assignment = "var gateUrl = 'GATE_BASE_URL';" bindings = YamlBindings() bindings.import_dict({ 'services': { 'gate': { 'baseUrl': 'GATE_BASE_URL' }, 'bakery': { 'baseUrl': 'BAKERY_BASE_URL' }, } }) installation = InstallationParameters installation.INSTALLED_CONFIG_DIR = temp_sourcedir installation.DECK_INSTALL_DIR = temp_targetdir configurator = Configurator(installation_parameters=installation, bindings=bindings) try: source_settings_path = os.path.join(temp_sourcedir, 'settings.js') target_settings_path = os.path.join(temp_targetdir, 'settings.js') with open(source_settings_path, 'w') as f: f.write( template.format(gate_url_value="var gateUrl='old';", bakery_url_value='# comment')) configurator.update_deck_settings() with open(target_settings_path, 'r') as f: got = f.read() expect = template.format(gate_url_value=gate_url_assignment, bakery_url_value=bakery_url_assignment) self.assertEqual(expect, got) finally: shutil.rmtree(temp_sourcedir) shutil.rmtree(temp_targetdir)
def host_test_helper(self, tests, valid, required=False): bindings = YamlBindings() bindings.import_dict(tests) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) for key, value in tests.items(): msg = '"{key}" was {valid}'.format( key=key, valid='invalid' if valid else 'valid') self.assertEqual(valid, validator.verify_host(key, required), msg) return validator
def test_transform_fail(self): bindings = YamlBindings() bindings.import_dict({'a': {'b': { 'child': 'Hello, World!'}}, 'x' : {'unique': True}}) yaml = """ a: b: child: Hello """ with self.assertRaises(ValueError): bindings.transform_yaml_source(yaml, 'x.unique')
def test_verify_at_least_one_provider_enabled_good(self): bindings = YamlBindings() bindings.import_dict({ 'providers': { 'aws': { 'enabled': False }, 'google': {'enabled': False }, 'another': {'enabled': True } }, }) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertTrue(validator.verify_at_least_one_provider_enabled())
def test_verify_at_least_one_provider_enabled_good(self): bindings = YamlBindings() bindings.import_dict({ 'providers': { 'aws': { 'enabled': False }, 'google': {'enabled': False }, 'another': {'enabled': True } }, }) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertTrue(validator.verify_at_least_one_provider_enabled())
def test_verify_at_least_one_provider_enabled_bad(self): bindings = YamlBindings() bindings.import_dict({ 'providers': { 'aws': { 'enabled': False }, 'google': {'enabled': False } }, 'services': {'test': { 'enabled': True }} }) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertFalse(validator.verify_at_least_one_provider_enabled()) self.assertEqual('None of the providers are enabled.', validator.errors[0])
def baseUrl_test_helper(self, tests, valid, scheme_optional): bindings = YamlBindings() bindings.import_dict(tests) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) for key, value in tests.items(): msg = '"{key}" was {valid}'.format( key=key, valid='invalid' if valid else 'valid') self.assertEqual( valid, validator.verify_baseUrl(key, True, scheme_optional=scheme_optional), msg)
def baseUrl_test_helper(self, tests, valid, scheme_optional): bindings = YamlBindings() bindings.import_dict(tests) validator = ValidateConfig(configurator=Configurator( bindings=bindings)) for key, value in tests.items(): msg = '"{key}" was {valid}'.format( key=key, valid='invalid' if valid else 'valid') self.assertEqual( valid, validator.verify_baseUrl(key, True, scheme_optional=scheme_optional), msg)
def test_verify_at_least_one_provider_enabled_bad(self): bindings = YamlBindings() bindings.import_dict({ 'providers': { 'aws': { 'enabled': False }, 'google': {'enabled': False } }, 'services': {'test': { 'enabled': True }} }) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertFalse(validator.verify_at_least_one_provider_enabled()) self.assertEqual('None of the providers are enabled.', validator.errors[0])
def test_update_deck_settings(self): temp_sourcedir = tempfile.mkdtemp() temp_targetdir = tempfile.mkdtemp() template = """ preamble // BEGIN reconfigure_spinnaker // var gateUrl = ${{services.gate.baseUrl}}; {gate_url_value} // var bakeryBaseUrl = ${{services.bakery.baseUrl}}; {bakery_url_value} // END reconfigure_spinnaker // var gateUrl = ${{services.gate.baseUrl}}; stuff here is left along. """ # This was originally just a comment, which was preserved. bakery_url_assignment = ("var bakeryBaseUrl = 'BAKERY_BASE_URL';" "\n# comment") # This was originally a different let statement that was removed. gate_url_assignment = "var gateUrl = 'GATE_BASE_URL';" bindings = YamlBindings() bindings.import_dict({ 'services': { 'gate': { 'baseUrl': 'GATE_BASE_URL' }, 'bakery': { 'baseUrl': 'BAKERY_BASE_URL' }, } }) installation = InstallationParameters installation.INSTALLED_CONFIG_DIR = temp_sourcedir installation.DECK_INSTALL_DIR = temp_targetdir configurator = Configurator(installation_parameters=installation, bindings=bindings) try: source_settings_path = os.path.join(temp_sourcedir, 'settings.js') target_settings_path = os.path.join(temp_targetdir, 'settings.js') with open(source_settings_path, 'w') as f: f.write(template.format(gate_url_value="var gateUrl='old';", bakery_url_value='# comment')) configurator.update_deck_settings() with open(target_settings_path, 'r') as f: got = f.read() expect = template.format(gate_url_value=gate_url_assignment, bakery_url_value=bakery_url_assignment) self.assertEqual(expect, got) finally: shutil.rmtree(temp_sourcedir) shutil.rmtree(temp_targetdir)
def test_load_default_bool(self): bindings = YamlBindings() bindings.import_dict({'field': '${undefined:True}'}) self.assertEqual(True, bindings.get('field')) bindings.import_dict({'field': '${undefined:true}'}) self.assertEqual(True, bindings.get('field')) bindings.import_dict({'field': '${undefined:false}'}) self.assertEqual(False, bindings.get('field')) bindings.import_dict({'field': '${undefined:False}'}) self.assertEqual(False, bindings.get('field'))
def test_load_default_bool(self): bindings = YamlBindings() bindings.import_dict({'field': '${undefined:True}'}) self.assertEqual(True, bindings.get('field')) bindings.import_dict({'field': '${undefined:true}'}) self.assertEqual(True, bindings.get('field')) bindings.import_dict({'field': '${undefined:false}'}) self.assertEqual(False, bindings.get('field')) bindings.import_dict({'field': '${undefined:False}'}) self.assertEqual(False, bindings.get('field'))
def test_true_false_bad(self): bindings = YamlBindings() bindings.import_dict( {'t': 'true', 'f':'false', 'indirect':'${t}', 'default': '${x:0}'}) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertFalse(validator.verify_true_false('t')) self.assertFalse(validator.verify_true_false('f')) self.assertFalse(validator.verify_true_false('indirect')) self.assertFalse(validator.verify_true_false('default')) self.assertEqual(4, len(validator.errors)) self.assertEqual(0, len(validator.warnings)) self.assertEqual( ["t='true' is not valid. Must be boolean true or false.", "f='false' is not valid. Must be boolean true or false.", "indirect='true' is not valid. Must be boolean true or false.", "default=0 is not valid. Must be boolean true or false."], validator.errors)
def populate_aws_yml(content): aws_dict = {'enabled': False} if is_aws_instance(): zone = (check_fetch(AWS_METADATA_URL + '/placement/availability-zone') .content) aws_dict['enabled'] = 'true' aws_dict['defaultRegion'] = zone[:-1] elif os.path.exists(os.path.join(os.environ['HOME'], '.aws/credentials')): aws_dict['enabled'] = 'true' aws_dict['defaultRegion'] = 'us-east-1' bindings = YamlBindings() bindings.import_dict({'providers': {'aws': aws_dict}}) content = bindings.transform_yaml_source(content, 'providers.aws.enabled') content = bindings.transform_yaml_source(content, 'providers.aws.defaultRegion') return content
def test_true_false_bad(self): bindings = YamlBindings() bindings.import_dict( {'t': 'true', 'f':'false', 'indirect':'${t}', 'default': '${x:0}'}) validator = ValidateConfig( configurator=Configurator(bindings=bindings)) self.assertFalse(validator.verify_true_false('t')) self.assertFalse(validator.verify_true_false('f')) self.assertFalse(validator.verify_true_false('indirect')) self.assertFalse(validator.verify_true_false('default')) self.assertEqual(4, len(validator.errors)) self.assertEqual(0, len(validator.warnings)) self.assertEqual( ["t='true' is not valid. Must be boolean true or false.", "f='false' is not valid. Must be boolean true or false.", "indirect='true' is not valid. Must be boolean true or false.", "default=0 is not valid. Must be boolean true or false."], validator.errors)
def populate_aws_yml(content): aws_dict = {'enabled': False} if is_aws_instance(): zone = (check_fetch(AWS_METADATA_URL + '/placement/availability-zone').content) aws_dict['enabled'] = 'true' aws_dict['defaultRegion'] = zone[:-1] elif os.path.exists(os.path.join(os.environ['HOME'], '.aws/credentials')): aws_dict['enabled'] = 'true' aws_dict['defaultRegion'] = 'us-east-1' bindings = YamlBindings() bindings.import_dict({'providers': {'aws': aws_dict}}) content = bindings.transform_yaml_source(content, 'providers.aws.enabled') content = bindings.transform_yaml_source(content, 'providers.aws.defaultRegion') return content
def populate_google_yml(content): credentials = {'project': '', 'jsonPath': ''} google_dict = { 'enabled': False, 'defaultRegion': 'us-central1', 'defaultZone': 'us-central1-f', } google_dict['primaryCredentials'] = credentials front50_dict = {} if is_google_instance(): zone = os.path.basename( check_fetch(GOOGLE_INSTANCE_METADATA_URL + '/zone', google=True).content) google_dict['enabled'] = 'true' google_dict['defaultRegion'] = zone[:-2] google_dict['defaultZone'] = zone credentials['project'] = check_fetch(GOOGLE_METADATA_URL + '/project/project-id', google=True).content front50_dict['storage_bucket'] = '${{{env}:{default}}}'.format( env='SPINNAKER_DEFAULT_STORAGE_BUCKET', default=credentials['project'].replace(':', '-').replace('.', '-')) bindings = YamlBindings() bindings.import_dict({'providers': {'google': google_dict}}) bindings.import_dict({'services': {'front50': front50_dict}}) content = bindings.transform_yaml_source(content, 'providers.google.enabled') content = bindings.transform_yaml_source(content, 'providers.google.defaultRegion') content = bindings.transform_yaml_source(content, 'providers.google.defaultZone') content = bindings.transform_yaml_source( content, 'providers.google.primaryCredentials.project') content = bindings.transform_yaml_source( content, 'providers.google.primaryCredentials.jsonPath') content = bindings.transform_yaml_source( content, 'services.front50.storage_bucket') return content
def populate_google_yml(content): credentials = {'project': '', 'jsonPath': ''} google_dict = {'enabled': False, 'defaultRegion': 'us-central1', 'defaultZone': 'us-central1-f',} google_dict['primaryCredentials'] = credentials front50_dict = {} if is_google_instance(): zone = os.path.basename( check_fetch(GOOGLE_INSTANCE_METADATA_URL + '/zone', google=True).content) google_dict['enabled'] = 'true' google_dict['defaultRegion'] = zone[:-2] google_dict['defaultZone'] = zone credentials['project'] = check_fetch( GOOGLE_METADATA_URL + '/project/project-id', google=True).content front50_dict['storage_bucket'] = '${{{env}:{default}}}'.format( env='SPINNAKER_DEFAULT_STORAGE_BUCKET', default=credentials['project'].replace(':', '-').replace('.', '-')) bindings = YamlBindings() bindings.import_dict({'providers': {'google': google_dict}}) bindings.import_dict({'services': {'front50': front50_dict}}) content = bindings.transform_yaml_source(content, 'providers.google.enabled') content = bindings.transform_yaml_source( content, 'providers.google.defaultRegion') content = bindings.transform_yaml_source( content, 'providers.google.defaultZone') content = bindings.transform_yaml_source( content, 'providers.google.primaryCredentials.project') content = bindings.transform_yaml_source( content, 'providers.google.primaryCredentials.jsonPath') content = bindings.transform_yaml_source( content, 'services.front50.storage_bucket') return content
def test_load_default_int(self): bindings = YamlBindings() bindings.import_dict({'field': '${undefined:123}'}) self.assertEqual(123, bindings.get('field'))
def test_load_transitive(self): bindings = YamlBindings() bindings.import_dict({'field': '${injected.value}'}) bindings.import_dict({'injected': {'value': 'HELLO'}}) self.assertEqual('HELLO', bindings.get('field'))
def test_environ_int(self): os.environ['TEST_INT'] = '123' bindings = YamlBindings() bindings.import_dict({'field': '${TEST_INT}'}) self.assertEqual(123, bindings.get('field'))
def test_replace_bool(self): bindings = YamlBindings() bindings.import_dict({'a': True, 'container': {'b': False}}) self.assertEqual('This is True False or false', bindings.replace('This is ${a} ${container.b} or ${c:false}'))
def test_environ_int(self): os.environ['TEST_INT'] = '123' bindings = YamlBindings() bindings.import_dict({'field': '${TEST_INT}'}) self.assertEqual(123, bindings.get('field'))
def test_replace_bool(self): bindings = YamlBindings() bindings.import_dict({'a': True, 'container': {'b': False}}) self.assertEqual( 'This is True False or false', bindings.replace('This is ${a} ${container.b} or ${c:false}'))
def test_replace(self): bindings = YamlBindings() bindings.import_dict({'a': 'A', 'container': {'b': 'B'}}) self.assertEqual( 'This is A B or C', bindings.replace('This is ${a} ${container.b} or ${c:C}'))
def test_replace(self): bindings = YamlBindings() bindings.import_dict({'a': 'A', 'container': {'b': 'B'}}) self.assertEqual('This is A B or C', bindings.replace('This is ${a} ${container.b} or ${c:C}'))
def test_update_field_union(self): bindings = YamlBindings() bindings.import_dict({'a': 'A'}) bindings.import_dict({'b': 'B'}) self.assertEqual({'a': 'A', 'b': 'B'}, bindings.map)
def test_load_composite_value(self): bindings = YamlBindings() bindings.import_dict({'a': 'A', 'b':'B'}) bindings.import_string('test: ${a}/${b}') print str(bindings.map) self.assertEqual('A/B', bindings.get('test'))
def test_environ_bool(self): os.environ['TEST_BOOL'] = 'TRUE' bindings = YamlBindings() bindings.import_dict({'field': '${TEST_BOOL}'}) self.assertEqual(True, bindings.get('field'))
def test_cyclic_reference(self): bindings = YamlBindings() bindings.import_dict({'field': '${injected.value}', 'injected': {'value': '${field}'}}) with self.assertRaises(ValueError): bindings.get('field')
def test_replace_int(self): bindings = YamlBindings() bindings.import_dict({'a': 1, 'container': {'b': 2}}) self.assertEqual( 'This is 1 2 or 3', bindings.replace('This is ${a} ${container.b} or ${c:3}'))
def test_environ(self): os.environ['TEST_VARIABLE'] = 'TEST_VALUE' bindings = YamlBindings() bindings.import_dict({'field': '${TEST_VARIABLE}'}) self.assertEqual('TEST_VALUE', bindings.get('field'))
def test_load_transitive(self): bindings = YamlBindings() bindings.import_dict({'field': '${injected.value}'}) bindings.import_dict({'injected': {'value': 'HELLO'}}) self.assertEqual('HELLO', bindings.get('field'))
def test_environ_bool(self): os.environ['TEST_BOOL'] = 'TRUE' bindings = YamlBindings() bindings.import_dict({'field': '${TEST_BOOL}'}) self.assertEqual(True, bindings.get('field'))
def test_load_tail_not_found(self): bindings = YamlBindings() bindings.import_dict({'field': '${injected.value}', 'injected': {}}) self.assertEqual('${injected.value}', bindings.get('field'))
def test_load_default(self): bindings = YamlBindings() bindings.import_dict({'field': '${injected.value:HELLO}'}) self.assertEqual('HELLO', bindings.get('field'))
def test_load_default(self): bindings = YamlBindings() bindings.import_dict({'field': '${injected.value:HELLO}'}) self.assertEqual('HELLO', bindings.get('field'))
def test_load_default_int(self): bindings = YamlBindings() bindings.import_dict({'field': '${undefined:123}'}) self.assertEqual(123, bindings.get('field'))
def test_replace_int(self): bindings = YamlBindings() bindings.import_dict({'a': 1, 'container': {'b': 2}}) self.assertEqual('This is 1 2 or 3', bindings.replace('This is ${a} ${container.b} or ${c:3}'))
def test_environ(self): os.environ['TEST_VARIABLE'] = 'TEST_VALUE' bindings = YamlBindings() bindings.import_dict({'field': '${TEST_VARIABLE}'}) self.assertEqual('TEST_VALUE', bindings.get('field'))