def test_get_stack_order_raises_exception_on_cyclic_dependency(self): stacks = { 'app1': StackConfig({ 'template-url': 'horst.yml', 'parameters': { 'a': '|Ref|app2.id' } }), 'app2': StackConfig({ 'template-url': 'horst.yml', 'parameters': { 'a': '|Ref|app3.id' } }), 'app3': StackConfig({ 'template-url': 'horst.yml', 'parameters': { 'a': '|Ref|app1.id' } }) } with self.assertRaises(CyclicDependencyException): DependencyResolver.get_stack_order(stacks)
def test_get_stack_order_raises_exception_on_cyclic_dependency(self): stacks = { 'app1': StackConfig({'template-url': 'horst.yml', 'parameters': {'a': '|Ref|app2.id'}}), 'app2': StackConfig({'template-url': 'horst.yml', 'parameters': {'a': '|Ref|app3.id'}}), 'app3': StackConfig({'template-url': 'horst.yml', 'parameters': {'a': '|Ref|app1.id'}}) } with self.assertRaises(CyclicDependencyException): DependencyResolver.get_stack_order(stacks)
def test_get_stack_order_raises_exception_on_cyclic_dependency(self): stacks = { "app1": StackConfig({"template-url": "horst.yml", "parameters": {"a": "|Ref|app2.id"}}), "app2": StackConfig({"template-url": "horst.yml", "parameters": {"a": "|Ref|app3.id"}}), "app3": StackConfig({"template-url": "horst.yml", "parameters": {"a": "|Ref|app1.id"}}), } with self.assertRaises(CyclicDependencyException): DependencyResolver.get_stack_order(stacks)
def test_get_stack_order_includes_independent_stacks(self): stacks = { 'default-sg': StackConfig({'template-url': 'horst.yml'}), 'app1': StackConfig({ 'template-url': 'horst.yml', 'parameters': { 'a': '|Ref|vpc.id', 'b': '|Ref|default-sg.id' } }), 'app2': StackConfig({ 'template-url': 'horst.yml', 'parameters': { 'a': '|Ref|vpc.id', 'b': '|Ref|default-sg.id', 'c': 'Ref::app1.id' } }), 'vpc': StackConfig({ 'template-url': 'horst.yml', 'parameters': { 'logBucketName': 'is24-cloudtrail-logs', 'includeGlobalServices': False } }) } result = 4 self.assertEqual(result, len(DependencyResolver.get_stack_order(stacks)))
def test_get_stack_order_accepts_stacks_without_parameters_key(self): stacks = {'default-sg': {}, 'app1': None, 'app2': {}, 'vpc': {}, } result = 4 self.assertEqual(result, len(DependencyResolver.get_stack_order(stacks)))
def test_get_stack_order_includes_independent_stacks(self): stacks = {'default-sg': StackConfig({'template-url': 'horst.yml'}), 'app1': StackConfig( {'template-url': 'horst.yml', 'parameters': {'a': '|Ref|vpc.id', 'b': '|Ref|default-sg.id'}}), 'app2': StackConfig({'template-url': 'horst.yml', 'parameters': {'a': '|Ref|vpc.id', 'b': '|Ref|default-sg.id', 'c': 'Ref::app1.id'}}), 'vpc': StackConfig({'template-url': 'horst.yml', 'parameters': {'logBucketName': 'is24-cloudtrail-logs', 'includeGlobalServices': False}}) } result = 4 self.assertEqual(result, len(DependencyResolver.get_stack_order(stacks)))
def test_get_stack_order_returns_a_valid_order_from_ref_in_list(self): stacks = {'default-sg': StackConfig({'template-url': 'horst.yml', 'parameters': {'a': ['|Ref|vpc.id']}}), 'app1': StackConfig( {'template-url': 'horst.yml', 'parameters': {'a': ['|Ref|vpc.id'], 'b': ['|Ref|default-sg.id']}}), 'app2': StackConfig({'template-url': 'horst.yml', 'parameters': {'a': ['|Ref|vpc.id'], 'b': ['|Ref|default-sg.id'], 'c': ['|Ref|app1.id']}}), 'vpc': StackConfig({'template-url': 'horst.yml', 'parameters': {'logBucketName': 'is24-cloudtrail-logs', 'includeGlobalServices': False}}) } expected = ['vpc', 'default-sg', 'app1', 'app2'] self.assertEqual(expected, DependencyResolver.get_stack_order(stacks))
def test_get_stack_order_returns_a_valid_order(self): stacks = {'default-sg': StackConfig({'template-url': 'horst.yml', 'parameters': {'a': '|Ref|vpc.id'}}), 'app1': StackConfig( {'template-url': 'horst.yml', 'parameters': {'a': '|Ref|vpc.id', 'b': '|Ref|default-sg.id'}}), 'app2': StackConfig({'template-url': 'horst.yml', 'parameters': {'a': '|Ref|vpc.id', 'b': '|Ref|default-sg.id', 'c': '|Ref|app1.id'}}), 'vpc': StackConfig({'template-url': 'horst.yml', 'parameters': {'logBucketName': 'is24-cloudtrail-logs', 'includeGlobalServices': False}}) } expected = ['vpc', 'default-sg', 'app1', 'app2'] self.assertEqual(expected, DependencyResolver.get_stack_order(stacks))
def test_get_stack_order_includes_independent_stacks(self): stacks = { "default-sg": StackConfig({"template-url": "horst.yml"}), "app1": StackConfig( {"template-url": "horst.yml", "parameters": {"a": "|Ref|vpc.id", "b": "|Ref|default-sg.id"}} ), "app2": StackConfig( { "template-url": "horst.yml", "parameters": {"a": "|Ref|vpc.id", "b": "|Ref|default-sg.id", "c": "Ref::app1.id"}, } ), "vpc": StackConfig( { "template-url": "horst.yml", "parameters": {"logBucketName": "is24-cloudtrail-logs", "includeGlobalServices": False}, } ), } result = 4 self.assertEqual(result, len(DependencyResolver.get_stack_order(stacks)))
def test_get_stack_order_returns_a_valid_order(self): stacks = { "default-sg": StackConfig({"template-url": "horst.yml", "parameters": {"a": "|Ref|vpc.id"}}), "app1": StackConfig( {"template-url": "horst.yml", "parameters": {"a": "|Ref|vpc.id", "b": "|Ref|default-sg.id"}} ), "app2": StackConfig( { "template-url": "horst.yml", "parameters": {"a": "|Ref|vpc.id", "b": "|Ref|default-sg.id", "c": "|Ref|app1.id"}, } ), "vpc": StackConfig( { "template-url": "horst.yml", "parameters": {"logBucketName": "is24-cloudtrail-logs", "includeGlobalServices": False}, } ), } expected = ["vpc", "default-sg", "app1", "app2"] self.assertEqual(expected, DependencyResolver.get_stack_order(stacks))
def test_get_stack_order_accepts_stacks_without_parameters_key(self): stacks = {"default-sg": {}, "app1": None, "app2": {}, "vpc": {}} result = 4 self.assertEqual(result, len(DependencyResolver.get_stack_order(stacks)))