def test_sampling_request_callback(): channel = mock.MagicMock() channel.io_loop = mock.MagicMock() error_reporter = mock.MagicMock() error_reporter.error = mock.MagicMock() sampler = RemoteControlledSampler( channel=channel, service_name='x', error_reporter=error_reporter, max_operations=10, ) return_value = mock.MagicMock() return_value.exception = lambda *args: False probabilistic_strategy = """ { "strategyType":"PROBABILISTIC", "probabilisticSampling": { "samplingRate":0.002 } } """ return_value.result = lambda *args: \ type('obj', (object,), {'body': probabilistic_strategy})() sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == \ 'ProbabilisticSampler(0.002)', 'sampler should have changed to probabilistic' prev_sampler = sampler.sampler sampler._sampling_request_callback(return_value) assert prev_sampler is sampler.sampler, \ "strategy hasn't changed so sampler should not change" adaptive_sampling_strategy = """ { "strategyType":"PROBABILISTIC", "operationSampling": { "defaultSamplingProbability":0.001, "defaultLowerBoundTracesPerSecond":2, "perOperationStrategies": [ { "operation":"op", "probabilisticSampling":{ "samplingRate":0.002 } } ] } } """ return_value.result = lambda *args: \ type('obj', (object,), {'body': adaptive_sampling_strategy})() sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'AdaptiveSampler(0.001000, 2.000000, 10)', \ 'sampler should have changed to adaptive' prev_sampler = sampler.sampler sampler._sampling_request_callback(return_value) assert prev_sampler is sampler.sampler, "strategy hasn't changed so sampler should not change" probabilistic_strategy_bytes = probabilistic_strategy.encode('utf-8') return_value.result = lambda *args: \ type('obj', (object,), {'body': probabilistic_strategy_bytes})() sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == \ 'ProbabilisticSampler(0.002)', 'sampler should have changed to probabilistic' adaptive_sampling_strategy_bytearray = bytearray(adaptive_sampling_strategy.encode('utf-8')) return_value.result = lambda *args: \ type('obj', (object,), {'body': adaptive_sampling_strategy_bytearray})() sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'AdaptiveSampler(0.001000, 2.000000, 10)', \ 'sampler should have changed to adaptive' prev_sampler = sampler.sampler return_value.exception = lambda *args: True sampler._sampling_request_callback(return_value) assert error_reporter.error.call_count == 1 assert prev_sampler is sampler.sampler, 'error fetching strategy should not update the sampler' return_value.exception = lambda *args: False return_value.result = lambda *args: type('obj', (object,), {'body': 'bad_json'})() sampler._sampling_request_callback(return_value) assert error_reporter.error.call_count == 2 assert prev_sampler is sampler.sampler, 'error updating sampler should not update the sampler' return_value.result = lambda *args: \ type('obj', (object,), {'body': None})() sampler._sampling_request_callback(return_value) assert error_reporter.error.call_count == 3 assert prev_sampler is sampler.sampler, 'error updating sampler should not update the sampler' return_value.result = lambda *args: \ type('obj', (object,), {'body': {'decode': None}})() sampler._sampling_request_callback(return_value) assert error_reporter.error.call_count == 4 assert prev_sampler is sampler.sampler, 'error updating sampler should not update the sampler' return_value.result = lambda *args: \ type('obj', (object,), {'body': probabilistic_strategy})() sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'ProbabilisticSampler(0.002)', \ 'updating sampler from adaptive to probabilistic should work' sampler.close()
def test_sampling_request_callback(): channel = mock.MagicMock() channel.io_loop = mock.MagicMock() error_reporter = mock.MagicMock() error_reporter.error = mock.MagicMock() sampler = RemoteControlledSampler( channel=channel, service_name='x', error_reporter=error_reporter, max_operations=10, ) return_value = mock.MagicMock() return_value.exception = lambda *args: False probabilistic_strategy = """ { "strategyType":"PROBABILISTIC", "probabilisticSampling": { "samplingRate":0.002 } } """ return_value.result = lambda *args: \ type('obj', (object,), {'body': probabilistic_strategy})() sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'ProbabilisticSampler(0.002)', 'sampler should have changed to probabilistic' prev_sampler = sampler.sampler sampler._sampling_request_callback(return_value) assert prev_sampler is sampler.sampler, "strategy hasn't changed so sampler should not change" adaptive_sampling_strategy = """ { "strategyType":"PROBABILISTIC", "operationSampling": { "defaultSamplingProbability":0.001, "defaultLowerBoundTracesPerSecond":2, "perOperationStrategies": [ { "operation":"op", "probabilisticSampling":{ "samplingRate":0.002 } } ] } } """ return_value.result = lambda *args: \ type('obj', (object,), {'body': adaptive_sampling_strategy})() sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'AdaptiveSampler(0.001000, 2.000000, 10)', 'sampler should have changed to adaptive' prev_sampler = sampler.sampler sampler._sampling_request_callback(return_value) assert prev_sampler is sampler.sampler, "strategy hasn't changed so sampler should not change" probabilistic_strategy_bytes = probabilistic_strategy.encode('utf-8') return_value.result = lambda *args: \ type('obj', (object,), {'body': probabilistic_strategy_bytes})() sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'ProbabilisticSampler(0.002)', 'sampler should have changed to probabilistic' adaptive_sampling_strategy_bytearray = bytearray(adaptive_sampling_strategy.encode('utf-8')) return_value.result = lambda *args: \ type('obj', (object,), {'body': adaptive_sampling_strategy_bytearray})() sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'AdaptiveSampler(0.001000, 2.000000, 10)', 'sampler should have changed to adaptive' prev_sampler = sampler.sampler return_value.exception = lambda *args: True sampler._sampling_request_callback(return_value) assert error_reporter.error.call_count == 1 assert prev_sampler is sampler.sampler, 'error fetching strategy should not update the sampler' return_value.exception = lambda *args: False return_value.result = lambda *args: type('obj', (object,), {'body': 'bad_json'})() sampler._sampling_request_callback(return_value) assert error_reporter.error.call_count == 2 assert prev_sampler is sampler.sampler, 'error updating sampler should not update the sampler' return_value.result = lambda *args: \ type('obj', (object,), {'body': None})() sampler._sampling_request_callback(return_value) assert error_reporter.error.call_count == 3 assert prev_sampler is sampler.sampler, 'error updating sampler should not update the sampler' return_value.result = lambda *args: \ type('obj', (object,), {'body': {'decode': None}})() sampler._sampling_request_callback(return_value) assert error_reporter.error.call_count == 4 assert prev_sampler is sampler.sampler, 'error updating sampler should not update the sampler' return_value.result = lambda *args: \ type('obj', (object,), {'body': probabilistic_strategy})() sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'ProbabilisticSampler(0.002)', 'updating sampler from adaptive to probabilistic should work' sampler.close()
def test_sampling_request_callback(): channel = mock.MagicMock() channel.io_loop = mock.MagicMock() error_reporter = mock.MagicMock() error_reporter.error = mock.MagicMock() sampler = RemoteControlledSampler( channel=channel, service_name='x', error_reporter=error_reporter, max_operations=10, ) return_value = mock.MagicMock() return_value.exception = lambda *args: False return_value.result = lambda *args: type('obj', (object,), {'body': 'bad_json'})() # noinspection PyProtectedMember sampler._sampling_request_callback(return_value) assert error_reporter.error.call_count == 1 # Strategy has changed to new probabilistic sampler return_value.result = lambda *args: \ type('obj', (object,), {'body': '{"strategyType":0,"probabilisticSampling":{"samplingRate":0.002}}'})() # noinspection PyProtectedMember sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'ProbabilisticSampler(0.002)' # Strategy hasn't changed # noinspection PyProtectedMember sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'ProbabilisticSampler(0.002)' # Strategy changed to AdaptiveSampler strategy = """ { "strategyType":1, "operationSampling": { "defaultSamplingProbability":0.001, "defaultLowerBoundTracesPerSecond":2, "perOperationStrategies": [ { "operation":"op", "probabilisticSampling":{ "samplingRate":0.002 } } ] } } """ return_value.result = lambda *args: \ type('obj', (object,), {'body': strategy})() # noinspection PyProtectedMember sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'AdaptiveSampler(0.001, 2, 10)' # Strategy hasn't changed # noinspection PyProtectedMember sampler._sampling_request_callback(return_value) assert '%s' % sampler.sampler == 'AdaptiveSampler(0.001, 2, 10)' return_value.exception = lambda *args: True # noinspection PyProtectedMember sampler._sampling_request_callback(return_value) assert error_reporter.error.call_count == 2 sampler.close()