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
from pyramid.response import Response
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:

View File

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

View File

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