def test_buckets_list(self, mock_requests):
        mock_requests.return_value = self._mock_response(
            json_content={
                "kind": "storage#buckets",
                "items": []
            },
            status_code=http_client.OK)

        client = self._client(project='test-project')

        with tracer.start_active_span('test'):
            buckets = client.list_buckets()
            self.assertEqual(
                0,
                self.recorder.queue_size(),
                msg='span has been created before the actual request')

            # trigger the iterator
            for b in buckets:
                pass

        spans = self.recorder.queued_spans()

        self.assertEqual(2, len(spans))
        self.assertIsNone(tracer.active_span)

        gcs_span = spans[0]
        test_span = spans[1]

        self.assertTraceContextPropagated(test_span, gcs_span)

        self.assertEqual('gcs', gcs_span.n)
        self.assertEqual(2, gcs_span.k)
        self.assertIsNone(gcs_span.ec)

        self.assertEqual('buckets.list', gcs_span.data["gcs"]["op"])
        self.assertEqual('test-project', gcs_span.data["gcs"]["projectId"])
Ejemplo n.º 2
0
    def test_successful_find_query(self):
        with tracer.start_active_span("test"):
            self.conn.test.records.find_one({"type": "string"})

        assert_is_none(tracer.active_span)

        spans = self.recorder.queued_spans()
        self.assertEqual(len(spans), 2)

        db_span = spans[0]
        test_span = spans[1]

        self.assertEqual(test_span.t, db_span.t)
        self.assertEqual(db_span.p, test_span.s)

        assert_is_none(db_span.ec)

        self.assertEqual(db_span.n, "mongo")
        self.assertEqual(db_span.data["mongo"]["service"], "%s:%s" % (testenv['mongodb_host'], testenv['mongodb_port']))
        self.assertEqual(db_span.data["mongo"]["namespace"], "test.records")
        self.assertEqual(db_span.data["mongo"]["command"], "find")

        self.assertEqual(db_span.data["mongo"]["filter"], '{"type": "string"}')
        assert_is_none(db_span.data["mongo"]["json"])
Ejemplo n.º 3
0
    def test_server_exception(self):
        response = None
        with tracer.start_active_span('test'):
            try:
                response = self.client.service.server_exception()
            except Exception:
                pass

        spans = self.recorder.queued_spans()
        assert_equals(5, len(spans))

        log_span1 = spans[0]
        wsgi_span = spans[1]
        log_span2 = spans[2]
        soap_span = spans[3]
        test_span = spans[4]

        assert_equals(None, response)
        assert_equals("test", test_span.data.sdk.name)
        assert_equals(test_span.t, soap_span.t)
        assert_equals(soap_span.p, test_span.s)
        assert_equals(wsgi_span.t, soap_span.t)
        assert_equals(wsgi_span.p, soap_span.s)

        assert_equals(True, soap_span.error)
        assert_equals(1, soap_span.ec)
        assert ('logs' in soap_span.data.custom.__dict__)
        assert_equals(1, len(soap_span.data.custom.logs.keys()))

        tskey = list(soap_span.data.custom.logs.keys())[0]
        assert ('message' in soap_span.data.custom.logs[tskey])
        assert_equals(u"Server raised fault: 'Internal Error'",
                      soap_span.data.custom.logs[tskey]['message'])

        assert_equals('server_exception', soap_span.data.soap.action)
        assert_equals(testenv["soap_server"] + '/', soap_span.data.http.url)
Ejemplo n.º 4
0
def test_s3_upload_file_obj(s3):
    object_name = 'aws_key_name'
    bucket_name = 'aws_bucket_name'

    s3.create_bucket(Bucket=bucket_name)

    result = None
    with tracer.start_active_span('test'):
        with open(upload_filename, "rb") as fd:
            s3.upload_fileobj(fd, bucket_name, object_name)

    spans = tracer.recorder.queued_spans()
    assert len(spans) == 2

    filter = lambda span: span.n == "sdk"
    test_span = get_first_span_by_filter(spans, filter)
    assert (test_span)

    filter = lambda span: span.n == "boto3"
    boto_span = get_first_span_by_filter(spans, filter)
    assert (boto_span)

    assert (boto_span.t == test_span.t)
    assert (boto_span.p == test_span.s)

    assert (test_span.ec is None)
    assert (boto_span.ec is None)

    assert (boto_span.data['boto3']['op'] == 'upload_fileobj')
    assert (boto_span.data['boto3']['ep'] == 'https://s3.amazonaws.com')
    assert (boto_span.data['boto3']['reg'] == 'us-east-1')
    payload = {'Bucket': 'aws_bucket_name', 'Key': 'aws_key_name'}
    assert boto_span.data['boto3']['payload'] == payload
    assert boto_span.data['http']['method'] == 'POST'
    assert boto_span.data['http'][
        'url'] == 'https://s3.amazonaws.com:443/upload_fileobj'
Ejemplo n.º 5
0
    def test_basic_publish_with_headers(self, send_method, _unused):
        self.obj._set_state(self.obj.OPEN)

        with tracer.start_active_span("testing"):
            self.obj.basic_publish(
                "test.exchange", "test.queue", "Hello!",
                pika.BasicProperties(headers={"X-Custom-1": "test"}))

        spans = self.recorder.queued_spans()
        self.assertEqual(2, len(spans))

        rabbitmq_span = spans[0]
        test_span = spans[1]

        send_method.assert_called_once_with(
            pika.spec.Basic.Publish(exchange="test.exchange",
                                    routing_key="test.queue"),
            (pika.spec.BasicProperties(
                headers={
                    "X-Custom-1": "test",
                    "X-INSTANA-T": rabbitmq_span.t,
                    "X-INSTANA-S": rabbitmq_span.s,
                    "X-INSTANA-L": "1"
                }), b"Hello!"))
Ejemplo n.º 6
0
    def test_basic_query(self):
        with tracer.start_active_span('test'):
            self.cursor.execute("""SELECT * from users""")
            self.cursor.fetchone()
            self.db.commit()

        spans = self.recorder.queued_spans()
        assert_equals(2, len(spans))

        db_span = spans[0]
        test_span = spans[1]

        assert_equals("test", test_span.data.sdk.name)
        assert_equals(test_span.t, db_span.t)
        assert_equals(db_span.p, test_span.s)

        assert_equals(None, db_span.error)
        assert_equals(None, db_span.ec)

        assert_equals(db_span.n, "postgres")
        assert_equals(db_span.data.pg.db, testenv['postgresql_db'])
        assert_equals(db_span.data.pg.user, testenv['postgresql_user'])
        assert_equals(db_span.data.pg.stmt, 'SELECT * from users')
        assert_equals(db_span.data.pg.host, "%s:5432" % testenv['postgresql_host'])
