Add tests for 'AggregateImagePropertiesIsolation'

I was trying to figure out how the various config options for this work.
Add a functional test for this to ensure we don't regress.

Change-Id: I833b1922fcd2d1412c4398a3daeb7630f12d9f8d
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
Stephen Finucane 2020-09-24 15:54:18 +01:00
parent 2f826d5ca8
commit f0d17e774f
1 changed files with 111 additions and 0 deletions

View File

@ -10,6 +10,8 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
from nova.compute import instance_actions
from nova import test
from nova.tests import fixtures as nova_fixtures
@ -21,6 +23,115 @@ CELL1_NAME = 'cell1'
CELL2_NAME = 'cell2'
class AggregateImagePropertiesIsolationTestCase(
integrated_helpers._IntegratedTestBase,
):
"""Test the AggregateImagePropertiesIsolation filter."""
def setUp(self):
self.flags(
enabled_filters=['AggregateImagePropertiesIsolation'],
group='filter_scheduler')
super().setUp()
def _create_aggregate(self, metadata):
aggregate = self.admin_api.post_aggregate(
{'aggregate': {'name': 'my-aggregate'}})
aggregate = self.admin_api.post_aggregate_action(
aggregate['id'],
{'set_metadata': {'metadata': metadata}})
self.admin_api.add_host_to_aggregate(
aggregate['id'], self.compute.host)
return aggregate
def _create_image(self, metadata):
image = {
'id': 'c456eb30-91d7-4f43-8f46-2efd9eccd744',
'name': 'fake-image-custom-property',
'created_at': datetime.datetime(2011, 1, 1, 1, 2, 3),
'updated_at': datetime.datetime(2011, 1, 1, 1, 2, 3),
'deleted_at': None,
'deleted': False,
'status': 'active',
'is_public': False,
'container_format': 'raw',
'disk_format': 'raw',
'size': '25165824',
'min_ram': 0,
'min_disk': 0,
'protected': False,
'visibility': 'public',
'tags': ['tag1', 'tag2'],
'properties': {
'kernel_id': 'nokernel',
'ramdisk_id': 'nokernel',
},
}
image['properties'].update(metadata)
return self.glance.create(None, image)
def test_filter_passes(self):
"""Ensure the filter allows hosts in aggregates with matching metadata.
"""
self._create_aggregate(metadata={'os_type': 'windows'})
image = self._create_image(metadata={'os_type': 'windows'})
self._create_server(image_uuid=image['id'])
def test_filter_rejects(self):
"""Ensure the filter rejects hosts in aggregates with mismatched
metadata.
"""
self._create_aggregate(metadata={'os_type': 'windows'})
image = self._create_image(metadata={'os_type': 'linux'})
self._create_server(image_uuid=image['id'], expected_state='ERROR')
def test_filter_passes_with_prefix(self):
"""Ensure the filter allows hosts in aggregates with matching metadata
when a namespace is configured.
"""
self.flags(
aggregate_image_properties_isolation_namespace='os',
aggregate_image_properties_isolation_separator='_',
group='filter_scheduler',
)
self._create_aggregate(metadata={'os_type': 'windows'})
image = self._create_image(metadata={'os_type': 'windows'})
self._create_server(image_uuid=image['id'])
def test_filter_rejects_with_prefix(self):
"""Ensure the filter rejects hosts in aggregates with matching metadata
when a namespace is configured.
"""
self.flags(
aggregate_image_properties_isolation_namespace='os',
aggregate_image_properties_isolation_separator='_',
group='filter_scheduler',
)
self._create_aggregate(metadata={'os_type': 'windows'})
image = self._create_image(metadata={'os_type': 'linux'})
self._create_server(image_uuid=image['id'], expected_state='ERROR')
def test_filter_passes_with_invalid_key(self):
"""Ensure invalid keys are ignored by the filter."""
self._create_aggregate(metadata={'type': 'windows'})
image = self._create_image(metadata={'type': 'linux'})
self._create_server(image_uuid=image['id'])
def test_filter_passes_with_irrelevant_key(self):
"""Ensure valid keys that are no in the namespace are ignored by the
filter.
"""
self.flags(
aggregate_image_properties_isolation_namespace='os',
aggregate_image_properties_isolation_separator='_',
group='filter_scheduler',
)
self._create_aggregate(metadata={'os_type': 'windows'})
image = self._create_image(metadata={'hw_firmware_type': 'uefi'})
self._create_server(image_uuid=image['id'])
class MultiCellSchedulerTestCase(test.TestCase,
integrated_helpers.InstanceHelperMixin):