self.assertFalse(self.array.list_host_connections.called)
self.assertFalse(self.array.delete_host.called)
+ @mock.patch(DRIVER_OBJ + ".get_filter_function", autospec=True)
@mock.patch(DRIVER_OBJ + "._get_provisioned_space", autospec=True)
- def test_get_volume_stats(self, mock_space):
- mock_space.return_value = PROVISIONED_CAPACITY * units.Gi
+ def test_get_volume_stats(self, mock_space, mock_filter):
+ filter_function = "capabilities.total_volumes < 10"
+ mock_space.return_value = (PROVISIONED_CAPACITY * units.Gi, 100)
+ mock_filter.return_value = filter_function
self.assertEqual(self.driver.get_volume_stats(), {})
self.array.get.return_value = SPACE_INFO
result = {"volume_backend_name": VOLUME_BACKEND_NAME,
"thin_provisioning_support": True,
"provisioned_capacity": PROVISIONED_CAPACITY,
"max_over_subscription_ratio": (PROVISIONED_CAPACITY /
- USED_SPACE)
+ USED_SPACE),
+ "total_volumes": 100,
+ "filter_function": filter_function
}
real_result = self.driver.get_volume_stats(refresh=True)
self.assertDictMatch(result, real_result)
self.assertDictMatch(result, self.driver._stats)
+ @mock.patch(DRIVER_OBJ + ".get_filter_function", autospec=True)
@mock.patch(DRIVER_OBJ + "._get_provisioned_space", autospec=True)
- def test_get_volume_stats_empty_array(self, mock_space):
- mock_space.return_value = PROVISIONED_CAPACITY * units.Gi
+ def test_get_volume_stats_empty_array(self, mock_space, mock_filter):
+ filter_function = "capabilities.total_volumes < 10"
+ mock_space.return_value = (PROVISIONED_CAPACITY * units.Gi, 100)
+ mock_filter.return_value = filter_function
self.assertEqual(self.driver.get_volume_stats(), {})
self.array.get.return_value = SPACE_INFO_EMPTY
result = {"volume_backend_name": VOLUME_BACKEND_NAME,
"consistencygroup_support": True,
"thin_provisioning_support": True,
"provisioned_capacity": PROVISIONED_CAPACITY,
- "max_over_subscription_ratio": DEFAULT_OVER_SUBSCRIPTION
+ "max_over_subscription_ratio": DEFAULT_OVER_SUBSCRIPTION,
+ "total_volumes": 100,
+ "filter_function": filter_function
}
real_result = self.driver.get_volume_stats(refresh=True)
self.assertDictMatch(result, real_result)
self.assertDictMatch(result, self.driver._stats)
+ @mock.patch(DRIVER_OBJ + ".get_filter_function", autospec=True)
@mock.patch(DRIVER_OBJ + "._get_provisioned_space", autospec=True)
- def test_get_volume_stats_nothing_provisioned(self, mock_space):
- mock_space.return_value = 0
+ def test_get_volume_stats_nothing_provisioned(self, mock_space,
+ mock_filter):
+ filter_function = "capabilities.total_volumes < 10"
+ mock_space.return_value = (0, 0)
+ mock_filter.return_value = filter_function
self.assertEqual(self.driver.get_volume_stats(), {})
self.array.get.return_value = SPACE_INFO
result = {"volume_backend_name": VOLUME_BACKEND_NAME,
"consistencygroup_support": True,
"thin_provisioning_support": True,
"provisioned_capacity": 0,
- "max_over_subscription_ratio": DEFAULT_OVER_SUBSCRIPTION
+ "max_over_subscription_ratio": DEFAULT_OVER_SUBSCRIPTION,
+ "total_volumes": 0,
+ "filter_function": filter_function
}
real_result = self.driver.get_volume_stats(refresh=True)
self.assertDictMatch(result, real_result)
total_capacity = float(info["capacity"]) / units.Gi
used_space = float(info["total"]) / units.Gi
free_space = float(total_capacity - used_space)
- provisioned_space = float(self._get_provisioned_space()) / units.Gi
+ prov_space, total_vols = self._get_provisioned_space()
+ provisioned_space = float(prov_space) / units.Gi
# If array is empty we can not calculate a max oversubscription ratio.
# In this case we choose 20 as a default value for the ratio. Once
# some volumes are actually created and some data is stored on the
"consistencygroup_support": True,
"thin_provisioning_support": True,
"provisioned_capacity": provisioned_space,
- "max_over_subscription_ratio": thin_provisioning
+ "max_over_subscription_ratio": thin_provisioning,
+ "total_volumes": total_vols,
+ "filter_function": self.get_filter_function()
}
self._stats = data
def _get_provisioned_space(self):
"""Sum up provisioned size of all volumes on array"""
volumes = self._array.list_volumes(pending=True)
- return sum(item["size"] for item in volumes)
+ return sum(item["size"] for item in volumes), len(volumes)
def extend_volume(self, volume, new_size):
"""Extend volume to new_size."""