Example #1
0
    def test_invalid(self):
        tracer, schema = get_traced_schema()
        result = traced_graphql(schema, '{ hello world }')
        span = tracer.writer.pop()[0]
        assert span.get_metric(INVALID) == int(result.invalid)

        result = traced_graphql(schema, '{ hello }')
        span = tracer.writer.pop()[0]
        assert span.get_metric(INVALID) == int(result.invalid)
Example #2
0
    def test_invalid(self):
        tracer, schema = get_traced_schema()
        result = traced_graphql(schema, '{ hello world }')
        span = tracer.writer.pop()[0]
        assert span.get_metric(INVALID) == result.invalid == 1
        assert span.get_metric(DATA_EMPTY) == 1
        assert span.error == 0

        result = traced_graphql(schema, '{ hello }')
        span = tracer.writer.pop()[0]
        assert span.get_metric(INVALID) == result.invalid == 0
        assert span.error == 0
Example #3
0
    def test_query_tag():
        query = '{ hello }'
        tracer, schema = get_traced_schema()
        traced_graphql(schema, query)
        span = tracer.writer.pop()[0]
        assert span.get_tag(QUERY) == query

        # test query also for error span, just in case
        query = '{ hello world }'
        tracer, schema = get_traced_schema()
        traced_graphql(schema, query)
        span = tracer.writer.pop()[0]
        assert span.get_tag(QUERY) == query
Example #4
0
    def test_service_from_env():
        query = '{ hello }'
        tracer, schema = get_traced_schema()

        global traced_graphql
        traced_graphql(schema, query)
        span = tracer.writer.pop()[0]
        assert span.service == SERVICE

        os.environ['DDTRACE_GRAPHQL_SERVICE'] = 'test.test'

        traced_graphql(schema, query)
        span = tracer.writer.pop()[0]
        assert span.service == 'test.test'
Example #5
0
    def test_request_string_resolve(self):
        query = '{ hello }'

        # string as args[1]
        tracer, schema = get_traced_schema()
        traced_graphql(schema, query)
        span = tracer.writer.pop()[0]
        assert span.get_tag(QUERY) == query

        # string as kwargs.get('request_string')
        tracer, schema = get_traced_schema()
        traced_graphql(schema, request_string=query)
        span = tracer.writer.pop()[0]
        assert span.get_tag(QUERY) == query

        # ast as args[1]
        tracer, schema = get_traced_schema()
        ast_query = graphql_parse(GraphQLSource(query, 'Test Request'))
        traced_graphql(schema, ast_query)
        span = tracer.writer.pop()[0]
        assert span.get_tag(QUERY) == query

        # ast as kwargs.get('request_string')
        tracer, schema = get_traced_schema()
        ast_query = graphql_parse(GraphQLSource(query, 'Test Request'))
        traced_graphql(schema, request_string=ast_query)
        span = tracer.writer.pop()[0]
        assert span.get_tag(QUERY) == query
Example #6
0
 def test_errors_tag():
     query = '{ hello world }'
     tracer, schema = get_traced_schema()
     result = traced_graphql(schema, query)
     span = tracer.writer.pop()[0]
     assert span.get_tag(ERRORS)
     assert str(result.errors) == span.get_tag(ERRORS)
Example #7
0
    def test_span_kwargs_overrides():
        query = '{ hello }'
        tracer, schema = get_traced_schema()

        traced_graphql(schema, query, span_kwargs={'resource': 'test'})
        span = tracer.writer.pop()[0]
        assert span.resource == 'test'

        traced_graphql(schema,
                       query,
                       span_kwargs={
                           'service': 'test',
                           'name': 'test',
                       })
        span = tracer.writer.pop()[0]
        assert span.service == 'test'
        assert span.name == 'test'
        assert span.resource == '{ hello }'
