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.
Files changed (106) hide show
  1. openstackclient/api/compute_v2.py +2 -2
  2. openstackclient/api/volume_v2.py +60 -0
  3. openstackclient/api/volume_v3.py +60 -0
  4. openstackclient/compute/client.py +5 -0
  5. openstackclient/compute/v2/console.py +7 -0
  6. openstackclient/compute/v2/console_connection.py +48 -0
  7. openstackclient/compute/v2/flavor.py +14 -1
  8. openstackclient/compute/v2/keypair.py +10 -3
  9. openstackclient/compute/v2/server.py +76 -13
  10. openstackclient/compute/v2/server_event.py +1 -1
  11. openstackclient/identity/common.py +85 -11
  12. openstackclient/identity/v3/application_credential.py +88 -87
  13. openstackclient/identity/v3/domain.py +67 -49
  14. openstackclient/identity/v3/group.py +113 -68
  15. openstackclient/identity/v3/project.py +42 -20
  16. openstackclient/identity/v3/role.py +7 -2
  17. openstackclient/identity/v3/user.py +38 -5
  18. openstackclient/image/client.py +5 -0
  19. openstackclient/image/v1/image.py +16 -1
  20. openstackclient/image/v2/cache.py +10 -6
  21. openstackclient/image/v2/image.py +59 -12
  22. openstackclient/image/v2/metadef_objects.py +8 -2
  23. openstackclient/image/v2/metadef_properties.py +9 -2
  24. openstackclient/network/client.py +0 -6
  25. openstackclient/network/v2/floating_ip.py +58 -29
  26. openstackclient/network/v2/network_qos_rule.py +3 -11
  27. openstackclient/network/v2/port.py +16 -0
  28. openstackclient/network/v2/router.py +1 -1
  29. openstackclient/network/v2/security_group.py +49 -7
  30. openstackclient/network/v2/security_group_rule.py +18 -1
  31. openstackclient/shell.py +1 -1
  32. openstackclient/tests/functional/base.py +5 -1
  33. openstackclient/tests/functional/compute/v2/test_keypair.py +41 -5
  34. openstackclient/tests/functional/identity/v3/test_access_rule.py +1 -1
  35. openstackclient/tests/functional/identity/v3/test_application_credential.py +7 -7
  36. openstackclient/tests/functional/image/v2/test_image.py +36 -14
  37. openstackclient/tests/functional/volume/v2/test_volume.py +1 -1
  38. openstackclient/tests/functional/volume/v3/test_volume.py +2 -2
  39. openstackclient/tests/unit/api/test_volume_v2.py +124 -0
  40. openstackclient/tests/unit/api/test_volume_v3.py +124 -0
  41. openstackclient/tests/unit/compute/v2/fakes.py +81 -305
  42. openstackclient/tests/unit/compute/v2/test_console.py +18 -1
  43. openstackclient/tests/unit/compute/v2/test_console_connection.py +72 -0
  44. openstackclient/tests/unit/compute/v2/test_flavor.py +160 -175
  45. openstackclient/tests/unit/compute/v2/test_keypair.py +12 -5
  46. openstackclient/tests/unit/compute/v2/test_server.py +211 -97
  47. openstackclient/tests/unit/compute/v2/test_server_backup.py +32 -71
  48. openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
  49. openstackclient/tests/unit/compute/v2/test_server_image.py +33 -72
  50. openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
  51. openstackclient/tests/unit/identity/v3/test_application_credential.py +93 -65
  52. openstackclient/tests/unit/identity/v3/test_domain.py +117 -107
  53. openstackclient/tests/unit/identity/v3/test_group.py +353 -202
  54. openstackclient/tests/unit/identity/v3/test_project.py +46 -53
  55. openstackclient/tests/unit/identity/v3/test_role.py +2 -8
  56. openstackclient/tests/unit/identity/v3/test_user.py +86 -6
  57. openstackclient/tests/unit/image/v1/test_image.py +55 -9
  58. openstackclient/tests/unit/image/v2/test_image.py +128 -58
  59. openstackclient/tests/unit/image/v2/test_metadef_objects.py +22 -0
  60. openstackclient/tests/unit/image/v2/test_metadef_properties.py +24 -10
  61. openstackclient/tests/unit/network/v2/fakes.py +406 -485
  62. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +13 -19
  63. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +2 -2
  64. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +3 -5
  65. openstackclient/tests/unit/network/v2/test_network.py +4 -4
  66. openstackclient/tests/unit/network/v2/test_network_agent.py +15 -29
  67. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +16 -19
  68. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +79 -152
  69. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +4 -6
  70. openstackclient/tests/unit/network/v2/test_network_rbac.py +2 -2
  71. openstackclient/tests/unit/network/v2/test_port.py +57 -17
  72. openstackclient/tests/unit/network/v2/test_router.py +73 -57
  73. openstackclient/tests/unit/network/v2/test_security_group_network.py +31 -27
  74. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +1 -3
  75. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +82 -39
  76. openstackclient/tests/unit/volume/v2/fakes.py +1 -2
  77. openstackclient/tests/unit/volume/v2/test_service.py +57 -91
  78. openstackclient/tests/unit/volume/v2/test_volume.py +466 -410
  79. openstackclient/tests/unit/volume/v2/test_volume_backup.py +141 -148
  80. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +293 -283
  81. openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +61 -71
  82. openstackclient/tests/unit/volume/v3/test_service.py +221 -141
  83. openstackclient/tests/unit/volume/v3/test_volume.py +569 -534
  84. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
  85. openstackclient/tests/unit/volume/v3/test_volume_backup.py +198 -203
  86. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +682 -47
  87. openstackclient/volume/v2/service.py +41 -38
  88. openstackclient/volume/v2/volume.py +140 -88
  89. openstackclient/volume/v2/volume_backup.py +9 -3
  90. openstackclient/volume/v2/volume_snapshot.py +121 -84
  91. openstackclient/volume/v3/block_storage_log_level.py +22 -28
  92. openstackclient/volume/v3/service.py +105 -14
  93. openstackclient/volume/v3/volume.py +287 -99
  94. openstackclient/volume/v3/volume_backup.py +24 -19
  95. openstackclient/volume/v3/volume_group.py +1 -1
  96. openstackclient/volume/v3/volume_snapshot.py +485 -10
  97. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/AUTHORS +13 -0
  98. python_openstackclient-8.2.0.dist-info/METADATA +264 -0
  99. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/RECORD +104 -98
  100. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/entry_points.txt +7 -6
  101. python_openstackclient-8.2.0.dist-info/pbr.json +1 -0
  102. python_openstackclient-8.0.0.dist-info/METADATA +0 -166
  103. python_openstackclient-8.0.0.dist-info/pbr.json +0 -1
  104. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/LICENSE +0 -0
  105. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/WHEEL +0 -0
  106. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.2.0.dist-info}/top_level.txt +0 -0
