@@ -132,7 +132,7 @@ def test_metrics
132
132
133
133
assert_equal 0 , freq_map . size , "not all pending metrics were flushed"
134
134
assert_equal 1 , connector . get_captured_metrics . size
135
- assert_equal 2 , connector . get_captured_metrics [ 0 ] . target_data . size , "there should only be 2 targets"
135
+ assert_equal 1 , connector . get_captured_metrics [ 0 ] . target_data . size , "there should only be 1 targets"
136
136
137
137
connector . get_captured_metrics . each do |metric |
138
138
metric . metrics_data . each do |metric_data |
@@ -156,16 +156,15 @@ def assert_target_data(target_data)
156
156
end
157
157
end
158
158
159
- assert targets . key? ( "__global__cf_target" )
160
159
assert targets . key? ( "target-id" )
161
160
end
162
161
163
162
def test_frequency_map_increment
164
163
165
164
map = MetricsProcessor ::FrequencyMap . new
166
165
167
- event1 = MetricsEvent . new ( @feature1 , @target , @variation1 )
168
- event2 = MetricsEvent . new ( @feature2 , @target , @variation2 )
166
+ event1 = MetricsEvent . new ( @feature1 , @target , @variation1 , Logger . new ( STDOUT ) )
167
+ event2 = MetricsEvent . new ( @feature2 , @target , @variation2 , Logger . new ( STDOUT ) )
169
168
170
169
map . increment event1
171
170
map . increment event2
@@ -180,8 +179,8 @@ def test_frequency_map_increment
180
179
def test_frequency_map_drain_to_map
181
180
map = MetricsProcessor ::FrequencyMap . new
182
181
183
- event1 = MetricsEvent . new ( @feature1 , @target , @variation1 )
184
- event2 = MetricsEvent . new ( @feature2 , @target , @variation2 )
182
+ event1 = MetricsEvent . new ( @feature1 , @target , @variation1 , Logger . new ( STDOUT ) )
183
+ event2 = MetricsEvent . new ( @feature2 , @target , @variation2 , Logger . new ( STDOUT ) )
185
184
186
185
map . increment event1
187
186
map . increment event2
@@ -209,39 +208,70 @@ def test_comparable_metrics_event_equals_and_hash
209
208
assert ( event1 != event2 )
210
209
end
211
210
212
- def test_metrics_event_eql_with_invalid_object
213
- event = MetricsEvent . new ( @feature1 , @target , @variation1 , Logger . new ( STDOUT ) )
214
- non_event = "Not a MetricsEvent"
215
-
216
- refute_equal ( event , non_event , "MetricsEvent should not be equal to a non-MetricsEvent object" )
217
- end
218
-
219
- def test_flush_map_when_buffer_fills
220
-
211
+ def test_metrics_processor_prevents_invalid_metrics_event
221
212
logger = Logger . new ( STDOUT )
222
213
callback = TestCallback . new
223
214
connector = TestConnector . new
224
215
config = Minitest ::Mock . new
225
216
config . expect :kind_of? , true , [ Config . class ]
226
217
config . expect :metrics_service_acceptable_duration , 10000
227
218
228
- ( 1 ..30 ) . each { |_ | config . expect :buffer_size , 2 }
229
- ( 1 ..30 ) . each { |_ | config . expect :logger , logger }
219
+ ( 1 ..20 ) . each { |_ | config . expect :buffer_size , 10 }
220
+ ( 1 ..20 ) . each { |_ | config . expect :logger , logger }
230
221
231
222
metrics_processor = MetricsProcessor . new
232
- metrics_processor . init connector , config , callback
223
+ metrics_processor . init ( connector , config , callback )
233
224
234
225
callback . wait_until_ready
235
226
236
- # several evaluations with a buffer size of 2
237
- metrics_processor . register_evaluation @target , @feature1 , @variation1
238
- metrics_processor . register_evaluation @target , @feature1 , @variation2
239
- metrics_processor . register_evaluation @target , @feature2 , @variation1
240
- metrics_processor . register_evaluation @target , @feature2 , @variation2
227
+ # Attempt to register invalid evaluations
228
+ metrics_processor . register_evaluation ( @target , nil , @variation1 )
229
+ metrics_processor . register_evaluation ( @target , nil , nil )
230
+ metrics_processor . register_evaluation ( nil , @feature1 , nil )
231
+
241
232
242
- assert connector . wait_for_metrics , "no metrics were posted"
233
+ # Register some valid evaluations
234
+ metrics_processor . register_evaluation ( @target , @feature1 , @variation1 )
235
+ metrics_processor . register_evaluation ( @target , @feature2 , @variation2 )
236
+ # Nil target, which is a valid input to variation methods
237
+ metrics_processor . register_evaluation ( nil , @feature2 , @variation2 )
243
238
239
+ # Run iteration
240
+ metrics_processor . send ( :run_one_iteration )
241
+
242
+ # Wait for metrics to be posted
243
+ connector . wait_for_metrics
244
+
245
+ # Check that only valid metrics are sent
246
+ captured_metrics = connector . get_captured_metrics
247
+ assert_equal 1 , captured_metrics . size , "Only one metrics batch should be sent"
248
+
249
+ metrics_data = captured_metrics [ 0 ] . metrics_data
250
+
251
+ # Since we have two valid events, two metrics_data should be present
252
+ assert_equal 2 , metrics_data . size , "Invalid metrics should be ignored"
253
+
254
+ # Verify that only valid features are present in sent metrics
255
+ sent_features = metrics_data . map { |md | md . attributes . find { |kv | kv . key == "featureName" } . value }
256
+ assert_includes ( sent_features , "feature-name" )
257
+ assert_includes ( sent_features , "feature-name2" ) # Assuming @feature2 has "feature-name2"
258
+
259
+ # Invalid event is not among the sent features
260
+ refute_includes ( sent_features , nil , "Invalid MetricsEvent should not be included in metrics_data" )
261
+
262
+ # Valid events were processed correctly
263
+ assert_equal 2 , metrics_data . size , "There should be two metrics_data entries for valid events"
264
+
265
+ # Target data is still correctly sent
266
+ assert_equal 1 , captured_metrics [ 0 ] . target_data . size , "There should only be a single target"
244
267
end
245
268
246
269
270
+ def test_metrics_event_eql_with_invalid_object
271
+ event = MetricsEvent . new ( @feature1 , @target , @variation1 , Logger . new ( STDOUT ) )
272
+ non_event = "Not a MetricsEvent"
273
+
274
+ refute_equal ( event , non_event , "MetricsEvent should not be equal to a non-MetricsEvent object" )
275
+ end
276
+
247
277
end
0 commit comments