Ejemplo n.º 7
0
    def test_rget(self):
        res = None

        try:
            with tracer.start_active_span('test'):
                res = self.bucket.rget("test-key", replica_index=None)
        except CouchbaseTransientError:
            pass

        self.assertIsNone(res)

        spans = self.recorder.queued_spans()
        self.assertEqual(2, len(spans))

        test_span = get_first_span_by_name(spans, 'sdk')
        assert (test_span)
        self.assertEqual(test_span.data["sdk"]["name"], 'test')

        cb_span = get_first_span_by_name(spans, 'couchbase')
        assert (cb_span)

        # Same traceId and parent relationship
        self.assertEqual(test_span.t, cb_span.t)
        self.assertEqual(cb_span.p, test_span.s)

        assert (cb_span.stack)
        self.assertEqual(cb_span.ec, 1)
        # Just search for the substring of the exception class
        found = cb_span.data["couchbase"]["error"].find(
            "CouchbaseTransientError")
        self.assertFalse(found == -1, "Error substring not found.")

        self.assertEqual(cb_span.data["couchbase"]["hostname"],
                         "%s:8091" % testenv['couchdb_host'])
        self.assertEqual(cb_span.data["couchbase"]["bucket"], 'travel-sample')
        self.assertEqual(cb_span.data["couchbase"]["type"], 'rget')
    def test_buckets_lock_retention_policy(self, mock_requests):
        mock_requests.return_value = self._mock_response(
            json_content={
                "kind": "storage#bucket",
                "metageneration": 1,
                "retentionPolicy": {
                    "isLocked": False
                }
            },
            status_code=http_client.OK)

        client = self._client(project='test-project')

        bucket = client.bucket('test bucket')
        bucket.reload()

        with tracer.start_active_span('test'):
            bucket.lock_retention_policy()

        spans = self.recorder.queued_spans()

        self.assertEqual(2, len(spans))
        self.assertIsNone(tracer.active_span)

        gcs_span = spans[0]
        test_span = spans[1]

        self.assertTraceContextPropagated(test_span, gcs_span)

        self.assertEqual('gcs', gcs_span.n)
        self.assertEqual(2, gcs_span.k)
        self.assertIsNone(gcs_span.ec)

        self.assertEqual('buckets.lockRetentionPolicy',
                         gcs_span.data["gcs"]["op"])
        self.assertEqual('test bucket', gcs_span.data["gcs"]["bucket"])
Ejemplo n.º 9
0
    def test_execute_error(self):
        res = None

        try:
            with tracer.start_active_span('test'):
                res = session.execute('Not a real query')
        except:
            pass

        self.assertIsNone(res)

        time.sleep(0.5)

        spans = self.recorder.queued_spans()
        self.assertEqual(2, len(spans))

        test_span = get_first_span_by_name(spans, 'sdk')
        self.assertIsNotNone(test_span)
        self.assertEqual(test_span.data["sdk"]["name"], 'test')

        cspan = get_first_span_by_name(spans, 'cassandra')
        self.assertIsNotNone(cspan)

        # Same traceId and parent relationship
        self.assertEqual(test_span.t, cspan.t)
        self.assertEqual(cspan.p, test_span.s)

        self.assertIsNotNone(cspan.stack)
        self.assertEqual(cspan.ec, 1)

        self.assertEqual(cspan.data["cassandra"]["cluster"], 'Test Cluster')
        self.assertEqual(cspan.data["cassandra"]["query"], 'Not a real query')
        self.assertEqual(cspan.data["cassandra"]["keyspace"], 'instana_tests')
        self.assertIsNone(cspan.data["cassandra"]["achievedConsistency"])
        self.assertIsNotNone(cspan.data["cassandra"]["triedHosts"])
        self.assertIsNotNone(cspan.data["cassandra"]["error"])
Ejemplo n.º 10
0
    def test_n1ql_query(self):
        res = None

        with tracer.start_active_span('test'):
            res = self.bucket.n1ql_query(
                N1QLQuery(
                    'SELECT name FROM `travel-sample` WHERE brewery_id ="mishawaka_brewing"'
                ))

        assert (res)

        spans = self.recorder.queued_spans()
        self.assertEqual(2, len(spans))

        test_span = get_first_span_by_name(spans, 'sdk')
        assert (test_span)
        self.assertEqual(test_span.data["sdk"]["name"], 'test')

        cb_span = get_first_span_by_name(spans, 'couchbase')
        assert (cb_span)

        # Same traceId and parent relationship
        self.assertEqual(test_span.t, cb_span.t)
        self.assertEqual(cb_span.p, test_span.s)

        assert (cb_span.stack)
        self.assertIsNone(cb_span.ec)

        self.assertEqual(cb_span.data["couchbase"]["hostname"],
                         "%s:8091" % testenv['couchdb_host'])
        self.assertEqual(cb_span.data["couchbase"]["bucket"], 'travel-sample')
        self.assertEqual(cb_span.data["couchbase"]["type"], 'n1ql_query')
        self.assertEqual(
            cb_span.data["couchbase"]["sql"],
            'SELECT name FROM `travel-sample` WHERE brewery_id ="mishawaka_brewing"'
        )
Ejemplo n.º 11
0
    def test_error_capture(self):
        result = None
        try:
            with tracer.start_active_span('test'):
                result = self.cursor.execute("""SELECT * from blah""")
                self.cursor.fetchone()
        except Exception:
            pass

        assert (result is None)

        spans = self.recorder.queued_spans()
        self.assertEqual(2, len(spans))

        db_span = spans[0]
        test_span = spans[1]

        self.assertEqual("test", test_span.data["sdk"]["name"])
        self.assertEqual(test_span.t, db_span.t)
        self.assertEqual(db_span.p, test_span.s)

        self.assertEqual(1, db_span.ec)
        self.assertEqual(
            db_span.data["pg"]["error"],
            'relation "blah" does not exist\nLINE 1: SELECT * from blah\n                      ^\n'
        )

        self.assertEqual(db_span.n, "postgres")
        self.assertEqual(db_span.data["pg"]["db"], testenv['postgresql_db'])
        self.assertEqual(db_span.data["pg"]["user"],
                         testenv['postgresql_user'])
        self.assertEqual(db_span.data["pg"]["stmt"], 'SELECT * from blah')
        self.assertEqual(db_span.data["pg"]["host"],
                         testenv['postgresql_host'])
        self.assertEqual(db_span.data["pg"]["port"],
                         testenv['postgresql_port'])
    def test_buckets_delete(self, mock_requests):
        mock_requests.return_value = self._mock_response()

        client = self._client(project='test-project')

        with tracer.start_active_span('test'):
            client.bucket('test bucket').delete()

        spans = self.recorder.queued_spans()

        self.assertEqual(2, len(spans))
        self.assertIsNone(tracer.active_span)

        gcs_span = spans[0]
        test_span = spans[1]

        self.assertTraceContextPropagated(test_span, gcs_span)

        self.assertEqual('gcs', gcs_span.n)
        self.assertEqual(2, gcs_span.k)
        self.assertIsNone(gcs_span.ec)

        self.assertEqual('buckets.delete', gcs_span.data["gcs"]["op"])
        self.assertEqual('test bucket', gcs_span.data["gcs"]["bucket"])
