Pass-in empty array uuid filter to server list

If there are no VMs running on the compute node, the given instance_uuids
will be an empty array. This should be added as a filter, otherwise, the
entire list of instances will be returned.

Change-Id: I9a77eeb410f59feda5ee84429eae8895ae3f3c26
Closes-Bug: #1660293
(cherry picked from commit 79c4b36315)
This commit is contained in:
Claudiu Belu 2017-01-30 13:09:52 +02:00
parent 2d1e16084b
commit 6168afafe3
2 changed files with 12 additions and 4 deletions

View File

@ -220,7 +220,7 @@ class ClusterOps(object):
expected_attrs = ['id', 'uuid', 'name']
filters = {'deleted': False}
if instance_uuids:
if instance_uuids is not None:
filters['uuid'] = instance_uuids
return objects.InstanceList.get_by_filters(

View File

@ -15,6 +15,7 @@
import time
import ddt
import mock
from nova.compute import power_state
from nova.compute import task_states
@ -27,6 +28,7 @@ from hyperv.tests import fake_instance
from hyperv.tests.unit import test_base
@ddt.ddt
class ClusterOpsTestCase(test_base.HyperVBaseTestCase):
"""Unit tests for the Hyper-V ClusterOps class."""
@ -292,14 +294,20 @@ class ClusterOpsTestCase(test_base.HyperVBaseTestCase):
self.assertEqual(mock.sentinel.uuid,
self.clusterops._instance_map[mock.sentinel.name])
@ddt.data({'instance_uuids': None},
{'instance_uuids': []},
{'instance_uuids': mock.sentinel.uuid})
@ddt.unpack
@mock.patch.object(clusterops.objects.InstanceList, 'get_by_filters')
def test_get_nova_instances(self, mock_get_by_filters):
def test_get_nova_instances(self, mock_get_by_filters, instance_uuids):
instances = self.clusterops._get_nova_instances(
instance_uuids=mock.sentinel.uuids)
instance_uuids=instance_uuids)
self.assertEqual(mock_get_by_filters.return_value, instances)
expected_attrs = ['id', 'uuid', 'name']
expected_filters = {'deleted': False, 'uuid': mock.sentinel.uuids}
expected_filters = {'deleted': False}
if instance_uuids is not None:
expected_filters['uuid'] = instance_uuids
mock_get_by_filters.assert_called_once_with(
self.clusterops._context, expected_filters,
expected_attrs=expected_attrs)