diff options
| author | ivan-zhu <bozhu@linux.vnet.ibm.com> | 2012-10-10 17:24:35 +0800 |
|---|---|---|
| committer | ivan-zhu <bozhu@linux.vnet.ibm.com> | 2012-11-13 09:59:34 +0800 |
| commit | eb7a7443a63ebbe00bbfa13daa75a355466eb63e (patch) | |
| tree | 91d54db8a1678fb5a22b2ac3252732f586bc9095 /quantumclient/tests | |
| parent | 3e19fc0a563e78ff81c63788e6f3d163054ff34f (diff) | |
| download | python-neutronclient-eb7a7443a63ebbe00bbfa13daa75a355466eb63e.tar.gz | |
Convenience cmds for l3
Bug #1049551
Add two CLI and unit tests:
quantum net-external-list
(runs net-list with router:external=True filter)
quantum router-port-list <router-id/name>
(runs port-list, filtering with device_id equal to specified router)
Change-Id: I9a9668836ac24d4cbc6a3867ec031611b64ded14
Diffstat (limited to 'quantumclient/tests')
| -rw-r--r-- | quantumclient/tests/unit/test_cli20_network.py | 160 | ||||
| -rw-r--r-- | quantumclient/tests/unit/test_cli20_port.py | 127 |
2 files changed, 255 insertions, 32 deletions
diff --git a/quantumclient/tests/unit/test_cli20_network.py b/quantumclient/tests/unit/test_cli20_network.py index 729e982..5360c08 100644 --- a/quantumclient/tests/unit/test_cli20_network.py +++ b/quantumclient/tests/unit/test_cli20_network.py @@ -16,6 +16,7 @@ # vim: tabstop=4 shiftwidth=4 softtabstop=4 import sys +from mox import ContainsKeyValue from quantumclient.common import exceptions from quantumclient.common import utils @@ -27,6 +28,7 @@ from quantumclient.quantum.v2_0.network import ListNetwork from quantumclient.quantum.v2_0.network import UpdateNetwork from quantumclient.quantum.v2_0.network import ShowNetwork from quantumclient.quantum.v2_0.network import DeleteNetwork +from quantumclient.quantum.v2_0.network import ListExternalNetwork class CLITestV20Network(CLITestV20Base): @@ -39,8 +41,8 @@ class CLITestV20Network(CLITestV20Base): args = [name, ] position_names = ['name', ] position_values = [name, ] - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values) + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values) def test_create_network_tenant(self): """Create net: --tenant_id tenantid myname.""" @@ -51,15 +53,15 @@ class CLITestV20Network(CLITestV20Base): args = ['--tenant_id', 'tenantid', name] position_names = ['name', ] position_values = [name, ] - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values, - tenant_id='tenantid') + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values, + tenant_id='tenantid') # Test dashed options args = ['--tenant-id', 'tenantid', name] - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values, - tenant_id='tenantid') + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values, + tenant_id='tenantid') def test_create_network_tags(self): """Create net: myname --tags a b.""" @@ -70,9 +72,9 @@ class CLITestV20Network(CLITestV20Base): args = [name, '--tags', 'a', 'b'] position_names = ['name', ] position_values = [name, ] - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values, - tags=['a', 'b']) + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values, + tags=['a', 'b']) def test_create_network_state(self): """Create net: --admin_state_down myname.""" @@ -83,15 +85,15 @@ class CLITestV20Network(CLITestV20Base): args = ['--admin_state_down', name, ] position_names = ['name', ] position_values = [name, ] - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values, - admin_state_up=False) + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values, + admin_state_up=False) # Test dashed options args = ['--admin-state-down', name, ] - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values, - admin_state_up=False) + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values, + admin_state_up=False) def test_list_nets_empty_with_column(self): resources = "networks" @@ -179,6 +181,130 @@ class CLITestV20Network(CLITestV20Base): self.assertEquals(0, len(set(network) ^ set(cmd.list_columns))) + def test_list_external_nets_empty_with_column(self): + resources = "networks" + cmd = ListExternalNetwork(MyApp(sys.stdout), None) + self.mox.StubOutWithMock(cmd, "get_client") + self.mox.StubOutWithMock(self.client.httpclient, "request") + cmd.get_client().MultipleTimes().AndReturn(self.client) + reses = {resources: []} + resstr = self.client.serialize(reses) + # url method body + query = "router%3Aexternal=True&id=myfakeid" + args = ['-c', 'id', '--', '--id', 'myfakeid'] + path = getattr(self.client, resources + "_path") + self.client.httpclient.request( + test_cli20.end_url(path, query), 'GET', + body=None, + headers=test_cli20.ContainsKeyValue( + 'X-Auth-Token', + test_cli20.TOKEN)).AndReturn( + (test_cli20.MyResp(200), resstr)) + self.mox.ReplayAll() + cmd_parser = cmd.get_parser("list_" + resources) + + parsed_args = cmd_parser.parse_args(args) + + cmd.run(parsed_args) + self.mox.VerifyAll() + self.mox.UnsetStubs() + _str = self.fake_stdout.make_string() + self.assertEquals('\n', _str) + + def _test_list_external_nets(self, resources, cmd, + detail=False, tags=[], + fields_1=[], fields_2=[]): + self.mox.StubOutWithMock(cmd, "get_client") + self.mox.StubOutWithMock(self.client.httpclient, "request") + cmd.get_client().MultipleTimes().AndReturn(self.client) + reses = {resources: [{'id': 'myid1', }, + {'id': 'myid2', }, ], } + + resstr = self.client.serialize(reses) + + # url method body + query = "" + args = detail and ['-D', ] or [] + if fields_1: + for field in fields_1: + args.append('--fields') + args.append(field) + if tags: + args.append('--') + args.append("--tag") + for tag in tags: + args.append(tag) + if (not tags) and fields_2: + args.append('--') + if fields_2: + args.append("--fields") + for field in fields_2: + args.append(field) + fields_1.extend(fields_2) + for field in fields_1: + if query: + query += "&fields=" + field + else: + query = "fields=" + field + if query: + query += '&router%3Aexternal=True' + else: + query += 'router%3Aexternal=True' + for tag in tags: + if query: + query += "&tag=" + tag + else: + query = "tag=" + tag + if detail: + query = query and query + '&verbose=True' or 'verbose=True' + path = getattr(self.client, resources + "_path") + + self.client.httpclient.request( + test_cli20.end_url(path, query), 'GET', + body=None, + headers=ContainsKeyValue('X-Auth-Token', + test_cli20.TOKEN)).AndReturn( + (test_cli20.MyResp(200), resstr)) + self.mox.ReplayAll() + cmd_parser = cmd.get_parser("list_" + resources) + + parsed_args = cmd_parser.parse_args(args) + cmd.run(parsed_args) + + self.mox.VerifyAll() + self.mox.UnsetStubs() + _str = self.fake_stdout.make_string() + + self.assertTrue('myid1' in _str) + + def test_list_external_nets_detail(self): + """list external nets: -D.""" + resources = "networks" + cmd = ListExternalNetwork(MyApp(sys.stdout), None) + self._test_list_external_nets(resources, cmd, True) + + def test_list_external_nets_tags(self): + """List external nets: -- --tags a b.""" + resources = "networks" + cmd = ListExternalNetwork(MyApp(sys.stdout), None) + self._test_list_external_nets(resources, + cmd, tags=['a', 'b']) + + def test_list_external_nets_detail_tags(self): + """List external nets: -D -- --tags a b.""" + resources = "networks" + cmd = ListExternalNetwork(MyApp(sys.stdout), None) + self._test_list_external_nets(resources, cmd, + detail=True, tags=['a', 'b']) + + def test_list_externel_nets_fields(self): + """List external nets: --fields a --fields b -- --fields c d.""" + resources = "networks" + cmd = ListExternalNetwork(MyApp(sys.stdout), None) + self._test_list_external_nets(resources, cmd, + fields_1=['a', 'b'], + fields_2=['c', 'd']) + def test_update_network_exception(self): """Update net: myid.""" resource = 'network' diff --git a/quantumclient/tests/unit/test_cli20_port.py b/quantumclient/tests/unit/test_cli20_port.py index c57aa89..6ddbf31 100644 --- a/quantumclient/tests/unit/test_cli20_port.py +++ b/quantumclient/tests/unit/test_cli20_port.py @@ -16,14 +16,17 @@ # vim: tabstop=4 shiftwidth=4 softtabstop=4 import sys +from mox import ContainsKeyValue from quantumclient.tests.unit.test_cli20 import CLITestV20Base from quantumclient.tests.unit.test_cli20 import MyApp +from quantumclient.tests.unit import test_cli20 from quantumclient.quantum.v2_0.port import CreatePort from quantumclient.quantum.v2_0.port import ListPort from quantumclient.quantum.v2_0.port import UpdatePort from quantumclient.quantum.v2_0.port import ShowPort from quantumclient.quantum.v2_0.port import DeletePort +from quantumclient.quantum.v2_0.port import ListRouterPort class CLITestV20Port(CLITestV20Base): @@ -39,8 +42,8 @@ class CLITestV20Port(CLITestV20Base): position_names = ['network_id'] position_values = [] position_values.extend([netid]) - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values) + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values) def test_create_port_full(self): """Create port: --mac_address mac --device_id deviceid netid.""" @@ -52,14 +55,14 @@ class CLITestV20Port(CLITestV20Base): args = ['--mac_address', 'mac', '--device_id', 'deviceid', netid] position_names = ['network_id', 'mac_address', 'device_id'] position_values = [netid, 'mac', 'deviceid'] - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values) + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values) # Test dashed options args = ['--mac-address', 'mac', '--device-id', 'deviceid', netid] position_names = ['network_id', 'mac_address', 'device_id'] - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values) + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values) def test_create_port_tenant(self): """Create port: --tenant_id tenantid netid.""" @@ -72,15 +75,15 @@ class CLITestV20Port(CLITestV20Base): position_names = ['network_id'] position_values = [] position_values.extend([netid]) - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values, - tenant_id='tenantid') + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values, + tenant_id='tenantid') # Test dashed options args = ['--tenant-id', 'tenantid', netid, ] - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values, - tenant_id='tenantid') + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values, + tenant_id='tenantid') def test_create_port_tags(self): """Create port: netid mac_address device_id --tags a b.""" @@ -93,9 +96,9 @@ class CLITestV20Port(CLITestV20Base): position_names = ['network_id'] position_values = [] position_values.extend([netid]) - _str = self._test_create_resource(resource, cmd, name, myid, args, - position_names, position_values, - tags=['a', 'b']) + self._test_create_resource(resource, cmd, name, myid, args, + position_names, position_values, + tags=['a', 'b']) def test_list_ports(self): """List ports: -D.""" @@ -122,6 +125,100 @@ class CLITestV20Port(CLITestV20Base): self._test_list_resources(resources, cmd, fields_1=['a', 'b'], fields_2=['c', 'd']) + def _test_list_router_port(self, resources, cmd, + myid, detail=False, tags=[], + fields_1=[], fields_2=[]): + self.mox.StubOutWithMock(cmd, "get_client") + self.mox.StubOutWithMock(self.client.httpclient, "request") + cmd.get_client().MultipleTimes().AndReturn(self.client) + reses = {resources: [{'id': 'myid1', }, + {'id': 'myid2', }, ], } + + resstr = self.client.serialize(reses) + + # url method body + query = "" + args = detail and ['-D', ] or [] + + if fields_1: + for field in fields_1: + args.append('--fields') + args.append(field) + args.append(myid) + if tags: + args.append('--') + args.append("--tag") + for tag in tags: + args.append(tag) + if (not tags) and fields_2: + args.append('--') + if fields_2: + args.append("--fields") + for field in fields_2: + args.append(field) + fields_1.extend(fields_2) + for field in fields_1: + if query: + query += "&fields=" + field + else: + query = "fields=" + field + + for tag in tags: + if query: + query += "&tag=" + tag + else: + query = "tag=" + tag + if detail: + query = query and query + '&verbose=True' or 'verbose=True' + query = query and query + '&device_id=%s' or 'device_id=%s' + path = getattr(self.client, resources + "_path") + self.client.httpclient.request( + test_cli20.end_url(path, query % myid), 'GET', + body=None, + headers=ContainsKeyValue('X-Auth-Token', + test_cli20.TOKEN)).AndReturn( + (test_cli20.MyResp(200), resstr)) + self.mox.ReplayAll() + cmd_parser = cmd.get_parser("list_" + resources) + + parsed_args = cmd_parser.parse_args(args) + cmd.run(parsed_args) + + self.mox.VerifyAll() + self.mox.UnsetStubs() + _str = self.fake_stdout.make_string() + + self.assertTrue('myid1' in _str) + + def test_list_router_ports(self): + """List router ports: -D.""" + resources = "ports" + cmd = ListRouterPort(MyApp(sys.stdout), None) + self._test_list_router_port(resources, cmd, + self.test_id, True) + + def test_list_router_ports_tags(self): + """List router ports: -- --tags a b.""" + resources = "ports" + cmd = ListRouterPort(MyApp(sys.stdout), None) + self._test_list_router_port(resources, cmd, + self.test_id, tags=['a', 'b']) + + def test_list_router_ports_detail_tags(self): + """List router ports: -D -- --tags a b.""" + resources = "ports" + cmd = ListRouterPort(MyApp(sys.stdout), None) + self._test_list_router_port(resources, cmd, self.test_id, + detail=True, tags=['a', 'b']) + + def test_list_router_ports_fields(self): + """List ports: --fields a --fields b -- --fields c d.""" + resources = "ports" + cmd = ListRouterPort(MyApp(sys.stdout), None) + self._test_list_router_port(resources, cmd, self.test_id, + fields_1=['a', 'b'], + fields_2=['c', 'd']) + def test_update_port(self): """Update port: myid --name myname --tags a b.""" resource = 'port' |
