def _convert_method_def_to_data_value(method_def):
        """
        Converts a :class:`vmware.vapi.core.MethodDefinition` object
        to :class:`vmware.vapi.data.value.DataValue` object

        :type  method_def: :class:`vmware.vapi.core.MethodDefinition`
        :param method_def: Method definition
        :rtype: :class:`vmware.vapi.data.value.DataValue`
        :return: Data value object representing method definition
        """
        output = StructValue(
            name='com.vmware.vapi.std.introspection.operation.info',
            values={
                'input_definition':
                convert_data_def_to_data_value(
                    method_def.get_input_definition()),
                'output_definition':
                convert_data_def_to_data_value(
                    method_def.get_output_definition()),
                'error_definitions':
                ListValue(values=[
                    convert_data_def_to_data_value(error_def)
                    for error_def in method_def.get_error_definitions()
                ])
            })
        return output
Example #2
0
    def __init__(self, load_introspection=True):
        """
        Initialize LocalProvider

        :type  load_introspection: :class:`bool`
        :param load_introspection: If true, load introspection services
        """
        ApiProvider.__init__(self)
        self._name = "LocalProvider"
        # key = service id, value = api interface
        self._service_map = {}

        self._introspector = introspection.LocalProviderIntrospector(
            self._name)
        if load_introspection:
            self.add_interface(self._introspector.get_introspection_services())

        self._error_defs_to_augment = [
            self._internal_server_error_def,
            self._invalid_argument_def,
            self._operation_not_found_def,
        ]
        # these are the errors that should be augmented
        # when `get` operation is invoked on
        # com.vmware.vapi.std.introspection.Operation
        self._error_values_to_augment = [
            convert_data_def_to_data_value(error_def)
            for error_def in self._error_defs_to_augment
        ]
 def test_struct_ref_to_value(self):
     actual_output = convert_data_def_to_data_value(
         StructRefDefinition('mock'))
     expected_output = StructValue(Introspection.DATA_DEFINITION)
     expected_output.set_field('type', StringValue('STRUCTURE_REF'))
     expected_output.set_field('fields', OptionalValue())
     expected_output.set_field('name', OptionalValue(StringValue('mock')))
     expected_output.set_field('element_definition', OptionalValue())
     self.assertEqual(actual_output, expected_output)
 def test_generic_def_to_value(self):
     for typ_def, typ in [(OptionalDefinition, 'OPTIONAL'),
                          (ListDefinition, 'LIST')]:
         typ_def = typ_def(StringDefinition())
         actual_output = convert_data_def_to_data_value(typ_def)
         expected_output = StructValue(Introspection.DATA_DEFINITION)
         element_value = self.generate_primitive_value('STRING')
         expected_output.set_field('type', StringValue(typ))
         expected_output.set_field('fields', OptionalValue())
         expected_output.set_field('name', OptionalValue())
         expected_output.set_field('element_definition',
                                   OptionalValue(element_value))
         self.assertEqual(actual_output, expected_output)
 def test_error_to_value(self):
     struct_def = ErrorDefinition('mock', [('field1', StringDefinition())])
     actual_output = convert_data_def_to_data_value(struct_def)
     expected_output = StructValue(Introspection.DATA_DEFINITION)
     expected_output.set_field('type', StringValue('ERROR'))
     expected_output.set_field('name', OptionalValue(StringValue('mock')))
     expected_output.set_field('element_definition', OptionalValue())
     field_value = self.generate_primitive_value('STRING')
     field_entry = StructValue(MAP_ENTRY)
     field_entry.set_field('key', StringValue('field1'))
     field_entry.set_field('value', field_value)
     field_values = ListValue()
     field_values.add(field_entry)
     expected_output.set_field('fields', OptionalValue(field_values))
     self.assertEqual(actual_output, expected_output)
 def test_primitive_def_to_value(self):
     for typ_def_class, typ in [(VoidDefinition, 'VOID'),
                                (IntegerDefinition, 'LONG'),
                                (DoubleDefinition, 'DOUBLE'),
                                (BooleanDefinition, 'BOOLEAN'),
                                (StringDefinition, 'STRING'),
                                (BlobDefinition, 'BINARY'),
                                (OpaqueDefinition, 'OPAQUE'),
                                (SecretDefinition, 'SECRET'),
                                (DynamicStructDefinition,
                                 'DYNAMIC_STRUCTURE'),
                                (AnyErrorDefinition, 'ANY_ERROR')]:
         actual_output = convert_data_def_to_data_value(typ_def_class())
         expected_output = self.generate_primitive_value(typ)
         self.assertEqual(actual_output, expected_output)
Example #7
0
    def __init__(self, next_provider=None, errors_to_augment=None, name=None):
        """
        Initialize ApiProviderFilter

        :type  next_provider: :class:`vmware.vapi.core.ApiProvider` or ``None``
        :param next_provider: API Provider to invoke the requests
        :type  errors_to_augment: :class:`list` of
            :class:`vmware.vapi.data.definition.ErrorDefinition` or ``None``
        :param errors_to_augment: List of error definitions to be added to
            method definitions
        :type  name: :class:`str`
        :param name: The name of the filter
        """
        ApiProvider.__init__(self)
        self.name = name if name is not None else self.__class__.__name__
        self.next_provider = next_provider
        self._error_defs_to_augment = errors_to_augment or []
        self._error_values_to_augment = [
            convert_data_def_to_data_value(error_def)
            for error_def in self._error_defs_to_augment
        ]
Example #8
0
    report_undeclared_error: report_undeclared_error_id,
    raise_python_exception: raise_python_exception_id,
    return_invalid_output: return_invalid_output_id,
}

internal_server_error_def = make_std_error_def(
    'com.vmware.vapi.std.errors.internal_server_error')
invalid_argument_def = make_std_error_def(
    'com.vmware.vapi.std.errors.invalid_argument')
not_found_error_def = make_std_error_def(
    'com.vmware.vapi.std.errors.not_found')
operation_not_found_def = make_std_error_def(
    'com.vmware.vapi.std.errors.operation_not_found')

error_values = ListValue([
    convert_data_def_to_data_value(internal_server_error_def),
    convert_data_def_to_data_value(invalid_argument_def),
    convert_data_def_to_data_value(operation_not_found_def)
])

_msg = Message('mockup.message.id', 'mockup error message')
not_found_error = make_error_value_from_msgs(not_found_error_def, _msg)

param_name = 'param'


class MockupApiInterface(ApiInterface):
    def __init__(self):
        pass

    def get_identifier(self):
    ('service_name', StringDefinition()),
    ('operation_name', StringDefinition()),
    ('operation_input', OpaqueDefinition()),
])
mock_input_def = StructDefinition('input', [('raise', BooleanDefinition())])
not_found_error_def = make_std_error_def(
    'com.vmware.vapi.std.errors.not_found')
errors = [
    'com.vmware.vapi.std.errors.not_found',
    'com.vmware.vapi.std.errors.internal_server_error',
    'com.vmware.vapi.std.errors.invalid_argument',
    'com.vmware.vapi.std.errors.operation_not_found',
]
error_defs = [make_std_error_def(error) for error in errors]
error_values = ListValue(
    [convert_data_def_to_data_value(error_def) for error_def in error_defs])


class MockupApiInterface(ApiInterface):
    def __init__(self, interface_id):
        self._interface_id = interface_id
        self.counters = {}
        for name in [
                mock_method_name, pre_method_name, post_method_name,
                veto_method_name
        ]:
            self.counters[name] = 0

    def get_identifier(self):
        return self._interface_id