def test_deep_merge_default_random_snippet(self): """merging a snippet of un-ignored garbage into the defaults ensures all projects get that new default, even if it's deeply nested""" snippet = {'defaults': {'foo': { 'bar': { 'baz': ['bup']}}}} project_data = project_files.project_data('dummy1', self.dummy_yaml, [snippet]) self.assertEqual(project_data['foo']['bar']['baz'][0], 'bup')
def test_deep_merge_default_random_snippet(self): """merging a snippet of un-ignored garbage into the defaults ensures all projects get that new default, even if it's deeply nested""" snippet = {'defaults': {'foo': { 'bar': { 'baz': ['bup']}}}} project_data = project_files.project_data('dummy1', self.dummy_yaml, [snippet]) self.assertEqual(project_data['foo']['bar']['baz'][0], 'bup')
def test_deep_merge_default_snippet2_project3(self): """merging a snippet into the defaults ensures all projects and their alternative configuration also get that new default, even if it's deeply nested""" snippet = {'defaults': {'aws': { 'rds': { 'subnets': ['subnet-baz']}}}} project_data = project_files.project_data('dummy3', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) self.assertEqual(project_data['aws-alt']['alt-config1']['rds']['subnets'][0], 'subnet-baz')
def test_deep_merge_default_snippet2_project3(self): """merging a snippet into the defaults ensures all projects and their alternative configuration also get that new default, even if it's deeply nested""" snippet = {'defaults': {'aws': { 'rds': { 'subnets': ['subnet-baz']}}}} project_data = project_files.project_data('dummy3', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) self.assertEqual(project_data['aws-alt']['alt-config1']['rds']['subnets'][0], 'subnet-baz')
def test_deep_merge_project_snippet(self): """merging a snippet into the defaults ensures all projects get that new default, even alternative configurations, even if it's deeply nested""" # dummy1 ordinarily has no RDS settings at all. # by updating the project settings, I expect it to now have the rds section with the overrides snippet = {'dummy1': {'aws': { 'rds': { 'subnets': ['subnet-baz']}}}} project_data = project_files.project_data('dummy1', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) self.assertEqual(project_data['aws']['rds']['subnets'][0], 'subnet-baz')
def test_deep_merge_project_snippet(self): """merging a snippet into the defaults ensures all projects get that new default, even alternative configurations, even if it's deeply nested""" # dummy1 ordinarily has no RDS settings at all. # by updating the project settings, I expect it to now have the rds section with the overrides snippet = {'dummy1': {'aws': { 'rds': { 'subnets': ['subnet-baz']}}}} project_data = project_files.project_data('dummy1', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) self.assertEqual(project_data['aws']['rds']['subnets'][0], 'subnet-baz')
def test_merge_default_snippet(self): "merging a snippet into the defaults ensures all projects get that new default" # all projects now get 999 cpus. perfectly sane requirement. snippet = {'defaults': {'vagrant': { 'cpus': 999}}} project_data = project_files.project_data('dummy1', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) # load up the expected fixture and switch the value ... expected_data = json.load(open(self.dummy1_config, 'r')) expected_data['vagrant']['cpus'] = 999 # ... then compare to actual self.assertEqual(project_data, expected_data)
def test_merge_default_snippet(self): "merging a snippet into the defaults ensures all projects get that new default" # all projects now get 999 cpus. perfectly sane requirement. snippet = {'defaults': {'vagrant': { 'cpus': 999}}} project_data = project_files.project_data('dummy1', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) # load up the expected fixture and switch the value ... expected_data = json.load(open(self.dummy1_config, 'r')) expected_data['vagrant']['cpus'] = 999 # ... then compare to actual self.assertEqual(project_data, expected_data)
def test_deep_merge_default_snippet_but_excluded(self): """merging a snippet into the defaults ensures all projects get that new default. snippet is ignored if project is excluding that section""" cases = [ {'defaults': {'aws': {'rds': {'subnets': ['subnet-baz']}}}}, {'defaults': {'aws': {'ext': {'size': 999}}}}, {'defaults': {'aws-alt': {'rds': {'storage': 999}}}}, {'defaults': {'aws-alt': {'ext': {'size': 999}}}}, ] for snippet in cases: project_data = project_files.project_data('dummy1', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) expected_data = json.load(open(self.dummy1_config, 'r')) # dummy1 project has no rds, ext or alt-aws configs using those. nothing should have changed self.assertEqual(project_data, expected_data)
def test_deep_merge_project_snippet_altconfig(self): """merging a snippet into the defaults ensures all projects get that new default, even alternative configurations, even if it's deeply nested""" # dummy3 only has no RDS settings in it's alt-config section # by updating the project settings, I expect it to now have the rds section with the overrides # and for the altconfigs to replicate that snippet = {'dummy3': {'aws': { 'rds': { 'subnets': ['subnet-baz']}}}} project_data = project_files.project_data('dummy3', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) self.assertEqual(project_data['aws']['rds']['subnets'][0], 'subnet-baz') self.assertEqual(project_data['aws-alt']['alt-config1']['rds']['subnets'][0], 'subnet-baz')
def test_deep_merge_default_snippet_but_excluded(self): """merging a snippet into the defaults ensures all projects get that new default. snippet is ignored if project is excluding that section""" cases = [ {'defaults': {'aws': {'rds': {'subnets': ['subnet-baz']}}}}, {'defaults': {'aws': {'ext': {'size': 999}}}}, {'defaults': {'aws-alt': {'rds': {'storage': 999}}}}, {'defaults': {'aws-alt': {'ext': {'size': 999}}}}, ] for snippet in cases: project_data = project_files.project_data('dummy1', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) expected_data = json.load(open(self.dummy1_config, 'r')) # dummy1 project has no rds, ext or alt-aws configs using those. nothing should have changed self.assertEqual(project_data, expected_data)
def test_deep_merge_project_snippet_altconfig(self): """merging a snippet into the defaults ensures all projects get that new default, even alternative configurations, even if it's deeply nested""" # dummy3 only has no RDS settings in it's alt-config section # by updating the project settings, I expect it to now have the rds section with the overrides # and for the altconfigs to replicate that snippet = {'dummy3': {'aws': { 'rds': { 'subnets': ['subnet-baz']}}}} project_data = project_files.project_data('dummy3', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) self.assertEqual(project_data['aws']['rds']['subnets'][0], 'subnet-baz') self.assertEqual(project_data['aws-alt']['alt-config1']['rds']['subnets'][0], 'subnet-baz')
def test_merge_multiple_default_snippets(self): """merging multiple overlapping snippets into the defaults ensures all projects get the new defaults""" # all projects now get 999 cpus. perfectly sane requirement. snippet = {'defaults': {'vagrant': { 'cpucap': 10, # to be overriden by the override 'cpus': 999}}} snippet2 = {'defaults': {'vagrant': { 'cpucap': 111}}} snippet_list = [snippet, snippet2] project_data = project_files.project_data('dummy1', self.dummy_yaml, snippet_list) project_data = utils.remove_ordereddict(project_data) expected_data = json.load(open(self.dummy1_config, 'r')) expected_data['vagrant']['cpus'] = 999 expected_data['vagrant']['cpucap'] = 111 self.assertEqual(project_data, expected_data)
def test_merge_multiple_default_snippets(self): """merging multiple overlapping snippets into the defaults ensures all projects get the new defaults""" # all projects now get 999 cpus. perfectly sane requirement. snippet = {'defaults': {'vagrant': { 'cpucap': 10, # to be overriden by the override 'cpus': 999}}} snippet2 = {'defaults': {'vagrant': { 'cpucap': 111}}} snippet_list = [snippet, snippet2] project_data = project_files.project_data('dummy1', self.dummy_yaml, snippet_list) project_data = utils.remove_ordereddict(project_data) expected_data = json.load(open(self.dummy1_config, 'r')) expected_data['vagrant']['cpus'] = 999 expected_data['vagrant']['cpucap'] = 111 self.assertEqual(project_data, expected_data)
def test_deep_merge_default_snippet_altconfig(self): """merging a snippet into the defaults ensures all projects get that new default, even alternative configurations, even if it's deeply nested""" # dummy2 project DOES NOT provide any subnet overrides. it should inherit this override snippet = {'defaults': {'aws': { 'rds': { 'subnets': ['subnet-baz']}}}} project_data = project_files.project_data('dummy2', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) self.assertEqual(project_data['aws']['rds']['subnets'][0], 'subnet-baz') self.assertEqual(project_data['aws-alt']['alt-config1']['rds']['subnets'][0], 'subnet-baz') self.assertEqual(project_data['aws-alt']['fresh']['rds']['subnets'][0], 'subnet-baz') # load up the expected fixture and switch the value ... expected_data = json.load(open(self.dummy2_config, 'r')) expected_data['aws']['rds']['subnets'] = ['subnet-baz'] expected_data['aws-alt']['alt-config1']['rds']['subnets'] = ['subnet-baz'] expected_data['aws-alt']['fresh']['rds']['subnets'] = ['subnet-baz'] # ... then compare to actual self.assertEqual(expected_data, project_data)
def test_deep_merge_default_snippet_altconfig(self): """merging a snippet into the defaults ensures all projects get that new default, even alternative configurations, even if it's deeply nested""" # dummy2 project DOES NOT provide any subnet overrides. it should inherit this override snippet = {'defaults': {'aws': { 'rds': { 'subnets': ['subnet-baz']}}}} project_data = project_files.project_data('dummy2', self.dummy_yaml, [snippet]) project_data = utils.remove_ordereddict(project_data) self.assertEqual(project_data['aws']['rds']['subnets'][0], 'subnet-baz') self.assertEqual(project_data['aws-alt']['alt-config1']['rds']['subnets'][0], 'subnet-baz') self.assertEqual(project_data['aws-alt']['fresh']['rds']['subnets'][0], 'subnet-baz') # load up the expected fixture and switch the value ... expected_data = json.load(open(self.dummy2_config, 'r')) expected_data['aws']['rds']['subnets'] = ['subnet-baz'] expected_data['aws-alt']['alt-config1']['rds']['subnets'] = ['subnet-baz'] expected_data['aws-alt']['fresh']['rds']['subnets'] = ['subnet-baz'] # ... then compare to actual self.assertEqual(expected_data, project_data)
def test_dummy2_aws_alt_should_not_have_incomplete_defaults_for_cloudfront(self): dummy2 = files.project_data('dummy2', self.project_file) self.assertIn('rds', dummy2['aws-alt']['alt-config1'].keys()) self.assertNotIn('elb', dummy2['aws-alt']['alt-config1'].keys()) self.assertNotIn('cloudfront', dummy2['aws-alt']['alt-config1'].keys())
def test_dummy2_aws_alt_should_not_have_incomplete_defaults_for_cloudfront(self): dummy2 = files.project_data('dummy2', self.project_file) self.assertIn('rds', list(dummy2['aws-alt']['alt-config1'].keys())) self.assertNotIn('elb', list(dummy2['aws-alt']['alt-config1'].keys())) self.assertNotIn('cloudfront', list(dummy2['aws-alt']['alt-config1'].keys()))