コード例 #1
0
def test_traces_match_query(http_helper, exporter):
    response = yield http_helper.get(url_string(query=QUERY),
                                     headers=GRAPHQL_HEADER)
    assert response.code == 200
    assert "data" in response_json(response)

    parent = exporter.spans.pop()[0]

    assert parent.name == "gql[b5c7307ba564]"
    assert parent.parent_span_id is None
    assert parent.attributes.get("signature",
                                 None) == default_engine_reporting_signature(
                                     parse(QUERY), "")

    spans = [span for span_list in exporter.spans for span in span_list]

    expected = [
        "gql_parsing",
        "gql_validation",
        "author",
        "aBoolean",
        "author.name",
        "author.posts",
        "author.posts.0.id",
        "author.posts.1.id",
    ]

    for span, exp in zip(spans, expected):
        assert span.name == exp
        assert span.parent_span_id == parent.span_id
コード例 #2
0
def test_basic_signature_with_full_test():
    operation = "Foo"
    doc = parse("""
        query Foo($b: Int, $a: Boolean) {
          user(name: "hello", age: 5) {
            ...Bar
            ... on User {
              hello
              bee
            }
            tz
            aliased: name
          }
        }
        fragment Baz on User {
          asd
        }
        fragment Bar on User {
          age @skip(if: $a)
          ...Nested
        }
        fragment Nested on User {
          blah
        }
    """)
    assert (
        "fragment Bar on User{age@skip(if:$a)...Nested}fragment Nested on User{blah}query Foo($a:Boolean,$b:Int)"
        '{user(age:0,name:""){name tz...Bar...on User{bee hello}}}' ==
        default_engine_reporting_signature(doc, operation))
コード例 #3
0
def test_traces_match_query(http_helper, exporter):
    response = yield http_helper.get(url_string(query=QUERY),
                                     headers=GRAPHQL_HEADER)
    assert response.code == 200
    assert 'data' in response_json(response)

    # OpenCensus is quite ready for Python3+Tornado yet
    if six.PY3:
        return

    spans = exporter.spans

    assert spans[0][0].name == 'author'
    assert spans[0][0].parent_span_id == spans[6][0].span_id
    assert spans[1][0].name == 'aBoolean'
    assert spans[1][0].parent_span_id == spans[6][0].span_id
    assert spans[2][0].name == 'author.name'
    assert spans[2][0].parent_span_id == spans[6][0].span_id
    assert spans[3][0].name == 'author.posts'
    assert spans[3][0].parent_span_id == spans[6][0].span_id
    assert spans[4][0].name == 'author.posts.0.id'
    assert spans[4][0].parent_span_id == spans[6][0].span_id
    assert spans[5][0].name == 'author.posts.1.id'
    assert spans[5][0].parent_span_id == spans[6][0].span_id

    assert spans[6][0].name == 'gql[b5c7307ba564]'
    assert spans[6][0].parent_span_id is None
    assert spans[6][0].attributes.get(
        'signature',
        None) == default_engine_reporting_signature(parse(QUERY), '')
コード例 #4
0
def test_basic_signature():
    operation = ""
    doc = parse("""
        {
          user {
            name
          }
        }    
    """)
    assert "{user{name}}" == default_engine_reporting_signature(doc, operation)
コード例 #5
0
def test_basic_signature_with_operation_name():
    operation = "OpName"
    doc = parse("""
        query OpName {
          user {
            name
          }
        }
    """)
    assert "query OpName{user{name}}" == default_engine_reporting_signature(
        doc, operation)
コード例 #6
0
def test_basic_signature_with_inline_types():
    operation = "OpName"
    doc = parse("""
        query OpName {
          user {
            name(apple: [[10]], cat: ENUM_VALUE, bag: { input: "value" })
          }
        }
    """)
    assert ("query OpName{user{name(apple:[],bag:{},cat:ENUM_VALUE)}}" ==
            default_engine_reporting_signature(doc, operation))
コード例 #7
0
def test_basic_signature_with_various_argument_types():
    operation = "OpName"
    doc = parse("""
        query OpName($c: Int!, $a: [[Boolean!]!], $b: EnumType) {
          user {
            name(apple: $a, cat: $c, bag: $b)
          }
        }
    """)
    assert "query OpName($a:[[Boolean!]!],$b:EnumType,$c:Int!){user{name(apple:$a,bag:$b,cat:$c)}}" \
           == default_engine_reporting_signature(doc, operation)
コード例 #8
0
def test_basic_signature_with_fragments_in_various_order():
    operation = ""
    doc = parse("""
        fragment Bar on User {
          asd
        }
        {
          user {
            name
            ...Bar
          }
        }
        fragment Baz on User {
          jkl
        }
    """)
    assert ("fragment Bar on User{asd}{user{name...Bar}}" ==
            default_engine_reporting_signature(doc, operation))
コード例 #9
0
def test_can_send_report_to_engine(http_helper):
    response = yield http_helper.get(url_string(query=QUERY), headers=GRAPHQL_HEADER)

    report = _deserialize(agent.data[0])

    assert report.header.hostname == SERVICE_HEADER_DEFAULTS.get('hostname')
    assert report.header.agent_version == SERVICE_HEADER_DEFAULTS.get('agentVersion')
    assert report.header.runtime_version == SERVICE_HEADER_DEFAULTS.get('runtimeVersion')
    assert report.header.uname == SERVICE_HEADER_DEFAULTS.get('uname')

    assert len(report.traces_per_query) == 1
    key = next(iter(report.traces_per_query))
    query_key = '# -\n' + default_engine_reporting_signature(parse(QUERY), '')
    assert query_key == key
    assert report.traces_per_query[query_key].trace.pop()

    assert response.code == 200
    assert 'data' in response_json(response)
コード例 #10
0
def _get_trace_signature(operation_name, document, query_string):
    if not document:
        return query_string
    else:
        return default_engine_reporting_signature(document, operation_name)