summaryrefslogtreecommitdiff
path: root/quantumclient/tests
diff options
context:
space:
mode:
authorivan-zhu <bozhu@linux.vnet.ibm.com>2012-10-10 17:24:35 +0800
committerivan-zhu <bozhu@linux.vnet.ibm.com>2012-11-13 09:59:34 +0800
commiteb7a7443a63ebbe00bbfa13daa75a355466eb63e (patch)
tree91d54db8a1678fb5a22b2ac3252732f586bc9095 /quantumclient/tests
parent3e19fc0a563e78ff81c63788e6f3d163054ff34f (diff)
downloadpython-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.py160
-rw-r--r--quantumclient/tests/unit/test_cli20_port.py127
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'