@@ -28,7 +28,7 @@ class TestVolumeAttachment(volume_fakes.TestVolume):
28
28
 
29
29
  class TestVolumeAttachmentCreate(TestVolumeAttachment):
30
30
  volume = volume_fakes.create_one_volume()
31
- server = compute_fakes.create_one_sdk_server()
31
+ server = compute_fakes.create_one_server()
32
32
  volume_attachment = volume_fakes.create_one_volume_attachment(
33
33
  attrs={'instance': server.id, 'volume_id': volume.id},
34
34
  )
@@ -11,91 +11,83 @@
11
11
  # License for the specific language governing permissions and limitations
12
12
  # under the License.
13
13
 
14
- from unittest.mock import call
14
+ from unittest import mock
15
15
 
16
+ from openstack.block_storage.v3 import backup as _backup
17
+ from openstack.block_storage.v3 import snapshot as _snapshot
18
+ from openstack.block_storage.v3 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.v3 import fakes as volume_fakes
19
24
  from openstackclient.volume.v3 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.volume_sdk_client.create_backup.return_value = self.new_backup
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.new_backup.name,
59
+ self.backup.name,
68
60
  "--description",
69
- self.new_backup.description,
61
+ self.backup.description,
70
62
  "--container",
71
- self.new_backup.container,
63
+ self.backup.container,
72
64
  "--force",
73
65
  "--incremental",
74
66
  "--snapshot",
75
- self.new_backup.snapshot_id,
76
- self.new_backup.volume_id,
67
+ self.backup.snapshot_id,
68
+ self.backup.volume_id,
77
69
  ]
78
70
  verifylist = [
79
- ("name", self.new_backup.name),
80
- ("description", self.new_backup.description),
81
- ("container", self.new_backup.container),
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.new_backup.snapshot_id),
85
- ("volume", self.new_backup.volume_id),
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.new_backup.volume_id,
93
- container=self.new_backup.container,
94
- name=self.new_backup.name,
95
- description=self.new_backup.description,
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.new_backup.snapshot_id,
90
+ snapshot_id=self.backup.snapshot_id,
99
91
  )
