neutron-lib/neutron_lib/tests/unit/objects/test_utils.py

77 lines
2.5 KiB
Python

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from unittest import mock
from neutron_lib.objects import utils as obj_utils
from neutron_lib.tests import _base as base
class TestUtils(base.BaseTestCase):
def test_get_objects_with_filters_not_in(self):
class FakeColumn(object):
def __init__(self, column):
self.column = column
def in_(self, value):
self.value = value
return self
def __invert__(self):
return list(set(self.column) - set(self.value))
filter_obj = obj_utils.NotIn([1, 2, 3])
fake_column = FakeColumn([1, 2, 4, 5])
self.assertEqual([4, 5],
sorted(filter_obj.filter(fake_column)))
fake_column = FakeColumn([1, 2])
self.assertEqual([], filter_obj.filter(fake_column))
fake_column = FakeColumn([4, 5])
self.assertEqual([4, 5],
sorted(filter_obj.filter(fake_column)))
def test_get_objects_with_filters_not_equal(self):
class FakeColumn(object):
def __init__(self, column):
self.column = column
def __ne__(self, value):
return [item for item in self.column if item != value]
filter_obj = obj_utils.NotEqual(1)
fake_column = FakeColumn([1, 2, 4, 5])
self.assertEqual([2, 4, 5],
sorted(filter_obj.filter(fake_column)))
fake_column = FakeColumn([1])
self.assertEqual([], filter_obj.filter(fake_column))
fake_column = FakeColumn([4, 5])
self.assertEqual([4, 5],
sorted(filter_obj.filter(fake_column)))
def test_get_updatable_fields(self):
mock_class = mock.Mock()
mock_class.fields_no_update = [0, 2, 6]
mock_fields = mock.Mock()
mock_fields.copy.return_value = {k: k for k in range(7)}
updatable = obj_utils.get_updatable_fields(mock_class, mock_fields)
self.assertEqual([1, 3, 4, 5],
sorted(list(updatable.keys())))