summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/network/v2/port.py42
-rw-r--r--openstackclient/tests/compute/v2/test_security_group.py45
-rw-r--r--openstackclient/tests/compute/v2/test_security_group_rule.py59
-rw-r--r--openstackclient/tests/compute/v2/test_server.py146
-rw-r--r--openstackclient/tests/network/v2/fakes.py77
-rw-r--r--openstackclient/tests/network/v2/test_port.py53
6 files changed, 255 insertions, 167 deletions
diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py
new file mode 100644
index 00000000..ad906a28
--- /dev/null
+++ b/openstackclient/network/v2/port.py
@@ -0,0 +1,42 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+"""Port action implementations"""
+
+import logging
+
+from cliff import command
+
+
+class DeletePort(command.Command):
+ """Delete port(s)"""
+
+ log = logging.getLogger(__name__ + '.DeletePort')
+
+ def get_parser(self, prog_name):
+ parser = super(DeletePort, self).get_parser(prog_name)
+ parser.add_argument(
+ 'port',
+ metavar="<port>",
+ nargs="+",
+ help=("Port(s) to delete (name or ID)")
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug('take_action(%s)' % parsed_args)
+ client = self.app.client_manager.network
+
+ for port in parsed_args.port:
+ res = client.find_port(port)
+ client.delete_port(res)
diff --git a/openstackclient/tests/compute/v2/test_security_group.py b/openstackclient/tests/compute/v2/test_security_group.py
index fdb659a8..87cc4870 100644
--- a/openstackclient/tests/compute/v2/test_security_group.py
+++ b/openstackclient/tests/compute/v2/test_security_group.py
@@ -56,6 +56,19 @@ class TestSecurityGroup(compute_fakes.TestComputev2):
class TestSecurityGroupCreate(TestSecurityGroup):
+ columns = (
+ 'description',
+ 'id',
+ 'name',
+ 'tenant_id',
+ )
+ data = (
+ security_group_description,
+ security_group_id,
+ security_group_name,
+ identity_fakes.project_id,
+ )
+
def setUp(self):
super(TestSecurityGroupCreate, self).setUp()
@@ -86,20 +99,8 @@ class TestSecurityGroupCreate(TestSecurityGroup):
security_group_name,
)
- collist = (
- 'description',
- 'id',
- 'name',
- 'tenant_id',
- )
- self.assertEqual(collist, columns)
- datalist = (
- security_group_description,
- security_group_id,
- security_group_name,
- identity_fakes.project_id,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
def test_security_group_create_description(self):
arglist = [
@@ -121,20 +122,8 @@ class TestSecurityGroupCreate(TestSecurityGroup):
security_group_description,
)
- collist = (
- 'description',
- 'id',
- 'name',
- 'tenant_id',
- )
- self.assertEqual(collist, columns)
- datalist = (
- security_group_description,
- security_group_id,
- security_group_name,
- identity_fakes.project_id,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
class TestSecurityGroupList(TestSecurityGroup):
diff --git a/openstackclient/tests/compute/v2/test_security_group_rule.py b/openstackclient/tests/compute/v2/test_security_group_rule.py
index 0e7ee05d..a2f9b108 100644
--- a/openstackclient/tests/compute/v2/test_security_group_rule.py
+++ b/openstackclient/tests/compute/v2/test_security_group_rule.py
@@ -116,6 +116,15 @@ class TestSecurityGroupRule(compute_fakes.TestComputev2):
class TestSecurityGroupRuleCreate(TestSecurityGroupRule):
+ columns = (
+ 'id',
+ 'ip_protocol',
+ 'ip_range',
+ 'parent_group_id',
+ 'port_range',
+ 'remote_security_group',
+ )
+
def setUp(self):
super(TestSecurityGroupRuleCreate, self).setUp()
@@ -156,15 +165,7 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule):
None,
)
- collist = (
- 'id',
- 'ip_protocol',
- 'ip_range',
- 'parent_group_id',
- 'port_range',
- 'remote_security_group',
- )
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
security_group_rule_id,
'tcp',
@@ -208,15 +209,7 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule):
None,
)
- collist = (
- 'id',
- 'ip_protocol',
- 'ip_range',
- 'parent_group_id',
- 'port_range',
- 'remote_security_group',
- )
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
security_group_rule_id,
'tcp',
@@ -264,15 +257,7 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule):
security_group_id,
)
- collist = (
- 'id',
- 'ip_protocol',
- 'ip_range',
- 'parent_group_id',
- 'port_range',
- 'remote_security_group',
- )
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
security_group_rule_id,
'tcp',
@@ -315,15 +300,7 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule):
None,
)
- collist = (
- 'id',
- 'ip_protocol',
- 'ip_range',
- 'parent_group_id',
- 'port_range',
- 'remote_security_group',
- )
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
security_group_rule_id,
'udp',
@@ -369,15 +346,7 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule):
None,
)
- collist = (
- 'id',
- 'ip_protocol',
- 'ip_range',
- 'parent_group_id',
- 'port_range',
- 'remote_security_group',
- )
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
security_group_rule_id,
'icmp',
diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py
index 72fdbafc..f6b62291 100644
--- a/openstackclient/tests/compute/v2/test_server.py
+++ b/openstackclient/tests/compute/v2/test_server.py
@@ -89,6 +89,26 @@ class TestServer(compute_fakes.TestComputev2):
class TestServerCreate(TestServer):
+ columns = (
+ 'addresses',
+ 'flavor',
+ 'id',
+ 'name',
+ 'networks',
+ 'properties',
+ )
+
+ def datalist(self):
+ datalist = (
+ '',
+ self.flavor.name + ' ()',
+ self.new_server.id,
+ self.new_server.name,
+ self.new_server.networks,
+ '',
+ )
+ return datalist
+
def setUp(self):
super(TestServerCreate, self).setUp()
@@ -171,24 +191,8 @@ class TestServerCreate(TestServer):
**kwargs
)
- collist = (
- 'addresses',
- 'flavor',
- 'id',
- 'name',
- 'networks',
- 'properties',
- )
- self.assertEqual(collist, columns)
- datalist = (
- '',
- self.flavor.name + ' ()',
- self.new_server.id,
- self.new_server.name,
- self.new_server.networks,
- '',
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist(), data)
def test_server_create_with_network(self):
arglist = [
@@ -272,24 +276,8 @@ class TestServerCreate(TestServer):
**kwargs
)
- collist = (
- 'addresses',
- 'flavor',
- 'id',
- 'name',
- 'networks',
- 'properties',
- )
- self.assertEqual(collist, columns)
- datalist = (
- '',
- self.flavor.name + ' ()',
- self.new_server.id,
- self.new_server.name,
- self.new_server.networks,
- '',
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist(), data)
@mock.patch('openstackclient.compute.v2.server.io.open')
def test_server_create_userdata(self, mock_open):
@@ -345,24 +333,8 @@ class TestServerCreate(TestServer):
**kwargs
)
- collist = (
- 'addresses',
- 'flavor',
- 'id',
- 'name',
- 'networks',
- 'properties',
- )
- self.assertEqual(collist, columns)
- datalist = (
- '',
- self.flavor.name + ' ()',
- self.new_server.id,
- self.new_server.name,
- self.new_server.networks,
- '',
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist(), data)
def test_server_create_with_block_device_mapping(self):
arglist = [
@@ -414,24 +386,8 @@ class TestServerCreate(TestServer):
**kwargs
)
- collist = (
- 'addresses',
- 'flavor',
- 'id',
- 'name',
- 'networks',
- 'properties',
- )
- self.assertEqual(collist, columns)
- datalist = (
- '',
- self.flavor.name + ' ()',
- self.new_server.id,
- self.new_server.name,
- self.new_server.networks,
- '',
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist(), data)
class TestServerDelete(TestServer):
@@ -536,6 +492,26 @@ class TestServerDelete(TestServer):
class TestServerImageCreate(TestServer):
+ columns = (
+ 'id',
+ 'name',
+ 'owner',
+ 'protected',
+ 'tags',
+ 'visibility',
+ )
+
+ def datalist(self):
+ datalist = (
+ self.image.id,
+ self.image.name,
+ self.image.owner,
+ self.image.protected,
+ self.image.tags,
+ self.image.visibility,
+ )
+ return datalist
+
def setUp(self):
super(TestServerImageCreate, self).setUp()
@@ -569,17 +545,8 @@ class TestServerImageCreate(TestServer):
self.server.name,
)
- collist = ('id', 'name', 'owner', 'protected', 'tags', 'visibility')
- self.assertEqual(collist, columns)
- datalist = (
- self.image.id,
- self.image.name,
- self.image.owner,
- self.image.protected,
- self.image.tags,
- self.image.visibility,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist(), data)
def test_server_image_create_name(self):
arglist = [
@@ -601,17 +568,8 @@ class TestServerImageCreate(TestServer):
'img-nam',
)
- collist = ('id', 'name', 'owner', 'protected', 'tags', 'visibility')
- self.assertEqual(collist, columns)
- datalist = (
- self.image.id,
- self.image.name,
- self.image.owner,
- self.image.protected,
- self.image.tags,
- self.image.visibility,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist(), data)
class TestServerList(TestServer):
diff --git a/openstackclient/tests/network/v2/fakes.py b/openstackclient/tests/network/v2/fakes.py
index 80760a77..de885c62 100644
--- a/openstackclient/tests/network/v2/fakes.py
+++ b/openstackclient/tests/network/v2/fakes.py
@@ -145,6 +145,83 @@ class FakeNetwork(object):
return mock.MagicMock(side_effect=networks)
+class FakePort(object):
+ """Fake one or more ports."""
+
+ @staticmethod
+ def create_one_port(attrs={}, methods={}):
+ """Create a fake port.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :return:
+ A FakeResource object, with id, name, admin_state_up,
+ status, tenant_id
+ """
+ # Set default attributes.
+ port_attrs = {
+ 'id': 'port-id-' + uuid.uuid4().hex,
+ 'name': 'port-name-' + uuid.uuid4().hex,
+ 'status': 'ACTIVE',
+ 'admin_state_up': True,
+ 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ }
+
+ # Overwrite default attributes.
+ port_attrs.update(attrs)
+
+ # Set default methods.
+ port_methods = {}
+
+ # Overwrite default methods.
+ port_methods.update(methods)
+
+ port = fakes.FakeResource(info=copy.deepcopy(port_attrs),
+ methods=copy.deepcopy(port_methods),
+ loaded=True)
+ return port
+
+ @staticmethod
+ def create_ports(attrs={}, methods={}, count=2):
+ """Create multiple fake ports.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :param int count:
+ The number of ports to fake
+ :return:
+ A list of FakeResource objects faking the ports
+ """
+ ports = []
+ for i in range(0, count):
+ ports.append(FakePort.create_one_port(attrs, methods))
+
+ return ports
+
+ @staticmethod
+ def get_ports(ports=None, count=2):
+ """Get an iterable MagicMock object with a list of faked ports.
+
+ If ports list is provided, then initialize the Mock object with the
+ list. Otherwise create one.
+
+ :param List ports:
+ A list of FakeResource objects faking ports
+ :param int count:
+ The number of ports to fake
+ :return:
+ An iterable Mock object with side_effect set to a list of faked
+ ports
+ """
+ if ports is None:
+ ports = FakePort.create_ports(count)
+ return mock.MagicMock(side_effect=ports)
+
+
class FakeRouter(object):
"""Fake one or more routers."""
diff --git a/openstackclient/tests/network/v2/test_port.py b/openstackclient/tests/network/v2/test_port.py
new file mode 100644
index 00000000..a1ddefa1
--- /dev/null
+++ b/openstackclient/tests/network/v2/test_port.py
@@ -0,0 +1,53 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+import mock
+
+from openstackclient.network.v2 import port
+from openstackclient.tests.network.v2 import fakes as network_fakes
+
+
+class TestPort(network_fakes.TestNetworkV2):
+
+ def setUp(self):
+ super(TestPort, self).setUp()
+
+ # Get a shortcut to the network client
+ self.network = self.app.client_manager.network
+
+
+class TestDeletePort(TestPort):
+
+ # The port to delete.
+ _port = network_fakes.FakePort.create_one_port()
+
+ def setUp(self):
+ super(TestDeletePort, self).setUp()
+
+ self.network.delete_port = mock.Mock(return_value=None)
+ self.network.find_port = mock.Mock(return_value=self._port)
+ # Get the command object to test
+ self.cmd = port.DeletePort(self.app, self.namespace)
+
+ def test_delete(self):
+ arglist = [
+ self._port.name,
+ ]
+ verifylist = [
+ ('port', [self._port.name]),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+ self.network.delete_port.assert_called_with(self._port)
+ self.assertIsNone(result)