From 51869a2057ec96b68447ad1a82c01691dccc71b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Ole=C5=9B?= Date: Wed, 27 Apr 2016 14:02:12 +0200 Subject: [PATCH] Allow to use parent input more than once in CR Change-Id: I740ec54e62c2deb4607ca357f0b7e3dbf7cb575c --- solar/core/resource/composer.py | 6 ++++-- solar/test/test_composer.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/solar/core/resource/composer.py b/solar/core/resource/composer.py index 5b39fe9a..71bf863e 100644 --- a/solar/core/resource/composer.py +++ b/solar/core/resource/composer.py @@ -252,8 +252,10 @@ def update_inputs(child, inputs): connections, assignments, computable = parse_inputs(inputs) parents = defaultdict(lambda: defaultdict(dict)) for c in connections: - mapping = {c['parent_input']: c['child_input']} - parents[c['parent']]['mapping'].update(mapping) + if not parents[c['parent']]['mapping'].get(c['parent_input']): + parents[c['parent']]['mapping'][c['parent_input']] = [] + mapping = parents[c['parent']]['mapping'] + mapping[c['parent_input']].append(c['child_input']) if parents[c['parent']].get('events', None) is None: parents[c['parent']]['events'] = c['events'] diff --git a/solar/test/test_composer.py b/solar/test/test_composer.py index 3fbee88d..a3e8fa6b 100644 --- a/solar/test/test_composer.py +++ b/solar/test/test_composer.py @@ -174,6 +174,20 @@ def test_add_list_values(mocker, resources): assert mocked_signals.call_count == 1 +def test_double_parent_input(mocker, resources): + mocked_signals = mocker.patch( + 'solar.core.resource.resource.Resource.connect_with_events') + args = {'ip': 'node1::ip', + 'servers': ['server1', 'server2'], + 'alias': 'ser1', + 'private_ip': 'node1::ip' + } + cr.update_inputs('service1', args) + call_args = mocked_signals.call_args[0][1] + assert 'ip' in call_args['ip'] + assert 'private_ip' in call_args['ip'] + + def test_parse_connection(): correct_connection = {'child_input': 'ip', 'parent': 'node1',