Ejemplo n.º 13
0
    def test_error_capture(self):
        result = None
        span = None
        try:
            with tracer.start_active_span('test'):
                result = self.cursor.execute("""SELECT * from blah""")
                self.cursor.fetchone()
        except Exception:
            pass
        finally:
            if span:
                span.finish()

        assert (result is None)

        spans = self.recorder.queued_spans()
        self.assertEqual(2, len(spans))

        db_span = spans[0]
        test_span = spans[1]

        self.assertEqual("test", test_span.data["sdk"]["name"])
        self.assertEqual(test_span.t, db_span.t)
        self.assertEqual(db_span.p, test_span.s)

        self.assertEqual(1, db_span.ec)
        self.assertEqual(
            db_span.data["mysql"]["error"],
            '(1146, "Table \'%s.blah\' doesn\'t exist")' % testenv['mysql_db'])

        self.assertEqual(db_span.n, "mysql")
        self.assertEqual(db_span.data["mysql"]["db"], testenv['mysql_db'])
        self.assertEqual(db_span.data["mysql"]["user"], testenv['mysql_user'])
        self.assertEqual(db_span.data["mysql"]["stmt"], 'SELECT * from blah')
        self.assertEqual(db_span.data["mysql"]["host"], testenv['mysql_host'])
        self.assertEqual(db_span.data["mysql"]["port"], testenv['mysql_port'])
Ejemplo n.º 14
0
    def test_streaming_many_to_many(self):
        with tracer.start_active_span('test'):
            responses = self.server_stub.ManyQuestionsManyReponses(
                self.generate_questions())

        self.assertIsNone(tracer.active_span)
        self.assertIsNotNone(responses)

        final_answers = []
        for response in responses:
            final_answers.append(response)

        self.assertEqual(len(final_answers), 6)

        spans = self.recorder.queued_spans()
        self.assertEqual(3, len(spans))

        server_span = get_first_span_by_name(spans, 'rpc-server')
        client_span = get_first_span_by_name(spans, 'rpc-client')
        test_span = get_first_span_by_name(spans, 'sdk')

        assert (server_span)
        assert (client_span)
        assert (test_span)

        # Same traceId
        self.assertEqual(server_span.t, client_span.t)
        self.assertEqual(server_span.t, test_span.t)

        # Parent relationships
        self.assertEqual(server_span.p, client_span.s)
        self.assertEqual(client_span.p, test_span.s)

        # Error logging
        self.assertFalse(test_span.error)
        self.assertIsNone(test_span.ec)
        self.assertFalse(client_span.error)
        self.assertIsNone(client_span.ec)
        self.assertFalse(server_span.error)
        self.assertIsNone(server_span.ec)

        # rpc-server
        self.assertEqual(server_span.n, 'rpc-server')
        self.assertEqual(server_span.k, 1)
        self.assertIsNotNone(server_span.stack)
        self.assertEqual(2, len(server_span.stack))
        self.assertEqual(server_span.data.rpc.flavor, 'grpc')
        self.assertEqual(server_span.data.rpc.call,
                         '/stan.Stan/ManyQuestionsManyReponses')
        self.assertEqual(server_span.data.rpc.host, testenv["grpc_host"])
        self.assertEqual(server_span.data.rpc.port, str(testenv["grpc_port"]))
        self.assertIsNone(server_span.data.rpc.error)

        # rpc-client
        self.assertEqual(client_span.n, 'rpc-client')
        self.assertEqual(client_span.k, 2)
        self.assertIsNotNone(client_span.stack)
        self.assertEqual(client_span.data.rpc.flavor, 'grpc')
        self.assertEqual(client_span.data.rpc.call,
                         '/stan.Stan/ManyQuestionsManyReponses')
        self.assertEqual(client_span.data.rpc.host, testenv["grpc_host"])
        self.assertEqual(client_span.data.rpc.port, str(testenv["grpc_port"]))
        self.assertEqual(client_span.data.rpc.call_type, 'stream')
        self.assertIsNone(client_span.data.rpc.error)

        # test-span
        self.assertEqual(test_span.n, 'sdk')
        self.assertEqual(test_span.data.sdk.name, 'test')
Ejemplo n.º 15
0
    def test_no_span(self):
        with tracer.start_active_span('test'):
            self.logger.info('info message')

        spans = self.recorder.queued_spans()
        self.assertEqual(1, len(spans))
Ejemplo n.º 16
0
    def test_302_redirect(self):
        with tracer.start_active_span('test'):
            r = self.http.request('GET', 'http://127.0.0.1:5000/302')

        spans = self.recorder.queued_spans()
        self.assertEqual(5, len(spans))

        wsgi_span2 = spans[0]
        urllib3_span2 = spans[1]
        wsgi_span1 = spans[2]
        urllib3_span1 = spans[3]
        test_span = spans[4]

        assert (r)
        self.assertEqual(200, r.status)
        self.assertIsNone(tracer.active_span)

        # Same traceId
        traceId = test_span.t
        self.assertEqual(traceId, urllib3_span1.t)
        self.assertEqual(traceId, wsgi_span1.t)
        self.assertEqual(traceId, urllib3_span2.t)
        self.assertEqual(traceId, wsgi_span2.t)

        # Parent relationships
        self.assertEqual(urllib3_span1.p, test_span.s)
        self.assertEqual(wsgi_span1.p, urllib3_span1.s)
        self.assertEqual(urllib3_span2.p, test_span.s)
        self.assertEqual(wsgi_span2.p, urllib3_span2.s)

        # Error logging
        self.assertFalse(test_span.error)
        self.assertIsNone(test_span.ec)
        self.assertFalse(urllib3_span1.error)
        self.assertIsNone(urllib3_span1.ec)
        self.assertFalse(wsgi_span1.error)
        self.assertIsNone(wsgi_span1.ec)
        self.assertFalse(urllib3_span2.error)
        self.assertIsNone(urllib3_span2.ec)
        self.assertFalse(wsgi_span2.error)
        self.assertIsNone(wsgi_span2.ec)

        # wsgi
        self.assertEqual("wsgi", wsgi_span1.n)
        self.assertEqual('127.0.0.1:5000', wsgi_span1.data.http.host)
        self.assertEqual('/', wsgi_span1.data.http.url)
        self.assertEqual('GET', wsgi_span1.data.http.method)
        self.assertEqual('200', wsgi_span1.data.http.status)
        self.assertIsNone(wsgi_span1.data.http.error)
        self.assertIsNotNone(wsgi_span1.stack)
        self.assertEqual(2, len(wsgi_span1.stack))

        self.assertEqual("wsgi", wsgi_span2.n)
        self.assertEqual('127.0.0.1:5000', wsgi_span2.data.http.host)
        self.assertEqual('/302', wsgi_span2.data.http.url)
        self.assertEqual('GET', wsgi_span2.data.http.method)
        self.assertEqual('302', wsgi_span2.data.http.status)
        self.assertIsNone(wsgi_span2.data.http.error)
        self.assertIsNotNone(wsgi_span2.stack)
        self.assertEqual(2, len(wsgi_span2.stack))

        # urllib3
        self.assertEqual("test", test_span.data.sdk.name)
        self.assertEqual("urllib3", urllib3_span1.n)
        self.assertEqual(200, urllib3_span1.data.http.status)
        self.assertEqual("http://127.0.0.1:5000/", urllib3_span1.data.http.url)
        self.assertEqual("GET", urllib3_span1.data.http.method)
        self.assertIsNotNone(urllib3_span1.stack)
        self.assertTrue(type(urllib3_span1.stack) is list)
        self.assertTrue(len(urllib3_span1.stack) > 1)

        self.assertEqual("urllib3", urllib3_span2.n)
        self.assertEqual(302, urllib3_span2.data.http.status)
        self.assertEqual("http://127.0.0.1:5000/302",
                         urllib3_span2.data.http.url)
        self.assertEqual("GET", urllib3_span2.data.http.method)
        self.assertIsNotNone(urllib3_span2.stack)
        self.assertTrue(type(urllib3_span2.stack) is list)
        self.assertTrue(len(urllib3_span2.stack) > 1)
