Skip to content

Commit 0b4fb0b

Browse files
tang-chenTerryHowe
andcommitted
Migrate "network create" command to use SDK.
This patch makes "network create" command use sdk. Since we have to keep the other commands runnable with the old network client, we use a temporary method to create sdk network client. And as a result, the tests need to patch a method to fake the temporary method, which will be removed at last. Change-Id: I06559c675be1188747257f72f18d6b4d420d0285 Implements: blueprint neutron-client Co-Authored-By: Terry Howe <terrylhowe@gmail.com> Co-Authored-By: Tang Chen <tangchen@cn.fujitsu.com>
1 parent 56150de commit 0b4fb0b

2 files changed

Lines changed: 114 additions & 59 deletions

File tree

openstackclient/network/v2/network.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,14 @@ def get_parser(self, prog_name):
114114

115115
def take_action(self, parsed_args):
116116
self.log.debug('take_action(%s)' % parsed_args)
117+
self.app.client_manager.network = \
118+
_make_client_sdk(self.app.client_manager)
117119
client = self.app.client_manager.network
118120
body = self.get_body(parsed_args)
119-
create_method = getattr(client, "create_network")
120-
data = create_method(body)['network']
121-
if data:
122-
data = _prep_network_detail(data)
123-
else:
124-
data = {'': ''}
125-
return zip(*sorted(six.iteritems(data)))
121+
obj = client.create_network(**body)
122+
columns = sorted(obj.keys())
123+
data = utils.get_item_properties(obj, columns, formatters=_formatters)
124+
return (tuple(columns), data)
126125

127126
def get_body(self, parsed_args):
128127
body = {'name': str(parsed_args.name),
@@ -137,7 +136,7 @@ def get_body(self, parsed_args):
137136
parsed_args.project_domain,
138137
).id
139138
body['tenant_id'] = project_id
140-
return {'network': body}
139+
return body
141140

142141

143142
class DeleteNetwork(command.Command):

openstackclient/tests/network/v2/test_network.py

Lines changed: 107 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,38 @@ def setUp(self):
7171
self.api = self.app.client_manager.network.api
7272

7373

74+
@mock.patch('openstackclient.network.v2.network._make_client_sdk')
7475
class TestCreateNetworkIdentityV3(TestNetwork):
7576

77+
# The new network created.
78+
_network = network_fakes.FakeNetwork.create_one_network(
79+
attrs={'tenant_id': identity_fakes_v3.project_id}
80+
)
81+
82+
columns = (
83+
'admin_state_up',
84+
'id',
85+
'name',
86+
'router_external',
87+
'status',
88+
'subnets',
89+
'tenant_id',
90+
)
91+
92+
data = (
93+
network._format_admin_state(_network.admin_state_up),
94+
_network.id,
95+
_network.name,
96+
network._format_router_external(_network.router_external),
97+
_network.status,
98+
utils.format_list(_network.subnets),
99+
_network.tenant_id,
100+
)
101+
76102
def setUp(self):
77103
super(TestCreateNetworkIdentityV3, self).setUp()
78104

79-
self.new_network = mock.Mock(return_value=copy.deepcopy(RESPONSE))
80-
self.network.create_network = self.new_network
105+
self.network.create_network = mock.Mock(return_value=self._network)
81106

82107
# Get the command object to test
83108
self.cmd = network.CreateNetwork(self.app, self.namespace)
@@ -106,89 +131,117 @@ def setUp(self):
106131
loaded=True,
107132
)
108133

109-
def test_create_no_options(self):
134+
def test_create_no_options(self, _make_client_sdk):
135+
_make_client_sdk.return_value = self.app.client_manager.network
136+
110137
arglist = [
111-
FAKE_NAME,
138+
self._network.name,
112139
]
113140
verifylist = [
114-
('name', FAKE_NAME),
141+
('name', self._network.name),
115142
('admin_state', True),
116143
('shared', None),
117144
('project', None),
118145
]
119146

120147
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
121-
result = list(self.cmd.take_action(parsed_args))
148+
columns, data = self.cmd.take_action(parsed_args)
122149

