Skip to content

Commit b6d817f

Browse files
committed
volume: Migrate 'volume backup record *' to SDK
Change-Id: Ib8a4d1a822f9e74b956578783ada4adb220a1942 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent 0e92ece commit b6d817f

4 files changed

Lines changed: 106 additions & 105 deletions

File tree

openstackclient/tests/unit/volume/v2/test_backup_record.py

Lines changed: 41 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -10,86 +10,80 @@
1010
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
1111
# License for the specific language governing permissions and limitations
1212
# under the License.
13-
#
13+
14+
from openstack.block_storage.v3 import backup as _backup
15+
from openstack.test import fakes as sdk_fakes
1416

1517
from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes
1618
from openstackclient.volume.v2 import backup_record
1719

1820

19-
class TestBackupRecord(volume_fakes.TestVolume):
20-
def setUp(self):
21-
super().setUp()
22-
23-
self.backups_mock = self.volume_client.backups
24-
self.backups_mock.reset_mock()
25-
26-
27-
class TestBackupRecordExport(TestBackupRecord):
28-
new_backup = volume_fakes.create_one_backup(
29-
attrs={'volume_id': 'a54708a2-0388-4476-a909-09579f885c25'},
21+
class TestBackupRecordExport(volume_fakes.TestVolume):
22+
fake_backup = sdk_fakes.generate_fake_resource(
23+
_backup.Backup,
24+
volume_id='a54708a2-0388-4476-a909-09579f885c25',
3025
)
31-
new_record = volume_fakes.create_backup_record()
26+
fake_record = {
27+
'backup-record': {
28+
'backup_service': 'cinder.backup.drivers.swift.SwiftBackupDriver',
29+
'backup_url': 'eyJzdGF0dXMiOiAiYXZh',
30+
}
31+
}
3232

3333
def setUp(self):
3434
super().setUp()
3535

36-
self.backups_mock.export_record.return_value = self.new_record
37-
self.backups_mock.get.return_value = self.new_backup
36+
self.volume_sdk_client.find_backup.return_value = self.fake_backup
37+
self.volume_sdk_client.export_backup.return_value = self.fake_record
3838

39-
# Get the command object to mock
4039
self.cmd = backup_record.ExportBackupRecord(self.app, None)
4140

4241
def test_backup_export_table(self):
43-
arglist = [
44-
self.new_backup.name,
45-
]
46-
verifylist = [
47-
("backup", self.new_backup.name),
48-
]
42+
arglist = [self.fake_backup.name]
43+
verifylist = [("backup", self.fake_backup.name)]
4944

5045
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5146
parsed_args.formatter = 'table'
5247
columns, __ = self.cmd.take_action(parsed_args)
5348

54-
self.backups_mock.export_record.assert_called_with(
55-
self.new_backup.id,
49+
self.volume_sdk_client.find_backup.assert_called_once_with(
50+
self.fake_backup.name, ignore_missing=False
5651
)
57-
58-
expected_columns = ('Backup Service', 'Metadata')
59-
self.assertEqual(columns, expected_columns)
52+
self.volume_sdk_client.export_backup.assert_called_once_with(
53+
self.fake_backup
54+
)
55+
self.assertEqual(('Backup Service', 'Metadata'), columns)
6056

6157
def test_backup_export_json(self):
62-
arglist = [
63-
self.new_backup.name,
64-
]
65-
verifylist = [
66-
("backup", self.new_backup.name),
67-
]
58+
arglist = [self.fake_backup.name]
59+
verifylist = [("backup", self.fake_backup.name)]
6860

6961
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
7062
parsed_args.formatter = 'json'
7163
columns, __ = self.cmd.take_action(parsed_args)
7264

73-
self.backups_mock.export_record.assert_called_with(
74-
self.new_backup.id,
65+
self.volume_sdk_client.find_backup.assert_called_once_with(
66+
self.fake_backup.name, ignore_missing=False
7567
)
76-
77-
expected_columns = ('backup_service', 'backup_url')
78-
self.assertEqual(columns, expected_columns)
68+
self.volume_sdk_client.export_backup.assert_called_once_with(
69+
self.fake_backup
70+
)
71+
self.assertEqual(('backup_service', 'backup_url'), columns)
7972

8073

81-
class TestBackupRecordImport(TestBackupRecord):
82-
new_backup = volume_fakes.create_one_backup(
83-
attrs={'volume_id': 'a54708a2-0388-4476-a909-09579f885c25'},
84-
)
85-
new_import = volume_fakes.import_backup_record()
74+
class TestBackupRecordImport(volume_fakes.TestVolume):
75+
fake_import = {
76+
'backup': {
77+
'id': 'backup.id',
78+
'name': 'backup.name',
79+
},
80+
}
8681

8782
def setUp(self):
8883
super().setUp()
8984

90-
self.backups_mock.import_record.return_value = self.new_import
85+
self.volume_sdk_client.import_backup.return_value = self.fake_import
9186

92-
# Get the command object to mock
9387
self.cmd = backup_record.ImportBackupRecord(self.app, None)
9488

9589
def test_backup_import(self):
@@ -108,8 +102,8 @@ def test_backup_import(self):
108102
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
109103
columns, __ = self.cmd.take_action(parsed_args)
110104

111-
self.backups_mock.import_record.assert_called_with(
105+
self.volume_sdk_client.import_backup.assert_called_once_with(
112106
"cinder.backup.drivers.swift.SwiftBackupDriver",
113107
"fake_backup_record_data",
114108
)
115-
self.assertEqual(columns, ('backup',))
109+
self.assertEqual(('backup',), columns)

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

Lines changed: 41 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -11,84 +11,79 @@
1111
# License for the specific language governing permissions and limitations
1212
# under the License.
1313

14+
from openstack.block_storage.v3 import backup as _backup
15+
from openstack.test import fakes as sdk_fakes
16+
1417
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
1518
from openstackclient.volume.v3 import backup_record
1619

1720

18-
class TestBackupRecord(volume_fakes.TestVolume):
19-
def setUp(self):
20-
super().setUp()
21-
22-
self.backups_mock = self.volume_client.backups
23-
self.backups_mock.reset_mock()
24-
25-
26-
class TestBackupRecordExport(TestBackupRecord):
27-
new_backup = volume_fakes.create_one_backup(
28-
attrs={'volume_id': 'a54708a2-0388-4476-a909-09579f885c25'},
21+
class TestBackupRecordExport(volume_fakes.TestVolume):
22+
fake_backup = sdk_fakes.generate_fake_resource(
23+
_backup.Backup,
24+
volume_id='a54708a2-0388-4476-a909-09579f885c25',
2925
)
30-
new_record = volume_fakes.create_backup_record()
26+
fake_record = {
27+
'backup-record': {
28+
'backup_service': 'cinder.backup.drivers.swift.SwiftBackupDriver',
29+
'backup_url': 'eyJzdGF0dXMiOiAiYXZh',
30+
},
31+
}
3132

3233
def setUp(self):
3334
super().setUp()
3435

35-
self.backups_mock.export_record.return_value = self.new_record
36-
self.backups_mock.get.return_value = self.new_backup
36+
self.volume_sdk_client.find_backup.return_value = self.fake_backup
37+
self.volume_sdk_client.export_backup.return_value = self.fake_record
3738

38-
# Get the command object to mock
3939
self.cmd = backup_record.ExportBackupRecord(self.app, None)
4040

4141
def test_backup_export_table(self):
42-
arglist = [
43-
self.new_backup.name,
44-
]
45-
verifylist = [
46-
("backup", self.new_backup.name),
47-
]
42+
arglist = [self.fake_backup.name]
43+
verifylist = [("backup", self.fake_backup.name)]
4844

4945
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5046
parsed_args.formatter = 'table'
5147
columns, __ = self.cmd.take_action(parsed_args)
5248

53-
self.backups_mock.export_record.assert_called_with(
54-
self.new_backup.id,
49+
self.volume_sdk_client.find_backup.assert_called_once_with(
50+
self.fake_backup.name, ignore_missing=False
5551
)
56-
57-
expected_columns = ('Backup Service', 'Metadata')
58-
self.assertEqual(columns, expected_columns)
52+
self.volume_sdk_client.export_backup.assert_called_once_with(
53+
self.fake_backup
54+
)
55+
self.assertEqual(('Backup Service', 'Metadata'), columns)
5956

6057
def test_backup_export_json(self):
61-
arglist = [
62-
self.new_backup.name,
63-
]
64-
verifylist = [
65-
("backup", self.new_backup.name),
66-
]
58+
arglist = [self.fake_backup.name]
59+
verifylist = [("backup", self.fake_backup.name)]
6760

6861
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
6962
parsed_args.formatter = 'json'
7063
columns, __ = self.cmd.take_action(parsed_args)
7164

72-
self.backups_mock.export_record.assert_called_with(
73-
self.new_backup.id,
65+
self.volume_sdk_client.find_backup.assert_called_once_with(
66+
self.fake_backup.name, ignore_missing=False
7467
)
75-
76-
expected_columns = ('backup_service', 'backup_url')
77-
self.assertEqual(columns, expected_columns)
68+
self.volume_sdk_client.export_backup.assert_called_once_with(
69+
self.fake_backup
70+
)
71+
self.assertEqual(('backup_service', 'backup_url'), columns)
7872

7973

80-
class TestBackupRecordImport(TestBackupRecord):
81-
new_backup = volume_fakes.create_one_backup(
82-
attrs={'volume_id': 'a54708a2-0388-4476-a909-09579f885c25'},
83-
)
84-
new_import = volume_fakes.import_backup_record()
74+
class TestBackupRecordImport(volume_fakes.TestVolume):
75+
fake_import = {
76+
'backup': {
77+
'id': 'backup.id',
78+
'name': 'backup.name',
79+
},
80+
}
8581

8682
def setUp(self):
8783
super().setUp()
8884

89-
self.backups_mock.import_record.return_value = self.new_import
85+
self.volume_sdk_client.import_backup.return_value = self.fake_import
9086

91-
# Get the command object to mock
9287
self.cmd = backup_record.ImportBackupRecord(self.app, None)
9388

9489
def test_backup_import(self):
@@ -107,8 +102,8 @@ def test_backup_import(self):
107102
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
108103
columns, __ = self.cmd.take_action(parsed_args)
109104

110-
self.backups_mock.import_record.assert_called_with(
105+
self.volume_sdk_client.import_backup.assert_called_once_with(
111106
"cinder.backup.drivers.swift.SwiftBackupDriver",
112107
"fake_backup_record_data",
113108
)
114-
self.assertEqual(columns, ('backup',))
109+
self.assertEqual(('backup',), columns)

openstackclient/volume/v2/backup_record.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from collections.abc import Iterable, Sequence
2020
from typing import Any
2121

22-
from osc_lib import utils
22+
from openstack import utils as sdk_utils
2323

2424
from openstackclient import command
2525
from openstackclient.i18n import _
@@ -48,9 +48,13 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
4848
def take_action(
4949
self, parsed_args: argparse.Namespace
5050
) -> tuple[Sequence[str], Iterable[Any]]:
51-
volume_client = self.app.client_manager.volume
52-
backup = utils.find_resource(volume_client.backups, parsed_args.backup)
53-
backup_data = volume_client.backups.export_record(backup.id)
51+
volume_client = sdk_utils.ensure_service_version(
52+
self.app.client_manager.sdk_connection.volume, '2'
53+
)
54+
backup = volume_client.find_backup(
55+
parsed_args.backup, ignore_missing=False
56+
)
57+
backup_data = volume_client.export_backup(backup)['backup-record']
5458

5559
# We only want to show "friendly" display names, but also want to keep
5660
# json structure compatibility with cinderclient
@@ -87,8 +91,10 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
8791
def take_action(
8892
self, parsed_args: argparse.Namespace
8993
) -> tuple[Sequence[str], Iterable[Any]]:
90-
volume_client = self.app.client_manager.volume
91-
backup_data = volume_client.backups.import_record(
94+
volume_client = sdk_utils.ensure_service_version(
95+
self.app.client_manager.sdk_connection.volume, '2'
96+
)
97+
backup_data = volume_client.import_backup(
9298
parsed_args.backup_service, parsed_args.backup_metadata
9399
)
94100
backup_data.pop('links', None)

openstackclient/volume/v3/backup_record.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from collections.abc import Iterable, Sequence
1919
from typing import Any
2020

21-
from osc_lib import utils
21+
from openstack import utils as sdk_utils
2222

2323
from openstackclient import command
2424
from openstackclient.i18n import _
@@ -46,9 +46,13 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
4646
def take_action(
4747
self, parsed_args: argparse.Namespace
4848
) -> tuple[Sequence[str], Iterable[Any]]:
49-
volume_client = self.app.client_manager.volume
50-
backup = utils.find_resource(volume_client.backups, parsed_args.backup)
51-
backup_data = volume_client.backups.export_record(backup.id)
49+
volume_client = sdk_utils.ensure_service_version(
50+
self.app.client_manager.sdk_connection.volume, '3'
51+
)
52+
backup = volume_client.find_backup(
53+
parsed_args.backup, ignore_missing=False
54+
)
55+
backup_data = volume_client.export_backup(backup)['backup-record']
5256

5357
# We only want to show "friendly" display names, but also want to keep
5458
# json structure compatibility with cinderclient
@@ -85,8 +89,10 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
8589
def take_action(
8690
self, parsed_args: argparse.Namespace
8791
) -> tuple[Sequence[str], Iterable[Any]]:
88-
volume_client = self.app.client_manager.volume
89-
backup_data = volume_client.backups.import_record(
92+
volume_client = sdk_utils.ensure_service_version(
93+
self.app.client_manager.sdk_connection.volume, '3'
94+
)
95+
backup_data = volume_client.import_backup(
9096
parsed_args.backup_service, parsed_args.backup_metadata
9197
)
9298
backup_data.pop('links', None)

0 commit comments

Comments
 (0)