Ejemplo n.º 17
0
            question="What did one campfire say to the other?"),
        stan_pb2.QuestionRequest(question="Is cereal soup?"),
        stan_pb2.QuestionRequest(
            question="What is always coming, but never arrives?")
    ]
    for q in questions:
        yield q
        time.sleep(random.uniform(0.2, 0.5))


channel = grpc.insecure_channel(testenv["grpc_server"])
server_stub = stan_pb2_grpc.StanStub(channel)
# The grpc client apparently needs a second to connect and initialize
time.sleep(1)

with tracer.start_active_span('http-server') as scope:
    scope.span.set_tag('http.url', 'https://localhost:8080/grpc-client')
    scope.span.set_tag('http.method', 'GET')
    scope.span.set_tag('span.kind', 'entry')
    response = server_stub.OneQuestionOneResponse(
        stan_pb2.QuestionRequest(question="Are you there?"))

with tracer.start_active_span('http-server') as scope:
    scope.span.set_tag('http.url',
                       'https://localhost:8080/grpc-server-streaming')
    scope.span.set_tag('http.method', 'GET')
    scope.span.set_tag('span.kind', 'entry')
    responses = server_stub.OneQuestionManyResponses(
        stan_pb2.QuestionRequest(question="Are you there?"))

with tracer.start_active_span('http-server') as scope:
Ejemplo n.º 18
0
    def test_custom_header_capture(self):
        # Hack together a manual custom headers list
        agent.options.extra_http_headers = [
            u'X-Capture-This', u'X-Capture-That'
        ]

        request_headers = {}
        request_headers['X-Capture-This'] = 'this'
        request_headers['X-Capture-That'] = 'that'

        with tracer.start_active_span('test'):
            response = self.http.request('GET',
                                         testenv["wsgi_server"] + '/',
                                         headers=request_headers)

        spans = self.recorder.queued_spans()

        self.assertEqual(3, len(spans))
        self.assertIsNone(tracer.active_span)

        wsgi_span = spans[0]
        urllib3_span = spans[1]
        test_span = spans[2]

        assert response
        self.assertEqual(200, response.status)

        assert 'X-INSTANA-T' in response.headers
        assert (int(response.headers['X-INSTANA-T'], 16))
        self.assertEqual(response.headers['X-INSTANA-T'], wsgi_span.t)

        assert 'X-INSTANA-S' in response.headers
        assert (int(response.headers['X-INSTANA-S'], 16))
        self.assertEqual(response.headers['X-INSTANA-S'], wsgi_span.s)

        assert 'X-INSTANA-L' in response.headers
        self.assertEqual(response.headers['X-INSTANA-L'], '1')

        assert 'Server-Timing' in response.headers
        server_timing_value = "intid;desc=%s" % wsgi_span.t
        self.assertEqual(response.headers['Server-Timing'],
                         server_timing_value)

        # Same traceId
        self.assertEqual(test_span.t, urllib3_span.t)
        self.assertEqual(urllib3_span.t, wsgi_span.t)

        # Parent relationships
        self.assertEqual(urllib3_span.p, test_span.s)
        self.assertEqual(wsgi_span.p, urllib3_span.s)

        # Error logging
        self.assertIsNone(test_span.ec)
        self.assertIsNone(urllib3_span.ec)
        self.assertIsNone(wsgi_span.ec)

        # wsgi
        self.assertEqual("wsgi", wsgi_span.n)
        self.assertEqual('127.0.0.1:' + str(testenv['wsgi_port']),
                         wsgi_span.data["http"]["host"])
        self.assertEqual('/', wsgi_span.data["http"]["url"])
        self.assertEqual('GET', wsgi_span.data["http"]["method"])
        self.assertEqual(200, wsgi_span.data["http"]["status"])
        self.assertIsNone(wsgi_span.data["http"]["error"])
        self.assertIsNone(wsgi_span.stack)

        assert "X-Capture-This" in wsgi_span.data["http"]["header"]
        self.assertEqual("this",
                         wsgi_span.data["http"]["header"]["X-Capture-This"])
        assert "X-Capture-That" in wsgi_span.data["http"]["header"]
        self.assertEqual("that",
                         wsgi_span.data["http"]["header"]["X-Capture-That"])
