Skip to content

Commit 7ea78b6

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Migrate 'volume summary' command to SDK"
2 parents deab1a7 + 4dfbc50 commit 7ea78b6

File tree

4 files changed

+63
-57
lines changed

4 files changed

+63
-57
lines changed

openstackclient/tests/unit/volume/v3/fakes.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import uuid
1616

1717
from cinderclient import api_versions
18+
from openstack.block_storage.v3 import block_storage_summary as _summary
1819

1920
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
2021
from openstackclient.tests.unit import fakes
@@ -531,3 +532,14 @@ def create_snapshot_manage_list_records(count=2):
531532
)
532533

533534
return snapshot_manage_list
535+
536+
537+
def get_one_block_storage_summary(total_size, metadata=None):
538+
summary_dict = {
539+
'total_count': 2,
540+
'total_size': total_size,
541+
}
542+
if metadata:
543+
summary_dict['metadata'] = metadata
544+
block_storage_summary = _summary.BlockStorageSummary(**summary_dict)
545+
return block_storage_summary

openstackclient/tests/unit/volume/v3/test_volume.py

Lines changed: 41 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,37 @@
2121
from osc_lib import exceptions
2222

2323
from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes
24+
from openstackclient.tests.unit.volume.v3 import fakes as v3_fakes
2425
from openstackclient.volume.v3 import volume
2526

2627

27-
class TestVolumeSummary(volume_fakes.TestVolume):
28+
class BaseVolumeTest(volume_fakes.TestVolume):
29+
def setUp(self):
30+
super().setUp()
31+
32+
self.app.client_manager.sdk_connection = mock.Mock()
33+
self.app.client_manager.sdk_connection.volume = mock.Mock()
34+
self.sdk_client = self.app.client_manager.sdk_connection.volume
35+
36+
patcher = mock.patch.object(
37+
sdk_utils, 'supports_microversion', return_value=True
38+
)
39+
self.addCleanup(patcher.stop)
40+
self.supports_microversion_mock = patcher.start()
41+
self._set_mock_microversion(
42+
self.app.client_manager.volume.api_version.get_string()
43+
)
44+
45+
def _set_mock_microversion(self, mock_v):
46+
"""Set a specific microversion for the mock supports_microversion()."""
47+
self.supports_microversion_mock.reset_mock(return_value=True)
48+
self.supports_microversion_mock.side_effect = (
49+
lambda _, v: api_versions.APIVersion(v)
50+
<= api_versions.APIVersion(mock_v)
51+
)
52+
53+
54+
class TestVolumeSummary(BaseVolumeTest):
2855
columns = [
2956
'Total Count',
3057
'Total Size',
@@ -33,25 +60,18 @@ class TestVolumeSummary(volume_fakes.TestVolume):
3360
def setUp(self):
3461
super().setUp()
3562

36-
self.volumes_mock = self.app.client_manager.volume.volumes
37-
self.volumes_mock.reset_mock()
3863
self.mock_vol_1 = volume_fakes.create_one_volume()
3964
self.mock_vol_2 = volume_fakes.create_one_volume()
40-
self.return_dict = {
41-
'volume-summary': {
42-
'total_count': 2,
43-
'total_size': self.mock_vol_1.size + self.mock_vol_2.size,
44-
}
45-
}
46-
self.volumes_mock.summary.return_value = self.return_dict
65+
block_storage_summary = v3_fakes.get_one_block_storage_summary(
66+
self.mock_vol_1.size + self.mock_vol_2.size
67+
)
68+
self.sdk_client.summary.return_value = block_storage_summary
4769

4870
# Get the command object to test
4971
self.cmd = volume.VolumeSummary(self.app, None)
5072

5173
def test_volume_summary(self):
52-
self.app.client_manager.volume.api_version = api_versions.APIVersion(
53-
'3.12'
54-
)
74+
self._set_mock_microversion('3.12')
5575
arglist = [
5676
'--all-projects',
5777
]
@@ -62,9 +82,7 @@ def test_volume_summary(self):
6282

6383
columns, data = self.cmd.take_action(parsed_args)
6484

65-
self.volumes_mock.summary.assert_called_once_with(
66-
all_tenants=True,
67-
)
85+
self.sdk_client.summary.assert_called_once_with(True)
6886

6987
self.assertEqual(self.columns, columns)
7088

@@ -88,14 +106,13 @@ def test_volume_summary_pre_312(self):
88106
)
89107

90108
def test_volume_summary_with_metadata(self):
91-
self.app.client_manager.volume.api_version = api_versions.APIVersion(
92-
'3.36'
93-
)
109+
self._set_mock_microversion('3.36')
94110