100
92
  self.assertEqual(self.columns, columns)
101
93
  self.assertEqual(self.data, data)
@@ -108,18 +100,18 @@ class TestBackupCreate(volume_fakes.TestVolume):
108
100
  "foo=bar",
109
101
  "--property",
110
102
  "wow=much-cool",
111
- self.new_backup.volume_id,
103
+ self.backup.volume_id,
112
104
  ]
113
105
  verifylist = [
114
106
  ("properties", {"foo": "bar", "wow": "much-cool"}),
115
- ("volume", self.new_backup.volume_id),
107
+ ("volume", self.backup.volume_id),
116
108
  ]
117
109
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
118
110
 
119
111
  columns, data = self.cmd.take_action(parsed_args)
120
112
 
121
113
  self.volume_sdk_client.create_backup.assert_called_with(
122
- volume_id=self.new_backup.volume_id,
114
+ volume_id=self.backup.volume_id,
123
115
  container=None,
124
116
  name=None,
125
117
  description=None,
@@ -138,11 +130,11 @@ class TestBackupCreate(volume_fakes.TestVolume):
138
130
  "foo=bar",
139
131
  "--property",
140
132
  "wow=much-cool",
141
- self.new_backup.volume_id,
133
+ self.backup.volume_id,
142
134
  ]
143
135
  verifylist = [
144
136
  ("properties", {"foo": "bar", "wow": "much-cool"}),
145
- ("volume", self.new_backup.volume_id),
137
+ ("volume", self.backup.volume_id),
146
138
  ]
147
139
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
148
140
 
@@ -157,18 +149,18 @@ class TestBackupCreate(volume_fakes.TestVolume):
157
149
  arglist = [
158
150
  "--availability-zone",
159
151
  "my-az",
160
- self.new_backup.volume_id,
152
+ self.backup.volume_id,
161
153
  ]
162
154
  verifylist = [
163
155
  ("availability_zone", "my-az"),
164
- ("volume", self.new_backup.volume_id),
156
+ ("volume", self.backup.volume_id),
165
157
  ]
166
158
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
167
159
 
168
160
  columns, data = self.cmd.take_action(parsed_args)
169
161
 