Ejemplo n.º 19
0
def test_send_message(sqs):
    response = None

    # Create the Queue:
    response = sqs.create_queue(QueueName='SQS_QUEUE_NAME',
                                Attributes={
                                    'DelaySeconds': '60',
                                    'MessageRetentionPeriod': '600'
                                })
    assert response['QueueUrl']
    queue_url = response['QueueUrl']

    with tracer.start_active_span('test'):
        response = sqs.send_message(
            QueueUrl=queue_url,
            DelaySeconds=10,
            MessageAttributes={
                'Website': {
                    'DataType': 'String',
                    'StringValue': 'https://www.instana.com'
                },
            },
            MessageBody=('Monitor any application, service, or request '
                         'with Instana Application Performance Monitoring'))

    assert response['MessageId']

    spans = tracer.recorder.queued_spans()
    assert len(spans) == 2

    filter = lambda span: span.n == "sdk"
    test_span = get_first_span_by_filter(spans, filter)
    assert (test_span)

    filter = lambda span: span.n == "boto3"
    boto_span = get_first_span_by_filter(spans, filter)
    assert (boto_span)

    assert (boto_span.t == test_span.t)
    assert (boto_span.p == test_span.s)

    assert (test_span.ec is None)
    assert (boto_span.ec is None)

    assert boto_span.data['boto3']['op'] == 'SendMessage'
    assert boto_span.data['boto3']['ep'] == 'https://queue.amazonaws.com'
    assert boto_span.data['boto3']['reg'] == 'us-east-1'

    payload = {
        'QueueUrl':
        'https://queue.amazonaws.com/123456789012/SQS_QUEUE_NAME',
        'DelaySeconds':
        10,
        'MessageAttributes': {
            'Website': {
                'DataType': 'String',
                'StringValue': 'https://www.instana.com'
            }
        },
        'MessageBody':
        'Monitor any application, service, or request with Instana Application Performance Monitoring'
    }
    assert boto_span.data['boto3']['payload'] == payload

    assert boto_span.data['http']['status'] == 200
    assert boto_span.data['http']['method'] == 'POST'
    assert boto_span.data['http'][
        'url'] == 'https://queue.amazonaws.com:443/SendMessage'
Ejemplo n.º 20
0
    def test_complex_request(self):
        with tracer.start_active_span('test'):
            response = self.http.request('GET',
                                         'http://127.0.0.1:5000/complex')

        spans = self.recorder.queued_spans()
        self.assertEqual(5, len(spans))
        self.assertIsNone(tracer.active_span)

        spacedust_span = spans[0]
        asteroid_span = spans[1]
        wsgi_span = spans[2]
        urllib3_span = spans[3]
        test_span = spans[4]

        assert response
        self.assertEqual(200, response.status)

        assert ('X-Instana-T' in response.headers)
        assert (int(response.headers['X-Instana-T'], 16))
        self.assertEqual(response.headers['X-Instana-T'], wsgi_span.t)

        assert ('X-Instana-S' in response.headers)
        assert (int(response.headers['X-Instana-S'], 16))
        self.assertEqual(response.headers['X-Instana-S'], wsgi_span.s)

        assert ('X-Instana-L' in response.headers)
        self.assertEqual(response.headers['X-Instana-L'], '1')

        assert ('Server-Timing' in response.headers)
        server_timing_value = "intid;desc=%s" % wsgi_span.t
        self.assertEqual(response.headers['Server-Timing'],
                         server_timing_value)

        # Same traceId
        trace_id = test_span.t
        self.assertEqual(trace_id, urllib3_span.t)
        self.assertEqual(trace_id, wsgi_span.t)
        self.assertEqual(trace_id, asteroid_span.t)
        self.assertEqual(trace_id, spacedust_span.t)

        # Parent relationships
        self.assertEqual(urllib3_span.p, test_span.s)
        self.assertEqual(wsgi_span.p, urllib3_span.s)
        self.assertEqual(asteroid_span.p, wsgi_span.s)
        self.assertEqual(spacedust_span.p, asteroid_span.s)

        # Error logging
        self.assertFalse(test_span.error)
        self.assertIsNone(test_span.ec)
        self.assertFalse(urllib3_span.error)
        self.assertIsNone(urllib3_span.ec)
        self.assertFalse(wsgi_span.error)
        self.assertIsNone(wsgi_span.ec)
        self.assertFalse(asteroid_span.error)
        self.assertIsNone(asteroid_span.ec)
        self.assertFalse(spacedust_span.error)
        self.assertIsNone(spacedust_span.ec)

        # wsgi
        self.assertEqual("wsgi", wsgi_span.n)
        self.assertEqual('127.0.0.1:5000', wsgi_span.data.http.host)
        self.assertEqual('/complex', wsgi_span.data.http.url)
        self.assertEqual('GET', wsgi_span.data.http.method)
        self.assertEqual('200', wsgi_span.data.http.status)
        self.assertIsNone(wsgi_span.data.http.error)
        self.assertIsNotNone(wsgi_span.stack)
        self.assertEqual(2, len(wsgi_span.stack))
Ejemplo n.º 21
0
 def launch_gevent_chain(self):
     with tracer.start_active_span('test'):
         gevent.spawn(self.spawn_calls).join()
Ejemplo n.º 22
0
 def spawn_imap_unordered(self):
     igroup = Group()
     result = []
     with tracer.start_active_span('test'):
         for i in igroup.imap_unordered(self.make_http_call, range(3)):
             result.append(i)
Ejemplo n.º 23
0
    def test_complex_request(self):
        with tracer.start_active_span('test'):
            response = self.http.request('GET',
                                         testenv["wsgi_server"] + '/complex')

        spans = self.recorder.queued_spans()
        self.assertEqual(5, len(spans))
        self.assertIsNone(tracer.active_span)

        spacedust_span = spans[0]
        asteroid_span = spans[1]
        wsgi_span = spans[2]
        urllib3_span = spans[3]
        test_span = spans[4]

        assert response
        self.assertEqual(200, response.status)

        assert 'X-INSTANA-T' in response.headers
        assert (int(response.headers['X-INSTANA-T'], 16))
        self.assertEqual(response.headers['X-INSTANA-T'], wsgi_span.t)

        assert 'X-INSTANA-S' in response.headers
        assert (int(response.headers['X-INSTANA-S'], 16))
        self.assertEqual(response.headers['X-INSTANA-S'], wsgi_span.s)

        assert 'X-INSTANA-L' in response.headers
        self.assertEqual(response.headers['X-INSTANA-L'], '1')

        assert 'Server-Timing' in response.headers
        server_timing_value = "intid;desc=%s" % wsgi_span.t
        self.assertEqual(response.headers['Server-Timing'],
                         server_timing_value)

        # Same traceId
        trace_id = test_span.t
        self.assertEqual(trace_id, urllib3_span.t)
        self.assertEqual(trace_id, wsgi_span.t)
        self.assertEqual(trace_id, asteroid_span.t)
        self.assertEqual(trace_id, spacedust_span.t)

        # Parent relationships
        self.assertEqual(urllib3_span.p, test_span.s)
        self.assertEqual(wsgi_span.p, urllib3_span.s)
        self.assertEqual(asteroid_span.p, wsgi_span.s)
        self.assertEqual(spacedust_span.p, asteroid_span.s)

        # Error logging
        self.assertIsNone(test_span.ec)
        self.assertIsNone(urllib3_span.ec)
        self.assertIsNone(wsgi_span.ec)
        self.assertIsNone(asteroid_span.ec)
        self.assertIsNone(spacedust_span.ec)

        # wsgi
        self.assertEqual("wsgi", wsgi_span.n)
        self.assertEqual('127.0.0.1:' + str(testenv['wsgi_port']),
                         wsgi_span.data["http"]["host"])
        self.assertEqual('/complex', wsgi_span.data["http"]["url"])
        self.assertEqual('GET', wsgi_span.data["http"]["method"])
        self.assertEqual(200, wsgi_span.data["http"]["status"])
        self.assertIsNone(wsgi_span.data["http"]["error"])
        self.assertIsNone(wsgi_span.stack)
