11import XCTest
2+ import NIO
23@testable import Prometheus
34@testable import CoreMetrics
45
56final class PrometheusMetricsTests : XCTestCase {
67
78 var prom : PrometheusClient !
9+ var group : EventLoopGroup !
10+ var eventLoop : EventLoop {
11+ return group. next ( )
12+ }
813
914 override func setUp( ) {
1015 self . prom = PrometheusClient ( )
16+ self . group = MultiThreadedEventLoopGroup ( numberOfThreads: 1 )
1117 MetricsSystem . bootstrapInternal ( prom)
1218 }
1319
1420 override func tearDown( ) {
1521 self . prom = nil
22+ try ! self . group. syncShutdownGracefully ( )
1623 }
1724
1825 func testCounter( ) {
1926 let counter = Counter ( label: " my_counter " )
2027 counter. increment ( by: 10 )
2128 let counterTwo = Counter ( label: " my_counter " , dimensions: [ ( " myValue " , " labels " ) ] )
2229 counterTwo. increment ( by: 10 )
23-
24- XCTAssertEqual ( prom. collect ( ) , """
30+
31+ let promise = self . eventLoop. makePromise ( of: String . self)
32+ prom. collect ( promise. succeed)
33+
34+ XCTAssertEqual ( try ! promise. futureResult. wait ( ) , """
2535 # TYPE my_counter counter
2636 my_counter 10
2737 my_counter{myValue= \" labels \" } 10
@@ -38,7 +48,10 @@ final class PrometheusMetricsTests: XCTestCase {
3848 let gaugeTwo = Gauge ( label: " my_gauge " , dimensions: [ ( " myValue " , " labels " ) ] )
3949 gaugeTwo. record ( 10 )
4050
41- XCTAssertEqual ( prom. collect ( ) , """
51+ let promise = self . eventLoop. makePromise ( of: String . self)
52+ prom. collect ( promise. succeed)
53+
54+ XCTAssertEqual ( try ! promise. futureResult. wait ( ) , """
4255 # TYPE my_gauge gauge
4356 my_gauge 20.0
4457 my_gauge{myValue= \" labels \" } 10.0
@@ -54,7 +67,10 @@ final class PrometheusMetricsTests: XCTestCase {
5467 let recorderTwo = Recorder ( label: " my_histogram " , dimensions: [ ( " myValue " , " labels " ) ] )
5568 recorderTwo. record ( 3 )
5669
57- XCTAssertEqual ( prom. collect ( ) , """
70+ let promise = self . eventLoop. makePromise ( of: String . self)
71+ prom. collect ( promise. succeed)
72+
73+ XCTAssertEqual ( try ! promise. futureResult. wait ( ) , """
5874 # TYPE my_histogram histogram
5975 my_histogram_bucket{le= " 0.005 " } 0.0
6076 my_histogram_bucket{le= " 0.01 " } 0.0
@@ -104,7 +120,10 @@ final class PrometheusMetricsTests: XCTestCase {
104120 let summaryTwo = Timer ( label: " my_summary " , dimensions: [ ( " myValue " , " labels " ) ] )
105121 summaryTwo. recordNanoseconds ( 123 )
106122
107- XCTAssertEqual ( prom. collect ( ) , """
123+ let promise = self . eventLoop. makePromise ( of: String . self)
124+ prom. collect ( promise. succeed)
125+
126+ XCTAssertEqual ( try ! promise. futureResult. wait ( ) , """
108127 # TYPE my_summary summary
109128 my_summary{quantile= " 0.01 " } 1.0
110129 my_summary{quantile= " 0.05 " } 1.0
@@ -131,7 +150,27 @@ final class PrometheusMetricsTests: XCTestCase {
131150 let counter = Counter ( label: " my_counter " )
132151 counter. increment ( )
133152 counter. destroy ( )
134- XCTAssertEqual ( prom. collect ( ) , " " )
153+ let promise = self . eventLoop. makePromise ( of: String . self)
154+ prom. collect ( promise. succeed)
155+
156+ XCTAssertEqual ( try ! promise. futureResult. wait ( ) , " " )
157+ }
158+
159+ func testBuffer( ) {
160+ let counter = Counter ( label: " my_counter " )
161+ counter. increment ( by: 10 )
162+ let counterTwo = Counter ( label: " my_counter " , dimensions: [ ( " myValue " , " labels " ) ] )
163+ counterTwo. increment ( by: 10 )
164+
165+ let promise = self . eventLoop. makePromise ( of: ByteBuffer . self)
166+ prom. collect ( promise. succeed)
167+ var buffer = try ! promise. futureResult. wait ( )
168+
169+ XCTAssertEqual ( buffer. readString ( length: buffer. readableBytes) , """
170+ # TYPE my_counter counter
171+ my_counter 10
172+ my_counter{myValue= \" labels \" } 10
173+ """ )
135174 }
136175}
137176
0 commit comments