@@ -32,14 +32,10 @@ def setup
3232 @events . push ( *JSON . parse ( request . body ) [ 'events' ] )
3333 return ''
3434 } )
35- Spy . on ( Statsig ::Diagnostics , 'sample' ) . and_return do
36- true
37- end
3835 end
3936
4037 def teardown
4138 super
42- Spy . off ( Statsig ::Diagnostics , 'sample' )
4339 WebMock . reset!
4440 WebMock . disable!
4541 end
@@ -190,12 +186,16 @@ def test_data_adapter_init
190186
191187 def test_api_call_diagnostics
192188 Statsig . initialize ( 'secret-key' )
189+ Spy . on ( Statsig ::Diagnostics , 'sample' ) . and_return do
190+ true
191+ end
193192 user = StatsigUser . new ( user_id : 'test-user' )
194193 Statsig . check_gate_with_exposure_logging_disabled ( user , 'non-existent-gate' )
195194 Statsig . get_config_with_exposure_logging_disabled ( user , 'non-existent-config' )
196195 Statsig . get_experiment_with_exposure_logging_disabled ( user , 'non-existent-experiment' )
197196 Statsig . get_layer_with_exposure_logging_disabled ( user , 'non-existent-layer' )
198197 Statsig . shutdown
198+ Spy . off ( Statsig ::Diagnostics , 'sample' )
199199
200200 keys = Statsig ::Diagnostics ::API_CALL_KEYS
201201
@@ -223,6 +223,72 @@ def test_disable_diagnostics_logging
223223 assert_equal ( 0 , @events . length )
224224 end
225225
226+ def test_diagnostics_sampling
227+ json_file = File . read ( "#{ __dir__ } /data/download_config_specs.json" )
228+ @mock_response = JSON . parse ( json_file )
229+ @mock_response [ 'diagnostics' ] = {
230+ "download_config_specs" : 5000 ,
231+ "get_id_list" : 5000 ,
232+ "get_id_list_sources" : 5000
233+ }
234+ stub_request ( :post , 'https://statsigapi.net/v1/download_config_specs' ) . to_return (
235+ status : 200 ,
236+ body : @mock_response . to_json ,
237+ headers : { 'x-statsig-region' => 'az-westus-2' }
238+ )
239+ driver = StatsigDriver . new (
240+ 'secret-key' ,
241+ StatsigOptions . new (
242+ disable_rulesets_sync : true ,
243+ disable_idlists_sync : true ,
244+ logging_interval_seconds : 9999
245+ )
246+ )
247+ logger = driver . instance_variable_get ( '@logger' )
248+ logger . flush
249+
250+ assert_equal ( 1 , @events . length )
251+ event = @events [ 0 ]
252+ assert_equal ( 'statsig::diagnostics' , event [ 'eventName' ] )
253+
254+ metadata = event [ 'metadata' ]
255+ assert_equal ( 'initialize' , metadata [ 'context' ] )
256+ @events = [ ]
257+
258+ 10 . times do
259+ driver . manually_sync_rulesets
260+ end
261+ logger . flush
262+
263+ assert (
264+ @events . length < 10 && @events . length . positive? ,
265+ "Expected between 0 and 10 events, received #{ @events . length } "
266+ )
267+ event = @events [ 0 ]
268+ assert_equal ( 'statsig::diagnostics' , event [ 'eventName' ] )
269+
270+ metadata = event [ 'metadata' ]
271+ assert_equal ( 'config_sync' , metadata [ 'context' ] )
272+ @events = [ ]
273+
274+ 10 . times do
275+ driver . manually_sync_idlists
276+ end
277+ logger . flush
278+
279+ assert (
280+ @events . length < 10 && @events . length . positive? ,
281+ "Expected between 0 and 10 events, received #{ @events . length } "
282+ )
283+ event = @events [ 0 ]
284+ assert_equal ( 'statsig::diagnostics' , event [ 'eventName' ] )
285+
286+ metadata = event [ 'metadata' ]
287+ assert_equal ( 'config_sync' , metadata [ 'context' ] )
288+
289+ driver . shutdown
290+ end
291+
226292 private
227293
228294 def assert_marker_equal ( marker , key , action , step = nil , tags = { } )
0 commit comments