95111
combine_meta = {**self.mock_vol_1.metadata, **self.mock_vol_2.metadata}
96-
meta_dict = copy.deepcopy(self.return_dict)
97-
meta_dict['volume-summary']['metadata'] = combine_meta
98-
self.volumes_mock.summary.return_value = meta_dict
112+
block_storage_summary = v3_fakes.get_one_block_storage_summary(
113+
self.mock_vol_1.size + self.mock_vol_2.size, metadata=combine_meta
114+
)
115+
self.sdk_client.summary.return_value = block_storage_summary
99116

100117
new_cols = copy.deepcopy(self.columns)
101118
new_cols.extend(['Metadata'])
@@ -110,9 +127,7 @@ def test_volume_summary_with_metadata(self):
110127

111128
columns, data = self.cmd.take_action(parsed_args)
112129

113-
self.volumes_mock.summary.assert_called_once_with(
114-
all_tenants=True,
115-
)
130+
self.sdk_client.summary.assert_called_once_with(True)
116131

117132
self.assertEqual(new_cols, columns)
118133

@@ -124,24 +139,10 @@ def test_volume_summary_with_metadata(self):
124139
self.assertCountEqual(datalist, tuple(data))
125140

126141

127-
class TestVolumeRevertToSnapshot(volume_fakes.TestVolume):
142+
class TestVolumeRevertToSnapshot(BaseVolumeTest):
128143
def setUp(self):
129144
super().setUp()
130145

131-
self.app.client_manager.sdk_connection = mock.Mock()
132-
self.app.client_manager.sdk_connection.volume = mock.Mock()
133-
self.sdk_client = self.app.client_manager.sdk_connection.volume
134-
self.sdk_client.reset_mock()
135-
136-
patcher = mock.patch.object(
137-
sdk_utils, 'supports_microversion', return_value=True
138-
)
139-
self.addCleanup(patcher.stop)
140-
self.supports_microversion_mock = patcher.start()
141-
self._set_mock_microversion(
142-
self.app.client_manager.volume.api_version.get_string()
143-
)
144-
145146
self.mock_volume = volume_fakes.create_one_volume()
146147
self.mock_snapshot = volume_fakes.create_one_snapshot(
147148
attrs={'volume_id': self.mock_volume.id}
@@ -150,14 +151,6 @@ def setUp(self):
150151
# Get the command object to test
151152
self.cmd = volume.VolumeRevertToSnapshot(self.app, None)
152153

153-
def _set_mock_microversion(self, mock_v):
154-
"""Set a specific microversion for the mock supports_microversion()."""
155-
self.supports_microversion_mock.reset_mock(return_value=True)
156-
self.supports_microversion_mock.side_effect = (
157-
lambda _, v: api_versions.APIVersion(v)
158-
<= api_versions.APIVersion(mock_v)
159-
)
160-
161154
def test_volume_revert_to_snapshot_pre_340(self):
162155
arglist = [
163156
self.mock_snapshot.id,

openstackclient/volume/v3/volume.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import logging
1818

19-
from cinderclient import api_versions
2019
from openstack import utils as sdk_utils
2120
from osc_lib.cli import format_columns
2221
from osc_lib.command import command
@@ -43,9 +42,9 @@ def get_parser(self, prog_name):
4342
return parser
4443

4544
def take_action(self, parsed_args):
46-
volume_client = self.app.client_manager.volume
45+
volume_client = self.app.client_manager.sdk_connection.volume
4746

48-
if volume_client.api_version < api_versions.APIVersion('3.12'):
47+
if not sdk_utils.supports_microversion(volume_client, '3.12'):
4948
msg = _(
5049
"--os-volume-api-version 3.12 or greater is required to "
5150
"support the 'volume summary' command"
@@ -60,21 +59,19 @@ def take_action(self, parsed_args):
6059
'Total Count',
6160
'Total Size',
6261
]
63-
if volume_client.api_version.matches('3.36'):
62+
if sdk_utils.supports_microversion(volume_client, '3.36'):
6463
columns.append('metadata')
6564
column_headers.append('Metadata')
6665

6766
# set value of 'all_tenants' when using project option
6867
all_projects = parsed_args.all_projects
6968

70-
vol_summary = volume_client.volumes.summary(
71-
all_tenants=all_projects,
72-
)
69+
vol_summary = volume_client.summary(all_projects)
7370

7471
return (
7572
column_headers,
76-
utils.get_dict_properties(
77-
vol_summary['volume-summary'],
73+
utils.get_item_properties(
74+
vol_summary,
7875
columns,
7976
formatters={'metadata': format_columns.DictColumn},
8077
),
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
features:
3+
- |
4+
The ``volume summary`` command has been migrated to SDK.

0 commit comments

Comments
 (0)