123-
self.network.create_network.assert_called_with({
124-
RESOURCE: {
125-
'admin_state_up': True,
126-
'name': FAKE_NAME,
127-
}
150+
self.network.create_network.assert_called_with(**{
151+
'admin_state_up': True,
152+
'name': self._network.name,
128153
})
129-
self.assertEqual(FILTERED, result)
154+
self.assertEqual(self.columns, columns)
155+
self.assertEqual(self.data, data)
156+
157+
def test_create_all_options(self, _make_client_sdk):
158+
_make_client_sdk.return_value = self.app.client_manager.network
130159

131-
def test_create_all_options(self):
132160
arglist = [
133161
"--disable",
134162
"--share",
135163
"--project", identity_fakes_v3.project_name,
136164
"--project-domain", identity_fakes_v3.domain_name,
137-
FAKE_NAME,
165+
self._network.name,
138166
]
139167
verifylist = [
140168
('admin_state', False),
141169
('shared', True),
142170
('project', identity_fakes_v3.project_name),
143171
('project_domain', identity_fakes_v3.domain_name),
144-
('name', FAKE_NAME),
172+
('name', self._network.name),
145173
]
146174

147175
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
148-
result = list(self.cmd.take_action(parsed_args))
176+
columns, data = (self.cmd.take_action(parsed_args))
149177

150-
self.network.create_network.assert_called_with({
151-
RESOURCE: {
152-
'admin_state_up': False,
153-
'name': FAKE_NAME,
154-
'shared': True,
155-
'tenant_id': identity_fakes_v3.project_id,
156-
}
178+
self.network.create_network.assert_called_with(**{
179+
'admin_state_up': False,
180+
'name': self._network.name,
181+
'shared': True,
182+
'tenant_id': identity_fakes_v3.project_id,
157183
})
158-
self.assertEqual(FILTERED, result)
184+
self.assertEqual(self.columns, columns)
185+
self.assertEqual(self.data, data)
186+
187+
def test_create_other_options(self, _make_client_sdk):
188+
_make_client_sdk.return_value = self.app.client_manager.network
159189

160-
def test_create_other_options(self):
161190
arglist = [
162191
"--enable",
163192
"--no-share",
164-
FAKE_NAME,
193+
self._network.name,
165194
]
166195
verifylist = [
167196
('admin_state', True),
168197
('shared', False),
169-
('name', FAKE_NAME),
198+
('name', self._network.name),
170199
]
171200

172201
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
173-
result = list(self.cmd.take_action(parsed_args))
202+
columns, data = self.cmd.take_action(parsed_args)
174203

175-
self.network.create_network.assert_called_with({
176-
RESOURCE: {
177-
'admin_state_up': True,
178-
'name': FAKE_NAME,
179-
'shared': False,
180-
}
204+
self.network.create_network.assert_called_with(**{
205+
'admin_state_up': True,
206+
'name': self._network.name,
207+
'shared': False,
181208
})
182-
self.assertEqual(FILTERED, result)
209+
self.assertEqual(self.columns, columns)
210+
self.assertEqual(self.data, data)
183211

184212

213+
@mock.patch('openstackclient.network.v2.network._make_client_sdk')
185214
class TestCreateNetworkIdentityV2(TestNetwork):
186215

216+
# The new network created.
217+
_network = network_fakes.FakeNetwork.create_one_network(
218+
attrs={'tenant_id': identity_fakes_v2.project_id}
219+
)
220+
221+
columns = (
222+
'admin_state_up',
223+
'id',
224+
'name',
225+
'router_external',
226+
'status',
227+
'subnets',
228+
'tenant_id',
229+
)
230+
231+
data = (
232+
network._format_admin_state(_network.admin_state_up),
233+
_network.id,
234+
_network.name,
235+
network._format_router_external(_network.router_external),
236+
_network.status,
237+
utils.format_list(_network.subnets),
238+
_network.tenant_id,
239+
)
240+
187241
def setUp(self):
188242
super(TestCreateNetworkIdentityV2, self).setUp()
189243

190-
self.new_network = mock.Mock(return_value=copy.deepcopy(RESPONSE))
191-
self.network.create_network = self.new_network
244+
self.network.create_network = mock.Mock(return_value=self._network)
192245

193246
# Get the command object to test
194247
self.cmd = network.CreateNetwork(self.app, self.namespace)
@@ -211,42 +264,45 @@ def setUp(self):
211264

212265
# There is no DomainManager Mock in fake identity v2.
213266

214-
def test_create_with_project_identityv2(self):
267+
def test_create_with_project_identityv2(self, _make_client_sdk):
268+
_make_client_sdk.return_value = self.app.client_manager.network
269+
215270
arglist = [
216271
"--project", identity_fakes_v2.project_name,
217-
FAKE_NAME,
272+
self._network.name,
218273
]
219274
verifylist = [
220275
('admin_state', True),
221276
('shared', None),
222-
('name', FAKE_NAME),
277+
('name', self._network.name),
223278
('project', identity_fakes_v2.project_name),
224279
]
225280

226281
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
227-
result = list(self.cmd.take_action(parsed_args))
282+
columns, data = self.cmd.take_action(parsed_args)
228283

229-
self.network.create_network.assert_called_with({
230-
RESOURCE: {
231-
'admin_state_up': True,
232-
'name': FAKE_NAME,
233-
'tenant_id': identity_fakes_v2.project_id,
234-
}
284+
self.network.create_network.assert_called_with(**{
285+
'admin_state_up': True,
286+
'name': self._network.name,
287+
'tenant_id': identity_fakes_v2.project_id,
235288
})
236-
self.assertEqual(FILTERED, result)
289+
self.assertEqual(self.columns, columns)
290+
self.assertEqual(self.data, data)
291+
292+
def test_create_with_domain_identityv2(self, _make_client_sdk):
293+
_make_client_sdk.return_value = self.app.client_manager.network
237294

238-
def test_create_with_domain_identityv2(self):
239295
arglist = [
240296
"--project", identity_fakes_v3.project_name,
241297
"--project-domain", identity_fakes_v3.domain_name,
242-
FAKE_NAME,
298+
self._network.name,
243299
]
244300
verifylist = [
245301
('admin_state', True),
246302
('shared', None),
247303
('project', identity_fakes_v3.project_name),
248304
('project_domain', identity_fakes_v3.domain_name),
249-
('name', FAKE_NAME),
305+
('name', self._network.name),
250306
]
251307

252308
parsed_args = self.check_parser(self.cmd, arglist, verifylist)

0 commit comments

Comments
 (0)