Ejemplo n.º 24
0
    def test_streaming_many_to_one_with_call(self):
        with tracer.start_active_span('test'):
            response = self.server_stub.ManyQuestionsOneResponse.with_call(
                self.generate_questions())

        self.assertIsNone(tracer.active_span)
        self.assertIsNotNone(response)

        self.assertEqual('Ok', response[0].answer)
        self.assertEqual(True, response[0].was_answered)

        spans = self.recorder.queued_spans()
        self.assertEqual(3, len(spans))

        server_span = get_first_span_by_name(spans, 'rpc-server')
        client_span = get_first_span_by_name(spans, 'rpc-client')
        test_span = get_first_span_by_name(spans, 'sdk')

        assert (server_span)
        assert (client_span)
        assert (test_span)

        # Same traceId
        self.assertEqual(server_span.t, client_span.t)
        self.assertEqual(server_span.t, test_span.t)

        # Parent relationships
        self.assertEqual(server_span.p, client_span.s)
        self.assertEqual(client_span.p, test_span.s)

        # Error logging
        self.assertFalse(test_span.error)
        self.assertIsNone(test_span.ec)
        self.assertFalse(client_span.error)
        self.assertIsNone(client_span.ec)
        self.assertFalse(server_span.error)
        self.assertIsNone(server_span.ec)

        # rpc-server
        self.assertEqual(server_span.n, 'rpc-server')
        self.assertEqual(server_span.k, 1)
        self.assertIsNotNone(server_span.stack)
        self.assertEqual(2, len(server_span.stack))
        self.assertEqual(server_span.data.rpc.flavor, 'grpc')
        self.assertEqual(server_span.data.rpc.call,
                         '/stan.Stan/ManyQuestionsOneResponse')
        self.assertEqual(server_span.data.rpc.host, testenv["grpc_host"])
        self.assertEqual(server_span.data.rpc.port, str(testenv["grpc_port"]))
        self.assertIsNone(server_span.data.rpc.error)

        # rpc-client
        self.assertEqual(client_span.n, 'rpc-client')
        self.assertEqual(client_span.k, 2)
        self.assertIsNotNone(client_span.stack)
        self.assertEqual(client_span.data.rpc.flavor, 'grpc')
        self.assertEqual(client_span.data.rpc.call,
                         '/stan.Stan/ManyQuestionsOneResponse')
        self.assertEqual(client_span.data.rpc.host, testenv["grpc_host"])
        self.assertEqual(client_span.data.rpc.port, str(testenv["grpc_port"]))
        self.assertEqual(client_span.data.rpc.call_type, 'stream')
        self.assertIsNone(client_span.data.rpc.error)

        # test-span
        self.assertEqual(test_span.n, 'sdk')
        self.assertEqual(test_span.data.sdk.name, 'test')
Ejemplo n.º 25
0
    def test_set_get(self):
        result = None
        with tracer.start_active_span('test'):
            self.strict_redis.set('foox', 'barX')
            self.strict_redis.set('fooy', 'barY')
            result = self.strict_redis.get('foox')

        spans = self.recorder.queued_spans()
        self.assertEqual(4, len(spans))

        self.assertEqual(b'barX', result)

        rs1_span = spans[0]
        rs2_span = spans[1]
        rs3_span = spans[2]
        test_span = spans[3]

        self.assertIsNone(tracer.active_span)

        # Same traceId
        self.assertEqual(test_span.t, rs1_span.t)
        self.assertEqual(test_span.t, rs2_span.t)
        self.assertEqual(test_span.t, rs3_span.t)

        # Parent relationships
        self.assertEqual(rs1_span.p, test_span.s)
        self.assertEqual(rs2_span.p, test_span.s)
        self.assertEqual(rs3_span.p, test_span.s)

        # Error logging
        self.assertFalse(test_span.error)
        self.assertIsNone(test_span.ec)
        self.assertFalse(rs1_span.error)
        self.assertIsNone(rs1_span.ec)
        self.assertFalse(rs2_span.error)
        self.assertIsNone(rs2_span.ec)
        self.assertFalse(rs3_span.error)
        self.assertIsNone(rs3_span.ec)

        # Redis span 1
        self.assertEqual('redis', rs1_span.n)
        self.assertFalse('custom' in rs1_span.data.__dict__)
        self.assertTrue('redis' in rs1_span.data.__dict__)

        self.assertEqual('redis-py', rs1_span.data.redis.driver)
        self.assertEqual("redis://%s/0" % testenv['redis_url'],
                         rs1_span.data.redis.connection)
        self.assertEqual("SET", rs1_span.data.redis.command)
        self.assertIsNone(rs1_span.data.redis.error)

        self.assertIsNotNone(rs1_span.stack)
        self.assertTrue(type(rs1_span.stack) is list)
        self.assertGreater(len(rs1_span.stack), 0)

        # Redis span 2
        self.assertEqual('redis', rs2_span.n)
        self.assertFalse('custom' in rs2_span.data.__dict__)
        self.assertTrue('redis' in rs2_span.data.__dict__)

        self.assertEqual('redis-py', rs2_span.data.redis.driver)
        self.assertEqual("redis://%s/0" % testenv['redis_url'],
                         rs2_span.data.redis.connection)
        self.assertEqual("SET", rs2_span.data.redis.command)
        self.assertIsNone(rs2_span.data.redis.error)

        self.assertIsNotNone(rs2_span.stack)
        self.assertTrue(type(rs2_span.stack) is list)
        self.assertGreater(len(rs2_span.stack), 0)

        # Redis span 3
        self.assertEqual('redis', rs3_span.n)
        self.assertFalse('custom' in rs3_span.data.__dict__)
        self.assertTrue('redis' in rs3_span.data.__dict__)

        self.assertEqual('redis-py', rs3_span.data.redis.driver)
        self.assertEqual("redis://%s/0" % testenv['redis_url'],
                         rs3_span.data.redis.connection)
        self.assertEqual("GET", rs3_span.data.redis.command)
        self.assertIsNone(rs3_span.data.redis.error)

        self.assertIsNotNone(rs3_span.stack)
        self.assertTrue(type(rs3_span.stack) is list)
        self.assertGreater(len(rs3_span.stack), 0)
