Skip to content

Commit 78fb586

Browse files
committed
Use _read_response_body to asyn read the body instead of readBody.
Signed-off-by: kareza <kareza@qq.com>
1 parent 6524e1c commit 78fb586

File tree

1 file changed

+39
-19
lines changed

1 file changed

+39
-19
lines changed

tests/test_twisted.py

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
from prometheus_client import CollectorRegistry, Counter, generate_latest
44

55
try:
6-
from twisted.internet import reactor
6+
from twisted.internet import defer, protocol, reactor
77
from twisted.trial.unittest import TestCase
8-
from twisted.web.client import Agent, readBody
8+
from twisted.web.client import Agent
99
from twisted.web.resource import Resource
1010
from twisted.web.server import Site
1111

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

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

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

38-
agent = Agent(reactor)
39-
port = server.getHost().port
40-
url = f"http://localhost:{port}/metrics"
41-
d = agent.request(b"GET", url.encode("ascii"))
36+
def connectionLost(self, reason):
37+
self.finished.callback(self.data)
4238

43-
d.addCallback(readBody)
44-
d.addCallback(self.assertEqual, generate_latest(self.registry))
39+
finished = defer.Deferred()
40+
response.deliverBody(BodyReaderProtocol(finished))
41+
return finished
4542

46-
return d
43+
if HAVE_TWISTED:
44+
@defer.inlineCallbacks
45+
def test_reports_metrics(self):
46+
"""
47+
``MetricsResource`` serves the metrics from the provided registry.
48+
"""
49+
c = Counter('cc', 'A counter', registry=self.registry)
50+
c.inc()
51+
52+
root = Resource()
53+
root.putChild(b'metrics', MetricsResource(registry=self.registry))
54+
server = reactor.listenTCP(0, Site(root))
55+
self.addCleanup(server.stopListening)
56+
57+
agent = Agent(reactor)
58+
port = server.getHost().port
59+
url = f"http://localhost:{port}/metrics"
60+
response = yield agent.request(b"GET", url.encode("ascii"))
61+
body = yield self._read_response_body(response)
62+
63+
self.assertEqual(body, generate_latest(self.registry))
64+
else:
65+
def test_reports_metrics(self):
66+
pass

0 commit comments

Comments
 (0)