Ejemplo n.º 1
0
def test_blueprint(finish_trace):
    blueprint = Blueprint('test', __name__)

    @blueprint.route('/api/test', methods=('GET', ))
    def test():
        return 'test'

    app.register_blueprint(blueprint)
    response = client.get('/api/test')
    execution_context = ExecutionContextManager.get()
    assert execution_context.root_span.operation_name == '/api/test'
    assert execution_context.root_span.get_tag('http.method') == 'GET'
    assert execution_context.root_span.get_tag('http.host') == 'localhost'
    assert execution_context.root_span.get_tag('http.path') == '/api/test'
    assert execution_context.root_span.class_name == constants.ClassNames[
        'FLASK']
    assert execution_context.root_span.domain_name == 'API'

    assert execution_context.tags.get(
        constants.SpanTags['TRIGGER_OPERATION_NAMES']) == [
            'localhost/api/test'
        ]
    assert execution_context.tags.get(
        constants.SpanTags['TRIGGER_DOMAIN_NAME']) == 'API'
    assert execution_context.tags.get(
        constants.SpanTags['TRIGGER_CLASS_NAME']) == 'HTTP'
    assert execution_context.response.data == response.data
    assert execution_context.response.status_code == 200
    ExecutionContextManager.clear()
Ejemplo n.º 2
0
 def test_successful_view(self, finish_trace):
     query_string={'foo': 'baz'}
     response = self.fetch(url_concat("/query", query_string))
     execution_context = ExecutionContextManager.get()
     self.assertEqual(execution_context.root_span.operation_name, '/query')
     self.assertEqual(execution_context.root_span.get_tag('http.method'), 'GET')
     self.assertEqual(execution_context.root_span.get_tag('http.host'), '127.0.0.1')
     self.assertEqual(execution_context.root_span.get_tag('http.query_params'), 'foo=baz')
     self.assertEqual(execution_context.root_span.get_tag('http.path'), '/query')
     self.assertEqual(execution_context.root_span.class_name, constants.ClassNames['TORNADO'])
     self.assertEqual(execution_context.root_span.domain_name, 'API')
     self.assertEqual(execution_context.tags.get(constants.SpanTags['TRIGGER_OPERATION_NAMES']), ['127.0.0.1/query'])
     self.assertEqual(execution_context.tags.get(constants.SpanTags['TRIGGER_DOMAIN_NAME']), 'API')
     self.assertEqual(execution_context.tags.get(constants.SpanTags['TRIGGER_CLASS_NAME']), 'HTTP')
     self.assertEqual(execution_context.response.status_code, 200)
     self.assertEqual(response.body, b'baz')
     ExecutionContextManager.clear()
Ejemplo n.º 3
0
def test_erroneous_view(finish_trace):
    client.get('/error', query_string={'bar': 'baz'})
    execution_context = ExecutionContextManager.get()
    assert execution_context.root_span.operation_name == '/error'
    assert execution_context.root_span.get_tag('http.method') == 'GET'
    assert execution_context.root_span.get_tag('http.host') == 'localhost'
    assert execution_context.root_span.get_tag(
        'http.query_params') == b'bar=baz'
    assert execution_context.root_span.get_tag('http.path') == '/error'
    assert execution_context.root_span.class_name == constants.ClassNames[
        'FLASK']
    assert execution_context.root_span.domain_name == 'API'

    assert execution_context.tags.get(
        constants.SpanTags['TRIGGER_OPERATION_NAMES']) == ['localhost/error']
    assert execution_context.tags.get(
        constants.SpanTags['TRIGGER_DOMAIN_NAME']) == 'API'
    assert execution_context.tags.get(
        constants.SpanTags['TRIGGER_CLASS_NAME']) == 'HTTP'
    assert execution_context.error is not None
    assert execution_context.response.status_code == 500
    ExecutionContextManager.clear()
Ejemplo n.º 4
0
        def wrapper(event, context):
            application_name = self.plugin_context.application_info.get(
                'applicationName')
            self.application_info_provider.update({
                'applicationId':
                LambdaApplicationInfoProvider.get_application_id(
                    context, application_name=application_name)
            })

            # Execution context initialization
            execution_context = wrapper_utils.create_execution_context()
            try:
                execution_context.platform_data[
                    'originalEvent'] = copy.deepcopy(event)
            except:
                execution_context.platform_data['originalEvent'] = event
            execution_context.platform_data['originalContext'] = context
            ExecutionContextManager.set(execution_context)

            # Before running user's handler
            try:
                if ConfigProvider.get(
                        config_names.THUNDRA_LAMBDA_WARMUP_WARMUPAWARE,
                        False) and self.check_and_handle_warmup_request(event):
                    return None

                self.plugin_context.request_count += 1
                self.execute_hook('before:invocation', execution_context)

                timeout_duration = self.get_timeout_duration(context)
            except Exception as e:
                logger.error(
                    "Error during the before part of Thundra: {}".format(e))
                return original_func(event, context)

            # Invoke user handler
            try:
                response = None
                with Timeout(timeout_duration, self.timeout_handler,
                             execution_context):
                    if ConfigProvider.get(
                            config_names.THUNDRA_LAMBDA_DEBUGGER_ENABLE,
                            ConfigProvider.get(
                                config_names.THUNDRA_LAMBDA_DEBUGGER_AUTH_TOKEN
                            )) and self.ptvsd_imported:
                        self.start_debugger_tracing(context)

                    response = original_func(event, context)
                    execution_context.response = response
            except Exception as e:
                try:
                    execution_context.error = {
                        'type': type(e).__name__,
                        'message': str(e),
                        'traceback': traceback.format_exc()
                    }
                    self.prepare_and_send_reports(execution_context)
                except Exception as e_in:
                    logger.error(
                        "Error during the after part of Thundra: {}".format(
                            e_in))
                    pass
                raise e
            finally:
                if ConfigProvider.get(
                        config_names.THUNDRA_LAMBDA_DEBUGGER_ENABLE,
                        ConfigProvider.get(
                            config_names.THUNDRA_LAMBDA_DEBUGGER_AUTH_TOKEN)
                ) and self.ptvsd_imported:
                    self.stop_debugger_tracing()

            # After having run the user's handler
            try:
                self.prepare_and_send_reports(execution_context)
            except Exception as e:
                logger.error(
                    "Error during the after part of Thundra: {}".format(e))

            ExecutionContextManager.clear()
            return response
Ejemplo n.º 5
0
 def mock_after_request(self, execution_context):
     assert execution_context.response.body == b'{"hello_world":1}'
     assert execution_context.response.status_code == 200
     self.prepare_and_send_reports_async(execution_context)
     ExecutionContextManager.clear()