33from prometheus_client import CollectorRegistry , Counter , generate_latest
44
55try :
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