@@ -62,6 +62,54 @@ func TestRTSubscriberFixture(t *testing.T) {
62
62
}
63
63
}
64
64
65
+ func TestRTSubscriberAggOnlyFixture (t * testing.T ) {
66
+ var (
67
+ namespace = "testspace"
68
+ subsystem = "testsystem"
69
+ registry = prometheus .NewRegistry ()
70
+ nameFilter = filter.Filter {}
71
+ metrics = prom .NewMetrics (namespace , subsystem , nameFilter , registry )
72
+ )
73
+
74
+ // Set up a subscriber.
75
+ var (
76
+ client = newMockRealtimeClient (rtResponseFixture , `{}` )
77
+ serviceID = "my-service-id"
78
+ serviceName = "my-service-name"
79
+ serviceVersion = 123
80
+ cache = & mockCache {}
81
+ processed = make (chan struct {})
82
+ postprocess = func () { close (processed ) }
83
+ options = []rt.SubscriberOption {rt .WithMetadataProvider (cache ), rt .WithPostprocess (postprocess ), rt .WithAggregateOnly (true )}
84
+ subscriber = rt .NewSubscriber (client , "irrelevant token" , serviceID , metrics , options ... )
85
+ )
86
+
87
+ // Prep the mock cache.
88
+ cache .update ([]api.Service {{ID : serviceID , Name : serviceName , Version : serviceVersion }})
89
+
90
+ // Tell the subscriber to fetch real-time stats.
91
+ ctx , cancel := context .WithCancel (context .Background ())
92
+ errc := make (chan error , 1 )
93
+ go func () { errc <- subscriber .RunRealtime (ctx ) }()
94
+
95
+ // Block until the subscriber does finishes one fetch
96
+ <- processed
97
+
98
+ // Assert the Prometheus metrics.
99
+ output := prometheusOutput (t , registry , namespace + "_" + subsystem + "_" )
100
+ assertMetricOutput (t , expectedRTMetricsAggOutputMap , output )
101
+
102
+ // Kill the subscriber's goroutine, and wait for it to finish.
103
+ cancel ()
104
+ err := <- errc
105
+ switch {
106
+ case err == nil :
107
+ case errors .Is (err , context .Canceled ):
108
+ case err != nil :
109
+ t .Fatal (err )
110
+ }
111
+ }
112
+
65
113
func TestOriginSubscriberFixture (t * testing.T ) {
66
114
var (
67
115
namespace = "testspace"
@@ -110,6 +158,54 @@ func TestOriginSubscriberFixture(t *testing.T) {
110
158
}
111
159
}
112
160
161
+ func TestOriginSubscriberAggOnlyFixture (t * testing.T ) {
162
+ var (
163
+ namespace = "testspace"
164
+ subsystem = "testsytem"
165
+ registry = prometheus .NewRegistry ()
166
+ nameFilter = filter.Filter {}
167
+ metrics = prom .NewMetrics (namespace , subsystem , nameFilter , registry )
168
+ )
169
+
170
+ // Set up a subscriber.
171
+ var (
172
+ client = newMockRealtimeClient (originsResponseFixture , `{}` )
173
+ serviceID = "my-service-id"
174
+ serviceName = "my-service-name"
175
+ serviceVersion = 123
176
+ cache = & mockCache {}
177
+ processed = make (chan struct {})
178
+ postprocess = func () { close (processed ) }
179
+ options = []rt.SubscriberOption {rt .WithMetadataProvider (cache ), rt .WithPostprocess (postprocess ), rt .WithAggregateOnly (true )}
180
+ subscriber = rt .NewSubscriber (client , "irrelevant token" , serviceID , metrics , options ... )
181
+ )
182
+
183
+ // Prep the mock cache.
184
+ cache .update ([]api.Service {{ID : serviceID , Name : serviceName , Version : serviceVersion }})
185
+
186
+ // Tell the subscriber to fetch real-time stats.
187
+ ctx , cancel := context .WithCancel (context .Background ())
188
+ errc := make (chan error , 1 )
189
+ go func () { errc <- subscriber .RunOrigins (ctx ) }()
190
+
191
+ // Block until the subscriber does finishes one fetch
192
+ <- processed
193
+
194
+ // Assert the Prometheus metrics.
195
+ output := prometheusOutput (t , registry , namespace + "_origin_" )
196
+ assertMetricOutput (t , expectedOriginsMetricsAggOutputMap , output )
197
+
198
+ // Kill the subscriber's goroutine, and wait for it to finish.
199
+ cancel ()
200
+ err := <- errc
201
+ switch {
202
+ case err == nil :
203
+ case errors .Is (err , context .Canceled ):
204
+ case err != nil :
205
+ t .Fatal (err )
206
+ }
207
+ }
208
+
113
209
func TestDomainSubscriberFixture (t * testing.T ) {
114
210
var (
115
211
namespace = "testspace"
@@ -158,6 +254,54 @@ func TestDomainSubscriberFixture(t *testing.T) {
158
254
}
159
255
}
160
256
257
+ func TestDomainSubscriberAggOnlyFixture (t * testing.T ) {
258
+ var (
259
+ namespace = "testspace"
260
+ subsystem = "testsytem"
261
+ registry = prometheus .NewRegistry ()
262
+ nameFilter = filter.Filter {}
263
+ metrics = prom .NewMetrics (namespace , subsystem , nameFilter , registry )
264
+ )
265
+
266
+ // Set up a subscriber.
267
+ var (
268
+ client = newMockRealtimeClient (domainsResponseFixture , `{}` )
269
+ serviceID = "my-service-id"
270
+ serviceName = "my-service-name"
271
+ serviceVersion = 123
272
+ cache = & mockCache {}
273
+ processed = make (chan struct {})
274
+ postprocess = func () { close (processed ) }
275
+ options = []rt.SubscriberOption {rt .WithMetadataProvider (cache ), rt .WithPostprocess (postprocess ), rt .WithAggregateOnly (true )}
276
+ subscriber = rt .NewSubscriber (client , "irrelevant token" , serviceID , metrics , options ... )
277
+ )
278
+
279
+ // Prep the mock cache.
280
+ cache .update ([]api.Service {{ID : serviceID , Name : serviceName , Version : serviceVersion }})
281
+
282
+ // Tell the subscriber to fetch real-time stats.
283
+ ctx , cancel := context .WithCancel (context .Background ())
284
+ errc := make (chan error , 1 )
285
+ go func () { errc <- subscriber .RunDomains (ctx ) }()
286
+
287
+ // Block until the subscriber does finishes one fetch
288
+ <- processed
289
+
290
+ // Assert the Prometheus metrics.
291
+ output := prometheusOutput (t , registry , namespace + "_domain_" )
292
+ assertMetricOutput (t , expectedDomainsMetricsAggOutputMap , output )
293
+
294
+ // Kill the subscriber's goroutine, and wait for it to finish.
295
+ cancel ()
296
+ err := <- errc
297
+ switch {
298
+ case err == nil :
299
+ case errors .Is (err , context .Canceled ):
300
+ case err != nil :
301
+ t .Fatal (err )
302
+ }
303
+ }
304
+
161
305
func TestSubscriberNoData (t * testing.T ) {
162
306
var (
163
307
client = newMockRealtimeClient (`{"Error": "No data available, please retry"}` , `{}` )
0 commit comments