def test_traffic_type_inc_dec_logic(self, mocker): """Test that adding/removing split, handles traffic types correctly.""" storage = InMemorySplitStorage() split1 = mocker.Mock() name1_prop = mocker.PropertyMock() name1_prop.return_value = 'split1' type(split1).name = name1_prop split2 = mocker.Mock() name2_prop = mocker.PropertyMock() name2_prop.return_value = 'split1' type(split2).name = name2_prop tt_user = mocker.PropertyMock() tt_user.return_value = 'user' tt_account = mocker.PropertyMock() tt_account.return_value = 'account' type(split1).traffic_type_name = tt_user type(split2).traffic_type_name = tt_account storage.put(split1) assert storage.is_valid_traffic_type('user') is True assert storage.is_valid_traffic_type('account') is False storage.put(split2) assert storage.is_valid_traffic_type('user') is False assert storage.is_valid_traffic_type('account') is True
def setup_method(self): """Prepare storages with test data.""" split_storage = InMemorySplitStorage() segment_storage = InMemorySegmentStorage() 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']: split_storage.put(splits.from_raw(split)) segment_fn = os.path.join(os.path.dirname(__file__), 'files', 'segmentEmployeesChanges.json') with open(segment_fn, 'r') as flo: data = json.loads(flo.read()) segment_storage.put(segments.from_raw(data)) segment_fn = os.path.join(os.path.dirname(__file__), 'files', 'segmentHumanBeignsChanges.json') with open(segment_fn, 'r') as flo: data = json.loads(flo.read()) segment_storage.put(segments.from_raw(data)) storages = { 'splits': split_storage, 'segments': segment_storage, 'impressions': InMemoryImpressionStorage(5000), 'events': InMemoryEventStorage(5000), 'telemetry': InMemoryTelemetryStorage() } impmanager = ImpressionsManager(ImpressionsMode.OPTIMIZED, True) recorder = StandardRecorder(impmanager, storages['telemetry'], storages['events'], storages['impressions']) self.factory = SplitFactory('some_api_key', storages, True, recorder) # pylint:disable=attribute-defined-outside-init
def setup_method(self): """Prepare storages with test data.""" split_storage = InMemorySplitStorage() segment_storage = InMemorySegmentStorage() 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']: split_storage.put(splits.from_raw(split)) segment_fn = os.path.join(os.path.dirname(__file__), 'files', 'segmentEmployeesChanges.json') with open(segment_fn, 'r') as flo: data = json.loads(flo.read()) segment_storage.put(segments.from_raw(data)) segment_fn = os.path.join(os.path.dirname(__file__), 'files', 'segmentHumanBeignsChanges.json') with open(segment_fn, 'r') as flo: data = json.loads(flo.read()) segment_storage.put(segments.from_raw(data)) self.factory = SplitFactory( { #pylint:disable=attribute-defined-outside-init 'splits': split_storage, 'segments': segment_storage, 'impressions': InMemoryImpressionStorage(5000), 'events': InMemoryEventStorage(5000), 'telemetry': InMemoryTelemetryStorage() }, True)
def test_get_split_names(self, mocker): """Test retrieving a list of all split names.""" split1 = mocker.Mock() name1_prop = mocker.PropertyMock() name1_prop.return_value = 'split1' type(split1).name = name1_prop split2 = mocker.Mock() name2_prop = mocker.PropertyMock() name2_prop.return_value = 'split2' type(split2).name = name2_prop storage = InMemorySplitStorage() storage.put(split1) storage.put(split2) assert set(storage.get_split_names()) == set(['split1', 'split2'])
def test_storing_retrieving_splits(self, mocker): """Test storing and retrieving splits works.""" storage = InMemorySplitStorage() split = mocker.Mock(spec=Split) name_property = mocker.PropertyMock() name_property.return_value = 'some_split' type(split).name = name_property storage.put(split) assert storage.get('some_split') == split assert storage.get_split_names() == ['some_split'] assert storage.get_all_splits() == [split] assert storage.get('nonexistant_split') is None storage.remove('some_split') assert storage.get('some_split') is None
def test_get_all_splits(self, mocker): """Test retrieving a list of all split names.""" split1 = mocker.Mock() name1_prop = mocker.PropertyMock() name1_prop.return_value = 'split1' type(split1).name = name1_prop split2 = mocker.Mock() name2_prop = mocker.PropertyMock() name2_prop.return_value = 'split2' type(split2).name = name2_prop storage = InMemorySplitStorage() storage.put(split1) storage.put(split2) all_splits = storage.get_all_splits() assert next(s for s in all_splits if s.name == 'split1') assert next(s for s in all_splits if s.name == 'split2')
def test_kill_locally(self): """Test kill local.""" storage = InMemorySplitStorage() split = Split('some_split', 123456789, False, 'some', 'traffic_type', 'ACTIVE', 1) storage.put(split) storage.set_change_number(1) storage.kill_locally('test', 'default_treatment', 2) assert storage.get('test') is None storage.kill_locally('some_split', 'default_treatment', 0) assert storage.get('some_split').change_number == 1 assert storage.get('some_split').killed is False assert storage.get('some_split').default_treatment == 'some' storage.kill_locally('some_split', 'default_treatment', 3) assert storage.get('some_split').change_number == 3
def test_get_splits(self, mocker): """Test retrieving a list of passed splits.""" split1 = mocker.Mock() name1_prop = mocker.PropertyMock() name1_prop.return_value = 'split1' type(split1).name = name1_prop split2 = mocker.Mock() name2_prop = mocker.PropertyMock() name2_prop.return_value = 'split2' type(split2).name = name2_prop storage = InMemorySplitStorage() storage.put(split1) storage.put(split2) splits = storage.fetch_many(['split1', 'split2', 'split3']) assert len(splits) == 3 assert splits['split1'].name == 'split1' assert splits['split2'].name == 'split2' assert 'split3' in splits
def test_is_valid_traffic_type(self, mocker): """Test that traffic type validation works properly.""" split1 = mocker.Mock() name1_prop = mocker.PropertyMock() name1_prop.return_value = 'split1' type(split1).name = name1_prop split2 = mocker.Mock() name2_prop = mocker.PropertyMock() name2_prop.return_value = 'split2' type(split2).name = name2_prop split3 = mocker.Mock() tt_user = mocker.PropertyMock() tt_user.return_value = 'user' tt_account = mocker.PropertyMock() tt_account.return_value = 'account' name3_prop = mocker.PropertyMock() name3_prop.return_value = 'split3' type(split3).name = name3_prop type(split1).traffic_type_name = tt_user type(split2).traffic_type_name = tt_account type(split3).traffic_type_name = tt_user storage = InMemorySplitStorage() storage.put(split1) assert storage.is_valid_traffic_type('user') is True assert storage.is_valid_traffic_type('account') is False storage.put(split2) assert storage.is_valid_traffic_type('user') is True assert storage.is_valid_traffic_type('account') is True storage.put(split3) assert storage.is_valid_traffic_type('user') is True assert storage.is_valid_traffic_type('account') is True storage.remove('split1') assert storage.is_valid_traffic_type('user') is True assert storage.is_valid_traffic_type('account') is True storage.remove('split2') assert storage.is_valid_traffic_type('user') is True assert storage.is_valid_traffic_type('account') is False storage.remove('split3') assert storage.is_valid_traffic_type('user') is False assert storage.is_valid_traffic_type('account') is False