blob: 2a3bcae89a9f5ac253e9ad1601b942f0d7628b5d [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import pytest
from aria.modeling.utils import parameters_as_values
from .service_templates import consume_literal
TEMPLATE = """
tosca_definitions_version: tosca_simple_yaml_1_0
interface_types:
MyInterface:
derived_from: tosca.interfaces.Root
inputs:
interface_string:
type: string
default: value1
interface_integer:
type: integer
default: 1
operation:
implementation: operation.sh
inputs:
operation_string:
type: string
default: value2
operation_integer:
type: integer
default: 2
interface_integer: # will override interface input
type: integer
default: 3
node_types:
LocalNode:
derived_from: tosca.nodes.Root
interfaces:
MyInterface:
type: MyInterface
RemoteNode:
derived_from: tosca.nodes.Compute
interfaces:
MyInterface:
type: MyInterface
topology_template:
node_templates:
local_node:
type: LocalNode
remote_node:
type: RemoteNode
"""
BROKEN_TEMPLATE = """
tosca_definitions_version: tosca_simple_yaml_1_0
interface_types:
MyInterface:
derived_from: tosca.interfaces.Root
inputs:
ctx: # reserved name
type: string
default: value1
interface_integer:
type: integer
default: 1
operation:
implementation: operation.sh
inputs:
operation_string:
type: string
default: value2
toolbelt: # reserved name
type: integer
default: 2
node_types:
LocalNode:
derived_from: tosca.nodes.Root
interfaces:
MyInterface:
type: MyInterface
topology_template:
node_templates:
local_node:
type: LocalNode
"""
@pytest.fixture
def service():
context, _ = consume_literal(TEMPLATE)
yield context.modeling.instance
@pytest.fixture
def broken_service_issues():
context, _ = consume_literal(BROKEN_TEMPLATE, no_issues=False)
yield context.validation.issues
def test_local(service):
interface = service.nodes['local_node_1'].interfaces['MyInterface']
operation = interface.operations['operation']
assert parameters_as_values(interface.inputs) == {
'interface_string': 'value1',
'interface_integer': 1
}
assert parameters_as_values(operation.inputs) == {
'operation_string': 'value2',
'operation_integer': 2,
'interface_integer': 3
}
assert parameters_as_values(operation.arguments) == {
'process': {},
'script_path': 'operation.sh',
'interface_string': 'value1',
'interface_integer': 3,
'operation_string': 'value2',
'operation_integer': 2
}
def test_remote(service):
interface = service.nodes['remote_node_1'].interfaces['MyInterface']
operation = interface.operations['operation']
assert parameters_as_values(interface.inputs) == {
'interface_string': 'value1',
'interface_integer': 1
}
assert parameters_as_values(operation.inputs) == {
'operation_string': 'value2',
'operation_integer': 2,
'interface_integer': 3
}
assert parameters_as_values(operation.arguments) == {
'process': {},
'use_sudo': False,
'fabric_env': {'user': '', 'password': '', 'key': None, 'key_filename': None},
'script_path': 'operation.sh',
'hide_output': [],
'interface_string': 'value1',
'interface_integer': 3,
'operation_string': 'value2',
'operation_integer': 2
}
def test_reserved_arguments(broken_service_issues):
assert len(broken_service_issues) == 1
message = broken_service_issues[0].message
assert message.startswith('using reserved arguments in operation "operation":')
assert '"ctx"' in message
assert '"toolbelt"' in message