Skip to content

Commit

Permalink
Use _read_response_body to asyn read the body instead of readBody.
Browse files Browse the repository at this point in the history
Signed-off-by: kareza <kareza@qq.com>
  • Loading branch information
ethanschen committed Aug 21, 2023
1 parent 6524e1c commit 78fb586
Showing 1 changed file with 39 additions and 19 deletions.
58 changes: 39 additions & 19 deletions tests/test_twisted.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
from prometheus_client import CollectorRegistry, Counter, generate_latest

try:
from twisted.internet import reactor
from twisted.internet import defer, protocol, reactor
from twisted.trial.unittest import TestCase
from twisted.web.client import Agent, readBody
from twisted.web.client import Agent
from twisted.web.resource import Resource
from twisted.web.server import Site

Expand All @@ -23,24 +23,44 @@ class MetricsResourceTest(TestCase):
def setUp(self):
self.registry = CollectorRegistry()

def test_reports_metrics(self):
"""
``MetricsResource`` serves the metrics from the provided registry.
"""
c = Counter('cc', 'A counter', registry=self.registry)
c.inc()
@staticmethod
def _read_response_body(response):
class BodyReaderProtocol(protocol.Protocol):
def __init__(self, finished):
self.finished = finished
self.data = b""

root = Resource()
root.putChild(b'metrics', MetricsResource(registry=self.registry))
server = reactor.listenTCP(0, Site(root))
self.addCleanup(server.stopListening)
def dataReceived(self, data):
self.data += data

agent = Agent(reactor)
port = server.getHost().port
url = f"http://localhost:{port}/metrics"
d = agent.request(b"GET", url.encode("ascii"))
def connectionLost(self, reason):
self.finished.callback(self.data)

d.addCallback(readBody)
d.addCallback(self.assertEqual, generate_latest(self.registry))
finished = defer.Deferred()
response.deliverBody(BodyReaderProtocol(finished))
return finished

return d
if HAVE_TWISTED:
@defer.inlineCallbacks
def test_reports_metrics(self):
"""
``MetricsResource`` serves the metrics from the provided registry.
"""
c = Counter('cc', 'A counter', registry=self.registry)
c.inc()

root = Resource()
root.putChild(b'metrics', MetricsResource(registry=self.registry))
server = reactor.listenTCP(0, Site(root))
self.addCleanup(server.stopListening)

agent = Agent(reactor)
port = server.getHost().port
url = f"http://localhost:{port}/metrics"
response = yield agent.request(b"GET", url.encode("ascii"))
body = yield self._read_response_body(response)

self.assertEqual(body, generate_latest(self.registry))
else:
def test_reports_metrics(self):
pass

0 comments on commit 78fb586

Please sign in to comment.