Example #8
0
    def test_errors_tag():
        query = '{ hello }'
        tracer, schema = get_traced_schema()
        result = traced_graphql(schema, query)
        span = tracer.writer.pop()[0]
        assert not span.get_tag(ERRORS)
        assert result.errors is span.get_tag(ERRORS) is None

        query = '{ hello world }'
        result = traced_graphql(schema, query)
        span = tracer.writer.pop()[0]
        span_errors = span.get_tag(ERRORS)
        assert span_errors
        _se = json.loads(span_errors)
        assert len(_se) == len(result.errors) == 1
        assert 'message' in _se[0]
        assert 'line' in _se[0]['locations'][0]
        assert 'column' in _se[0]['locations'][0]
Example #9
0
    def test_span_callback():
        cb_args = {}

        def test_cb(result, span):
            cb_args.update(dict(result=result, span=span))

        query = '{ hello world }'
        tracer, schema = get_traced_schema()
        result = traced_graphql(schema, query, span_callback=test_cb)
        span = tracer.writer.pop()[0]
        assert cb_args['span'] is span
        assert cb_args['result'] is result
Example #10
0
    def test_unhandled_exception(self):
        def exc_resolver(*args):
            raise Exception('Testing stuff')

        tracer, schema = get_traced_schema(resolver=exc_resolver)
        result = traced_graphql(schema, '{ hello }')
        span = tracer.writer.pop()[0]
        assert span.get_metric(INVALID) == 0
        assert span.error == 1
        assert span.get_metric(CLIENT_ERROR) == 0
        assert span.get_metric(DATA_EMPTY) == 0

        error_stack = span.get_tag(ddtrace_errors.ERROR_STACK)
        assert 'Testing stuff' in error_stack
        assert 'Traceback' in error_stack

        error_msg = span.get_tag(ddtrace_errors.ERROR_MSG)
        assert 'Testing stuff' in error_msg

        error_type = span.get_tag(ddtrace_errors.ERROR_TYPE)
        assert 'Exception' in error_type

        try:
            raise Exception('Testing stuff')
        except Exception as exc:
            _error = exc
            if not hasattr(exc, '__traceback__'):
                _error.stack = sys.exc_info()[2]

        def _tg(*args, **kwargs):
            def func(*args, **kwargs):
                return ExecutionResult(
                    errors=[_error],
                    invalid=True,
                )

            return traced_graphql_wrapped(func, args, kwargs)

        tracer, schema = get_traced_schema(resolver=exc_resolver)
        result = _tg(schema, '{ hello }')

        span = tracer.writer.pop()[0]
        assert span.get_metric(INVALID) == 1
        assert span.error == 1
        assert span.get_metric(DATA_EMPTY) == 1

        error_stack = span.get_tag(ddtrace_errors.ERROR_STACK)
        assert 'Testing stuff' in error_stack
        assert 'Traceback' in error_stack
Example #11
0
    def test_not_server_error(self):
        class TestException(Exception):
            pass

        def exc_resolver(*args):
            raise TestException('Testing stuff')

        tracer, schema = get_traced_schema(resolver=exc_resolver)
        result = traced_graphql(
            schema,
            '{ hello }',
            ignore_exceptions=(TestException),
        )
        span = tracer.writer.pop()[0]
        assert span.get_metric(INVALID) == 0
        assert span.error == 0
        assert span.get_metric(DATA_EMPTY) == 0
        assert span.get_metric(CLIENT_ERROR) == 1
Example #12
0
    def test_resource():
        query = '{ hello world }'
        tracer, schema = get_traced_schema()
        traced_graphql(schema, query)
        span = tracer.writer.pop()[0]
        assert span.resource == query

        query = 'mutation fnCall(args: Args) { }'
        traced_graphql(schema, query)
        span = tracer.writer.pop()[0]
        assert span.resource == 'mutation fnCall'

        query = 'mutation fnCall { }'
        traced_graphql(schema, query)
        span = tracer.writer.pop()[0]
        assert span.resource == 'mutation fnCall'

        query = 'mutation fnCall { }'
        traced_graphql(schema, query, span_kwargs={'resource': 'test'})
        span = tracer.writer.pop()[0]
        assert span.resource == 'test'
Example #13
0
 def test_tracer_disabled():
     query = '{ hello world }'
     tracer, schema = get_traced_schema()
     tracer.enabled = False
     traced_graphql(schema, query)
     assert not tracer.writer.pop()