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>
This commit is contained in:
Tang Chen 2015-12-04 19:48:22 +08:00
parent 56150de224
commit 0b4fb0bb66
2 changed files with 114 additions and 59 deletions
openstackclient
network/v2
tests/network/v2

@ -114,15 +114,14 @@ class CreateNetwork(show.ShowOne):
def take_action(self, parsed_args):
self.log.debug('take_action(%s)' % parsed_args)
self.app.client_manager.network = \
_make_client_sdk(self.app.client_manager)
client = self.app.client_manager.network
body = self.get_body(parsed_args)
create_method = getattr(client, "create_network")
data = create_method(body)['network']
if data:
data = _prep_network_detail(data)
else:
data = {'': ''}
return zip(*sorted(six.iteritems(data)))
obj = client.create_network(**body)
columns = sorted(obj.keys())
data = utils.get_item_properties(obj, columns, formatters=_formatters)
return (tuple(columns), data)
def get_body(self, parsed_args):
body = {'name': str(parsed_args.name),
@ -137,7 +136,7 @@ class CreateNetwork(show.ShowOne):
parsed_args.project_domain,
).id
body['tenant_id'] = project_id
return {'network': body}
return body
class DeleteNetwork(command.Command):

@ -71,13 +71,38 @@ class TestNetwork(network_fakes.TestNetworkV2):
self.api = self.app.client_manager.network.api
@mock.patch('openstackclient.network.v2.network._make_client_sdk')
class TestCreateNetworkIdentityV3(TestNetwork):
# The new network created.
_network = network_fakes.FakeNetwork.create_one_network(
attrs={'tenant_id': identity_fakes_v3.project_id}
)
columns = (
'admin_state_up',
'id',
'name',
'router_external',
'status',
'subnets',
'tenant_id',
)
data = (
network._format_admin_state(_network.admin_state_up),
_network.id,
_network.name,
network._format_router_external(_network.router_external),
_network.status,
utils.format_list(_network.subnets),
_network.tenant_id,
)
def setUp(self):
super(TestCreateNetworkIdentityV3, self).setUp()
self.new_network = mock.Mock(return_value=copy.deepcopy(RESPONSE))
self.network.create_network = self.new_network
self.network.create_network = mock.Mock(return_value=self._network)
# Get the command object to test
self.cmd = network.CreateNetwork(self.app, self.namespace)
@ -106,89 +131,117 @@ class TestCreateNetworkIdentityV3(TestNetwork):
loaded=True,
)
def test_create_no_options(self):
def test_create_no_options(self, _make_client_sdk):
_make_client_sdk.return_value = self.app.client_manager.network
arglist = [
FAKE_NAME,
self._network.name,
]
verifylist = [
('name', FAKE_NAME),
('name', self._network.name),
('admin_state', True),
('shared', None),
('project', None),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = list(self.cmd.take_action(parsed_args))
columns, data = self.cmd.take_action(parsed_args)
self.network.create_network.assert_called_with({
RESOURCE: {
'admin_state_up': True,
'name': FAKE_NAME,
}
self.network.create_network.assert_called_with(**{
'admin_state_up': True,
'name': self._network.name,
})
self.assertEqual(FILTERED, result)
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
def test_create_all_options(self, _make_client_sdk):
_make_client_sdk.return_value = self.app.client_manager.network
def test_create_all_options(self):
arglist = [
"--disable",
"--share",
"--project", identity_fakes_v3.project_name,
"--project-domain", identity_fakes_v3.domain_name,
FAKE_NAME,
self._network.name,
]
verifylist = [
('admin_state', False),
('shared', True),
('project', identity_fakes_v3.project_name),
('project_domain', identity_fakes_v3.domain_name),
('name', FAKE_NAME),
('name', self._network.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = list(self.cmd.take_action(parsed_args))
columns, data = (self.cmd.take_action(parsed_args))
self.network.create_network.assert_called_with({
RESOURCE: {
'admin_state_up': False,
'name': FAKE_NAME,
'shared': True,
'tenant_id': identity_fakes_v3.project_id,
}
self.network.create_network.assert_called_with(**{
'admin_state_up': False,
'name': self._network.name,
'shared': True,
'tenant_id': identity_fakes_v3.project_id,
})
self.assertEqual(FILTERED, result)
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
def test_create_other_options(self, _make_client_sdk):
_make_client_sdk.return_value = self.app.client_manager.network
def test_create_other_options(self):
arglist = [
"--enable",
"--no-share",
FAKE_NAME,
self._network.name,
]
verifylist = [
('admin_state', True),
('shared', False),
('name', FAKE_NAME),
('name', self._network.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = list(self.cmd.take_action(parsed_args))
columns, data = self.cmd.take_action(parsed_args)
self.network.create_network.assert_called_with({
RESOURCE: {
'admin_state_up': True,
'name': FAKE_NAME,
'shared': False,
}
self.network.create_network.assert_called_with(**{
'admin_state_up': True,
'name': self._network.name,
'shared': False,
})
self.assertEqual(FILTERED, result)
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
@mock.patch('openstackclient.network.v2.network._make_client_sdk')
class TestCreateNetworkIdentityV2(TestNetwork):
# The new network created.
_network = network_fakes.FakeNetwork.create_one_network(
attrs={'tenant_id': identity_fakes_v2.project_id}
)
columns = (
'admin_state_up',
'id',
'name',
'router_external',
'status',
'subnets',
'tenant_id',
)
data = (
network._format_admin_state(_network.admin_state_up),
_network.id,
_network.name,
network._format_router_external(_network.router_external),
_network.status,
utils.format_list(_network.subnets),
_network.tenant_id,
)
def setUp(self):
super(TestCreateNetworkIdentityV2, self).setUp()
self.new_network = mock.Mock(return_value=copy.deepcopy(RESPONSE))
self.network.create_network = self.new_network
self.network.create_network = mock.Mock(return_value=self._network)
# Get the command object to test
self.cmd = network.CreateNetwork(self.app, self.namespace)
@ -211,42 +264,45 @@ class TestCreateNetworkIdentityV2(TestNetwork):
# There is no DomainManager Mock in fake identity v2.
def test_create_with_project_identityv2(self):
def test_create_with_project_identityv2(self, _make_client_sdk):
_make_client_sdk.return_value = self.app.client_manager.network
arglist = [
"--project", identity_fakes_v2.project_name,
FAKE_NAME,
self._network.name,
]
verifylist = [
('admin_state', True),
('shared', None),
('name', FAKE_NAME),
('name', self._network.name),
('project', identity_fakes_v2.project_name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = list(self.cmd.take_action(parsed_args))
columns, data = self.cmd.take_action(parsed_args)
self.network.create_network.assert_called_with({
RESOURCE: {
'admin_state_up': True,
'name': FAKE_NAME,
'tenant_id': identity_fakes_v2.project_id,
}
self.network.create_network.assert_called_with(**{
'admin_state_up': True,
'name': self._network.name,
'tenant_id': identity_fakes_v2.project_id,
})
self.assertEqual(FILTERED, result)
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
def test_create_with_domain_identityv2(self, _make_client_sdk):
_make_client_sdk.return_value = self.app.client_manager.network
def test_create_with_domain_identityv2(self):
arglist = [
"--project", identity_fakes_v3.project_name,
"--project-domain", identity_fakes_v3.domain_name,
FAKE_NAME,
self._network.name,
]
verifylist = [
('admin_state', True),
('shared', None),
('project', identity_fakes_v3.project_name),
('project_domain', identity_fakes_v3.domain_name),
('name', FAKE_NAME),
('name', self._network.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)