Ejemplo n.º 26
0
    def test_async_stream(self):
        def process_response(future):
            result = future.result()
            self.assertEqual(type(result), stan_pb2.QuestionResponse)
            self.assertTrue(result.was_answered)
            self.assertEqual(result.answer, 'Ok')

        with tracer.start_active_span('test'):
            future = self.server_stub.ManyQuestionsOneResponse.future(
                self.generate_questions())
            future.add_done_callback(process_response)

        # The question generator delays at random intervals between questions so to assure that
        # all questions are sent and processed before we start testing the results.
        time.sleep(5)

        self.assertIsNone(tracer.active_span)
        spans = self.recorder.queued_spans()
        self.assertEqual(3, len(spans))

        server_span = get_first_span_by_name(spans, 'rpc-server')
        client_span = get_first_span_by_name(spans, 'rpc-client')
        test_span = get_first_span_by_name(spans, 'sdk')

        assert (server_span)
        assert (client_span)
        assert (test_span)

        # Same traceId
        self.assertEqual(server_span.t, client_span.t)
        self.assertEqual(server_span.t, test_span.t)

        # Parent relationships
        self.assertEqual(server_span.p, client_span.s)
        self.assertEqual(client_span.p, test_span.s)

        # Error logging
        self.assertFalse(test_span.error)
        self.assertIsNone(test_span.ec)
        self.assertFalse(client_span.error)
        self.assertIsNone(client_span.ec)
        self.assertFalse(server_span.error)
        self.assertIsNone(server_span.ec)

        # rpc-server
        self.assertEqual(server_span.n, 'rpc-server')
        self.assertEqual(server_span.k, 1)
        self.assertIsNotNone(server_span.stack)
        self.assertEqual(2, len(server_span.stack))
        self.assertEqual(server_span.data.rpc.flavor, 'grpc')
        self.assertEqual(server_span.data.rpc.call,
                         '/stan.Stan/ManyQuestionsOneResponse')
        self.assertEqual(server_span.data.rpc.host, testenv["grpc_host"])
        self.assertEqual(server_span.data.rpc.port, str(testenv["grpc_port"]))
        self.assertIsNone(server_span.data.rpc.error)

        # rpc-client
        self.assertEqual(client_span.n, 'rpc-client')
        self.assertEqual(client_span.k, 2)
        self.assertIsNotNone(client_span.stack)
        self.assertEqual(client_span.data.rpc.flavor, 'grpc')
        self.assertEqual(client_span.data.rpc.call,
                         '/stan.Stan/ManyQuestionsOneResponse')
        self.assertEqual(client_span.data.rpc.host, testenv["grpc_host"])
        self.assertEqual(client_span.data.rpc.port, str(testenv["grpc_port"]))
        self.assertEqual(client_span.data.rpc.call_type, 'stream')
        self.assertIsNone(client_span.data.rpc.error)

        # test-span
        self.assertEqual(test_span.n, 'sdk')
        self.assertEqual(test_span.data.sdk.name, 'test')
Ejemplo n.º 27
0
    def test_exception_logging(self):
        with tracer.start_active_span('test'):
            try:
                r = self.http.request('GET', 'http://127.0.0.1:5000/exception')
            except Exception:
                pass

        spans = self.recorder.queued_spans()
        self.assertEqual(4, len(spans))

        log_span = spans[0]
        wsgi_span = spans[1]
        urllib3_span = spans[2]
        test_span = spans[3]

        assert (r)
        self.assertEqual(500, r.status)
        self.assertIsNone(tracer.active_span)

        # Same traceId
        traceId = test_span.t
        self.assertEqual(traceId, urllib3_span.t)
        self.assertEqual(traceId, wsgi_span.t)
        self.assertEqual(traceId, log_span.t)

        # Parent relationships
        self.assertEqual(urllib3_span.p, test_span.s)
        self.assertEqual(wsgi_span.p, urllib3_span.s)
        self.assertEqual(log_span.p, wsgi_span.s)

        # Error logging
        self.assertFalse(test_span.error)
        self.assertIsNone(test_span.ec)
        self.assertTrue(urllib3_span.error)
        self.assertEqual(1, urllib3_span.ec)
        self.assertTrue(wsgi_span.error)
        self.assertEqual(1, wsgi_span.ec)

        # log span
        self.assertEqual('log', log_span.n)
        self.assertEqual(3, log_span.k)
        self.assertTrue(type(log_span.stack) is list)
        self.assertTrue('log' in log_span.data.__dict__)
        self.assertTrue('message' in log_span.data.log)

        # wsgi
        self.assertEqual("wsgi", wsgi_span.n)
        self.assertEqual('127.0.0.1:5000', wsgi_span.data.http.host)
        self.assertEqual('/exception', wsgi_span.data.http.url)
        self.assertEqual('GET', wsgi_span.data.http.method)
        self.assertEqual('500', wsgi_span.data.http.status)
        self.assertIsNone(wsgi_span.data.http.error)
        self.assertIsNotNone(wsgi_span.stack)
        self.assertEqual(2, len(wsgi_span.stack))

        # urllib3
        self.assertEqual("test", test_span.data.sdk.name)
        self.assertEqual("urllib3", urllib3_span.n)
        self.assertEqual(500, urllib3_span.data.http.status)
        self.assertEqual("http://127.0.0.1:5000/exception",
                         urllib3_span.data.http.url)
        self.assertEqual("GET", urllib3_span.data.http.method)
        self.assertIsNotNone(urllib3_span.stack)
        self.assertTrue(type(urllib3_span.stack) is list)
        self.assertTrue(len(urllib3_span.stack) > 1)
