Use HTTP mock server for tornado tests (#1855)

* Use HTTP mock server for tornado tests

Fixes #1681

* Fix lint
This commit is contained in:
Diego Hurtado
2023-06-13 12:01:02 +02:00
committed by GitHub
parent 26c673e7c9
commit bcf770d079
3 changed files with 33 additions and 24 deletions

View File

@ -15,7 +15,11 @@
import pyramid.httpexceptions as exc import pyramid.httpexceptions as exc
from pyramid.response import Response from pyramid.response import Response
from werkzeug.test import Client from werkzeug.test import Client
from werkzeug.wrappers import BaseResponse
# opentelemetry-instrumentation-pyramid uses werkzeug==0.16.1 which has
# werkzeug.wrappers.BaseResponse. This is not the case for newer versions of
# werkzeug like the one lint uses.
from werkzeug.wrappers import BaseResponse # pylint: disable=no-name-in-module
class InstrumentationTest: class InstrumentationTest:

View File

@ -37,6 +37,7 @@ instruments = [
test = [ test = [
"opentelemetry-instrumentation-tornado[instruments]", "opentelemetry-instrumentation-tornado[instruments]",
"opentelemetry-test-utils == 0.40b0.dev", "opentelemetry-test-utils == 0.40b0.dev",
"http-server-mock"
] ]
[project.entry-points.opentelemetry_instrumentor] [project.entry-points.opentelemetry_instrumentor]

View File

@ -15,6 +15,7 @@
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
from http_server_mock import HttpServerMock
from tornado.testing import AsyncHTTPTestCase from tornado.testing import AsyncHTTPTestCase
from opentelemetry import trace from opentelemetry import trace
@ -494,32 +495,35 @@ class TestTornadoInstrumentation(TornadoTest, WsgiTestBase):
self.memory_exporter.clear() self.memory_exporter.clear()
set_global_response_propagator(orig) set_global_response_propagator(orig)
# todo(srikanthccv): fix this test def test_credential_removal(self):
# this test is making request to real httpbin.org/status/200 which app = HttpServerMock("test_credential_removal")
# is not a good idea as it can fail due to availability of the
# service.
# def test_credential_removal(self):
# response = self.fetch(
# "http://username:password@httpbin.org/status/200"
# )
# self.assertEqual(response.code, 200)
# spans = self.sorted_spans(self.memory_exporter.get_finished_spans()) @app.route("/status/200")
# self.assertEqual(len(spans), 1) def index():
# client = spans[0] return "hello"
# self.assertEqual(client.name, "GET") with app.run("localhost", 5000):
# self.assertEqual(client.kind, SpanKind.CLIENT) response = self.fetch(
# self.assertSpanHasAttributes( "http://username:password@localhost:5000/status/200"
# client, )
# { self.assertEqual(response.code, 200)
# SpanAttributes.HTTP_URL: "http://httpbin.org/status/200",
# SpanAttributes.HTTP_METHOD: "GET",
# SpanAttributes.HTTP_STATUS_CODE: 200,
# },
# )
# self.memory_exporter.clear() spans = self.sorted_spans(self.memory_exporter.get_finished_spans())
self.assertEqual(len(spans), 1)
client = spans[0]
self.assertEqual(client.name, "GET")
self.assertEqual(client.kind, SpanKind.CLIENT)
self.assertSpanHasAttributes(
client,
{
SpanAttributes.HTTP_URL: "http://localhost:5000/status/200",
SpanAttributes.HTTP_METHOD: "GET",
SpanAttributes.HTTP_STATUS_CODE: 200,
},
)
self.memory_exporter.clear()
class TestTornadoInstrumentationWithXHeaders(TornadoTest): class TestTornadoInstrumentationWithXHeaders(TornadoTest):