Skip to content

Commit

Permalink
Added mock support for Storage Group Templates and their Volumes
Browse files Browse the repository at this point in the history
Details:

* Added fake classes for Storage Group Templates and Storage Volume Templates
  to zhmcclient_mock/_hmc.py.

* Added URI handler classes for Storage Group Templates and Storage Volume
  Templates to zhmcclient_mock/_urihandler.py.

* Added unit tests for that mock support.

Signed-off-by: Andreas Maier <maiera@de.ibm.com>
  • Loading branch information
andy-maier committed Jun 21, 2024
1 parent 2f198a6 commit 1ff5110
Show file tree
Hide file tree
Showing 4 changed files with 390 additions and 0 deletions.
2 changes: 2 additions & 0 deletions changes/1541.feature.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Mock: Added zhmcclient mock support for Storage Group Templates and their
Volumes.
168 changes: 168 additions & 0 deletions tests/unit/zhmcclient_mock/test_urihandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@
VirtualSwitchGetVnicsHandler, \
StorageGroupsHandler, StorageGroupHandler, \
StorageVolumesHandler, StorageVolumeHandler, \
StorageTemplatesHandler, StorageTemplateHandler, \
StorageTemplateVolumesHandler, StorageTemplateVolumeHandler, \
CapacityGroupsHandler, CapacityGroupHandler, \
CapacityGroupAddPartitionHandler, CapacityGroupRemovePartitionHandler, \
LparsHandler, LparHandler, LparActivateHandler, LparDeactivateHandler, \
Expand Down Expand Up @@ -818,6 +820,30 @@ def standard_test_hmc():
],
},
],
'storage_group_templates': [
{
'properties': {
'object-id': 'fake-stotpl-oid-1',
'name': 'fake_stotpl_name_1',
'description': 'Storage Group Template #1',
'cpc-uri': '/api/cpcs/1',
'type': 'fcp',
'shared': False,
# 'storage-template-volume-uris' managed automatic.
},
'storage_volume_templates': [
{
'properties': {
'element-id': 'fake-stotvl-oid-1',
'name': 'fake_stotvl_name_1',
'description': 'Storage Volume Template #1',
'size': 10.0,
'usage': 'boot',
},
},
],
},
],
}
],
'cpcs': [
Expand Down Expand Up @@ -6256,6 +6282,148 @@ def test_stovol_get(self):
assert stovol1 == exp_stovol1


class TestStorageTemplateHandlers:
"""
All tests for classes StorageTemplatesHandler and StorageTemplateHandler.
"""

def setup_method(self):
"""
Called by pytest before each test method.
Creates a Faked HMC with standard resources, and with
StorageTemplatesHandler and StorageTemplateHandler.
"""
self.hmc, self.hmc_resources = standard_test_hmc()
self.uris = (
(r'/api/storage-templates(?:\?(.*))?', StorageTemplatesHandler),
(r'/api/storage-templates/([^/]+)', StorageTemplateHandler),
)
self.urihandler = UriHandler(self.uris)

def test_stotpl_list(self):
"""
Test GET Storage Templates (list).
"""

# the function to be tested:
stotpls = self.urihandler.get(self.hmc, '/api/storage-templates', True)

exp_stotpls = { # properties reduced to those returned by List
'storage-templates': [
{
'object-uri': '/api/storage-templates/fake-stotpl-oid-1',
'cpc-uri': '/api/cpcs/1',
'name': 'fake_stotpl_name_1',
'type': 'fcp',
},
]
}
assert stotpls == exp_stotpls

def test_stotpl_get(self):
"""
Test GET Storage Group Template.
"""

# the function to be tested:
stotpl1 = self.urihandler.get(
self.hmc, '/api/storage-templates/fake-stotpl-oid-1', True)

exp_stotpl1 = {
'object-id': 'fake-stotpl-oid-1',
'object-uri': '/api/storage-templates/fake-stotpl-oid-1',
'class': 'storage-template',
'parent': '/api/console',
'cpc-uri': '/api/cpcs/1',
'name': 'fake_stotpl_name_1',
'description': 'Storage Group Template #1',
'type': 'fcp',
'shared': False,
'storage-template-volume-uris': [
'/api/storage-templates/fake-stotpl-oid-1/'
'storage-template-volumes/fake-stotvl-oid-1',
],
}
assert stotpl1 == exp_stotpl1


# TODO: Test StorageTemplateModifyHandler


class TestStorageTemplateVolumeHandlers:
"""
All tests for classes StorageTemplateVolumesHandler and
StorageTemplateVolumeHandler.
"""

def setup_method(self):
"""
Called by pytest before each test method.
Creates a Faked HMC with standard resources, and with
StorageTemplateVolumesHandler and StorageTemplateVolumeHandler.
"""
self.hmc, self.hmc_resources = standard_test_hmc()
self.uris = (
(r'/api/storage-templates/([^/]+)/'
r'storage-template-volumes(?:\?(.*))?',
StorageTemplateVolumesHandler),
(r'/api/storage-templates/([^/]+)/'
r'storage-template-volumes/([^/]+)',
StorageTemplateVolumeHandler),
)
self.urihandler = UriHandler(self.uris)

def test_stotvl_list(self):
"""
Test GET Storage Volumes of Storage Template (list).
"""

# the function to be tested:
stotvls = self.urihandler.get(
self.hmc,
'/api/storage-templates/fake-stotpl-oid-1/'
'storage-template-volumes',
True)

exp_stotvls = { # properties reduced to those returned by List
'storage-template-volumes': [
{
'element-uri': '/api/storage-templates/fake-stotpl-oid-1/'
'storage-template-volumes/fake-stotvl-oid-1',
'name': 'fake_stotvl_name_1',
'size': 10.0,
'usage': 'boot',
},
]
}
assert stotvls == exp_stotvls

def test_stotvl_get(self):
"""
Test GET Storage Template Volume.
"""

# the function to be tested:
stotvl1 = self.urihandler.get(
self.hmc, '/api/storage-templates/fake-stotpl-oid-1/'
'storage-template-volumes/fake-stotvl-oid-1', True)

exp_stotvl1 = {
'element-id': 'fake-stotvl-oid-1',
'element-uri': '/api/storage-templates/fake-stotpl-oid-1/'
'storage-template-volumes/fake-stotvl-oid-1',
'class': 'storage-template-volume',
'parent': '/api/storage-templates/fake-stotpl-oid-1',
'name': 'fake_stotvl_name_1',
'description': 'Storage Volume Template #1',
'size': 10.0,
'usage': 'boot',
}
assert stotvl1 == exp_stotvl1


class TestCapacityGroupHandlers:
"""
All tests for classes CapacityGroupsHandler and CapacityGroupHandler.
Expand Down
11 changes: 11 additions & 0 deletions zhmcclient_mock/_hmc.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
'FakedVirtualFunctionManager', 'FakedVirtualFunction',
'FakedVirtualSwitchManager', 'FakedVirtualSwitch',
'FakedStorageGroupManager', 'FakedStorageGroup',
'FakedStorageGroupTemplateManager', 'FakedStorageGroupTemplate',
'FakedMetricsContextManager', 'FakedMetricsContext',
'FakedMetricGroupDefinition', 'FakedMetricObjectValues',
'FakedCapacityGroupManager', 'FakedCapacityGroup',
Expand Down Expand Up @@ -1168,6 +1169,8 @@ def __init__(self, manager, properties):
properties=properties)
self._storage_groups = FakedStorageGroupManager(
hmc=manager.hmc, console=self)
self._storage_group_templates = FakedStorageGroupTemplateManager(
hmc=manager.hmc, console=self)
self._users = FakedUserManager(hmc=manager.hmc, console=self)
self._user_roles = FakedUserRoleManager(hmc=manager.hmc, console=self)
self._user_patterns = FakedUserPatternManager(
Expand Down Expand Up @@ -1230,6 +1233,14 @@ def storage_groups(self):
"""
return self._storage_groups

@property
def storage_group_templates(self):
"""
:class:`~zhmcclient_mock.FakedStorageGroupTemplateManager`: Access to
the faked Storage Group Template resources of this Console.
"""
return self._storage_group_templates

@property
def users(self):
"""
Expand Down
Loading

0 comments on commit 1ff5110

Please sign in to comment.