def test_segment_update(self):
        """Test updating a segment."""
        storage = InMemorySegmentStorage()
        segment = Segment('some_segment', ['key1', 'key2', 'key3'], 123)
        storage.put(segment)
        assert storage.get('some_segment') == segment

        storage.update('some_segment', ['key4', 'key5'], ['key2', 'key3'], 456)
        assert storage.segment_contains('some_segment', 'key1')
        assert storage.segment_contains('some_segment', 'key4')
        assert storage.segment_contains('some_segment', 'key5')
        assert not storage.segment_contains('some_segment', 'key2')
        assert not storage.segment_contains('some_segment', 'key3')
        assert storage.get_change_number('some_segment') == 456
Example #2
0
    def update(self, segment_name, to_add, to_remove, change_number=None):
        """
        Update a split. Create it if it doesn't exist.

        :param segment_name: Name of the segment to update.
        :type segment_name: str
        :param to_add: Set of members to add to the segment.
        :type to_add: set
        :param to_remove: List of members to remove from the segment.
        :type to_remove: Set
        """
        with self._lock:
            if segment_name not in self._segments:
                self._segments[segment_name] = Segment(segment_name, to_add, change_number)
                return

            self._segments[segment_name].update(to_add, to_remove)
            if change_number is not None:
                self._segments[segment_name].change_number = change_number
Example #3
0
    def test_segment_contains(self, mocker):
        """Test that segment contains works properly."""
        uwsgi = get_uwsgi(True)
        storage = UWSGISegmentStorage(uwsgi)

        from_raw_mock = mocker.Mock()
        from_raw_mock.return_value = Segment('some_segment', ['abc'], 123)
        mocker.patch('splitio.models.segments.from_raw', new=from_raw_mock)
        segment = mocker.Mock(spec=Segment)
        segment_keys = mocker.PropertyMock()
        segment_keys.return_value = ['abc']
        type(segment).keys = segment_keys
        segment.to_json = {}
        segment_name = mocker.PropertyMock()
        segment_name.return_value = 'some_segment'
        segment_change_number = mocker.PropertyMock()
        segment_change_number.return_value = 123
        type(segment).name = segment_name
        type(segment).change_number = segment_change_number
        storage.put(segment)

        assert storage.segment_contains('some_segment', 'abc')
        assert not storage.segment_contains('some_segment', 'qwe')