170
162
  self.volume_sdk_client.create_backup.assert_called_with(
171
- volume_id=self.new_backup.volume_id,
163
+ volume_id=self.backup.volume_id,
172
164
  container=None,
173
165
  name=None,
174
166
  description=None,
@@ -185,11 +177,11 @@ class TestBackupCreate(volume_fakes.TestVolume):
185
177
  arglist = [
186
178
  "--availability-zone",
187
179
  "my-az",
188
- self.new_backup.volume_id,
180
+ self.backup.volume_id,
189
181
  ]
190
182
  verifylist = [
191
183
  ("availability_zone", "my-az"),
192
- ("volume", self.new_backup.volume_id),
184
+ ("volume", self.backup.volume_id),
193
185
  ]
194
186
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
195
187
 
@@ -201,25 +193,25 @@ class TestBackupCreate(volume_fakes.TestVolume):
201
193
  def test_backup_create_without_name(self):
202
194
  arglist = [
203
195
  "--description",
204
- self.new_backup.description,
196
+ self.backup.description,
205
197
  "--container",
206
- self.new_backup.container,
207
- self.new_backup.volume_id,
198
+ self.backup.container,
199
+ self.backup.volume_id,
208
200
  ]
209
201
  verifylist = [
210
- ("description", self.new_backup.description),
211
- ("container", self.new_backup.container),
212
- ("volume", self.new_backup.volume_id),
202
+ ("description", self.backup.description),
203
+ ("container", self.backup.container),
204
+ ("volume", self.backup.volume_id),
213
205
  ]
214
206
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
215
207
 
216
208
  columns, data = self.cmd.take_action(parsed_args)
217
209
 
218
210
  self.volume_sdk_client.create_backup.assert_called_with(
219
- volume_id=self.new_backup.volume_id,
220
- container=self.new_backup.container,
211
+ volume_id=self.backup.volume_id,
212
+ container=self.backup.container,
221
213
  name=None,
222
- description=self.new_backup.description,
214
+ description=self.backup.description,
223
215
  force=False,
224
216
  is_incremental=False,
225
217
  )
@@ -228,17 +220,13 @@ class TestBackupCreate(volume_fakes.TestVolume):
228
220
 
229
221
 
230
222
  class TestBackupDelete(volume_fakes.TestVolume):
231
- backups = volume_fakes.create_backups(count=2)
232
-
233
223
  def setUp(self):
234
224
  super().setUp()
235
225
 
236
- self.volume_sdk_client.find_backup = volume_fakes.get_backups(
237
- self.backups
238
- )
226
+ self.backups = list(sdk_fakes.generate_fake_resources(_backup.Backup))
227
+ self.volume_sdk_client.find_backup.side_effect = self.backups
239
228
  self.volume_sdk_client.delete_backup.return_value = None
240
229
 
241
- # Get the command object to mock
242
230
  self.cmd = volume_backup.DeleteVolumeBackup(self.app, None)
243
231
 
244
232
  def test_backup_delete(self):
@@ -281,7 +269,7 @@ class TestBackupDelete(volume_fakes.TestVolume):
281
269
 
282
270
  calls = []
283
271
  for b in self.backups:
284
- calls.append(call(b.id, ignore_missing=False, force=False))
272
+ calls.append(mock.call(b.id, ignore_missing=False, force=False))
285
273
  self.volume_sdk_client.delete_backup.assert_has_calls(calls)
286
274
  self.assertIsNone(result)
287
275
 
@@ -321,11 +309,6 @@ class TestBackupDelete(volume_fakes.TestVolume):
321
309
 
322
310
 
323
311
  class TestBackupList(volume_fakes.TestVolume):
324
- volume = volume_fakes.create_one_volume()
325
- backups = volume_fakes.create_backups(
326
- attrs={'volume_id': volume.name}, count=3
327
- )
328
-
329
312
  columns = (
330
313
  'ID',
331
314
  'Name',
@@ -341,45 +324,51 @@ class TestBackupList(volume_fakes.TestVolume):
341
324
  'Container',
342
325
  )
343
326
 
344
- data = []
345
- for b in backups:
346
- data.append(
347
- (
348
- b.id,
349
- b.name,
350
- b.description,
351
- b.status,
352
- b.size,
353
- b.is_incremental,
354
- b.created_at,
355
- )
356
- )
357
- data_long = []
358
- for b in backups:
359
- data_long.append(
360
- (
361
- b.id,
362
- b.name,
363
- b.description,
364
- b.status,
365
- b.size,
366
- b.is_incremental,
367
- b.created_at,
368
- b.availability_zone,
369
- volume_backup.VolumeIdColumn(b.volume_id),
370
- b.container,
371
- )
372
- )
373
-
374
327
  def setUp(self):
375
328
  super().setUp()
376
329
 
330
+ self.volume = sdk_fakes.generate_fake_resource(_volume.Volume)
331
+ self.volume_sdk_client.find_volume.return_value = self.volume
377
332
  self.volume_sdk_client.volumes.return_value = [self.volume]
333
+ self.backups = list(
334
+ sdk_fakes.generate_fake_resources(
335
+ _backup.Backup,
336
+ attrs={'volume_id': self.volume.id},
337
+ )
338
+ )
378
339
  self.volume_sdk_client.backups.return_value = self.backups
379
- self.volume_sdk_client.find_volume.return_value = self.volume
380
340
  self.volume_sdk_client.find_backup.return_value = self.backups[0]
381
341
 
382
- # Get the command to test
342
+ self.data = []
343
+ for b in self.backups:
344
+ self.data.append(
345
+ (
346
+ b.id,
347
+ b.name,
348
+ b.description,
349
+ b.status,
350
+ b.size,
351
+ b.is_incremental,
352
+ b.created_at,
353
+ )
354
+ )
355
+ self.data_long = []
356
+ for b in self.backups:
357
+ self.data_long.append(
358
+ (
359
+ b.id,
360
+ b.name,
361
+ b.description,
362
+ b.status,
363
+ b.size,
364
+ b.is_incremental,
365
+ b.created_at,
366
+ b.availability_zone,
367
+ volume_backup.VolumeIdColumn(b.volume_id),
368
+ b.container,
369
+ )
370
+ )
371
+
383
372
  self.cmd = volume_backup.ListVolumeBackup(self.app, None)
384
373
 
385
374
  def test_backup_list_without_options(self):
@@ -457,35 +446,34 @@ class TestBackupList(volume_fakes.TestVolume):
457
446
 
458
447
 
459
448
  class TestBackupRestore(volume_fakes.TestVolume):
460
- volume = volume_fakes.create_one_volume()
461
- backup = volume_fakes.create_one_backup(
462
- attrs={'volume_id': volume.id},
463
- )
464
-
465
449
  columns = (
466
450
  "id",
467
451
  "volume_id",
468
452
  "volume_name",
469
453
  )
470
454
 
471
- data = (
472
- backup.id,
473
- volume.id,
474
- volume.name,
475
- )
476
-
477
455
  def setUp(self):
478
456
  super().setUp()
479
457
 
480
- self.volume_sdk_client.find_backup.return_value = self.backup
458
+ self.volume = sdk_fakes.generate_fake_resource(_volume.Volume)
481
459
  self.volume_sdk_client.find_volume.return_value = self.volume
460
+ self.backup = sdk_fakes.generate_fake_resource(
461
+ _backup.Backup, volume_id=self.volume.id
462
+ )
463
+ self.volume_sdk_client.find_backup.return_value = self.backup
464
+ self.volume_sdk_client.create_backup.return_value = self.backup
482
465
  self.volume_sdk_client.restore_backup.return_value = {
483
466
  'id': self.backup['id'],
484
467
  'volume_id': self.volume['id'],
485
468
  'volume_name': self.volume['name'],
486
469
  }
487
470
 
488
- # Get the command object to mock
471
+ self.data = (
472
+ self.backup.id,
473
+ self.volume.id,
474
+ self.volume.name,
475
+ )
476
+
489
477
  self.cmd = volume_backup.RestoreVolumeBackup(self.app, None)
490
478
 
491
479
  def test_backup_restore(self):
@@ -574,17 +562,15 @@ class TestBackupRestore(volume_fakes.TestVolume):
574
562
  )