Ejemplo n.º 28
0
    def test_unary_one_to_one(self):
        with tracer.start_active_span('test'):
            response = self.server_stub.OneQuestionOneResponse(
                stan_pb2.QuestionRequest(question="Are you there?"))

        self.assertIsNone(tracer.active_span)
        self.assertIsNotNone(response)
        self.assertEqual(
            response.answer,
            "Invention, my dear friends, is 93% perspiration, 6% electricity, 4% evaporation, and 2% butterscotch ripple. – Willy Wonka"
        )

        spans = self.recorder.queued_spans()
        self.assertEqual(3, len(spans))

        server_span = get_first_span_by_name(spans, 'rpc-server')
        client_span = get_first_span_by_name(spans, 'rpc-client')
        test_span = get_first_span_by_name(spans, 'sdk')

        assert (server_span)
        assert (client_span)
        assert (test_span)

        # Same traceId
        self.assertEqual(server_span.t, client_span.t)
        self.assertEqual(server_span.t, test_span.t)

        # Parent relationships
        self.assertEqual(server_span.p, client_span.s)
        self.assertEqual(client_span.p, test_span.s)

        # Error logging
        self.assertFalse(test_span.error)
        self.assertIsNone(test_span.ec)
        self.assertFalse(client_span.error)
        self.assertIsNone(client_span.ec)
        self.assertFalse(server_span.error)
        self.assertIsNone(server_span.ec)

        # rpc-server
        self.assertEqual(server_span.n, 'rpc-server')
        self.assertEqual(server_span.k, 1)
        self.assertIsNotNone(server_span.stack)
        self.assertEqual(2, len(server_span.stack))
        self.assertEqual(server_span.data.rpc.flavor, 'grpc')
        self.assertEqual(server_span.data.rpc.call,
                         '/stan.Stan/OneQuestionOneResponse')
        self.assertEqual(server_span.data.rpc.host, testenv["grpc_host"])
        self.assertEqual(server_span.data.rpc.port, str(testenv["grpc_port"]))
        self.assertIsNone(server_span.data.rpc.error)

        # rpc-client
        self.assertEqual(client_span.n, 'rpc-client')
        self.assertEqual(client_span.k, 2)
        self.assertIsNotNone(client_span.stack)
        self.assertEqual(client_span.data.rpc.flavor, 'grpc')
        self.assertEqual(client_span.data.rpc.call,
                         '/stan.Stan/OneQuestionOneResponse')
        self.assertEqual(client_span.data.rpc.host, testenv["grpc_host"])
        self.assertEqual(client_span.data.rpc.port, str(testenv["grpc_port"]))
        self.assertEqual(client_span.data.rpc.call_type, 'unary')
        self.assertIsNone(client_span.data.rpc.error)

        # test-span
        self.assertEqual(test_span.n, 'sdk')
        self.assertEqual(test_span.data.sdk.name, 'test')
Ejemplo n.º 29
0
    def test_custom_header_capture(self):
        # Hack together a manual custom headers list
        agent.extra_headers = [u'X-Capture-This', u'X-Capture-That']

        request_headers = {}
        request_headers['X-Capture-This'] = 'this'
        request_headers['X-Capture-That'] = 'that'

        with tracer.start_active_span('test'):
            response = self.http.request('GET',
                                         'http://127.0.0.1:5000/',
                                         headers=request_headers)

        spans = self.recorder.queued_spans()

        self.assertEqual(3, len(spans))
        self.assertIsNone(tracer.active_span)

        wsgi_span = spans[0]
        urllib3_span = spans[1]
        test_span = spans[2]

        assert (response)
        self.assertEqual(200, response.status)

        # Same traceId
        self.assertEqual(test_span.t, urllib3_span.t)
        self.assertEqual(urllib3_span.t, wsgi_span.t)

        # Parent relationships
        self.assertEqual(urllib3_span.p, test_span.s)
        self.assertEqual(wsgi_span.p, urllib3_span.s)

        # Error logging
        self.assertFalse(test_span.error)
        self.assertIsNone(test_span.ec)
        self.assertFalse(urllib3_span.error)
        self.assertIsNone(urllib3_span.ec)
        self.assertFalse(wsgi_span.error)
        self.assertIsNone(wsgi_span.ec)

        # wsgi
        self.assertEqual("wsgi", wsgi_span.n)
        self.assertEqual('127.0.0.1:5000', wsgi_span.data.http.host)
        self.assertEqual('/', wsgi_span.data.http.url)
        self.assertEqual('GET', wsgi_span.data.http.method)
        self.assertEqual('200', wsgi_span.data.http.status)
        self.assertIsNone(wsgi_span.data.http.error)
        self.assertIsNotNone(wsgi_span.stack)
        self.assertEqual(2, len(wsgi_span.stack))

        self.assertEqual(
            True, "http.X-Capture-This"
            in wsgi_span.data.custom.__dict__['tags'])
        self.assertEqual(
            "this",
            wsgi_span.data.custom.__dict__['tags']["http.X-Capture-This"])
        self.assertEqual(
            True, "http.X-Capture-That"
            in wsgi_span.data.custom.__dict__['tags'])
        self.assertEqual(
            "that",
            wsgi_span.data.custom.__dict__['tags']["http.X-Capture-That"])
Ejemplo n.º 30
0
    def test_server_error(self):
        try:
            response = None
            with tracer.start_active_span('test'):
                response = self.server_stub.OneQuestionOneErrorResponse(
                    stan_pb2.QuestionRequest(question="Do u error?"))
        except:
            pass

        self.assertIsNone(tracer.active_span)
        self.assertIsNone(response)

        spans = self.recorder.queued_spans()
        self.assertEqual(4, len(spans))

        log_span = get_first_span_by_name(spans, 'log')
        server_span = get_first_span_by_name(spans, 'rpc-server')
        client_span = get_first_span_by_name(spans, 'rpc-client')
        test_span = get_first_span_by_name(spans, 'sdk')

        assert (log_span)
        assert (server_span)
        assert (client_span)
        assert (test_span)

        # Same traceId
        self.assertEqual(server_span.t, client_span.t)
        self.assertEqual(server_span.t, test_span.t)

        # Parent relationships
        self.assertEqual(server_span.p, client_span.s)
        self.assertEqual(client_span.p, test_span.s)

        # Error logging
        self.assertFalse(test_span.error)
        self.assertIsNone(test_span.ec)
        self.assertTrue(client_span.error)
        self.assertEqual(client_span.ec, 1)
        self.assertFalse(server_span.error)
        self.assertIsNone(server_span.ec)

        # rpc-server
        self.assertEqual(server_span.n, 'rpc-server')
        self.assertEqual(server_span.k, 1)
        self.assertIsNotNone(server_span.stack)
        self.assertEqual(2, len(server_span.stack))
        self.assertEqual(server_span.data.rpc.flavor, 'grpc')
        self.assertEqual(server_span.data.rpc.call,
                         '/stan.Stan/OneQuestionOneErrorResponse')
        self.assertEqual(server_span.data.rpc.host, testenv["grpc_host"])
        self.assertEqual(server_span.data.rpc.port, str(testenv["grpc_port"]))
        self.assertIsNone(server_span.data.rpc.error)

        # rpc-client
        self.assertEqual(client_span.n, 'rpc-client')
        self.assertEqual(client_span.k, 2)
        self.assertIsNotNone(client_span.stack)
        self.assertEqual(client_span.data.rpc.flavor, 'grpc')
        self.assertEqual(client_span.data.rpc.call,
                         '/stan.Stan/OneQuestionOneErrorResponse')
        self.assertEqual(client_span.data.rpc.host, testenv["grpc_host"])
        self.assertEqual(client_span.data.rpc.port, str(testenv["grpc_port"]))
        self.assertEqual(client_span.data.rpc.call_type, 'unary')
        self.assertIsNotNone(client_span.data.rpc.error)

        # log
        self.assertEqual(log_span.n, 'log')
        self.assertIsNotNone(log_span.data.log)
        self.assertEqual(log_span.data.log['message'],
                         'Exception calling application: Simulated error')

        # test-span
        self.assertEqual(test_span.n, 'sdk')
        self.assertEqual(test_span.data.sdk.name, 'test')