def test_get_all_splits(self, mocker): """Test fetching all splits.""" adapter = mocker.Mock(spec=RedisAdapter) storage = RedisSplitStorage(adapter) from_raw = mocker.Mock() mocker.patch('splitio.storage.redis.splits.from_raw', new=from_raw) adapter.keys.return_value = [ 'SPLITIO.split.split1', 'SPLITIO.split.split2', 'SPLITIO.split.split3' ] def _mget_mock(*_): return [ '{"name": "split1"}', '{"name": "split2"}', '{"name": "split3"}' ] adapter.mget.side_effect = _mget_mock storage.get_all_splits() assert adapter.keys.mock_calls == [mocker.call('SPLITIO.split.*')] assert adapter.mget.mock_calls == [ mocker.call([ 'SPLITIO.split.split1', 'SPLITIO.split.split2', 'SPLITIO.split.split3' ]) ] assert len(from_raw.mock_calls) == 3 assert mocker.call({'name': 'split1'}) in from_raw.mock_calls assert mocker.call({'name': 'split2'}) in from_raw.mock_calls assert mocker.call({'name': 'split3'}) in from_raw.mock_calls
def test_get_all(self): """Test get all names & splits.""" adapter = _build_default_client({}) try: storage = RedisSplitStorage(adapter) with open( os.path.join(os.path.dirname(__file__), 'files', 'split_changes.json'), 'r') as flo: split_changes = json.load(flo) split_objects = [ splits.from_raw(raw) for raw in split_changes['splits'] ] for split_object in split_objects: raw = split_object.to_json() adapter.set( RedisSplitStorage._SPLIT_KEY.format( split_name=split_object.name), json.dumps(raw)) original_splits = {split.name: split for split in split_objects} fetched_names = storage.get_split_names() fetched_splits = { split.name: split for split in storage.get_all_splits() } assert set(fetched_names) == set(fetched_splits.keys()) for original_split in original_splits.values(): fetched_split = fetched_splits[original_split.name] assert original_split.traffic_type_name == fetched_split.traffic_type_name assert original_split.seed == fetched_split.seed assert original_split.algo == fetched_split.algo assert original_split.status == fetched_split.status assert original_split.change_number == fetched_split.change_number assert original_split.killed == fetched_split.killed assert original_split.default_treatment == fetched_split.default_treatment for index, original_condition in enumerate( original_split.conditions): fetched_condition = fetched_split.conditions[index] assert original_condition.label == fetched_condition.label assert original_condition.condition_type == fetched_condition.condition_type assert len(original_condition.matchers) == len( fetched_condition.matchers) assert len(original_condition.partitions) == len( fetched_condition.partitions) finally: adapter.delete( 'SPLITIO.split.sample_feature', 'SPLITIO.splits.till', 'SPLITIO.split.all_feature', 'SPLITIO.split.killed_feature', 'SPLITIO.split.Risk_Max_Deductible', 'SPLITIO.split.whitelist_feature', 'SPLITIO.split.regex_test', 'SPLITIO.split.boolean_test', 'SPLITIO.split.dependency_test')