def test_inc_gauge(self, mocker): """Test incrementing latency.""" adapter = mocker.Mock(spec=RedisAdapter) metadata = get_metadata({}) storage = RedisTelemetryStorage(adapter, metadata) storage.put_gauge('gauge1', 123) storage.put_gauge('gauge2', 456) assert adapter.set.mock_calls == [ mocker.call('SPLITIO/' + metadata.sdk_version + '/' + metadata.instance_name + '/gauge.gauge1', 123), mocker.call('SPLITIO/' + metadata.sdk_version + '/' + metadata.instance_name + '/gauge.gauge2', 456) ]
def test_add_latency_to_pipe(self, mocker): """Test incrementing latency.""" adapter = mocker.Mock(spec=RedisAdapter) metadata = get_metadata({}) storage = RedisTelemetryStorage(adapter, metadata) storage.inc_latency('some_latency', 0) storage.inc_latency('some_latency', 1) storage.inc_latency('some_latency', 5) storage.inc_latency('some_latency', 5) storage.inc_latency('some_latency', 22) assert adapter.incr.mock_calls == [ mocker.call('SPLITIO/' + metadata.sdk_version + '/' + metadata.instance_name + '/latency.some_latency.bucket.0'), mocker.call('SPLITIO/' + metadata.sdk_version + '/' + metadata.instance_name + '/latency.some_latency.bucket.1'), mocker.call('SPLITIO/' + metadata.sdk_version + '/' + metadata.instance_name + '/latency.some_latency.bucket.5'), mocker.call('SPLITIO/' + metadata.sdk_version + '/' + metadata.instance_name + '/latency.some_latency.bucket.5') ]
def test_inc_counter(self, mocker): """Test incrementing latency.""" adapter = mocker.Mock(spec=RedisAdapter) metadata = get_metadata({}) storage = RedisTelemetryStorage(adapter, metadata) storage.inc_counter('some_counter_1') storage.inc_counter('some_counter_1') storage.inc_counter('some_counter_1') storage.inc_counter('some_counter_2') storage.inc_counter('some_counter_2') assert adapter.incr.mock_calls == [ mocker.call('SPLITIO/' + metadata.sdk_version + '/' + metadata.instance_name + '/count.some_counter_1'), mocker.call('SPLITIO/' + metadata.sdk_version + '/' + metadata.instance_name + '/count.some_counter_1'), mocker.call('SPLITIO/' + metadata.sdk_version + '/' + metadata.instance_name + '/count.some_counter_1'), mocker.call('SPLITIO/' + metadata.sdk_version + '/' + metadata.instance_name + '/count.some_counter_2'), mocker.call('SPLITIO/' + metadata.sdk_version + '/' + metadata.instance_name + '/count.some_counter_2') ]
def _build_redis_factory(config): """Build and return a split factory with redis-based storage.""" cfg = DEFAULT_CONFIG.copy() cfg.update(config) sdk_metadata = util.get_metadata(config) redis_adapter = redis.build(config) storages = { 'splits': RedisSplitStorage(redis_adapter), 'segments': RedisSegmentStorage(redis_adapter), 'impressions': RedisImpressionsStorage(redis_adapter, sdk_metadata), 'events': RedisEventsStorage(redis_adapter, sdk_metadata), 'telemetry': RedisTelemetryStorage(redis_adapter, sdk_metadata) } return SplitFactory(storages, cfg['labelsEnabled'], impression_listener=_wrap_impression_listener( cfg['impressionListener'], sdk_metadata))
def setup_method(self): """Prepare storages with test data.""" metadata = SdkMetadata('python-1.2.3', 'some_ip', 'some_name') redis_client = RedisAdapter(StrictRedis()) split_storage = RedisSplitStorage(redis_client, True) segment_storage = RedisSegmentStorage(redis_client) split_fn = os.path.join(os.path.dirname(__file__), 'files', 'splitChanges.json') with open(split_fn, 'r') as flo: data = json.loads(flo.read()) for split in data['splits']: redis_client.set(split_storage._get_key(split['name']), json.dumps(split)) redis_client.set(split_storage._SPLIT_TILL_KEY, data['till']) segment_fn = os.path.join(os.path.dirname(__file__), 'files', 'segmentEmployeesChanges.json') with open(segment_fn, 'r') as flo: data = json.loads(flo.read()) redis_client.sadd(segment_storage._get_key(data['name']), *data['added']) redis_client.set(segment_storage._get_till_key(data['name']), data['till']) segment_fn = os.path.join(os.path.dirname(__file__), 'files', 'segmentHumanBeignsChanges.json') with open(segment_fn, 'r') as flo: data = json.loads(flo.read()) redis_client.sadd(segment_storage._get_key(data['name']), *data['added']) redis_client.set(segment_storage._get_till_key(data['name']), data['till']) self.factory = SplitFactory( 'some_api_key', { #pylint:disable=attribute-defined-outside-init 'splits': split_storage, 'segments': segment_storage, 'impressions': RedisImpressionsStorage(redis_client, metadata), 'events': RedisEventsStorage(redis_client, metadata), 'telemetry': RedisTelemetryStorage(redis_client, metadata) }, True)
def _build_redis_factory(api_key, cfg): """Build and return a split factory with redis-based storage.""" sdk_metadata = util.get_metadata(cfg) redis_adapter = redis.build(cfg) cache_enabled = cfg.get('redisLocalCacheEnabled', False) cache_ttl = cfg.get('redisLocalCacheTTL', 5) storages = { 'splits': RedisSplitStorage(redis_adapter, cache_enabled, cache_ttl), 'segments': RedisSegmentStorage(redis_adapter), 'impressions': RedisImpressionsStorage(redis_adapter, sdk_metadata), 'events': RedisEventsStorage(redis_adapter, sdk_metadata), 'telemetry': RedisTelemetryStorage(redis_adapter, sdk_metadata) } return SplitFactory( api_key, storages, cfg['labelsEnabled'], ImpressionsManager(storages['impressions'].put, cfg['impressionsMode'], False, _wrap_impression_listener(cfg['impressionListener'], sdk_metadata)) )
def test_put_fetch_contains_ip_address_disabled(self): """Test storing and retrieving splits in redis.""" adapter = _build_default_client({}) cfg = DEFAULT_CONFIG.copy() cfg.update({'IPAddressesEnabled': False}) metadata = get_metadata(cfg) storage = RedisTelemetryStorage(adapter, metadata) try: storage.inc_counter('counter1') storage.inc_counter('counter1') storage.inc_counter('counter2') assert adapter.get(storage._get_counter_key('counter1')) == '2' assert adapter.get(storage._get_counter_key('counter2')) == '1' storage.inc_latency('latency1', 3) storage.inc_latency('latency1', 3) storage.inc_latency('latency2', 6) assert adapter.get(storage._get_latency_key('latency1', 3)) == '2' assert adapter.get(storage._get_latency_key('latency2', 6)) == '1' storage.put_gauge('gauge1', 3) storage.put_gauge('gauge2', 1) assert adapter.get(storage._get_gauge_key('gauge1')) == '3' assert adapter.get(storage._get_gauge_key('gauge2')) == '1' finally: adapter.delete(storage._get_counter_key('counter1'), storage._get_counter_key('counter2'), storage._get_latency_key('latency1', 3), storage._get_latency_key('latency2', 6), storage._get_gauge_key('gauge1'), storage._get_gauge_key('gauge2'))
def test_put_fetch_contains(self): """Test storing and retrieving splits in redis.""" adapter = _build_default_client({}) metadata = get_metadata({}) storage = RedisTelemetryStorage(adapter, metadata) try: storage.inc_counter('counter1') storage.inc_counter('counter1') storage.inc_counter('counter2') assert adapter.get(storage._get_counter_key('counter1')) == '2' assert adapter.get(storage._get_counter_key('counter2')) == '1' storage.inc_latency('latency1', 3) storage.inc_latency('latency1', 3) storage.inc_latency('latency2', 6) assert adapter.get(storage._get_latency_key('latency1', 3)) == '2' assert adapter.get(storage._get_latency_key('latency2', 6)) == '1' storage.put_gauge('gauge1', 3) storage.put_gauge('gauge2', 1) assert adapter.get(storage._get_gauge_key('gauge1')) == '3' assert adapter.get(storage._get_gauge_key('gauge2')) == '1' finally: adapter.delete(storage._get_counter_key('counter1'), storage._get_counter_key('counter2'), storage._get_latency_key('latency1', 3), storage._get_latency_key('latency2', 6), storage._get_gauge_key('gauge1'), storage._get_gauge_key('gauge2'))