575
563
 
576
564
 
577
- class TestBackupSet(TestBackupLegacy):
578
- backup = volume_fakes.create_one_backup(
579
- attrs={'metadata': {'wow': 'cool'}},
580
- )
581
-
565
+ class TestBackupSet(volume_fakes.TestVolume):
582
566
  def setUp(self):
583
567
  super().setUp()
584
568
 
585
- self.backups_mock.get.return_value = self.backup
569
+ self.backup = sdk_fakes.generate_fake_resource(
570
+ _backup.Backup, metadata={'wow': 'cool'}
571
+ )
572
+ self.volume_sdk_client.find_backup.return_value = self.backup
586
573
 
587
- # Get the command object to test
588
574
  self.cmd = volume_backup.SetVolumeBackup(self.app, None)
589
575
 
590
576
  def test_backup_set_name(self):
@@ -601,14 +587,16 @@ class TestBackupSet(TestBackupLegacy):
601
587
  ]
602
588
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
603
589
 
604
- # In base command class ShowOne in cliff, abstract method take_action()
605
- # returns nothing
606
590
  result = self.cmd.take_action(parsed_args)
607
- self.backups_mock.update.assert_called_once_with(
608
- self.backup.id, **{'name': 'new_name'}
609
- )
610
591
  self.assertIsNone(result)
611
592
 
593
+ self.volume_sdk_client.find_backup.assert_called_with(
594
+ self.backup.id, ignore_missing=False
595
+ )
596
+ self.volume_sdk_client.update_backup.assert_called_once_with(
597
+ self.backup, name='new_name'
598
+ )
599
+
612
600
  def test_backup_set_name_pre_v39(self):
613
601
  self.set_volume_api_version('3.8')
614
602
 
@@ -644,13 +632,14 @@ class TestBackupSet(TestBackupLegacy):
644
632
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
645
633
 
646
634
  result = self.cmd.take_action(parsed_args)
635
+ self.assertIsNone(result)
647
636
 
