python-openstackclient 8.0.0__py3-none-any.whl → 8.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openstackclient/api/compute_v2.py +2 -2
- openstackclient/api/volume_v2.py +60 -0
- openstackclient/api/volume_v3.py +60 -0
- openstackclient/compute/client.py +5 -0
- openstackclient/compute/v2/console.py +7 -0
- openstackclient/compute/v2/console_connection.py +48 -0
- openstackclient/compute/v2/flavor.py +14 -1
- openstackclient/compute/v2/keypair.py +10 -3
- openstackclient/compute/v2/server.py +76 -13
- openstackclient/compute/v2/server_event.py +1 -1
- openstackclient/identity/common.py +85 -11
- openstackclient/identity/v3/application_credential.py +88 -87
- openstackclient/identity/v3/domain.py +67 -49
- openstackclient/identity/v3/group.py +113 -68
- openstackclient/identity/v3/project.py +42 -20
- openstackclient/identity/v3/role.py +7 -2
- openstackclient/identity/v3/user.py +38 -5
- openstackclient/image/client.py +5 -0
- openstackclient/image/v1/image.py +16 -1
- openstackclient/image/v2/cache.py +10 -6
- openstackclient/image/v2/image.py +59 -12
- openstackclient/image/v2/metadef_objects.py +8 -2
- openstackclient/image/v2/metadef_properties.py +9 -2
- openstackclient/network/client.py +0 -6
- openstackclient/network/v2/floating_ip.py +58 -29
- openstackclient/network/v2/network_qos_rule.py +3 -11
- openstackclient/network/v2/port.py +16 -0
- openstackclient/network/v2/router.py +1 -1
- openstackclient/network/v2/security_group.py +49 -7
- openstackclient/network/v2/security_group_rule.py +18 -1
- openstackclient/shell.py +1 -1
- openstackclient/tests/functional/base.py +5 -1
- openstackclient/tests/functional/compute/v2/test_keypair.py +41 -5
- openstackclient/tests/functional/identity/v3/test_access_rule.py +1 -1
- openstackclient/tests/functional/identity/v3/test_application_credential.py +7 -7
- openstackclient/tests/functional/image/v2/test_image.py +36 -14
- openstackclient/tests/functional/volume/v2/test_volume.py +1 -1
- openstackclient/tests/functional/volume/v3/test_volume.py +2 -2
- openstackclient/tests/unit/api/test_volume_v2.py +124 -0
- openstackclient/tests/unit/api/test_volume_v3.py +124 -0
- openstackclient/tests/unit/compute/v2/fakes.py +81 -305
- openstackclient/tests/unit/compute/v2/test_console.py +18 -1
- openstackclient/tests/unit/compute/v2/test_console_connection.py +72 -0
- openstackclient/tests/unit/compute/v2/test_flavor.py +160 -175
- openstackclient/tests/unit/compute/v2/test_keypair.py +12 -5
- openstackclient/tests/unit/compute/v2/test_server.py +211 -97
- openstackclient/tests/unit/compute/v2/test_server_backup.py +32 -71
- openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
- openstackclient/tests/unit/compute/v2/test_server_image.py +33 -72
- openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
- openstackclient/tests/unit/identity/v3/test_application_credential.py +93 -65
- openstackclient/tests/unit/identity/v3/test_domain.py +117 -107
- openstackclient/tests/unit/identity/v3/test_group.py +353 -202
- openstackclient/tests/unit/identity/v3/test_project.py +46 -53
- openstackclient/tests/unit/identity/v3/test_role.py +2 -8
- openstackclient/tests/unit/identity/v3/test_user.py +86 -6
- openstackclient/tests/unit/image/v1/test_image.py +55 -9
- openstackclient/tests/unit/image/v2/test_image.py +128 -58
- openstackclient/tests/unit/image/v2/test_metadef_objects.py +22 -0
- openstackclient/tests/unit/image/v2/test_metadef_properties.py +24 -10
- openstackclient/tests/unit/network/v2/fakes.py +406 -485
- openstackclient/tests/unit/network/v2/test_floating_ip_network.py +13 -19
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +2 -2
- openstackclient/tests/unit/network/v2/test_ndp_proxy.py +3 -5
- openstackclient/tests/unit/network/v2/test_network.py +4 -4
- openstackclient/tests/unit/network/v2/test_network_agent.py +15 -29
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +16 -19
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +79 -152
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +4 -6
- openstackclient/tests/unit/network/v2/test_network_rbac.py +2 -2
- openstackclient/tests/unit/network/v2/test_port.py +57 -17
- openstackclient/tests/unit/network/v2/test_router.py +73 -57
- openstackclient/tests/unit/network/v2/test_security_group_network.py +31 -27
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +1 -3
- openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +82 -39
- openstackclient/tests/unit/volume/v2/fakes.py +1 -2
- openstackclient/tests/unit/volume/v2/test_service.py +57 -91
- openstackclient/tests/unit/volume/v2/test_volume.py +466 -410
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +141 -148
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +293 -283
- openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +61 -71
- openstackclient/tests/unit/volume/v3/test_service.py +221 -141
- openstackclient/tests/unit/volume/v3/test_volume.py +569 -534
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +198 -203
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +682 -47
- openstackclient/volume/v2/service.py +41 -38
- openstackclient/volume/v2/volume.py +140 -88
- openstackclient/volume/v2/volume_backup.py +9 -3
- openstackclient/volume/v2/volume_snapshot.py +121 -84
- openstackclient/volume/v3/block_storage_log_level.py +22 -28
- openstackclient/volume/v3/service.py +105 -14
- openstackclient/volume/v3/volume.py +287 -99
- openstackclient/volume/v3/volume_backup.py +24 -19
- openstackclient/volume/v3/volume_group.py +1 -1
- openstackclient/volume/v3/volume_snapshot.py +485 -10
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/AUTHORS +13 -0
- python_openstackclient-8.2.0.dist-info/METADATA +264 -0
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/RECORD +104 -98
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/entry_points.txt +7 -6
- python_openstackclient-8.2.0.dist-info/pbr.json +1 -0
- python_openstackclient-8.0.0.dist-info/METADATA +0 -166
- python_openstackclient-8.0.0.dist-info/pbr.json +0 -1
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/LICENSE +0 -0
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/WHEEL +0 -0
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/top_level.txt +0 -0
|
@@ -13,89 +13,81 @@
|
|
|
13
13
|
|
|
14
14
|
from unittest.mock import call
|
|
15
15
|
|
|
16
|
+
from openstack.block_storage.v2 import backup as _backup
|
|
17
|
+
from openstack.block_storage.v2 import snapshot as _snapshot
|
|
18
|
+
from openstack.block_storage.v2 import volume as _volume
|
|
19
|
+
from openstack import exceptions as sdk_exceptions
|
|
20
|
+
from openstack.test import fakes as sdk_fakes
|
|
16
21
|
from osc_lib import exceptions
|
|
17
22
|
|
|
18
23
|
from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes
|
|
19
24
|
from openstackclient.volume.v2 import volume_backup
|
|
20
25
|
|
|
21
26
|
|
|
22
|
-
class TestBackupLegacy(volume_fakes.TestVolume):
|
|
23
|
-
def setUp(self):
|
|
24
|
-
super().setUp()
|
|
25
|
-
|
|
26
|
-
self.backups_mock = self.volume_client.backups
|
|
27
|
-
self.backups_mock.reset_mock()
|
|
28
|
-
self.volumes_mock = self.volume_client.volumes
|
|
29
|
-
self.volumes_mock.reset_mock()
|
|
30
|
-
self.snapshots_mock = self.volume_client.volume_snapshots
|
|
31
|
-
self.snapshots_mock.reset_mock()
|
|
32
|
-
self.restores_mock = self.volume_client.restores
|
|
33
|
-
self.restores_mock.reset_mock()
|
|
34
|
-
|
|
35
|
-
|
|
36
27
|
class TestBackupCreate(volume_fakes.TestVolume):
|
|
37
|
-
volume = volume_fakes.create_one_volume()
|
|
38
|
-
snapshot = volume_fakes.create_one_snapshot()
|
|
39
|
-
new_backup = volume_fakes.create_one_backup(
|
|
40
|
-
attrs={'volume_id': volume.id, 'snapshot_id': snapshot.id}
|
|
41
|
-
)
|
|
42
|
-
|
|
43
28
|
columns = (
|
|
44
29
|
'id',
|
|
45
30
|
'name',
|
|
46
31
|
'volume_id',
|
|
47
32
|
)
|
|
48
|
-
data = (
|
|
49
|
-
new_backup.id,
|
|
50
|
-
new_backup.name,
|
|
51
|
-
new_backup.volume_id,
|
|
52
|
-
)
|
|
53
33
|
|
|
54
34
|
def setUp(self):
|
|
55
35
|
super().setUp()
|
|
56
36
|
|
|
37
|
+
self.volume = sdk_fakes.generate_fake_resource(_volume.Volume)
|
|
57
38
|
self.volume_sdk_client.find_volume.return_value = self.volume
|
|
39
|
+
self.snapshot = sdk_fakes.generate_fake_resource(_snapshot.Snapshot)
|
|
58
40
|
self.volume_sdk_client.find_snapshot.return_value = self.snapshot
|
|
59
|
-
self.
|
|
41
|
+
self.backup = sdk_fakes.generate_fake_resource(
|
|
42
|
+
_backup.Backup,
|
|
43
|
+
volume_id=self.volume.id,
|
|
44
|
+
snapshot_id=self.snapshot.id,
|
|
45
|
+
)
|
|
46
|
+
self.volume_sdk_client.create_backup.return_value = self.backup
|
|
47
|
+
|
|
48
|
+
self.data = (
|
|
49
|
+
self.backup.id,
|
|
50
|
+
self.backup.name,
|
|
51
|
+
self.backup.volume_id,
|
|
52
|
+
)
|
|
60
53
|
|
|
61
|
-
# Get the command object to test
|
|
62
54
|
self.cmd = volume_backup.CreateVolumeBackup(self.app, None)
|
|
63
55
|
|
|
64
56
|
def test_backup_create(self):
|
|
65
57
|
arglist = [
|
|
66
58
|
"--name",
|
|
67
|
-
self.
|
|
59
|
+
self.backup.name,
|
|
68
60
|
"--description",
|
|
69
|
-
self.
|
|
61
|
+
self.backup.description,
|
|
70
62
|
"--container",
|
|
71
|
-
self.
|
|
63
|
+
self.backup.container,
|
|
72
64
|
"--force",
|
|
73
65
|
"--incremental",
|
|
74
66
|
"--snapshot",
|
|
75
|
-
self.
|
|
76
|
-
self.
|
|
67
|
+
self.backup.snapshot_id,
|
|
68
|
+
self.backup.volume_id,
|
|
77
69
|
]
|
|
78
70
|
verifylist = [
|
|
79
|
-
("name", self.
|
|
80
|
-
("description", self.
|
|
81
|
-
("container", self.
|
|
71
|
+
("name", self.backup.name),
|
|
72
|
+
("description", self.backup.description),
|
|
73
|
+
("container", self.backup.container),
|
|
82
74
|
("force", True),
|
|
83
75
|
("incremental", True),
|
|
84
|
-
("snapshot", self.
|
|
85
|
-
("volume", self.
|
|
76
|
+
("snapshot", self.backup.snapshot_id),
|
|
77
|
+
("volume", self.backup.volume_id),
|
|
86
78
|
]
|
|
87
79
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
88
80
|
|
|
89
81
|
columns, data = self.cmd.take_action(parsed_args)
|
|
90
82
|
|
|
91
83
|
self.volume_sdk_client.create_backup.assert_called_with(
|
|
92
|
-
volume_id=self.
|
|
93
|
-
container=self.
|
|
94
|
-
name=self.
|
|
95
|
-
description=self.
|
|
84
|
+
volume_id=self.backup.volume_id,
|
|
85
|
+
container=self.backup.container,
|
|
86
|
+
name=self.backup.name,
|
|
87
|
+
description=self.backup.description,
|
|
96
88
|
force=True,
|
|
97
89
|
is_incremental=True,
|
|
98
|
-
snapshot_id=self.
|
|
90
|
+
snapshot_id=self.backup.snapshot_id,
|
|
99
91
|
)
|
|
100
92
|
self.assertEqual(self.columns, columns)
|
|
101
93
|
self.assertEqual(self.data, data)
|
|
@@ -103,25 +95,25 @@ class TestBackupCreate(volume_fakes.TestVolume):
|
|
|
103
95
|
def test_backup_create_without_name(self):
|
|
104
96
|
arglist = [
|
|
105
97
|
"--description",
|
|
106
|
-
self.
|
|
98
|
+
self.backup.description,
|
|
107
99
|
"--container",
|
|
108
|
-
self.
|
|
109
|
-
self.
|
|
100
|
+
self.backup.container,
|
|
101
|
+
self.backup.volume_id,
|
|
110
102
|
]
|
|
111
103
|
verifylist = [
|
|
112
|
-
("description", self.
|
|
113
|
-
("container", self.
|
|
114
|
-
("volume", self.
|
|
104
|
+
("description", self.backup.description),
|
|
105
|
+
("container", self.backup.container),
|
|
106
|
+
("volume", self.backup.volume_id),
|
|
115
107
|
]
|
|
116
108
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
117
109
|
|
|
118
110
|
columns, data = self.cmd.take_action(parsed_args)
|
|
119
111
|
|
|
120
112
|
self.volume_sdk_client.create_backup.assert_called_with(
|
|
121
|
-
volume_id=self.
|
|
122
|
-
container=self.
|
|
113
|
+
volume_id=self.backup.volume_id,
|
|
114
|
+
container=self.backup.container,
|
|
123
115
|
name=None,
|
|
124
|
-
description=self.
|
|
116
|
+
description=self.backup.description,
|
|
125
117
|
force=False,
|
|
126
118
|
is_incremental=False,
|
|
127
119
|
)
|
|
@@ -130,17 +122,13 @@ class TestBackupCreate(volume_fakes.TestVolume):
|
|
|
130
122
|
|
|
131
123
|
|
|
132
124
|
class TestBackupDelete(volume_fakes.TestVolume):
|
|
133
|
-
backups = volume_fakes.create_backups(count=2)
|
|
134
|
-
|
|
135
125
|
def setUp(self):
|
|
136
126
|
super().setUp()
|
|
137
127
|
|
|
138
|
-
self.
|
|
139
|
-
|
|
140
|
-
)
|
|
128
|
+
self.backups = list(sdk_fakes.generate_fake_resources(_backup.Backup))
|
|
129
|
+
self.volume_sdk_client.find_backup.side_effect = self.backups
|
|
141
130
|
self.volume_sdk_client.delete_backup.return_value = None
|
|
142
131
|
|
|
143
|
-
# Get the command object to mock
|
|
144
132
|
self.cmd = volume_backup.DeleteVolumeBackup(self.app, None)
|
|
145
133
|
|
|
146
134
|
def test_backup_delete(self):
|
|
@@ -223,11 +211,6 @@ class TestBackupDelete(volume_fakes.TestVolume):
|
|
|
223
211
|
|
|
224
212
|
|
|
225
213
|
class TestBackupList(volume_fakes.TestVolume):
|
|
226
|
-
volume = volume_fakes.create_one_volume()
|
|
227
|
-
backups = volume_fakes.create_backups(
|
|
228
|
-
attrs={'volume_id': volume.name}, count=3
|
|
229
|
-
)
|
|
230
|
-
|
|
231
214
|
columns = (
|
|
232
215
|
'ID',
|
|
233
216
|
'Name',
|
|
@@ -243,45 +226,51 @@ class TestBackupList(volume_fakes.TestVolume):
|
|
|
243
226
|
'Container',
|
|
244
227
|
)
|
|
245
228
|
|
|
246
|
-
data = []
|
|
247
|
-
for b in backups:
|
|
248
|
-
data.append(
|
|
249
|
-
(
|
|
250
|
-
b.id,
|
|
251
|
-
b.name,
|
|
252
|
-
b.description,
|
|
253
|
-
b.status,
|
|
254
|
-
b.size,
|
|
255
|
-
b.is_incremental,
|
|
256
|
-
b.created_at,
|
|
257
|
-
)
|
|
258
|
-
)
|
|
259
|
-
data_long = []
|
|
260
|
-
for b in backups:
|
|
261
|
-
data_long.append(
|
|
262
|
-
(
|
|
263
|
-
b.id,
|
|
264
|
-
b.name,
|
|
265
|
-
b.description,
|
|
266
|
-
b.status,
|
|
267
|
-
b.size,
|
|
268
|
-
b.is_incremental,
|
|
269
|
-
b.created_at,
|
|
270
|
-
b.availability_zone,
|
|
271
|
-
volume_backup.VolumeIdColumn(b.volume_id),
|
|
272
|
-
b.container,
|
|
273
|
-
)
|
|
274
|
-
)
|
|
275
|
-
|
|
276
229
|
def setUp(self):
|
|
277
230
|
super().setUp()
|
|
278
231
|
|
|
232
|
+
self.volume = sdk_fakes.generate_fake_resource(_volume.Volume)
|
|
233
|
+
self.volume_sdk_client.find_volume.return_value = self.volume
|
|
279
234
|
self.volume_sdk_client.volumes.return_value = [self.volume]
|
|
235
|
+
self.backups = list(
|
|
236
|
+
sdk_fakes.generate_fake_resources(
|
|
237
|
+
_backup.Backup,
|
|
238
|
+
attrs={'volume_id': self.volume.id},
|
|
239
|
+
)
|
|
240
|
+
)
|
|
280
241
|
self.volume_sdk_client.backups.return_value = self.backups
|
|
281
|
-
self.volume_sdk_client.find_volume.return_value = self.volume
|
|
282
242
|
self.volume_sdk_client.find_backup.return_value = self.backups[0]
|
|
283
243
|
|
|
284
|
-
|
|
244
|
+
self.data = []
|
|
245
|
+
for b in self.backups:
|
|
246
|
+
self.data.append(
|
|
247
|
+
(
|
|
248
|
+
b.id,
|
|
249
|
+
b.name,
|
|
250
|
+
b.description,
|
|
251
|
+
b.status,
|
|
252
|
+
b.size,
|
|
253
|
+
b.is_incremental,
|
|
254
|
+
b.created_at,
|
|
255
|
+
)
|
|
256
|
+
)
|
|
257
|
+
self.data_long = []
|
|
258
|
+
for b in self.backups:
|
|
259
|
+
self.data_long.append(
|
|
260
|
+
(
|
|
261
|
+
b.id,
|
|
262
|
+
b.name,
|
|
263
|
+
b.description,
|
|
264
|
+
b.status,
|
|
265
|
+
b.size,
|
|
266
|
+
b.is_incremental,
|
|
267
|
+
b.created_at,
|
|
268
|
+
b.availability_zone,
|
|
269
|
+
volume_backup.VolumeIdColumn(b.volume_id),
|
|
270
|
+
b.container,
|
|
271
|
+
)
|
|
272
|
+
)
|
|
273
|
+
|
|
285
274
|
self.cmd = volume_backup.ListVolumeBackup(self.app, None)
|
|
286
275
|
|
|
287
276
|
def test_backup_list_without_options(self):
|
|
@@ -359,35 +348,33 @@ class TestBackupList(volume_fakes.TestVolume):
|
|
|
359
348
|
|
|
360
349
|
|
|
361
350
|
class TestBackupRestore(volume_fakes.TestVolume):
|
|
362
|
-
volume = volume_fakes.create_one_volume()
|
|
363
|
-
backup = volume_fakes.create_one_backup(
|
|
364
|
-
attrs={'volume_id': volume.id},
|
|
365
|
-
)
|
|
366
|
-
|
|
367
351
|
columns = (
|
|
368
352
|
"id",
|
|
369
353
|
"volume_id",
|
|
370
354
|
"volume_name",
|
|
371
355
|
)
|
|
372
356
|
|
|
373
|
-
data = (
|
|
374
|
-
backup.id,
|
|
375
|
-
volume.id,
|
|
376
|
-
volume.name,
|
|
377
|
-
)
|
|
378
|
-
|
|
379
357
|
def setUp(self):
|
|
380
358
|
super().setUp()
|
|
381
359
|
|
|
382
|
-
self.
|
|
360
|
+
self.volume = sdk_fakes.generate_fake_resource(_volume.Volume)
|
|
383
361
|
self.volume_sdk_client.find_volume.return_value = self.volume
|
|
362
|
+
self.backup = sdk_fakes.generate_fake_resource(
|
|
363
|
+
_backup.Backup, volume_id=self.volume.id
|
|
364
|
+
)
|
|
365
|
+
self.volume_sdk_client.find_backup.return_value = self.backup
|
|
384
366
|
self.volume_sdk_client.restore_backup.return_value = {
|
|
385
367
|
'id': self.backup['id'],
|
|
386
368
|
'volume_id': self.volume['id'],
|
|
387
369
|
'volume_name': self.volume['name'],
|
|
388
370
|
}
|
|
389
371
|
|
|
390
|
-
|
|
372
|
+
self.data = (
|
|
373
|
+
self.backup.id,
|
|
374
|
+
self.volume.id,
|
|
375
|
+
self.volume.name,
|
|
376
|
+
)
|
|
377
|
+
|
|
391
378
|
self.cmd = volume_backup.RestoreVolumeBackup(self.app, None)
|
|
392
379
|
|
|
393
380
|
def test_backup_restore(self):
|
|
@@ -476,17 +463,15 @@ class TestBackupRestore(volume_fakes.TestVolume):
|
|
|
476
463
|
)
|
|
477
464
|
|
|
478
465
|
|
|
479
|
-
class TestBackupSet(
|
|
480
|
-
backup = volume_fakes.create_one_backup(
|
|
481
|
-
attrs={'metadata': {'wow': 'cool'}},
|
|
482
|
-
)
|
|
483
|
-
|
|
466
|
+
class TestBackupSet(volume_fakes.TestVolume):
|
|
484
467
|
def setUp(self):
|
|
485
468
|
super().setUp()
|
|
486
469
|
|
|
487
|
-
self.
|
|
470
|
+
self.backup = sdk_fakes.generate_fake_resource(
|
|
471
|
+
_backup.Backup, metadata={'wow': 'cool'}
|
|
472
|
+
)
|
|
473
|
+
self.volume_sdk_client.find_backup.return_value = self.backup
|
|
488
474
|
|
|
489
|
-
# Get the command object to test
|
|
490
475
|
self.cmd = volume_backup.SetVolumeBackup(self.app, None)
|
|
491
476
|
|
|
492
477
|
def test_backup_set_state(self):
|
|
@@ -496,32 +481,38 @@ class TestBackupSet(TestBackupLegacy):
|
|
|
496
481
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
497
482
|
|
|
498
483
|
result = self.cmd.take_action(parsed_args)
|
|
499
|
-
self.backups_mock.reset_state.assert_called_once_with(
|
|
500
|
-
self.backup.id, 'error'
|
|
501
|
-
)
|
|
502
484
|
self.assertIsNone(result)
|
|
503
485
|
|
|
486
|
+
self.volume_sdk_client.find_backup.assert_called_with(
|
|
487
|
+
self.backup.id, ignore_missing=False
|
|
488
|
+
)
|
|
489
|
+
self.volume_sdk_client.reset_backup_status.assert_called_with(
|
|
490
|
+
self.backup, status='error'
|
|
491
|
+
)
|
|
492
|
+
|
|
504
493
|
def test_backup_set_state_failed(self):
|
|
505
|
-
self.
|
|
494
|
+
self.volume_sdk_client.reset_backup_status.side_effect = (
|
|
495
|
+
sdk_exceptions.NotFoundException('foo')
|
|
496
|
+
)
|
|
497
|
+
|
|
506
498
|
arglist = ['--state', 'error', self.backup.id]
|
|
507
499
|
verifylist = [('state', 'error'), ('backup', self.backup.id)]
|
|
508
500
|
|
|
509
501
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
510
|
-
|
|
511
|
-
self.cmd.take_action
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
502
|
+
exc = self.assertRaises(
|
|
503
|
+
exceptions.CommandError, self.cmd.take_action, parsed_args
|
|
504
|
+
)
|
|
505
|
+
self.assertEqual('One or more of the set operations failed', str(exc))
|
|
506
|
+
|
|
507
|
+
self.volume_sdk_client.find_backup.assert_called_with(
|
|
508
|
+
self.backup.id, ignore_missing=False
|
|
509
|
+
)
|
|
510
|
+
self.volume_sdk_client.reset_backup_status.assert_called_with(
|
|
511
|
+
self.backup, status='error'
|
|
519
512
|
)
|
|
520
513
|
|
|
521
514
|
|
|
522
515
|
class TestBackupShow(volume_fakes.TestVolume):
|
|
523
|
-
backup = volume_fakes.create_one_backup()
|
|
524
|
-
|
|
525
516
|
columns = (
|
|
526
517
|
"availability_zone",
|
|
527
518
|
"container",
|
|
@@ -540,30 +531,32 @@ class TestBackupShow(volume_fakes.TestVolume):
|
|
|
540
531
|
"updated_at",
|
|
541
532
|
"volume_id",
|
|
542
533
|
)
|
|
543
|
-
data = (
|
|
544
|
-
backup.availability_zone,
|
|
545
|
-
backup.container,
|
|
546
|
-
backup.created_at,
|
|
547
|
-
backup.data_timestamp,
|
|
548
|
-
backup.description,
|
|
549
|
-
backup.fail_reason,
|
|
550
|
-
backup.has_dependent_backups,
|
|
551
|
-
backup.id,
|
|
552
|
-
backup.is_incremental,
|
|
553
|
-
backup.name,
|
|
554
|
-
backup.object_count,
|
|
555
|
-
backup.size,
|
|
556
|
-
backup.snapshot_id,
|
|
557
|
-
backup.status,
|
|
558
|
-
backup.updated_at,
|
|
559
|
-
backup.volume_id,
|
|
560
|
-
)
|
|
561
534
|
|
|
562
535
|
def setUp(self):
|
|
563
536
|
super().setUp()
|
|
564
537
|
|
|
538
|
+
self.backup = sdk_fakes.generate_fake_resource(_backup.Backup)
|
|
565
539
|
self.volume_sdk_client.find_backup.return_value = self.backup
|
|
566
|
-
|
|
540
|
+
|
|
541
|
+
self.data = (
|
|
542
|
+
self.backup.availability_zone,
|
|
543
|
+
self.backup.container,
|
|
544
|
+
self.backup.created_at,
|
|
545
|
+
self.backup.data_timestamp,
|
|
546
|
+
self.backup.description,
|
|
547
|
+
self.backup.fail_reason,
|
|
548
|
+
self.backup.has_dependent_backups,
|
|
549
|
+
self.backup.id,
|
|
550
|
+
self.backup.is_incremental,
|
|
551
|
+
self.backup.name,
|
|
552
|
+
self.backup.object_count,
|
|
553
|
+
self.backup.size,
|
|
554
|
+
self.backup.snapshot_id,
|
|
555
|
+
self.backup.status,
|
|
556
|
+
self.backup.updated_at,
|
|
557
|
+
self.backup.volume_id,
|
|
558
|
+
)
|
|
559
|
+
|
|
567
560
|
self.cmd = volume_backup.ShowVolumeBackup(self.app, None)
|
|
568
561
|
|
|
569
562
|
def test_backup_show(self):
|