python-openstackclient 8.0.0__py3-none-any.whl → 8.1.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 (85) hide show
  1. openstackclient/compute/client.py +5 -0
  2. openstackclient/compute/v2/console.py +7 -0
  3. openstackclient/compute/v2/console_connection.py +48 -0
  4. openstackclient/compute/v2/keypair.py +10 -3
  5. openstackclient/compute/v2/server.py +75 -10
  6. openstackclient/compute/v2/server_event.py +1 -1
  7. openstackclient/identity/common.py +79 -0
  8. openstackclient/identity/v3/application_credential.py +2 -2
  9. openstackclient/identity/v3/domain.py +62 -43
  10. openstackclient/identity/v3/group.py +113 -68
  11. openstackclient/identity/v3/project.py +17 -0
  12. openstackclient/identity/v3/user.py +38 -5
  13. openstackclient/image/client.py +5 -0
  14. openstackclient/image/v2/image.py +11 -11
  15. openstackclient/network/client.py +0 -6
  16. openstackclient/network/v2/floating_ip.py +58 -29
  17. openstackclient/network/v2/network_qos_rule.py +3 -11
  18. openstackclient/network/v2/router.py +1 -1
  19. openstackclient/network/v2/security_group.py +5 -4
  20. openstackclient/network/v2/security_group_rule.py +1 -1
  21. openstackclient/shell.py +1 -1
  22. openstackclient/tests/functional/base.py +5 -1
  23. openstackclient/tests/functional/compute/v2/test_keypair.py +41 -5
  24. openstackclient/tests/unit/compute/v2/fakes.py +81 -305
  25. openstackclient/tests/unit/compute/v2/test_console.py +18 -1
  26. openstackclient/tests/unit/compute/v2/test_console_connection.py +72 -0
  27. openstackclient/tests/unit/compute/v2/test_flavor.py +1 -1
  28. openstackclient/tests/unit/compute/v2/test_keypair.py +12 -5
  29. openstackclient/tests/unit/compute/v2/test_server.py +169 -46
  30. openstackclient/tests/unit/compute/v2/test_server_backup.py +32 -71
  31. openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
  32. openstackclient/tests/unit/compute/v2/test_server_image.py +33 -72
  33. openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
  34. openstackclient/tests/unit/identity/v3/test_application_credential.py +47 -25
  35. openstackclient/tests/unit/identity/v3/test_domain.py +115 -105
  36. openstackclient/tests/unit/identity/v3/test_group.py +353 -202
  37. openstackclient/tests/unit/identity/v3/test_project.py +16 -0
  38. openstackclient/tests/unit/identity/v3/test_user.py +86 -6
  39. openstackclient/tests/unit/image/v1/test_image.py +8 -9
  40. openstackclient/tests/unit/image/v2/test_image.py +49 -49
  41. openstackclient/tests/unit/network/v2/fakes.py +405 -485
  42. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +13 -19
  43. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +2 -2
  44. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +1 -3
  45. openstackclient/tests/unit/network/v2/test_network.py +4 -4
  46. openstackclient/tests/unit/network/v2/test_network_agent.py +15 -29
  47. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +16 -19
  48. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +79 -152
  49. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +4 -6
  50. openstackclient/tests/unit/network/v2/test_network_rbac.py +2 -2
  51. openstackclient/tests/unit/network/v2/test_port.py +17 -17
  52. openstackclient/tests/unit/network/v2/test_router.py +73 -57
  53. openstackclient/tests/unit/network/v2/test_security_group_network.py +25 -27
  54. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +1 -3
  55. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +33 -39
  56. openstackclient/tests/unit/volume/v2/fakes.py +1 -2
  57. openstackclient/tests/unit/volume/v2/test_service.py +57 -91
  58. openstackclient/tests/unit/volume/v2/test_volume.py +108 -105
  59. openstackclient/tests/unit/volume/v2/test_volume_backup.py +141 -148
  60. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +293 -283
  61. openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +61 -71
  62. openstackclient/tests/unit/volume/v3/test_service.py +221 -141
  63. openstackclient/tests/unit/volume/v3/test_volume.py +130 -119
  64. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
  65. openstackclient/tests/unit/volume/v3/test_volume_backup.py +198 -203
  66. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +682 -47
  67. openstackclient/volume/v2/service.py +41 -38
  68. openstackclient/volume/v2/volume.py +63 -37
  69. openstackclient/volume/v2/volume_backup.py +9 -3
  70. openstackclient/volume/v2/volume_snapshot.py +121 -84
  71. openstackclient/volume/v3/block_storage_log_level.py +22 -28
  72. openstackclient/volume/v3/service.py +105 -14
  73. openstackclient/volume/v3/volume.py +200 -39
  74. openstackclient/volume/v3/volume_backup.py +24 -19
  75. openstackclient/volume/v3/volume_snapshot.py +485 -10
  76. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/AUTHORS +8 -0
  77. python_openstackclient-8.1.0.dist-info/METADATA +264 -0
  78. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/RECORD +83 -81
  79. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/entry_points.txt +7 -6
  80. python_openstackclient-8.1.0.dist-info/pbr.json +1 -0
  81. python_openstackclient-8.0.0.dist-info/METADATA +0 -166
  82. python_openstackclient-8.0.0.dist-info/pbr.json +0 -1
  83. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/LICENSE +0 -0
  84. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/WHEEL +0 -0
  85. {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/top_level.txt +0 -0
@@ -22,22 +22,8 @@ from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
22
22
  from openstackclient.tests.unit.image.v2 import fakes as image_fakes
23
23
 
24
24
 
25
- class TestServerBackup(compute_fakes.TestComputev2):
26
- def setup_servers_mock(self, count):
27
- servers = compute_fakes.create_sdk_servers(
28
- count=count,
29
- )
30
- self.compute_client.find_server = compute_fakes.get_servers(
31
- servers,
32
- 0,
33
- )
34
- return servers
35
-
36
-
37
- class TestServerBackupCreate(TestServerBackup):
38
- # Just return whatever Image is testing with these days
25
+ class TestServerBackupCreate(compute_fakes.TestComputev2):
39
26
  def image_columns(self, image):
40
- # columnlist = tuple(sorted(image.keys()))
41
27
  columnlist = (
42
28
  'id',
43
29
  'name',
@@ -64,42 +50,27 @@ class TestServerBackupCreate(TestServerBackup):
64
50
  def setUp(self):
65
51
  super().setUp()
66
52
 
53
+ self.server = compute_fakes.create_one_server()
54
+ self.compute_client.find_server.return_value = self.server
55
+
56
+ self.image = image_fakes.create_one_image(
57
+ {'name': self.server.name, 'status': 'active'}
58
+ )
59
+ self.image_client.find_image.return_value = self.image
60
+
67
61
  # Get the command object to test
68
62
  self.cmd = server_backup.CreateServerBackup(self.app, None)
69
63
 
70
- def setup_images_mock(self, count, servers=None):
71
- if servers:
72
- images = image_fakes.create_images(
73
- attrs={
74
- 'name': servers[0].name,
75
- 'status': 'active',
76
- },
77
- count=count,
78
- )
79
- else:
80
- images = image_fakes.create_images(
81
- attrs={
82
- 'status': 'active',
83
- },
84
- count=count,
85
- )
86
-
87
- self.image_client.find_image = mock.Mock(side_effect=images)
88
- return images
89
-
90
64
  def test_server_backup_defaults(self):
91
- servers = self.setup_servers_mock(count=1)
92
- images = self.setup_images_mock(count=1, servers=servers)
93
-
94
65
  arglist = [
95
- servers[0].id,
66
+ self.server.id,
96
67
  ]
97
68
  verifylist = [
98
69
  ('name', None),
99
70
  ('type', None),
100
71
  ('rotate', None),
101
72
  ('wait', False),
102
- ('server', servers[0].id),
73
+ ('server', self.server.id),
103
74
  ]
104
75
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
105
76
 
@@ -109,19 +80,16 @@ class TestServerBackupCreate(TestServerBackup):
109
80
  columns, data = self.cmd.take_action(parsed_args)
110
81
 
111
82
  self.compute_client.backup_server.assert_called_with(
112
- servers[0].id,
113
- servers[0].name,
83
+ self.server.id,
84
+ self.server.name,
114
85
  '',
115
86
  1,
116
87
  )
117
88
 
118
- self.assertEqual(self.image_columns(images[0]), columns)
119
- self.assertCountEqual(self.image_data(images[0]), data)
89
+ self.assertEqual(self.image_columns(self.image), columns)
90
+ self.assertCountEqual(self.image_data(self.image), data)
120
91
 
121
92
  def test_server_backup_create_options(self):
122
- servers = self.setup_servers_mock(count=1)
123
- images = self.setup_images_mock(count=1, servers=servers)
124
-
125
93
  arglist = [
126
94
  '--name',
127
95
  'image',
@@ -129,13 +97,13 @@ class TestServerBackupCreate(TestServerBackup):
129
97
  'daily',
130
98
  '--rotate',
131
99
  '2',
132
- servers[0].id,
100
+ self.server.id,
133
101
  ]
134
102
  verifylist = [
135
103
  ('name', 'image'),
136
104
  ('type', 'daily'),
137
105
  ('rotate', 2),
138
- ('server', servers[0].id),
106
+ ('server', self.server.id),
139
107
  ]
140
108
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
141
109
 
@@ -145,22 +113,18 @@ class TestServerBackupCreate(TestServerBackup):
145
113
  columns, data = self.cmd.take_action(parsed_args)
146
114
 
147
115
  self.compute_client.backup_server.assert_called_with(
148
- servers[0].id,
116
+ self.server.id,
149
117
  'image',
150
118
  'daily',
151
119
  2,
152
120
  )
153
121
 
154
- self.assertEqual(self.image_columns(images[0]), columns)
155
- self.assertCountEqual(self.image_data(images[0]), data)
122
+ self.assertEqual(self.image_columns(self.image), columns)
123
+ self.assertCountEqual(self.image_data(self.image), data)
156
124
 
157
125
  @mock.patch.object(common_utils, 'wait_for_status', return_value=False)
158
126
  def test_server_backup_wait_fail(self, mock_wait_for_status):
159
- servers = self.setup_servers_mock(count=1)
160
- images = self.setup_images_mock(count=1, servers=servers)
161
- self.image_client.get_image = mock.Mock(
162
- side_effect=images[0],
163
- )
127
+ self.image_client.get_image.return_value = self.image
164
128
 
165
129
  arglist = [
166
130
  '--name',
@@ -168,13 +132,13 @@ class TestServerBackupCreate(TestServerBackup):
168
132
  '--type',
169
133
  'daily',
170
134
  '--wait',
171
- servers[0].id,
135
+ self.server.id,
172
136
  ]
173
137
  verifylist = [
174
138
  ('name', 'image'),
175
139
  ('type', 'daily'),
176
140
  ('wait', True),
177
- ('server', servers[0].id),
141
+ ('server', self.server.id),
178
142
  ]
179
143
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
180
144
 
@@ -185,23 +149,20 @@ class TestServerBackupCreate(TestServerBackup):
185
149
  )
186
150
 
187
151
  self.compute_client.backup_server.assert_called_with(
188
- servers[0].id,
152
+ self.server.id,
189
153
  'image',
190
154
  'daily',
191
155
  1,
192
156
  )
193
157
 
194
158
  mock_wait_for_status.assert_called_once_with(
195
- self.image_client.get_image, images[0].id, callback=mock.ANY
159
+ self.image_client.get_image, self.image.id, callback=mock.ANY
196
160
  )
197
161
 
198
162
  @mock.patch.object(common_utils, 'wait_for_status', return_value=True)
199
163
  def test_server_backup_wait_ok(self, mock_wait_for_status):
200
- servers = self.setup_servers_mock(count=1)
201
- images = self.setup_images_mock(count=1, servers=servers)
202
-
203
164
  self.image_client.get_image = mock.Mock(
204
- side_effect=images[0],
165
+ side_effect=self.image,
205
166
  )
206
167
 
207
168
  arglist = [
@@ -210,13 +171,13 @@ class TestServerBackupCreate(TestServerBackup):
210
171
  '--type',
211
172
  'daily',
212
173
  '--wait',
213
- servers[0].id,
174
+ self.server.id,
214
175
  ]
215
176
  verifylist = [
216
177
  ('name', 'image'),
217
178
  ('type', 'daily'),
218
179
  ('wait', True),
219
- ('server', servers[0].id),
180
+ ('server', self.server.id),
220
181
  ]
221
182
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
222
183
 
@@ -226,15 +187,15 @@ class TestServerBackupCreate(TestServerBackup):
226
187
  columns, data = self.cmd.take_action(parsed_args)
227
188
 
228
189
  self.compute_client.backup_server.assert_called_with(
229
- servers[0].id,
190
+ self.server.id,
230
191
  'image',
231
192
  'daily',
232
193
  1,
233
194
  )
234
195
 
235
196
  mock_wait_for_status.assert_called_once_with(
236
- self.image_client.get_image, images[0].id, callback=mock.ANY
197
+ self.image_client.get_image, self.image.id, callback=mock.ANY
237
198
  )
238
199
 
239
- self.assertEqual(self.image_columns(images[0]), columns)
240
- self.assertCountEqual(self.image_data(images[0]), data)
200
+ self.assertEqual(self.image_columns(self.image), columns)
201
+ self.assertCountEqual(self.image_data(self.image), data)
@@ -22,7 +22,7 @@ from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
22
22
 
23
23
 
24
24
  class TestListServerEvent(compute_fakes.TestComputev2):
25
- fake_server = compute_fakes.create_one_sdk_server()
25
+ fake_server = compute_fakes.create_one_server()
26
26
  fake_event = compute_fakes.create_one_server_action()
27
27
 
28
28
  columns = (
@@ -366,7 +366,7 @@ class TestListServerEvent(compute_fakes.TestComputev2):
366
366
 
367
367
 
368
368
  class TestShowServerEvent(compute_fakes.TestComputev2):
369
- fake_server = compute_fakes.create_one_sdk_server()
369
+ fake_server = compute_fakes.create_one_server()
370
370
  fake_event = compute_fakes.create_one_server_action()
371
371
  columns = (
372
372
  'action',
@@ -21,21 +21,8 @@ from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
21
21
  from openstackclient.tests.unit.image.v2 import fakes as image_fakes
22
22
 
23
23
 
24
- class TestServerImage(compute_fakes.TestComputev2):
25
- def setup_servers_mock(self, count):
26
- servers = compute_fakes.create_sdk_servers(
27
- count=count,
28
- )
29
- self.compute_client.find_server = compute_fakes.get_servers(
30
- servers,
31
- 0,
32
- )
33
- return servers
34
-
35
-
36
- class TestServerImageCreate(TestServerImage):
24
+ class TestServerImageCreate(compute_fakes.TestComputev2):
37
25
  def image_columns(self, image):
38
- # columnlist = tuple(sorted(image.keys()))
39
26
  columnlist = (
40
27
  'id',
41
28
  'name',
@@ -62,41 +49,24 @@ class TestServerImageCreate(TestServerImage):
62
49
  def setUp(self):
63
50
  super().setUp()
64
51
 
65
- # Get the command object to test
66
- self.cmd = server_image.CreateServerImage(self.app, None)
52
+ self.server = compute_fakes.create_one_server()
53
+ self.compute_client.find_server.return_value = self.server
67
54
 
68
- def setup_images_mock(self, count, servers=None):
69
- if servers:
70
- images = image_fakes.create_images(
71
- attrs={
72
- 'name': servers[0].name,
73
- 'status': 'active',
74
- },
75
- count=count,
76
- )
77
- else:
78
- images = image_fakes.create_images(
79
- attrs={
80
- 'status': 'active',
81
- },
82
- count=count,
83
- )
84
-
85
- self.image_client.find_image = mock.Mock(side_effect=images)
86
- self.compute_client.create_server_image = mock.Mock(
87
- return_value=images[0],
55
+ self.image = image_fakes.create_one_image(
56
+ {'name': self.server.name, 'status': 'active'}
88
57
  )
89
- return images
58
+ self.image_client.find_image.return_value = self.image
59
+ self.compute_client.create_server_image.return_value = self.image
90
60
 
91
- def test_server_image_create_defaults(self):
92
- servers = self.setup_servers_mock(count=1)
93
- images = self.setup_images_mock(count=1, servers=servers)
61
+ # Get the command object to test
62
+ self.cmd = server_image.CreateServerImage(self.app, None)
94
63
 
64
+ def test_server_image_create_defaults(self):
95
65
  arglist = [
96
- servers[0].id,
66
+ self.server.id,
97
67
  ]
98
68
  verifylist = [
99
- ('server', servers[0].id),
69
+ ('server', self.server.id),
100
70
  ]
101
71
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
102
72
 
@@ -106,28 +76,25 @@ class TestServerImageCreate(TestServerImage):
106
76
  columns, data = self.cmd.take_action(parsed_args)
107
77
 
108
78
  self.compute_client.create_server_image.assert_called_with(
109
- servers[0].id,
110
- servers[0].name,
79
+ self.server.id,
80
+ self.server.name,
111
81
  None,
112
82
  )
113
83
 
114
- self.assertEqual(self.image_columns(images[0]), columns)
115
- self.assertCountEqual(self.image_data(images[0]), data)
84
+ self.assertEqual(self.image_columns(self.image), columns)
85
+ self.assertCountEqual(self.image_data(self.image), data)
116
86
 
117
87
  def test_server_image_create_options(self):
118
- servers = self.setup_servers_mock(count=1)
119
- images = self.setup_images_mock(count=1, servers=servers)
120
-
121
88
  arglist = [
122
89
  '--name',
123
90
  'img-nam',
124
91
  '--property',
125
92
  'key=value',
126
- servers[0].id,
93
+ self.server.id,
127
94
  ]
128
95
  verifylist = [
129
96
  ('name', 'img-nam'),
130
- ('server', servers[0].id),
97
+ ('server', self.server.id),
131
98
  ('properties', {'key': 'value'}),
132
99
  ]
133
100
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -138,26 +105,23 @@ class TestServerImageCreate(TestServerImage):
138
105
  columns, data = self.cmd.take_action(parsed_args)
139
106
 
140
107
  self.compute_client.create_server_image.assert_called_with(
141
- servers[0].id,
108
+ self.server.id,
142
109
  'img-nam',
143
110
  {'key': 'value'},
144
111
  )
145
112
 
146
- self.assertEqual(self.image_columns(images[0]), columns)
147
- self.assertCountEqual(self.image_data(images[0]), data)
113
+ self.assertEqual(self.image_columns(self.image), columns)
114
+ self.assertCountEqual(self.image_data(self.image), data)
148
115
 
149
116
  @mock.patch.object(common_utils, 'wait_for_status', return_value=False)
150
117
  def test_server_create_image_wait_fail(self, mock_wait_for_status):
151
- servers = self.setup_servers_mock(count=1)
152
- images = self.setup_images_mock(count=1, servers=servers)
153
-
154
118
  arglist = [
155
119
  '--wait',
156
- servers[0].id,
120
+ self.server.id,
157
121
  ]
158
122
  verifylist = [
159
123
  ('wait', True),
160
- ('server', servers[0].id),
124
+ ('server', self.server.id),
161
125
  ]
162
126
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
163
127
 
@@ -168,27 +132,24 @@ class TestServerImageCreate(TestServerImage):
168
132
  )
169
133
 
170
134
  self.compute_client.create_server_image.assert_called_with(
171
- servers[0].id,
172
- servers[0].name,
135
+ self.server.id,
136
+ self.server.name,
173
137
  None,
174
138
  )
175
139
 
176
140
  mock_wait_for_status.assert_called_once_with(
177
- self.image_client.get_image, images[0].id, callback=mock.ANY
141
+ self.image_client.get_image, self.image.id, callback=mock.ANY
178
142
  )
179
143
 
180
144
  @mock.patch.object(common_utils, 'wait_for_status', return_value=True)
181
145
  def test_server_create_image_wait_ok(self, mock_wait_for_status):
182
- servers = self.setup_servers_mock(count=1)
183
- images = self.setup_images_mock(count=1, servers=servers)
184
-
185
146
  arglist = [
186
147
  '--wait',
187
- servers[0].id,
148
+ self.server.id,
188
149
  ]
189
150
  verifylist = [
190
151
  ('wait', True),
191
- ('server', servers[0].id),
152
+ ('server', self.server.id),
192
153
  ]
193
154
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
194
155
 
@@ -198,14 +159,14 @@ class TestServerImageCreate(TestServerImage):
198
159
  columns, data = self.cmd.take_action(parsed_args)
199
160
 
200
161
  self.compute_client.create_server_image.assert_called_with(
201
- servers[0].id,
202
- servers[0].name,
162
+ self.server.id,
163
+ self.server.name,
203
164
  None,
204
165
  )
205
166
 
206
167
  mock_wait_for_status.assert_called_once_with(
207
- self.image_client.get_image, images[0].id, callback=mock.ANY
168
+ self.image_client.get_image, self.image.id, callback=mock.ANY
208
169
  )
209
170
 
210
- self.assertEqual(self.image_columns(images[0]), columns)
211
- self.assertCountEqual(self.image_data(images[0]), data)
171
+ self.assertEqual(self.image_columns(self.image), columns)
172
+ self.assertCountEqual(self.image_data(self.image), data)
@@ -52,7 +52,7 @@ class TestListMigration(compute_fakes.TestComputev2):
52
52
  def setUp(self):
53
53
  super().setUp()
54
54
 
55
- self.server = compute_fakes.create_one_sdk_server()
55
+ self.server = compute_fakes.create_one_server()
56
56
  self.compute_client.find_server.return_value = self.server
57
57
 
58
58
  self.migrations = compute_fakes.create_migrations(count=3)
@@ -694,7 +694,7 @@ class TestServerMigrationShow(compute_fakes.TestComputev2):
694
694
  def setUp(self):
695
695
  super().setUp()
696
696
 
697
- self.server = compute_fakes.create_one_sdk_server()
697
+ self.server = compute_fakes.create_one_server()
698
698
  self.compute_client.find_server.return_value = self.server
699
699
 
700
700
  self.server_migration = compute_fakes.create_one_server_migration()
@@ -897,7 +897,7 @@ class TestServerMigrationAbort(compute_fakes.TestComputev2):
897
897
  def setUp(self):
898
898
  super().setUp()
899
899
 
900
- self.server = compute_fakes.create_one_sdk_server()
900
+ self.server = compute_fakes.create_one_server()
901
901
 
902
902
  # Return value for utils.find_resource for server.
903
903
  self.compute_client.find_server.return_value = self.server
@@ -1012,7 +1012,7 @@ class TestServerMigrationForceComplete(compute_fakes.TestComputev2):
1012
1012
  def setUp(self):
1013
1013
  super().setUp()
1014
1014
 
1015
- self.server = compute_fakes.create_one_sdk_server()
1015
+ self.server = compute_fakes.create_one_server()
1016
1016
 
1017
1017
  # Return value for utils.find_resource for server.
1018
1018
  self.compute_client.find_server.return_value = self.server
@@ -24,6 +24,7 @@ from openstack.identity.v3 import (
24
24
  application_credential as _application_credential,
25
25
  )
26
26
  from openstack.identity.v3 import role as _role
27
+ from openstack.identity.v3 import user as _user
27
28
  from openstack.test import fakes as sdk_fakes
28
29
  from openstackclient.identity.v3 import application_credential
29
30
  from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
@@ -325,6 +326,31 @@ class TestApplicationCredentialList(identity_fakes.TestIdentityv3):
325
326
  self.identity_sdk_client.application_credentials.return_value = [
326
327
  self.application_credential
327
328
  ]
329
+ self.user = sdk_fakes.generate_fake_resource(resource_type=_user.User)
330
+ self.identity_sdk_client.find_user.return_value = self.user
331
+
332
+ self.columns = (
333
+ 'ID',
334
+ 'Name',
335
+ 'Description',
336
+ 'Project ID',
337
+ 'Roles',
338
+ 'Unrestricted',
339
+ 'Access Rules',
340
+ 'Expires At',
341
+ )
342
+ self.data = (
343
+ (
344
+ self.application_credential.id,
345
+ self.application_credential.name,
346
+ self.application_credential.description,
347
+ self.application_credential.project_id,
348
+ '',
349
+ self.application_credential.unrestricted,
350
+ self.application_credential.access_rules,
351
+ self.application_credential.expires_at,
352
+ ),
353
+ )
328
354
 
329
355
  # Get the command object to test
330
356
  self.cmd = application_credential.ListApplicationCredential(
@@ -339,39 +365,35 @@ class TestApplicationCredentialList(identity_fakes.TestIdentityv3):
339
365
  conn = self.app.client_manager.sdk_connection
340
366
  user_id = conn.config.get_auth().get_user_id(conn.identity)
341
367
 
342
- # In base command class Lister in cliff, abstract method take_action()
343
- # returns a tuple containing the column names and an iterable
344
- # containing the data to be listed.
345
368
  columns, data = self.cmd.take_action(parsed_args)
346
369
 
370
+ self.assertEqual(self.columns, columns)
371
+ self.assertEqual(self.data, tuple(data))
372
+
373
+ self.identity_sdk_client.find_user.assert_not_called()
347
374
  self.identity_sdk_client.application_credentials.assert_called_with(
348
375
  user=user_id
349
376
  )
350
377
 
351
- collist = (
352
- 'ID',
353
- 'Name',
354
- 'Description',
355
- 'Project ID',
356
- 'Roles',
357
- 'Unrestricted',
358
- 'Access Rules',
359
- 'Expires At',
378
+ def test_application_credential_list_user(self):
379
+ arglist = ['--user', self.user.name]
380
+ verifylist = []
381
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
382
+
383
+ conn = self.app.client_manager.sdk_connection
384
+ conn.config.get_auth().get_user_id(conn.identity)
385
+
386
+ columns, data = self.cmd.take_action(parsed_args)
387
+
388
+ self.assertEqual(self.columns, columns)
389
+ self.assertEqual(self.data, tuple(data))
390
+
391
+ self.identity_sdk_client.find_user.assert_called_once_with(
392
+ name_or_id=self.user.name, ignore_missing=False
360
393
  )
361
- self.assertEqual(collist, columns)
362
- datalist = (
363
- (
364
- self.application_credential.id,
365
- self.application_credential.name,
366
- self.application_credential.description,
367
- self.application_credential.project_id,
368
- self.application_credential.roles,
369
- self.application_credential.unrestricted,
370
- self.application_credential.access_rules,
371
- self.application_credential.expires_at,
372
- ),
394
+ self.identity_sdk_client.application_credentials.assert_called_with(
395
+ user=self.user.id
373
396
  )
374
- self.assertEqual(datalist, tuple(data))
375
397
 
376
398
 
377
399
  class TestApplicationCredentialShow(identity_fakes.TestIdentityv3):