648
- # Set expected values
649
- kwargs = {'description': 'new_description'}
650
- self.backups_mock.update.assert_called_once_with(
651
- self.backup.id, **kwargs
637
+ self.volume_sdk_client.find_backup.assert_called_with(
638
+ self.backup.id, ignore_missing=False
639
+ )
640
+ self.volume_sdk_client.update_backup.assert_called_once_with(
641
+ self.backup, description='new_description'
652
642
  )
653
- self.assertIsNone(result)
654
643
 
655
644
  def test_backup_set_description_pre_v39(self):
656
645
  self.set_volume_api_version('3.8')
@@ -679,26 +668,34 @@ class TestBackupSet(TestBackupLegacy):
679
668
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
680
669
 
681
670
  result = self.cmd.take_action(parsed_args)
682
- self.backups_mock.reset_state.assert_called_once_with(
683
- self.backup.id, 'error'
684
- )
685
671
  self.assertIsNone(result)
686
672
 
673
+ self.volume_sdk_client.find_backup.assert_called_with(
674
+ self.backup.id, ignore_missing=False
675
+ )
676
+ self.volume_sdk_client.reset_backup_status.assert_called_with(
677
+ self.backup, status='error'
678
+ )
679
+
687
680
  def test_backup_set_state_failed(self):
688
- self.backups_mock.reset_state.side_effect = exceptions.CommandError()
681
+ self.volume_sdk_client.reset_backup_status.side_effect = (
682
+ sdk_exceptions.NotFoundException('foo')
683
+ )
684
+
689
685
  arglist = ['--state', 'error', self.backup.id]
690
686
  verifylist = [('state', 'error'), ('backup', self.backup.id)]
691
687
 
692
688
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
693
- try:
694
- self.cmd.take_action(parsed_args)
695
- self.fail('CommandError should be raised.')
696
- except exceptions.CommandError as e:
697
- self.assertEqual(
698
- 'One or more of the set operations failed', str(e)
699
- )
700
- self.backups_mock.reset_state.assert_called_with(
701
- self.backup.id, 'error'
689
+ exc = self.assertRaises(
690
+ exceptions.CommandError, self.cmd.take_action, parsed_args
691
+ )
692
+ self.assertEqual('One or more of the set operations failed', str(exc))
693
+
694
+ self.volume_sdk_client.find_backup.assert_called_with(
695
+ self.backup.id, ignore_missing=False
696
+ )
697
+ self.volume_sdk_client.reset_backup_status.assert_called_with(
698
+ self.backup, status='error'
702
699
  )
703
700
 
704
701
  def test_backup_set_no_property(self):
@@ -715,15 +712,14 @@ class TestBackupSet(TestBackupLegacy):
715
712
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
716
713
 
717
714
  result = self.cmd.take_action(parsed_args)
715
+ self.assertIsNone(result)
718
716
 
719
- # Set expected values
720
- kwargs = {
721
- 'metadata': {},
722
- }
723
- self.backups_mock.update.assert_called_once_with(
724
- self.backup.id, **kwargs
717
+ self.volume_sdk_client.find_backup.assert_called_with(
718
+ self.backup.id, ignore_missing=False
719
+ )
720
+ self.volume_sdk_client.update_backup.assert_called_once_with(
721
+ self.backup, metadata={}
725
722
  )
726
- self.assertIsNone(result)
727
723
 
728
724
  def test_backup_set_no_property_pre_v343(self):
729
725
  self.set_volume_api_version('3.42')
@@ -758,15 +754,14 @@ class TestBackupSet(TestBackupLegacy):
758
754
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
759
755
 
760
756
  result = self.cmd.take_action(parsed_args)
757
+ self.assertIsNone(result)
761
758
 
762
- # Set expected values
763
- kwargs = {
764
- 'metadata': {'wow': 'cool', 'foo': 'bar'},
765
- }
766
- self.backups_mock.update.assert_called_once_with(
767
- self.backup.id, **kwargs
759
+ self.volume_sdk_client.find_backup.assert_called_with(
760
+ self.backup.id, ignore_missing=False
761
+ )
762
+ self.volume_sdk_client.update_backup.assert_called_once_with(
763
+ self.backup, metadata={'wow': 'cool', 'foo': 'bar'}
768
764
  )
769
- self.assertIsNone(result)
770
765
 
771
766
  def test_backup_set_property_pre_v343(self):
772
767
  self.set_volume_api_version('3.42')
@@ -788,17 +783,16 @@ class TestBackupSet(TestBackupLegacy):
788
783
  self.assertIn("--os-volume-api-version 3.43 or greater", str(exc))
789
784
 
790
785
 
791
- class TestBackupUnset(TestBackupLegacy):
792
- backup = volume_fakes.create_one_backup(
793
- attrs={'metadata': {'foo': 'bar'}},
794
- )
795
-
786
+ class TestBackupUnset(volume_fakes.TestVolume):
796
787
  def setUp(self):
797
788
  super().setUp()
798
789
 
799
- self.backups_mock.get.return_value = self.backup
790
+ self.backup = sdk_fakes.generate_fake_resource(
791
+ _backup.Backup, metadata={'foo': 'bar', 'wow': 'cool'}
792
+ )
793
+ self.volume_sdk_client.find_backup.return_value = self.backup
794
+ self.volume_sdk_client.delete_backup_metadata.return_value = None
800
795
 
801
- # Get the command object to test
802
796
  self.cmd = volume_backup.UnsetVolumeBackup(self.app, None)
803
797
 
804
798
  def test_backup_unset_property(self):
@@ -816,15 +810,14 @@ class TestBackupUnset(TestBackupLegacy):
816
810
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
817
811
 
818
812
  result = self.cmd.take_action(parsed_args)
813
+ self.assertIsNone(result)
819
814
 
820
- # Set expected values
821
- kwargs = {
822
- 'metadata': {},
823
- }
824
- self.backups_mock.update.assert_called_once_with(
825
- self.backup.id, **kwargs
815
+ self.volume_sdk_client.find_backup.assert_called_with(
816
+ self.backup.id, ignore_missing=False
817
+ )
818
+ self.volume_sdk_client.delete_backup_metadata.assert_called_once_with(
819
+ self.backup, keys=['wow']
826
820
  )
827
- self.assertIsNone(result)
828
821
 
829
822
  def test_backup_unset_property_pre_v343(self):
830
823
  self.set_volume_api_version('3.42')
@@ -847,8 +840,6 @@ class TestBackupUnset(TestBackupLegacy):
847
840
 
848
841
 
849
842
  class TestBackupShow(volume_fakes.TestVolume):
850
- backup = volume_fakes.create_one_backup()
851
-
852
843
  columns = (
853
844
  "availability_zone",
854
845
  "container",
@@ -871,34 +862,36 @@ class TestBackupShow(volume_fakes.TestVolume):
871
862
  "user_id",
872
863
  "volume_id",
873
864
  )
874
- data = (
875
- backup.availability_zone,
876
- backup.container,
877
- backup.created_at,
878
- backup.data_timestamp,
879
- backup.description,
880
- backup.encryption_key_id,
881
- backup.fail_reason,
882
- backup.has_dependent_backups,
883
- backup.id,
884
- backup.is_incremental,
885
- backup.metadata,
886
- backup.name,
887
- backup.object_count,
888
- backup.project_id,
889
- backup.size,
890
- backup.snapshot_id,
891
- backup.status,
892
- backup.updated_at,
893
- backup.user_id,
894
- backup.volume_id,
895
- )
896
865
 
897
866
  def setUp(self):
898
867
  super().setUp()
899
868
 
869
+ self.backup = sdk_fakes.generate_fake_resource(_backup.Backup)
900
870
  self.volume_sdk_client.find_backup.return_value = self.backup
901
- # Get the command object to test
871
+
872
+ self.data = (
873
+ self.backup.availability_zone,
874
+ self.backup.container,
875
+ self.backup.created_at,
876
+ self.backup.data_timestamp,
877
+ self.backup.description,
878
+ self.backup.encryption_key_id,
879
+ self.backup.fail_reason,
880
+ self.backup.has_dependent_backups,
881
+ self.backup.id,
882
+ self.backup.is_incremental,
883
+ self.backup.metadata,
884
+ self.backup.name,
885
+ self.backup.object_count,
886
+ self.backup.project_id,
887
+ self.backup.size,
888
+ self.backup.snapshot_id,
889
+ self.backup.status,
890
+ self.backup.updated_at,
891
+ self.backup.user_id,
892
+ self.backup.volume_id,
893
+ )
894
+
902
895
  self.cmd = volume_backup.ShowVolumeBackup(self.app, None)
903
896
 
904
897
  def test_backup_show(self):
@@ -907,7 +900,9 @@ class TestBackupShow(volume_fakes.TestVolume):
907
900
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
908
901
 
909
902
  columns, data = self.cmd.take_action(parsed_args)
910
- self.volume_sdk_client.find_backup.assert_called_with(self.backup.id)
903
+ self.volume_sdk_client.find_backup.assert_called_with(
904
+ self.backup.id, ignore_missing=False
905
+ )
911
906
 
912
907
  self.assertEqual(self.columns, columns)
913
908
  self.assertEqual(self.data, data)