diff --git a/.zuul.yaml b/.zuul.yaml
index 7e23f93e8..0bbe8f4dc 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -7,12 +7,6 @@
- lib-forward-testing-python3
- release-notes-jobs-python3
- openstackclient-plugin-jobs
- check:
- jobs:
- - neutronclient-functional
- gate:
- jobs:
- - neutronclient-functional
experimental:
jobs:
- neutronclient-grenade-neutron-lib:
@@ -20,52 +14,6 @@
- ^(test-|)requirements.txt$
- ^setup.cfg$
-- job:
- name: neutronclient-functional
- parent: devstack-tox-functional
- irrelevant-files:
- - ^.*\.rst$
- - ^doc/.*$
- - ^releasenotes/.*$
- required-projects:
- - openstack/python-neutronclient
- - openstack/neutron
- - openstack/neutron-vpnaas
- vars:
- tox_envlist: functional
- devstack_services:
- # NOTE: neutronclient.tests.functional.base.ClientTestBase does not
- # support HTTPS endpoints now, so tls-proxy needs to be disabled.
- tls-proxy: false
- # Disable OVN services
- br-ex-tcpdump: false
- br-int-flows: false
- ovn-controller: false
- ovn-northd: false
- ovs-vswitchd: false
- ovsdb-server: false
- q-ovn-metadata-agent: false
- # Neutron services
- q-agt: true
- q-dhcp: true
- q-l3: true
- q-meta: true
- neutron-network-segment-range: true
- neutron-segments: true
- q-metering: true
- q-qos: true
- neutron-tag-ports-during-bulk-creation: true
- neutron-conntrack-helper: true
- devstack_localrc:
- USE_PYTHON3: true
- LIBS_FROM_GIT: python-neutronclient
- Q_AGENT: openvswitch
- Q_ML2_TENANT_NETWORK_TYPE: vxlan
- Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
- devstack_plugins:
- neutron: https://opendev.org/openstack/neutron
- neutron-vpnaas: https://opendev.org/openstack/neutron-vpnaas
-
- job:
name: neutronclient-grenade-neutron-lib
parent: grenade
diff --git a/README.rst b/README.rst
index 6f57c698c..a5e5300d6 100644
--- a/README.rst
+++ b/README.rst
@@ -15,8 +15,7 @@ Python bindings to the Neutron API
:alt: Latest Version
This is a client library for Neutron built on the Neutron API. It
-provides a Python API (the ``neutronclient`` module) and a command-line tool
-(``neutron``).
+provides a Python API (the ``neutronclient`` module).
* License: Apache License, Version 2.0
* `PyPi`_ - package installation
diff --git a/doc/source/cli/index.rst b/doc/source/cli/index.rst
index 0a7d54d9f..4b1f4720a 100644
--- a/doc/source/cli/index.rst
+++ b/doc/source/cli/index.rst
@@ -24,10 +24,9 @@
Using CLI
=========
-There are two CLIs which support the Networking API:
-`OpenStackClient (OSC)
+There is `OpenStackClient (OSC)
`__
-and :doc:`neutron CLI ` (deprecated).
+which support the Networking API
OpenStackClient
---------------
@@ -49,15 +48,8 @@ neutron CLI
.. warning::
- neutron CLI is now deprecated and will be removed in the future.
- Use openstack CLI instead. See `openstack CLI command list
+ neutron CLI is removed. Use openstack CLI instead. See `openstack CLI command list
`__
and :doc:`its extensions for advanced networking services `.
The command mapping from neutron CLI to openstack CLI is available
`here `__.
-
-.. toctree::
- :maxdepth: 2
-
- neutron CLI guide
- neutron CLI reference
diff --git a/doc/source/cli/neutron-reference.rst b/doc/source/cli/neutron-reference.rst
deleted file mode 100644
index d6640ea0d..000000000
--- a/doc/source/cli/neutron-reference.rst
+++ /dev/null
@@ -1,48 +0,0 @@
-..
- 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.
-
-
- Convention for heading levels in Neutron devref:
- ======= Heading 0 (reserved for the title in a document)
- ------- Heading 1
- ~~~~~~~ Heading 2
- +++++++ Heading 3
- ''''''' Heading 4
- (Avoid deeper levels because they do not render well.)
-
-=====================
-neutron CLI reference
-=====================
-
-.. warning::
-
- neutron CLI is now deprecated and will be removed in the future.
- Use openstack CLI instead. See `openstack CLI command list
- `__
- and :doc:`its extensions for advanced networking services `.
- The command mapping from neutron CLI to openstack CLI is available
- `here `__.
-
-neutron usage
--------------
-
-.. autoprogram-cliff:: neutronclient.shell.NeutronShell
- :application: neutron
- :arguments: 2.0
-
-neutron API v2.0 commands
--------------------------
-
-.. autoprogram-cliff:: neutron.cli.v2
- :application: neutron
-
diff --git a/doc/source/cli/neutron.rst b/doc/source/cli/neutron.rst
deleted file mode 100644
index 7ca652771..000000000
--- a/doc/source/cli/neutron.rst
+++ /dev/null
@@ -1,412 +0,0 @@
-..
- 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.
-
-
- Convention for heading levels in Neutron devref:
- ======= Heading 0 (reserved for the title in a document)
- ------- Heading 1
- ~~~~~~~ Heading 2
- +++++++ Heading 3
- ''''''' Heading 4
- (Avoid deeper levels because they do not render well.)
-
-Using neutron CLI
-=================
-
-The **neutron** shell utility interacts with OpenStack Networking API from the
-command-line. It supports the entire features of OpenStack Networking API.
-
-.. warning::
-
- neutron CLI is now deprecated and will be removed in the future.
- Use openstack CLI instead. See `openstack CLI command list
- `__
- and :doc:`its extensions for advanced networking services `.
- The command mapping from neutron CLI to openstack CLI is available
- `here `__.
-
-Basic Usage
------------
-
-In order to use the CLI, you must provide your OpenStack username, password,
-project, domain information for both user and project, and auth endpoint. Use
-the corresponding configuration options (``--os-username``, ``--os-password``,
-``--os-project-name``, ``--os-user-domain-id``, ``os-project-domain-id``, and
-``--os-auth-url``), but it is easier to set them in environment variables.
-
-.. code-block:: shell
-
- export OS_USERNAME=user
- export OS_PASSWORD=pass
- export OS_PROJECT_NAME=project
- export OS_USER_DOMAIN_ID=default
- export OS_PROJECT_DOMAIN_ID=default
- export OS_AUTH_URL=http://auth.example.com:5000/v3
-
-If you are using Identity v2.0 API (DEPRECATED), you don't need to pass domain
-information.
-
-.. code-block:: shell
-
- export OS_USERNAME=user
- export OS_PASSWORD=pass
- export OS_TENANT_NAME=tenant
- export OS_AUTH_URL=http://auth.example.com:5000/v2.0
-
-Once you've configured your authentication parameters, you can run **neutron**
-commands. All commands take the form of:
-
-.. code-block:: none
-
- neutron [arguments...]
-
-Run **neutron help** to get a full list of all possible commands, and run
-**neutron help ** to get detailed help for that command.
-
-Using with os-client-config
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-`os-client-config `_
-provides more convenient way to manage a collection of client configurations
-and you can easily switch multiple OpenStack-based configurations.
-
-To use os-client-config, you first need to prepare
-``~/.config/openstack/clouds.yaml`` like the following.
-
-.. code-block:: yaml
-
- clouds:
- devstack:
- auth:
- auth_url: http://auth.example.com:5000
- password: your-secret
- project_domain_id: default
- project_name: demo
- user_domain_id: default
- username: demo
- identity_api_version: '3'
- region_name: RegionOne
- devstack-admin:
- auth:
- auth_url: http://auth.example.com:35357
- password: another-secret
- project_domain_id: default
- project_name: admin
- user_domain_id: default
- username: admin
- identity_api_version: '3'
- region_name: RegionOne
-
-Then, you need to specify a configuration name defined in the above clouds.yaml.
-
-.. code-block:: shell
-
- export OS_CLOUD=devstack
-
-For more detail information, see the
-`os-client-config `_
-documentation.
-
-Using with keystone token
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The command-line tool will attempt to re-authenticate using your provided
-credentials for every request. You can override this behavior by manually
-supplying an auth token using ``--os-url`` and ``--os-auth-token``. You can
-alternatively set these environment variables.
-
-.. code-block:: shell
-
- export OS_URL=http://neutron.example.org:9696/
- export OS_TOKEN=3bcc3d3a03f44e3d8377f9247b0ad155
-
-Using noauth mode
-~~~~~~~~~~~~~~~~~
-
-If neutron server does not require authentication, besides these two arguments
-or environment variables (We can use any value as token.), we need manually
-supply ``--os-auth-strategy`` or set the environment variable.
-
-.. code-block:: shell
-
- export OS_AUTH_STRATEGY=noauth
-
-Display options
----------------
-
-Filtering
-~~~~~~~~~
-
-Neutron API supports filtering in the listing operation.
-**neutron** CLI supports this feature too.
-
-To specify a filter in ``*-list`` command, you need to pass a pair of an
-attribute name and an expected value with the format of ``-- ``.
-The example below retrieves ports owned by compute instances.
-
-.. code-block:: console
-
- $ neutron port-list --device_owner network:dhcp
- +--------------------------------------+------+-------------------+-------------------------------------------------------------------------------------------------------------+
- | id | name | mac_address | fixed_ips |
- +--------------------------------------+------+-------------------+-------------------------------------------------------------------------------------------------------------+
- | 8953d683-29ad-4be3-b73f-060727c7849b | | fa:16:3e:4b:9e:0a | {"subnet_id": "6b832dfe-f271-443c-abad-629961414a73", "ip_address": "10.0.0.2"} |
- | | | | {"subnet_id": "cdcc616b-0cff-482f-96f5-06fc63d21247", "ip_address": "fd12:877c:1d66:0:f816:3eff:fe4b:9e0a"} |
- +--------------------------------------+------+-------------------+-------------------------------------------------------------------------------------------------------------+
-
-You can also specify multiple filters.
-The example below retrieves security group rules applied to IPv4 traffic
-which belongs to a security group bfa493f9-2b03-46d2-8399-b9b038a53bc1.
-
-.. code-block:: console
-
- $ neutron security-group-rule-list --security-group-id bfa493f9-2b03-46d2-8399-b9b038a53bc1 --ethertype IPv4
- +--------------------------------------+----------------+-----------+-----------+---------------+-----------------+
- | id | security_group | direction | ethertype | protocol/port | remote |
- +--------------------------------------+----------------+-----------+-----------+---------------+-----------------+
- | 65489805-0400-4bce-9bd9-16a81952263c | default | egress | IPv4 | any | any |
- | 9429f336-4947-4643-bbd9-24528cc65648 | default | ingress | IPv4 | any | default (group) |
- +--------------------------------------+----------------+-----------+-----------+---------------+-----------------+
-
-.. note::
-
- Looking up UUID from name is not supported when specifying a filter.
- You need to use UUID to specify a specific resource.
-
-.. note::
-
- Filtering for dictionary or list attributes is not supported.
-
-Changing displayed columns
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you want displayed columns in a list operation, ``-c`` option can be used.
-``-c`` can be specified multiple times and the column order will be same as
-the order of ``-c`` options.
-
-.. code-block:: console
-
- $ neutron port-list -c id -c device_owner -c fixed_ips
- +--------------------------------------+--------------------------+-------------------------------------------------------------------------------------------------------------+
- | id | device_owner | fixed_ips |
- +--------------------------------------+--------------------------+-------------------------------------------------------------------------------------------------------------+
- | 41ca1b9b-4bbd-4aa8-bcaa-31d3d5704205 | network:router_interface | {"subnet_id": "6b832dfe-f271-443c-abad-629961414a73", "ip_address": "10.0.0.1"} |
- | 8953d683-29ad-4be3-b73f-060727c7849b | network:dhcp | {"subnet_id": "6b832dfe-f271-443c-abad-629961414a73", "ip_address": "10.0.0.2"} |
- | | | {"subnet_id": "cdcc616b-0cff-482f-96f5-06fc63d21247", "ip_address": "fd12:877c:1d66:0:f816:3eff:fe4b:9e0a"} |
- | a9da29f8-4504-4526-a5ce-cd3624fbd173 | neutron:LOADBALANCER | {"subnet_id": "6b832dfe-f271-443c-abad-629961414a73", "ip_address": "10.0.0.3"} |
- | | | {"subnet_id": "cdcc616b-0cff-482f-96f5-06fc63d21247", "ip_address": "fd12:877c:1d66:0:f816:3eff:feb1:ab71"} |
- | d6a1ff96-0a99-416f-a4d6-65d9614cf64e | compute:nova | {"subnet_id": "6b832dfe-f271-443c-abad-629961414a73", "ip_address": "10.0.0.4"} |
- | | | {"subnet_id": "cdcc616b-0cff-482f-96f5-06fc63d21247", "ip_address": "fd12:877c:1d66:0:f816:3eff:fe2c:348e"} |
- | f4789225-26d0-409f-8047-82d2c7a87a95 | network:router_interface | {"subnet_id": "cdcc616b-0cff-482f-96f5-06fc63d21247", "ip_address": "fd12:877c:1d66::1"} |
- +--------------------------------------+--------------------------+-------------------------------------------------------------------------------------------------------------+
-
-.. _cli_extra_arguments:
-
-Extra arguments for create/update operation
--------------------------------------------
-
-**neutron** CLI has a mechanism called the *extra arguments* for ``*-create``
-and ``*-update`` commands. It allows users to specify a set of *unknown
-options* which are not defined as options and not shown in the help text.
-**Unknown options MUST be placed at the end of the command line.**
-*unknown options* will be directly passed to the API layer. By this mechanism,
-you can pass an attribute which is not defined in the upstream **neutron**
-CLI. For example, when you are developing a new feature which add a new
-attribute to an existing resource, it is useful because we can test your
-feature without changing the existing neutron CLI.
-
-For example, if you run the following command::
-
- neutron resource-update --key1 value1 --key2 value2
-
-where ``resource`` is some resource name and ``--key1`` and ``--key2`` are
-unknown options, then the following JSON will be sent to the neutron API::
-
- PUT /v2.0/resources/
-
- {
- "resource": {
- "key2": "value2",
- "key1": "value1"
- }
- }
-
-Key interpretation
-~~~~~~~~~~~~~~~~~~
-
-This means an option name (``--key1`` in this case) must be one of valid
-resources of a corresponding resource. An option name ``--foo_bar`` is
-recognized as an attribute name ``foo_bar``. ``--foo-bar`` is also interpreted
-as an attribute name ``foo_bar``.
-
-Value interpretation
-~~~~~~~~~~~~~~~~~~~~
-
-By default, if the number of values is 1, the option value is interpreted as a
-string and is passed to the API layer as specified in a command-line.
-
-If the number of values is greater than 1, the option value is interpreted as a
-list and the result in the API layer will be same as when specifying a list as
-described below.
-
- neutron resource-update --key1 val1 val2 val3 --key2 val4
-
-In the above example, a value of ``key1`` is interpreted as
-``["val1", "val2", "val3"]`` and a value of ``key2`` is interpreted
-as ``val4``.
-
-The extra argument mechanism supports more complex value like a list or a dict.
-
-Specify a list value
-++++++++++++++++++++
-
-A command-line::
-
- neutron resource-update --key list=true val1 val2 val3
-
-will send the following in the API layer::
-
- {
- "key": [
- "val1",
- "val2",
- "val3"
- ]
- }
-
-.. note::
-
- If you want to specify a list value, it is recommended to specify
- ``list=true``. When ``list=true`` is specified, specified values are
- interpreted as a list even regardless of the number of values.
-
- If ``list=true`` is not specified, specified values are interpreted
- depends on the number of values how. If the number of values is more than 2,
- the specified values are interpreted as a list. If 1, the value
- is interpreted as a string.
-
-Specify a dict value
-++++++++++++++++++++
-
-A command-line::
-
- neutron resource-update --key type=dict key1=val1,key2=val2,key3=val3
-
-will send the following in the API layer::
-
- {
- "key": {
- "key1": "val1",
- "key2": "val2",
- "key3": "val3"
- }
- }
-
-.. note::
-
- ``type=bool True/False`` and ``type=int 10`` are also supported.
-
-Specify a list of dicts
-+++++++++++++++++++++++
-
-A command-line::
-
- neutron resource-update --key type=dict list=true key1=val1 key2=val2 key3=val3
-
-will send the following in the API layer::
-
- {
- "key": [
- {"key1": "val1"},
- {"key2": "val2"},
- {"key3": "val3"}
- ]
- }
-
-Passing None as a value
-~~~~~~~~~~~~~~~~~~~~~~~
-
-There is a case where we would like to pass ``None`` (``null`` in JSON)
-in the API layer. To do this::
-
- neutron resource-update --key action=clear
-
-The following body will be in the API layer::
-
- {"key": null}
-
-.. note::
-
- If ``action=clear`` is specified, ``list=true`` or ``type=dict`` is ignored.
- It means when ``action=clear`` is specified ``None`` is always sent.
-
-Debugging
----------
-
-Display API-level communication
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-``-v`` (or ``--verbose``, ``--debug``) option displays a detail interaction
-with your neutron server. It is useful to debug what happens in the API level.
-
-Here is an sample output of ``net-show`` command.
-
-The first line show what parameters are recognized by neutronclient.
-It is sometimes useful to check if command-line parameters you specify are recognized properly.
-
-.. code-block:: console
-
- $ neutron -v net-show mynetwork
- DEBUG: neutronclient.neutron.v2_0.network.ShowNetwork get_data(Namespace(columns=[], fields=[], formatter='table', id=u'mynetwork', max_width=0, noindent=False, prefix='', request_format='json', show_details=False, variables=[]))
-
-Next, neutronclient sends an authentication request to keystone to get a token
-which is used in further operations.
-
-.. code-block:: console
-
- DEBUG: keystoneauth.session REQ: curl -g -i -X GET http://172.16.18.47:5000 -H "Accept: application/json" -H "User-Agent: keystoneauth1"
- DEBUG: keystoneauth.session RESP: [300] Content-Length: 593 Vary: X-Auth-Token Keep-Alive: timeout=5, max=100 Server: Apache/2.4.7 (Ubuntu) Connection: Keep-Alive Date: Fri, 27 Nov 2015 20:10:54 GMT Content-Type: application/json
- RESP BODY: {"versions": {"values": [{"status": "stable", "updated": "2015-03-30T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v3+json"}], "id": "v3.4", "links": [{"href": "http://172.16.18.47:5000/v3/", "rel": "self"}]}, {"status": "stable", "updated": "2014-04-17T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v2.0+json"}], "id": "v2.0", "links": [{"href": "http://172.16.18.47:5000/v2.0/", "rel": "self"}, {"href": "http://docs.openstack.org/", "type": "text/html", "rel": "describedby"}]}]}}
-
- DEBUG: keystoneauth.identity.v3.base Making authentication request to http://172.16.18.47:5000/v3/auth/tokens
-
-Neutronclient looks up a network ID corresponding to a given network name.
-
-.. code-block:: console
-
- DEBUG: keystoneauth.session REQ: curl -g -i -X GET http://172.16.18.47:9696/v2.0/networks.json?fields=id&name=mynetwork -H "User-Agent: python-neutronclient" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}39300e7398d53a02afd183f13cb6afaef95ec4e5"
- DEBUG: keystoneauth.session RESP: [200] Date: Fri, 27 Nov 2015 20:10:55 GMT Connection: keep-alive Content-Type: application/json; charset=UTF-8 Content-Length: 62 X-Openstack-Request-Id: req-ccebf6e4-4f52-4874-a1ab-5499abcba378
- RESP BODY: {"networks": [{"id": "3698d3c7-d581-443e-bf86-53c4e3a738f7"}]}
-
-Finally, neutronclient retrieves a detail of a given network using the resolved ID.
-
-.. code-block:: console
-
- DEBUG: keystoneauth.session REQ: curl -g -i -X GET http://172.16.18.47:9696/v2.0/networks/3698d3c7-d581-443e-bf86-53c4e3a738f7.json -H "User-Agent: python-neutronclient" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}39300e7398d53a02afd183f13cb6afaef95ec4e5"
- DEBUG: keystoneauth.session RESP: [200] Date: Fri, 27 Nov 2015 20:10:55 GMT Connection: keep-alive Content-Type: application/json; charset=UTF-8 Content-Length: 272 X-Openstack-Request-Id: req-261add00-d6d3-4ea7-becc-105b60ac7369
- RESP BODY: {"network": {"status": "ACTIVE", "subnets": [], "name": "mynetwork", "admin_state_up": true, "tenant_id": "8f0ebf767043483a987736c8c684178d", "mtu": 0, "router:external": false, "shared": false, "port_security_enabled": true, "id": "3698d3c7-d581-443e-bf86-53c4e3a738f7"}}
-
- +-----------------------+--------------------------------------+
- | Field | Value |
- +-----------------------+--------------------------------------+
- | admin_state_up | True |
- | id | 3698d3c7-d581-443e-bf86-53c4e3a738f7 |
- | mtu | 0 |
- | name | mynetwork |
- | port_security_enabled | True |
- | router:external | False |
- | shared | False |
- | status | ACTIVE |
- | subnets | |
- | tenant_id | 8f0ebf767043483a987736c8c684178d |
- +-----------------------+--------------------------------------+
diff --git a/doc/source/contributor/cli_option_guideline.rst b/doc/source/contributor/cli_option_guideline.rst
deleted file mode 100644
index 49a840525..000000000
--- a/doc/source/contributor/cli_option_guideline.rst
+++ /dev/null
@@ -1,263 +0,0 @@
-..
- 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.
-
-
- Convention for heading levels in Neutron devref:
- ======= Heading 0 (reserved for the title in a document)
- ------- Heading 1
- ~~~~~~~ Heading 2
- +++++++ Heading 3
- ''''''' Heading 4
- (Avoid deeper levels because they do not render well.)
-
-CLI Option Guideline
-====================
-
-This document describes the conventions of neutron CLI options.
-
-General conventions
--------------------
-
-#. Option names should be delimited by a hyphen instead of a underscore.
- This is the common guidelines across all OpenStack CLIs.
-
- * Good: ``--ip-version``
- * Not Good: ``--ip_version``
-
-#. Use at least one required option for ``*-create`` command. If all options
- are optional, we typically use ``name`` field as a required option.
-
-#. When you need to specify an ID of a resource, it is better to provide
- another way to specify the resource like ``name`` or other reasonable field.
-
-#. If an attribute name in API is ``foo_id``, the corresponding option
- should be ``--foo`` instead of ``--foo-id``.
-
- * It is because we usually support ID and ``name`` to specify a resource.
-
-#. Do not use ``nargs='?'`` without a special reason.
-
- * The behavior of ``nargs='?'`` option for python argparse is
- bit tricky and may lead to unexpected option parsing different
- from the help message. The detail is described in the
- :ref:`Background section ` below.
-
-#. (option) Avoid using positional options as much as possible.
-
- * Positional arguments should be limited to attributes which will
- be required in the long future.
-
-#. We honor existing options and should keep compatibilities when adding or
- changing options.
-
-Options for boolean value
--------------------------
-
-Use the form of ``--option-name {True|False}``.
-
-* For a new option, it is recommended.
-* It is suggested to use ``common.utils.add_boolean_argument`` in an
- implementation. It allows ``true``/``false`` in addition to ``True``/``False``.
-* For existing options, migration to the recommended form is not necessarily
- required. All backward-compatibility should be kept without reasonable
- reasons.
-
-Options for dict value
-----------------------
-
-Some API attributes take a dictionary.
-
-``--foo key1=val1,key2=val2`` is usually used.
-
-This means ``{"key1": "val1", "key2": "val2"}`` is passed in the API layer.
-
-Examples:
-
-* ``--host-route destination=CIDR,nexthop=IP_ADDR`` for a subnet
-* ``--fixed-ip subnet_id=SUBNET,ip_address=IP_ADDR`` for a port.
-
-Options for list value
-----------------------
-
-Some attributes take a list.
-
-In this case, we usually use:
-
-* Define an option per element (Use a singular form as an option name)
-* Allow to specify the option multiple times
-
-For Example, **port-create** has ``--security-group`` option.
-``--security-group SG1 --security-group SG2`` generates
-``{"security_groups: ["SG1", "SG2"]}`` in the API layer.
-
-This convention applies to a case of a list of dict.
-``--allocation-pool`` and ``--host-route`` for a subnet are examples.
-
-Compatibility with extra arguments
-----------------------------------
-
-*extra arguments* supports various types of option specifications.
-At least the following patterns needs to be considered when defining
-a new option. For more detail, see :ref:`cli_extra_arguments`.
-
-* Normal options with value
-* Boolean options : ``--foo True``, ``--bar=False``
-* List options : ``--bars list=true val1 val2``, ``--bars val1 val2``
-* Dict options : ``--foo type=dict key1=va1,key2=val2``
-* List of Dict options : ``--bars list=true type=dict key1=val1,key2=val2 key3=val3,key4=val4``
-* ``action=clear``
-
-For normal options with value, there are four patterns to specify an option
-as extra arguments.
-
-* ``--admin-state-up True`` (a space between option name and value)
-* ``--admin-state-up=True`` (= between option name and value)
-* ``--admin_state_up True`` (underscore is used as delimiter)
-* ``--admin_state_up=True`` (underscore is used as delimiter)
-
-.. _background:
-
-Background
-----------
-
-There are a lot of opinions on which form of options are better or not.
-This section tries to capture the reason of the current choice.
-
-Use at least one required option
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-As a convention, **neutron** CLI requires one required argument.
-
-If all options are optional in the API level and we have ``name`` field,
-we usually use ``name`` as a required parameter.
-Requiring at least one argument has the following benefits:
-
-* If we run ``neutron *-create`` without a required argument, we will have a
- brief help message without detail option help. It is convenient.
-* We can avoid miss operation by just hitting ``neutron *-create``.
- Requiring at least one parameter is a good balance.
-
-Even though we can change this convention to allow to create a resource
-without ``name`` field, it will bring confusions to existing users.
-
-There may be opinion that it is inconsistent with API level requirement
-or Horizon behavior, but even if neutron CLI requires ``name`` field
-there is no bad impact on regular users. Considering possible confusion
-if we change it, it looks better to keep it as-is.
-
-Options for Boolean value
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-* ``--enable-foo``/``--disable-foo`` or similar patterns (including
- ``--admin-state-down``) is not suggested because we need two exclusive
- options for one attribute in REST API. It is meaningless.
-
-* It is not recommended to have an option only to specify non-default value.
- For example, we have ``--shared`` or ``--admin-state-down`` options for
- net-create. This form only works for ``*-create`` and does not work for
- ``*-update``. It leads to having different options for ``*-create`` and
- ``*-update``.
-
-* A flag option like ``--enable-dhcp`` (without value) also has a problem when
- considering the compatibility with *extra argument*. We can specify
- ``-enable-dhcp True/False`` or ``--enable-dhcp=True/False`` in the *extra
- argument* mechanism. If we introduce ``--enable-dhcp`` (without value),
- the form of ``-enable-dhcp True/False`` cannot be used now.
- This is another reason we don't use a flag style option for a boolean parameter.
-
-.. _background-nargs:
-
-Avoid using nargs in positional or optional arguments
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The behavior of ``nargs='?'`` option for python argparse is bit tricky.
-When we use ``nargs='?'`` and if the order of command-line options is
-changed then the command-line parser may fail to parse the arguments
-correctly. Two examples of such failures are provided below.
-
-Example 1:
-This example shows how the actual behavior can differ from the provided
-help message. In the below block, help message at ``[5]`` says ``--bb CC``
-is a valid format but the argument parsing for the same format fails at ``[7]``.
-
-.. code-block:: console
-
- In [1]: import argparse
- In [2]: parser = argparse.ArgumentParser()
- In [3]: parser.add_argument('--bb', nargs='?')
- In [4]: parser.add_argument('cc')
-
- In [5]: parser.print_help()
- usage: ipython [-h] [--bb [BB]] cc
-
- positional arguments:
- cc
-
- optional arguments:
- -h, --help show this help message and exit
- --bb [BB]
-
- In [6]: parser.parse_args('--bb 1 X'.split())
- Out[6]: Namespace(bb='1', cc='X')
-
- In [7]: parser.parse_args('--bb X'.split())
- usage: ipython [-h] [--bb [BB]] cc
- ipython: error: too few arguments
- An exception has occurred, use %tb to see the full traceback.
-
- SystemExit: 2
-
-
-Example 2:
-This example shows how fragile ``nargs='?'`` can be when user specifies
-options in different order from the help message.
-
-.. code-block:: console
-
- In [1]: import argparse
- In [2]: parser = argparse.ArgumentParser()
- In [3]: parser.add_argument('--a', help='option a')
- In [4]: parser.add_argument('--b', help='option b')
- In [5]: parser.add_argument('x', help='positional arg X')
- In [6]: parser.add_argument('y', nargs='?', help='positional arg Y')
- In [7]: parser.print_help()
- usage: ipython [-h] [--a A] [--b B] x [y]
-
- positional arguments:
- x positional arg X
- y positional arg Y
-
- optional arguments:
- -h, --help show this help message and exit
- --a A option a
- --b B option b
-
- In [8]: parser.parse_args('--a 1 --b 2 X Y'.split())
- Out[8]: Namespace(a='1', b='2', x='X', y='Y')
-
- In [9]: parser.parse_args('X Y --a 1 --b 2'.split())
- Out[9]: Namespace(a='1', b='2', x='X', y='Y')
-
- In [10]: parser.parse_args('X --a 1 --b 2 Y'.split())
- usage: ipython [-h] [--a A] [--b B] x [y]
- ipython: error: unrecognized arguments: Y
- An exception has occurred, use %tb to see the full traceback.
-
- SystemExit: 2
-
- To exit: use 'exit', 'quit', or Ctrl-D.
- To exit: use 'exit', 'quit', or Ctrl-D.
-
-Note: Most CLI users don't care about the order of the command-line
-options. Hence, such fragile behavior should be avoided.
-
diff --git a/doc/source/contributor/client_command_extensions.rst b/doc/source/contributor/client_command_extensions.rst
deleted file mode 100644
index 4b74cdf77..000000000
--- a/doc/source/contributor/client_command_extensions.rst
+++ /dev/null
@@ -1,97 +0,0 @@
-..
- 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.
-
-
- Convention for heading levels in Neutron devref:
- ======= Heading 0 (reserved for the title in a document)
- ------- Heading 1
- ~~~~~~~ Heading 2
- +++++++ Heading 3
- ''''''' Heading 4
- (Avoid deeper levels because they do not render well.)
-
-Client command extension support
-=================================
-
-The client command extension adds support for extending the neutron client while
-considering ease of creation.
-Extensions strongly conform to preexisting neutron commands (/neutron/v2_0/).
-
-A sample extension can be seen at:
-neutronclient/neutron/v2_0/contrib/_fox_sockets.py
-
-Minimum requirements from an extension
---------------------------------------
-
-* NeutronClientExtension subclasses must have a shell_command class variable
- if the command is to be available to the CLI (shell.py)
-
- Example: neutronclient.neutron.v2_0.contrib._fox_sockets.FoxInSocketsList
-
-Minimum requirements to use canonical neutron CRUD commands framework
-----------------------------------------------------------------------
-
-Neutron commands are cliff commands, commands in extension can use their
-own way to finish their tasks. But if they want to make use of the canonical
-neutron CRUD commands framework, the extension should:
-
-* have a class that subclasses NeutronClientExtension to provide the
- requisite resource name, version support, and resource collection and
- object paths for a resource the commands will process.
-
- Example: neutronclient.neutron.v2_0.contrib._fox_sockets.FoxInSocket
-
-* have a class that subclasses from the ClientExtensionList to provide
- resource object list function. This is because most commands
- need the list function to get object ID via
- neutronclient.neutron.v2_0.__init__.find_resource_by_id.
-
- Example: neutronclient.neutron.v2_0.contrib._fox_sockets.FoxInSocketsList
-
-* if needed, subclass ClientExtensionUpdate to implement update of the resource
- object.
-
- Example: neutronclient.neutron.v2_0.contrib._fox_sockets.FoxInSocketsUpdate
-
-* if needed, subclass ClientExtensionDelete to implement deletion of the resource
- object.
-
- Example: neutronclient.neutron.v2_0.contrib._fox_sockets.FoxInSocketsDelete
-
-* if needed, subclass ClientExtensionShow to get the detail of the resource
- object.
-
- Example: neutronclient.neutron.v2_0.contrib._fox_sockets.FoxInSocketsShow
-
-Precedence of command loading
-------------------------------
-
-* hard coded commands are loaded first
-* external commands (installed in the environment) are loaded then
-
-Commands that have the same name will be overwritten by commands that are
-loaded later. To change the execution of a command for your particular
-extension you only need to override the execute method.
-
-Currently this extension support is limited to top-level resources.
-Parent/child relationships may be added if desired.
-
-neutronclient.extension entry_point
------------------------------------
-
-To activate the commands in a specific extension module, add an entry in
-setup.cfg under neutronclient.extension. For example::
-
- [entry_points]
- neutronclient.extension =
- fox_sockets = neutronclient.neutron.v2_0.contrib._fox_sockets
diff --git a/doc/source/contributor/index.rst b/doc/source/contributor/index.rst
index f2150b0e0..fae3f6b82 100644
--- a/doc/source/contributor/index.rst
+++ b/doc/source/contributor/index.rst
@@ -31,6 +31,4 @@ OpenStack client.
.. toctree::
:maxdepth: 2
- client_command_extensions
- cli_option_guideline
transition_to_osc
diff --git a/doc/source/contributor/transition_to_osc.rst b/doc/source/contributor/transition_to_osc.rst
index 334f2e57e..9bb952902 100644
--- a/doc/source/contributor/transition_to_osc.rst
+++ b/doc/source/contributor/transition_to_osc.rst
@@ -105,7 +105,7 @@ Transition Steps
In addition, no new features will be added to the CLI, though fixes to
the CLI will be assessed on a case by case basis.
-8. **Not Started:** Remove the ``neutron`` CLI after two deprecation cycles
+8. **Done** Remove the ``neutron`` CLI after two deprecation cycles
once the criteria below have been met.
* The networking support provide by the ``openstack`` CLI is functionally
@@ -122,32 +122,8 @@ Transition Steps
Developer Guide
---------------
-The ``neutron`` CLI version 6.x, without extensions, supports over 200
-commands while the ``openstack`` CLI version 3.3.0 supports over 70
-networking commands. Of the 70 commands, some do not have all of the options
-or arguments of their ``neutron`` CLI equivalent. With this large functional
-gap, a few critical questions for developers during this transition are "Which
-CLI do I change?", "Where does my CLI belong?", and "Which Python library do I change?"
-The answer depends on the state of a command and the state of the overall transition.
-Details are outlined in the tables below. Early stages of the transition will require
-dual maintenance.
-
-**Which CLI do I change?**
-
-+----------------------+------------------------+-------------------------------------------------+
-| ``neutron`` Command | ``openstack`` Command | CLI to Change |
-+======================+========================+=================================================+
-| Exists | Doesn't Exist | ``neutron`` |
-+----------------------+------------------------+-------------------------------------------------+
-| Exists | In Progress | ``neutron`` and ``openstack`` |
-| | | (update related blueprint or bug) |
-+----------------------+------------------------+-------------------------------------------------+
-| Exists | Exists | ``openstack`` |
-| | | (assumes command parity resulting in |
-| | | ``neutron`` being deprecated) |
-+----------------------+------------------------+-------------------------------------------------+
-| Doesn't Exist | Doesn't Exist | ``openstack`` |
-+----------------------+------------------------+-------------------------------------------------+
+The ``neutron`` CLI tool is now removed and all new CLI changes should be done
+in the ``OpenStackClient (OSC)`` and, if needed, also in the ``OpenStack SDK``.
**Where does my CLI belong?**
@@ -186,8 +162,6 @@ is not required as the neutronclient is already deprecated on its own.
+=================================================+===============================================+
| python-openstackclient | openstacksdk |
+-------------------------------------------------+-----------------------------------------------+
-| python-neutronclient | python-neutronclient |
-+-------------------------------------------------+-----------------------------------------------+
| Other | Applicable project owning network resource |
+-------------------------------------------------+-----------------------------------------------+
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 64ad45ab4..c36d482ed 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -24,15 +24,11 @@ python-neutronclient documentation
==================================
This is a client for OpenStack Networking API. It provides
-:doc:`Python API bindings ` (the neutronclient module) and
-:doc:`command-line interface (CLI) `.
+:doc:`Python API bindings ` (the neutronclient module).
-There are two CLIs which support the Networking API:
-:doc:`neutron CLI ` and
+There is
`OpenStack Client (OSC) `__.
-OpenStack Client provides the basic network commands and
-python-neutronclient provides extensions (aka OSC plugins)
-for advanced networking services.
+CLI which support the Networking API.
User Documentation
------------------
diff --git a/neutron_test.sh b/neutron_test.sh
deleted file mode 100755
index d6dc75409..000000000
--- a/neutron_test.sh
+++ /dev/null
@@ -1,165 +0,0 @@
-#!/bin/bash
-set -x
-function die() {
- local exitcode=$?
- set +o xtrace
- echo $@
- cleanup
- exit $exitcode
-}
-
-net_name=mynet1
-subnet_name=mysubnet1
-port_name=myport1
-function cleanup() {
- echo Removing test port, subnet and net...
- neutron port-delete $port_name
- neutron subnet-delete $subnet_name
- neutron net-delete $net_name
-}
-
-noauth_tenant_id=me
-if [ "$1" == "noauth" ]; then
- NOAUTH="--tenant_id $noauth_tenant_id"
-else
- NOAUTH=
-fi
-
-echo "NOTE: User should be admin in order to perform all operations."
-sleep 3
-
-# test the CRUD of network
-network=$net_name
-neutron net-create $NOAUTH $network || die "fail to create network $network"
-temp=`neutron net-list -- --name $network --fields id | wc -l`
-echo $temp
-if [ $temp -ne 5 ]; then
- die "networks with name $network is not unique or found"
-fi
-network_id=`neutron net-list -- --name $network --fields id | tail -n 2 | head -n 1 | cut -d' ' -f 2`
-echo "ID of network with name $network is $network_id"
-
-neutron net-show $network || die "fail to show network $network"
-neutron net-show $network_id || die "fail to show network $network_id"
-
-neutron net-update $network --admin_state_up False || die "fail to update network $network"
-neutron net-update $network_id --admin_state_up True || die "fail to update network $network_id"
-
-neutron net-list -c id -- --id fakeid || die "fail to list networks with column selection on empty list"
-
-# test the CRUD of subnet
-subnet=$subnet_name
-cidr=10.0.1.0/24
-neutron subnet-create $NOAUTH $network $cidr --name $subnet || die "fail to create subnet $subnet"
-tempsubnet=`neutron subnet-list -- --name $subnet --fields id | wc -l`
-echo $tempsubnet
-if [ $tempsubnet -ne 5 ]; then
- die "subnets with name $subnet is not unique or found"
-fi
-subnet_id=`neutron subnet-list -- --name $subnet --fields id | tail -n 2 | head -n 1 | cut -d' ' -f 2`
-echo "ID of subnet with name $subnet is $subnet_id"
-neutron subnet-show $subnet || die "fail to show subnet $subnet"
-neutron subnet-show $subnet_id || die "fail to show subnet $subnet_id"
-
-neutron subnet-update $subnet --dns_nameservers list=true 1.1.1.11 1.1.1.12 || die "fail to update subnet $subnet"
-neutron subnet-update $subnet_id --dns_nameservers list=true 2.2.2.21 2.2.2.22 || die "fail to update subnet $subnet_id"
-
-# test the crud of ports
-port=$port_name
-neutron port-create $NOAUTH $network --name $port || die "fail to create port $port"
-tempport=`neutron port-list -- --name $port --fields id | wc -l`
-echo $tempport
-if [ $tempport -ne 5 ]; then
- die "ports with name $port is not unique or found"
-fi
-port_id=`neutron port-list -- --name $port --fields id | tail -n 2 | head -n 1 | cut -d' ' -f 2`
-echo "ID of port with name $port is $port_id"
-neutron port-show $port || die "fail to show port $port"
-neutron port-show $port_id || die "fail to show port $port_id"
-neutron port-update $port --device_id deviceid1 || die "fail to update port $port"
-neutron port-update $port_id --device_id deviceid2 || die "fail to update port $port_id"
-neutron port-update $port_id --allowed-address-pair ip_address=1.1.1.11,mac_address=10:00:00:00:00:00 --allowed-address-pair ip_address=1.1.1.12,mac_address=10:00:00:00:00:01 || die "fail to update port $port_id --allowed-address-pair"
-neutron port-show $port || die "fail to show port $port"
-neutron port-show $port_id || die "fail to show port $port_id"
-neutron port-update $port_id --no-allowed-address-pairs || die "fail to update port $port_id --no-allowed-address-pairs"
-neutron port-show $port || die "fail to show port $port"
-neutron port-show $port_id || die "fail to show port $port_id"
-neutron port-delete $port_id
-
-# test the create port with allowed-address-pairs
-port=$port_name
-neutron port-create $NOAUTH $network --name $port -- --allowed-address-pairs type=dict list=true ip_address=1.1.1.11,mac_address=10:00:00:00:00:00 ip_address=1.1.1.12,mac_address=10:00:00:00:00:01 || die "fail to create port $port"
-tempport=`neutron port-list -- --name $port --fields id | wc -l`
-echo $tempport
-if [ $tempport -ne 5 ]; then
- die "ports with name $port is not unique or found"
-fi
-port_id=`neutron port-list -- --name $port --fields id | tail -n 2 | head -n 1 | cut -d' ' -f 2`
-echo "ID of port with name $port is $port_id"
-neutron port-show $port || die "fail to show port $port"
-neutron port-show $port_id || die "fail to show port $port_id"
-neutron port-update $port_id --no-allowed-address-pairs || die "fail to update port $port_id --no-allowed-address-pairs"
-neutron port-show $port_id
-
-# test quota commands RUD
-DEFAULT_NETWORKS=10
-DEFAULT_PORTS=50
-tenant_id=tenant_a
-tenant_id_b=tenant_b
-neutron quota-update --tenant_id $tenant_id --network 30 || die "fail to update quota for tenant $tenant_id"
-neutron quota-update --tenant_id $tenant_id_b --network 20 || die "fail to update quota for tenant $tenant_id"
-networks=`neutron quota-list -c network -c tenant_id | grep $tenant_id | awk '{print $2}'`
-if [ $networks -ne 30 ]; then
- die "networks quota should be 30"
-fi
-networks=`neutron quota-list -c network -c tenant_id | grep $tenant_id_b | awk '{print $2}'`
-if [ $networks -ne 20 ]; then
- die "networks quota should be 20"
-fi
-networks=`neutron quota-show --tenant_id $tenant_id | grep network | awk -F'|' '{print $3}'`
-if [ $networks -ne 30 ]; then
- die "networks quota should be 30"
-fi
-neutron quota-delete --tenant_id $tenant_id || die "fail to delete quota for tenant $tenant_id"
-networks=`neutron quota-show --tenant_id $tenant_id | grep network | awk -F'|' '{print $3}'`
-if [ $networks -ne $DEFAULT_NETWORKS ]; then
- die "networks quota should be $DEFAULT_NETWORKS"
-fi
-# update self
-if [ "t$NOAUTH" = "t" ]; then
- # with auth
- neutron quota-update --port 99 || die "fail to update quota for self"
- ports=`neutron quota-show | grep port | awk -F'|' '{print $3}'`
- if [ $ports -ne 99 ]; then
- die "ports quota should be 99"
- fi
-
- ports=`neutron quota-list -c port | grep 99 | awk '{print $2}'`
- if [ $ports -ne 99 ]; then
- die "ports quota should be 99"
- fi
- neutron quota-delete || die "fail to delete quota for tenant self"
- ports=`neutron quota-show | grep port | awk -F'|' '{print $3}'`
- if [ $ports -ne $DEFAULT_PORTS ]; then
- die "ports quota should be $DEFAULT_PORTS"
- fi
-else
- # without auth
- neutron quota-update --port 100
- if [ $? -eq 0 ]; then
- die "without valid context on server, quota update command should fail."
- fi
- neutron quota-show
- if [ $? -eq 0 ]; then
- die "without valid context on server, quota show command should fail."
- fi
- neutron quota-delete
- if [ $? -eq 0 ]; then
- die "without valid context on server, quota delete command should fail."
- fi
- neutron quota-list || die "fail to update quota for self"
-fi
-
-cleanup
-echo "Success! :)"
-
diff --git a/neutronclient/shell.py b/neutronclient/shell.py
deleted file mode 100644
index 13cd0fa4e..000000000
--- a/neutronclient/shell.py
+++ /dev/null
@@ -1,654 +0,0 @@
-# Copyright 2012 OpenStack Foundation.
-# All Rights Reserved
-#
-# 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.
-#
-
-"""
-Command-line interface to the Neutron APIs
-"""
-
-import argparse
-import inspect
-import itertools
-import logging
-import os
-import sys
-
-from keystoneauth1 import session
-import os_client_config
-from oslo_utils import encodeutils
-from oslo_utils import netutils
-
-from cliff import app
-from cliff import command
-from cliff import commandmanager
-
-from neutronclient._i18n import _
-from neutronclient.common import clientmanager
-from neutronclient.common import exceptions as exc
-from neutronclient.common import extension as client_extension
-from neutronclient.neutron.v2_0 import subnet
-from neutronclient.version import __version__
-
-
-VERSION = '2.0'
-NEUTRON_API_VERSION = '2.0'
-
-NAMESPACE_MAP = {NEUTRON_API_VERSION: 'neutron.cli.v2'}
-
-
-def run_command(cmd, cmd_parser, sub_argv):
- _argv = sub_argv
- index = -1
- values_specs = []
- if '--' in sub_argv:
- index = sub_argv.index('--')
- _argv = sub_argv[:index]
- values_specs = sub_argv[index:]
- known_args, _values_specs = cmd_parser.parse_known_args(_argv)
- if(isinstance(cmd, subnet.CreateSubnet) and not known_args.cidr):
- cidr = get_first_valid_cidr(_values_specs)
- if cidr:
- known_args.cidr = cidr
- _values_specs.remove(cidr)
- cmd.values_specs = (index == -1 and _values_specs or values_specs)
- return cmd.run(known_args)
-
-
-def get_first_valid_cidr(value_specs):
- # Bug 1442771, argparse does not allow optional positional parameter
- # to be separated from previous positional parameter.
- # When cidr was separated from network, the value will not be able
- # to be parsed into known_args, but saved to _values_specs instead.
- for value in value_specs:
- if netutils.is_valid_cidr(value):
- return value
-
-
-def env(*_vars, **kwargs):
- """Search for the first defined of possibly many env vars.
-
- Returns the first environment variable defined in vars, or
- returns the default defined in kwargs.
-
- """
- for v in _vars:
- value = os.environ.get(v, None)
- if value:
- return value
- return kwargs.get('default', '')
-
-
-def check_non_negative_int(value):
- try:
- value = int(value)
- except ValueError:
- raise argparse.ArgumentTypeError(_("invalid int value: %r") % value)
- if value < 0:
- raise argparse.ArgumentTypeError(_("input value %d is negative") %
- value)
- return value
-
-
-COMMANDS = {}
-
-
-# NOTE(amotoki): This is only to provide compatibility
-# to existing neutron CLI extensions. See bug 1706573 for detail.
-def _set_commands_dict_for_compat(apiversion, command_manager):
- global COMMANDS
- COMMANDS = {apiversion: dict((cmd, command_manager.find_command([cmd])[0])
- for cmd in command_manager.commands)}
-
-
-class BashCompletionCommand(command.Command):
- """Prints all of the commands and options for bash-completion."""
-
- def take_action(self, parsed_args):
- pass
-
-
-class HelpAction(argparse.Action):
- """Print help message including sub-commands
-
- Provide a custom action so the -h and --help options
- to the main app will print a list of the commands.
-
- The commands are determined by checking the CommandManager
- instance, passed in as the "default" value for the action.
- """
- def __call__(self, parser, namespace, values, option_string=None):
- outputs = []
- max_len = 0
- app = self.default
- parser.print_help(app.stdout)
- app.stdout.write(_('\nCommands for API v%s:\n') % app.api_version)
- command_manager = app.command_manager
- for name, ep in sorted(command_manager):
- factory = ep.load()
- cmd = factory(self, None)
- one_liner = cmd.get_description().split('\n')[0]
- outputs.append((name, one_liner))
- max_len = max(len(name), max_len)
- for (name, one_liner) in outputs:
- app.stdout.write(' %s %s\n' % (name.ljust(max_len), one_liner))
- sys.exit(0)
-
-
-class NeutronShell(app.App):
-
- # verbose logging levels
- WARNING_LEVEL = 0
- INFO_LEVEL = 1
- DEBUG_LEVEL = 2
- CONSOLE_MESSAGE_FORMAT = '%(message)s'
- DEBUG_MESSAGE_FORMAT = '%(levelname)s: %(name)s %(message)s'
- log = logging.getLogger(__name__)
-
- def __init__(self, apiversion):
- namespace = NAMESPACE_MAP[apiversion]
- description = (__doc__.strip() +
- " (neutron CLI version: %s)" % __version__)
- super(NeutronShell, self).__init__(
- description=description,
- version=VERSION,
- command_manager=commandmanager.CommandManager(namespace), )
-
- self._register_extensions(VERSION)
-
- # Pop the 'complete' to correct the outputs of 'neutron help'.
- self.command_manager.commands.pop('complete')
-
- # This is instantiated in initialize_app() only when using
- # password flow auth
- self.auth_client = None
- self.api_version = apiversion
-
- _set_commands_dict_for_compat(apiversion, self.command_manager)
-
- def build_option_parser(self, description, version):
- """Return an argparse option parser for this application.
-
- Subclasses may override this method to extend
- the parser with more global options.
-
- :param description: full description of the application
- :paramtype description: str
- :param version: version number for the application
- :paramtype version: str
- """
- parser = argparse.ArgumentParser(
- description=description,
- add_help=False, )
- parser.add_argument(
- '--version',
- action='version',
- version=__version__, )
- parser.add_argument(
- '-v', '--verbose', '--debug',
- action='count',
- dest='verbose_level',
- default=self.DEFAULT_VERBOSE_LEVEL,
- help=_('Increase verbosity of output and show tracebacks on'
- ' errors. You can repeat this option.'))
- parser.add_argument(
- '-q', '--quiet',
- action='store_const',
- dest='verbose_level',
- const=0,
- help=_('Suppress output except warnings and errors.'))
- parser.add_argument(
- '-h', '--help',
- action=HelpAction,
- nargs=0,
- default=self, # tricky
- help=_("Show this help message and exit."))
- parser.add_argument(
- '-r', '--retries',
- metavar="NUM",
- type=check_non_negative_int,
- default=0,
- help=_("How many times the request to the Neutron server should "
- "be retried if it fails. Defaults to 0."))
- # FIXME(bklei): this method should come from keystoneauth1
- self._append_global_identity_args(parser)
-
- return parser
-
- def _append_global_identity_args(self, parser):
- # FIXME(bklei): these are global identity (Keystone) arguments which
- # should be consistent and shared by all service clients. Therefore,
- # they should be provided by keystoneauth1. We will need to
- # refactor this code once this functionality is available in
- # keystoneauth1.
- #
- # Note: At that time we'll need to decide if we can just abandon
- # the deprecated args (--service-type and --endpoint-type).
-
- parser.add_argument(
- '--os-service-type', metavar='',
- default=env('OS_NETWORK_SERVICE_TYPE', default='network'),
- help=_('Defaults to env[OS_NETWORK_SERVICE_TYPE] or "network".'))
-
- parser.add_argument(
- '--os-endpoint-type', metavar='',
- default=env('OS_ENDPOINT_TYPE', default='public'),
- help=_('Defaults to env[OS_ENDPOINT_TYPE] or "public".'))
-
- # FIXME(bklei): --service-type is deprecated but kept in for
- # backward compatibility.
- parser.add_argument(
- '--service-type', metavar='',
- default=env('OS_NETWORK_SERVICE_TYPE', default='network'),
- help=_('DEPRECATED! Use --os-service-type.'))
-
- # FIXME(bklei): --endpoint-type is deprecated but kept in for
- # backward compatibility.
- parser.add_argument(
- '--endpoint-type', metavar='',
- default=env('OS_ENDPOINT_TYPE', default='public'),
- help=_('DEPRECATED! Use --os-endpoint-type.'))
-
- parser.add_argument(
- '--os-auth-strategy', metavar='',
- default=env('OS_AUTH_STRATEGY', default='keystone'),
- help=_('DEPRECATED! Only keystone is supported.'))
-
- parser.add_argument(
- '--os_auth_strategy',
- help=argparse.SUPPRESS)
-
- parser.add_argument(
- '--os-cloud', metavar='',
- help=_('Defaults to env[OS_CLOUD].'))
-
- parser.add_argument(
- '--os-auth-url', metavar='',
- help=_('Authentication URL, defaults to env[OS_AUTH_URL].'))
- parser.add_argument(
- '--os_auth_url',
- help=argparse.SUPPRESS)
-
- project_name_group = parser.add_mutually_exclusive_group()
- project_name_group.add_argument(
- '--os-tenant-name', metavar='',
- help=_('Authentication tenant name, defaults to '
- 'env[OS_TENANT_NAME].'))
- project_name_group.add_argument(
- '--os-project-name',
- metavar='',
- help=_('Another way to specify tenant name. '
- 'This option is mutually exclusive with '
- ' --os-tenant-name. '
- 'Defaults to env[OS_PROJECT_NAME].'))
-
- parser.add_argument(
- '--os_tenant_name',
- help=argparse.SUPPRESS)
-
- project_id_group = parser.add_mutually_exclusive_group()
- project_id_group.add_argument(
- '--os-tenant-id', metavar='',
- help=_('Authentication tenant ID, defaults to '
- 'env[OS_TENANT_ID].'))
- project_id_group.add_argument(
- '--os-project-id',
- metavar='',
- help=_('Another way to specify tenant ID. '
- 'This option is mutually exclusive with '
- ' --os-tenant-id. '
- 'Defaults to env[OS_PROJECT_ID].'))
-
- parser.add_argument(
- '--os-username', metavar='',
- help=_('Authentication username, defaults to env[OS_USERNAME].'))
- parser.add_argument(
- '--os_username',
- help=argparse.SUPPRESS)
-
- parser.add_argument(
- '--os-user-id', metavar='',
- help=_('Authentication user ID (Env: OS_USER_ID)'))
-
- parser.add_argument(
- '--os_user_id',
- help=argparse.SUPPRESS)
-
- parser.add_argument(
- '--os-user-domain-id',
- metavar='',
- help=_('OpenStack user domain ID. '
- 'Defaults to env[OS_USER_DOMAIN_ID].'))
-
- parser.add_argument(
- '--os_user_domain_id',
- help=argparse.SUPPRESS)
-
- parser.add_argument(
- '--os-user-domain-name',
- metavar='',
- help=_('OpenStack user domain name. '
- 'Defaults to env[OS_USER_DOMAIN_NAME].'))
-
- parser.add_argument(
- '--os_user_domain_name',
- help=argparse.SUPPRESS)
-
- parser.add_argument(
- '--os_project_id',
- help=argparse.SUPPRESS)
-
- parser.add_argument(
- '--os_project_name',
- help=argparse.SUPPRESS)
-
- parser.add_argument(
- '--os-project-domain-id',
- metavar='',
- help=_('Defaults to env[OS_PROJECT_DOMAIN_ID].'))
-
- parser.add_argument(
- '--os-project-domain-name',
- metavar='',
- help=_('Defaults to env[OS_PROJECT_DOMAIN_NAME].'))
-
- parser.add_argument(
- '--os-cert',
- metavar='',
- help=_("Path of certificate file to use in SSL "
- "connection. This file can optionally be "
- "prepended with the private key. Defaults "
- "to env[OS_CERT]."))
-
- parser.add_argument(
- '--os-cacert',
- metavar='',
- help=_("Specify a CA bundle file to use in "
- "verifying a TLS (https) server certificate. "
- "Defaults to env[OS_CACERT]."))
-
- parser.add_argument(
- '--os-key',
- metavar='',
- help=_("Path of client key to use in SSL "
- "connection. This option is not necessary "
- "if your key is prepended to your certificate "
- "file. Defaults to env[OS_KEY]."))
-
- parser.add_argument(
- '--os-password', metavar='',
- help=_('Authentication password, defaults to env[OS_PASSWORD].'))
- parser.add_argument(
- '--os_password',
- help=argparse.SUPPRESS)
-
- parser.add_argument(
- '--os-region-name', metavar='',
- help=_('Authentication region name, defaults to '
- 'env[OS_REGION_NAME].'))
- parser.add_argument(
- '--os_region_name',
- help=argparse.SUPPRESS)
-
- parser.add_argument(
- '--os-token', metavar='',
- help=_('Authentication token, defaults to env[OS_TOKEN].'))
- parser.add_argument(
- '--os_token',
- help=argparse.SUPPRESS)
-
- parser.add_argument(
- '--http-timeout', metavar='',
- default=env('OS_NETWORK_TIMEOUT', default=None), type=float,
- help=_('Timeout in seconds to wait for an HTTP response. Defaults '
- 'to env[OS_NETWORK_TIMEOUT] or None if not specified.'))
-
- parser.add_argument(
- '--os-url', metavar='',
- help=_('Defaults to env[OS_URL].'))
- parser.add_argument(
- '--os_url',
- help=argparse.SUPPRESS)
-
- parser.add_argument(
- '--insecure',
- action='store_true',
- default=env('NEUTRONCLIENT_INSECURE', default=False),
- help=_("Explicitly allow neutronclient to perform \"insecure\" "
- "SSL (https) requests. The server's certificate will "
- "not be verified against any certificate authorities. "
- "This option should be used with caution."))
-
- def _bash_completion(self):
- """Prints all of the commands and options for bash-completion."""
- commands = set()
- options = set()
- for option, _action in self.parser._option_string_actions.items():
- options.add(option)
- for _name, _command in self.command_manager:
- commands.add(_name)
- cmd_factory = _command.load()
- cmd = cmd_factory(self, None)
- cmd_parser = cmd.get_parser('')
- for option, _action in cmd_parser._option_string_actions.items():
- options.add(option)
- print(' '.join(commands | options))
-
- def _register_extensions(self, version):
- for name, module in itertools.chain(
- client_extension._discover_via_entry_points()):
- self._extend_shell_commands(name, module, version)
-
- def _extend_shell_commands(self, name, module, version):
- classes = inspect.getmembers(module, inspect.isclass)
- for cls_name, cls in classes:
- if (issubclass(cls, client_extension.NeutronClientExtension) and
- hasattr(cls, 'shell_command')):
- cmd = cls.shell_command
- if hasattr(cls, 'versions'):
- if version not in cls.versions:
- continue
- try:
- name_prefix = "[%s]" % name
- cls.__doc__ = ("%s %s" % (name_prefix, cls.__doc__) if
- cls.__doc__ else name_prefix)
- self.command_manager.add_command(cmd, cls)
- except TypeError:
- pass
-
- def run(self, argv):
- """Equivalent to the main program for the application.
-
- :param argv: input arguments and options
- :paramtype argv: list of str
- """
- try:
- index = 0
- command_pos = -1
- help_pos = -1
- help_command_pos = -1
- for arg in argv:
- if arg == 'bash-completion' and help_command_pos == -1:
- self._bash_completion()
- return 0
- if arg in ('-h', '--help'):
- if help_pos == -1:
- help_pos = index
- # self.command_manager.commands contains 'help',
- # so we need to check this first.
- elif arg == 'help':
- if help_command_pos == -1:
- help_command_pos = index
- elif arg in self.command_manager.commands:
- if command_pos == -1:
- command_pos = index
- index = index + 1
- if command_pos > -1 and help_pos > command_pos:
- argv = ['help', argv[command_pos]]
- if help_command_pos > -1 and command_pos == -1:
- argv[help_command_pos] = '--help'
- self.options, remainder = self.parser.parse_known_args(argv)
- self.configure_logging()
- self.interactive_mode = not remainder
- self.initialize_app(remainder)
- except Exception as err:
- if self.options.verbose_level >= self.DEBUG_LEVEL:
- self.log.exception(err)
- raise
- else:
- self.log.error(err)
- return 1
- if self.interactive_mode:
- _argv = [sys.argv[0]]
- sys.argv = _argv
- return self.interact()
- return self.run_subcommand(remainder)
-
- def run_subcommand(self, argv):
- subcommand = self.command_manager.find_command(argv)
- cmd_factory, cmd_name, sub_argv = subcommand
- cmd = cmd_factory(self, self.options)
- try:
- self.prepare_to_run_command(cmd)
- full_name = (cmd_name
- if self.interactive_mode
- else ' '.join([self.NAME, cmd_name])
- )
- cmd_parser = cmd.get_parser(full_name)
- return run_command(cmd, cmd_parser, sub_argv)
- except SystemExit:
- print(_("Try 'neutron help %s' for more information.") %
- cmd_name, file=sys.stderr)
- raise
- except Exception as e:
- if self.options.verbose_level >= self.DEBUG_LEVEL:
- self.log.exception("%s", e)
- raise
- self.log.error("%s", e)
- return 1
-
- def authenticate_user(self):
- """Confirm user authentication
-
- Make sure the user has provided all of the authentication
- info we need.
- """
- cloud_config = os_client_config.OpenStackConfig().get_one_cloud(
- cloud=self.options.os_cloud, argparse=self.options,
- network_api_version=self.api_version,
- verify=not self.options.insecure)
- verify, cert = cloud_config.get_requests_verify_args()
-
- # TODO(singhj): Remove dependancy on HTTPClient
- # for the case of token-endpoint authentication
-
- # When using token-endpoint authentication legacy
- # HTTPClient will be used, otherwise SessionClient
- # will be used.
- if self.options.os_token and self.options.os_url:
- auth = None
- auth_session = None
- else:
- auth = cloud_config.get_auth()
-
- auth_session = session.Session(
- auth=auth, verify=verify, cert=cert,
- timeout=self.options.http_timeout)
-
- interface = self.options.os_endpoint_type or self.endpoint_type
- if interface.endswith('URL'):
- interface = interface[:-3]
- self.client_manager = clientmanager.ClientManager(
- retries=self.options.retries,
- raise_errors=False,
- session=auth_session,
- url=self.options.os_url,
- token=self.options.os_token,
- region_name=cloud_config.get_region_name(),
- api_version=cloud_config.get_api_version('network'),
- service_type=cloud_config.get_service_type('network'),
- service_name=cloud_config.get_service_name('network'),
- endpoint_type=interface,
- auth=auth,
- insecure=not verify,
- log_credentials=True)
- return
-
- def initialize_app(self, argv):
- """Global app init bits:
-
- * set up API versions
- * validate authentication info
- """
-
- super(NeutronShell, self).initialize_app(argv)
-
- # If the user is not asking for help, make sure they
- # have given us auth.
- cmd_name = None
- if argv:
- cmd_info = self.command_manager.find_command(argv)
- cmd_factory, cmd_name, sub_argv = cmd_info
- if self.interactive_mode or cmd_name != 'help':
- self.authenticate_user()
-
- def configure_logging(self):
- """Create logging handlers for any log output."""
- root_logger = logging.getLogger('')
-
- # Set up logging to a file
- root_logger.setLevel(logging.DEBUG)
-
- # Send higher-level messages to the console via stderr
- console = logging.StreamHandler(self.stderr)
- console_level = {self.WARNING_LEVEL: logging.WARNING,
- self.INFO_LEVEL: logging.INFO,
- self.DEBUG_LEVEL: logging.DEBUG,
- }.get(self.options.verbose_level, logging.DEBUG)
- # The default log level is INFO, in this situation, set the
- # log level of the console to WARNING, to avoid displaying
- # useless messages. This equals using "--quiet"
- if console_level == logging.INFO:
- console.setLevel(logging.WARNING)
- else:
- console.setLevel(console_level)
- if logging.DEBUG == console_level:
- formatter = logging.Formatter(self.DEBUG_MESSAGE_FORMAT)
- else:
- formatter = logging.Formatter(self.CONSOLE_MESSAGE_FORMAT)
- logging.getLogger('iso8601.iso8601').setLevel(logging.WARNING)
- logging.getLogger('urllib3.connectionpool').setLevel(logging.WARNING)
- console.setFormatter(formatter)
- root_logger.addHandler(console)
- return
-
-
-def main(argv=sys.argv[1:]):
- try:
- print(_("neutron CLI is deprecated and will be removed "
- "in the Z cycle. Use openstack CLI instead."), file=sys.stderr)
- return NeutronShell(NEUTRON_API_VERSION).run(
- list(map(encodeutils.safe_decode, argv)))
- except KeyboardInterrupt:
- print(_("... terminating neutron client"), file=sys.stderr)
- return 130
- except exc.NeutronClientException:
- return 1
- except Exception as e:
- print(e)
- return 1
-
-
-if __name__ == "__main__":
- sys.exit(main(sys.argv[1:]))
diff --git a/neutronclient/tests/functional/__init__.py b/neutronclient/tests/functional/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/neutronclient/tests/functional/adv-svcs/__init__.py b/neutronclient/tests/functional/adv-svcs/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/neutronclient/tests/functional/adv-svcs/test_readonly_neutron_fwaas.py b/neutronclient/tests/functional/adv-svcs/test_readonly_neutron_fwaas.py
deleted file mode 100644
index 9cec62571..000000000
--- a/neutronclient/tests/functional/adv-svcs/test_readonly_neutron_fwaas.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# 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.
-
-from neutronclient.tests.functional import base
-
-
-class SimpleReadOnlyNeutronFwv1ClientTest(base.ClientTestBase):
-
- """Tests for FWaaS v1 based client commands that are read only"""
-
- def setUp(self):
- super(SimpleReadOnlyNeutronFwv1ClientTest, self).setUp()
- if not self.is_extension_enabled('fwaas'):
- self.skipTest('FWaaS is not enabled')
-
- def test_neutron_firewall_list(self):
- firewall_list = self.parser.listing(self.neutron
- ('firewall-list'))
- self.assertTableStruct(firewall_list, ['id', 'name',
- 'firewall_policy_id'])
-
- def test_neutron_firewall_policy_list(self):
- firewall_policy = self.parser.listing(self.neutron
- ('firewall-policy-list'))
- self.assertTableStruct(firewall_policy, ['id', 'name',
- 'firewall_rules'])
-
- def test_neutron_firewall_rule_list(self):
- firewall_rule = self.parser.listing(self.neutron
- ('firewall-rule-list'))
- self.assertTableStruct(firewall_rule, ['id', 'name',
- 'firewall_policy_id',
- 'summary', 'enabled'])
diff --git a/neutronclient/tests/functional/adv-svcs/test_readonly_neutron_vpn.py b/neutronclient/tests/functional/adv-svcs/test_readonly_neutron_vpn.py
deleted file mode 100644
index 6e3b6cdcb..000000000
--- a/neutronclient/tests/functional/adv-svcs/test_readonly_neutron_vpn.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# 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.
-
-from neutronclient.tests.functional import base
-
-
-class SimpleReadOnlyNeutronVpnClientTest(base.ClientTestBase):
-
- """Tests for vpn based client commands that are read only
-
- This is a first pass at a simple read only python-neutronclient test.
- This only exercises vpn based client commands that are read only.
- This should test commands:
- * as a regular user
- * as a admin user
- * with and without optional parameters
- * initially just check return codes, and later test command outputs
- """
- def setUp(self):
- super(SimpleReadOnlyNeutronVpnClientTest, self).setUp()
- if not self.is_extension_enabled('vpnaas'):
- self.skipTest('VPNaaS is not enabled')
-
- def test_neutron_vpn_ikepolicy_list(self):
- ikepolicy = self.parser.listing(self.neutron('vpn-ikepolicy-list'))
- self.assertTableStruct(ikepolicy, ['id', 'name',
- 'auth_algorithm',
- 'encryption_algorithm',
- 'ike_version', 'pfs'])
-
- def test_neutron_vpn_ipsecpolicy_list(self):
- ipsecpolicy = self.parser.listing(self.neutron('vpn-ipsecpolicy-list'))
- self.assertTableStruct(ipsecpolicy, ['id', 'name',
- 'auth_algorithm',
- 'encryption_algorithm',
- 'pfs'])
-
- def test_neutron_vpn_service_list(self):
- vpn_list = self.parser.listing(self.neutron('vpn-service-list'))
- self.assertTableStruct(vpn_list, ['id', 'name',
- 'router_id', 'status'])
-
- def test_neutron_ipsec_site_connection_list(self):
- ipsec_site = self.parser.listing(self.neutron
- ('ipsec-site-connection-list'))
- self.assertTableStruct(ipsec_site, ['id', 'name',
- 'peer_address',
- 'auth_mode', 'status'])
diff --git a/neutronclient/tests/functional/base.py b/neutronclient/tests/functional/base.py
deleted file mode 100644
index 655c6c4f8..000000000
--- a/neutronclient/tests/functional/base.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# 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 os
-
-import os_client_config
-from tempest.lib.cli import base
-
-
-def credentials(cloud='devstack-admin'):
- """Retrieves credentials to run functional tests
-
- Credentials are either read via os-client-config from the environment
- or from a config file ('clouds.yaml'). Environment variables override
- those from the config file.
-
- devstack produces a clouds.yaml with two named clouds - one named
- 'devstack' which has user privs and one named 'devstack-admin' which
- has admin privs. This function will default to getting the devstack-admin
- cloud as that is the current expected behavior.
- """
- return get_cloud_config(cloud=cloud).get_auth_args()
-
-
-def get_cloud_config(cloud='devstack-admin'):
- return os_client_config.OpenStackConfig().get_one_cloud(cloud=cloud)
-
-
-class ClientTestBase(base.ClientTestBase):
- """This is a first pass at a simple read only python-neutronclient test.
-
- This only exercises client commands that are read only.
- This should test commands:
- * as a regular user
- * as an admin user
- * with and without optional parameters
- * initially just check return codes, and later test command outputs
-
- """
-
- def _get_clients_from_os_cloud_config(self, cloud='devstack-admin'):
- creds = credentials(cloud)
- cli_dir = os.environ.get(
- 'OS_NEUTRONCLIENT_EXEC_DIR',
- os.path.join(os.path.abspath('.'), '.tox/functional/bin'))
-
- return base.CLIClient(
- username=creds['username'],
- password=creds['password'],
- tenant_name=creds['project_name'],
- project_domain_id=creds['project_domain_id'],
- user_domain_id=creds['user_domain_id'],
- uri=creds['auth_url'],
- cli_dir=cli_dir)
-
- def _get_clients(self):
- return self._get_clients_from_os_cloud_config()
-
- def neutron(self, *args, **kwargs):
- return self.clients.neutron(*args, **kwargs)
-
- def neutron_non_admin(self, *args, **kwargs):
- if not hasattr(self, '_non_admin_clients'):
- self._non_admin_clients = self._get_clients_from_os_cloud_config(
- cloud='devstack')
- return self._non_admin_clients.neutron(*args, **kwargs)
-
- def is_extension_enabled(self, extension_alias):
- extensions = self.parser.listing(self.neutron('ext-list'))
- aliases = [e['alias'] for e in extensions]
- return extension_alias in aliases
diff --git a/neutronclient/tests/functional/core/__init__.py b/neutronclient/tests/functional/core/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/neutronclient/tests/functional/core/test_cli_formatter.py b/neutronclient/tests/functional/core/test_cli_formatter.py
deleted file mode 100644
index 145ed6c67..000000000
--- a/neutronclient/tests/functional/core/test_cli_formatter.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright 2016 NEC Corporation
-#
-# 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.
-
-from oslo_serialization import jsonutils
-from oslo_utils import uuidutils
-import yaml
-
-from neutronclient.tests.functional import base
-
-
-class TestCLIFormatter(base.ClientTestBase):
-
- def setUp(self):
- super(TestCLIFormatter, self).setUp()
- self.net_name = 'net-%s' % uuidutils.generate_uuid()
- self.addCleanup(self.neutron, 'net-delete %s' % self.net_name)
-
- def _create_net(self, fmt, col_attrs):
- params = ['-c %s' % attr for attr in col_attrs]
- params.append('-f %s' % fmt)
- params.append(self.net_name)
- param_string = ' '.join(params)
- return self.neutron('net-create', params=param_string)
-
- def test_net_create_with_json_formatter(self):
- result = self._create_net('json', ['name', 'admin_state_up'])
- self.assertDictEqual({'name': self.net_name,
- 'admin_state_up': True},
- jsonutils.loads(result))
-
- def test_net_create_with_yaml_formatter(self):
- result = self._create_net('yaml', ['name', 'admin_state_up'])
- self.assertDictEqual({'name': self.net_name,
- 'admin_state_up': True},
- yaml.safe_load(result))
-
- def test_net_create_with_value_formatter(self):
- # NOTE(amotoki): In 'value' formatter, there is no guarantee
- # in the order of attribute, so we use one attribute in this test.
- result = self._create_net('value', ['name'])
- self.assertEqual(self.net_name, result.strip())
-
- def test_net_create_with_shell_formatter(self):
- result = self._create_net('shell', ['name', 'admin_state_up'])
- result_lines = set(result.strip().split('\n'))
- self.assertSetEqual(set(['name="%s"' % self.net_name,
- 'admin_state_up="True"']),
- result_lines)
diff --git a/neutronclient/tests/functional/core/test_clientlib.py b/neutronclient/tests/functional/core/test_clientlib.py
deleted file mode 100644
index 66be8c68b..000000000
--- a/neutronclient/tests/functional/core/test_clientlib.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# 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.
-
-from keystoneauth1 import session
-from oslo_utils import uuidutils
-from tempest.lib import base
-import testtools
-
-from neutronclient.common import exceptions
-from neutronclient.tests.functional import base as func_base
-from neutronclient.v2_0 import client as v2_client
-
-
-class LibraryTestCase(base.BaseTestCase):
-
- def setUp(self):
- super(LibraryTestCase, self).setUp()
- self.client = self._get_client()
-
- def _get_client(self):
- cloud_config = func_base.get_cloud_config()
- keystone_auth = cloud_config.get_auth()
- (verify, cert) = cloud_config.get_requests_verify_args()
-
- ks_session = session.Session(
- auth=keystone_auth,
- verify=verify,
- cert=cert)
- return v2_client.Client(session=ks_session)
-
- def test_list_network(self):
- nets = self.client.list_networks()
- self.assertIsInstance(nets['networks'], list)
-
- def test_post_put_delete_network(self):
- name = uuidutils.generate_uuid()
- net = self.client.create_network({'network': {'name': name}})
- net_id = net['network']['id']
- self.assertEqual(name, net['network']['name'])
- name2 = uuidutils.generate_uuid()
- net = self.client.update_network(net_id, {'network': {'name': name2}})
- self.assertEqual(name2, net['network']['name'])
- self.client.delete_network(net_id)
- with testtools.ExpectedException(exceptions.NetworkNotFoundClient):
- self.client.show_network(net_id)
-
- def test_get_auth_ref(self):
- # Call some API call to ensure the client is authenticated.
- self.client.list_networks()
- auth_ref = self.client.httpclient.get_auth_ref()
- self.assertIsNotNone(auth_ref)
- self.assertIsNotNone(auth_ref.role_names)
diff --git a/neutronclient/tests/functional/core/test_common.py b/neutronclient/tests/functional/core/test_common.py
deleted file mode 100644
index 6bdadf96f..000000000
--- a/neutronclient/tests/functional/core/test_common.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 2016 NEC Corporation
-#
-# 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.
-
-from neutronclient.tests.functional import base
-
-
-class CLICommonFeatureTest(base.ClientTestBase):
-
- def test_tenant_id_shown_in_list_by_admin(self):
- nets = self.parser.table(self.neutron('net-list'))
- self.assertIn('tenant_id', nets['headers'])
-
- def test_tenant_id_not_shown_in_list_with_columns(self):
- nets = self.parser.table(self.neutron('net-list -c id -c name'))
- self.assertNotIn('tenant_id', nets['headers'])
- self.assertListEqual(['id', 'name'], nets['headers'])
-
- def test_tenant_id_not_shown_in_list_by_non_admin(self):
- output = self.neutron_non_admin('net-list')
- self.assertNotIn('tenant_id', self.parser.table(output)['headers'])
- self.assertTableStruct(self.parser.listing(output),
- ['id', 'name'])
diff --git a/neutronclient/tests/functional/core/test_purge.py b/neutronclient/tests/functional/core/test_purge.py
deleted file mode 100644
index 33b8af44c..000000000
--- a/neutronclient/tests/functional/core/test_purge.py
+++ /dev/null
@@ -1,174 +0,0 @@
-# Copyright 2016 Cisco Systems
-# All Rights Reserved
-#
-# 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.
-
-from neutronclient.tests.functional import base
-
-from tempest.lib import exceptions
-
-
-class PurgeNeutronClientCLITest(base.ClientTestBase):
-
- def _safe_cleanup(self, delete_command):
- try:
- self.neutron(delete_command)
- except exceptions.CommandFailed:
- # This resource was already purged successfully
- pass
-
- def _create_subnet(self, name, tenant_id, cidr):
- params = ('%(name)s --name %(name)s --tenant-id %(tenant)s '
- '%(cidr)s' % {'name': name,
- 'tenant': tenant_id,
- 'cidr': cidr})
- subnet = self.parser.listing(self.neutron('subnet-create',
- params=params))
- for row in subnet:
- if row['Field'] == 'id':
- return row['Value']
-
- def _create_router(self, name, tenant_id):
- params = ('%(name)s --tenant_id %(tenant)s' % {'name': name,
- 'tenant': tenant_id})
- router = self.parser.listing(self.neutron('router-create',
- params=params))
- for row in router:
- if row['Field'] == 'id':
- return row['Value']
-
- def _create_floatingip(self, network, tenant_id):
- params = ('%(network)s --tenant-id %(tenant)s' %
- {'network': network, 'tenant': tenant_id})
- floatingip = self.parser.listing(self.neutron('floatingip-create',
- params=params))
- for row in floatingip:
- if row['Field'] == 'id':
- return row['Value']
-
- def _create_resources(self, name, tenant_id, shared_tenant_id=None):
- # If no shared_tenant_id is provided, create the resources for the
- # current tenant to test that they will be deleted when not in use.
- if not shared_tenant_id:
- shared_tenant_id = tenant_id
-
- self.neutron('net-create',
- params=('%(name)s --router:external True '
- '--tenant-id %(tenant)s' % {'name': name,
- 'tenant': tenant_id}))
- self.addCleanup(self._safe_cleanup, 'net-delete %s' % name)
-
- self.neutron('net-create',
- params=('%(name)s-shared --shared '
- '--tenant-id %(tenant)s' %
- {'name': name, 'tenant': shared_tenant_id}))
- self.addCleanup(self._safe_cleanup,
- 'net-delete %s-shared' % name)
-
- subnet = self._create_subnet(name, tenant_id, '192.168.71.0/24')
- self.addCleanup(self._safe_cleanup, 'subnet-delete %s' % name)
-
- subnet = self._create_subnet('%s-shared' % name, tenant_id,
- '192.168.81.0/24')
- self.addCleanup(self._safe_cleanup, 'subnet-delete %s-shared' % name)
-
- router = self._create_router(name, tenant_id)
- self.addCleanup(self._safe_cleanup, 'router-delete %s' % name)
-
- self.neutron('router-interface-add',
- params=('%(router)s %(subnet)s '
- '--tenant-id %(tenant)s' % {'router': router,
- 'subnet': subnet,
- 'tenant': tenant_id}))
-
- self.neutron('port-create',
- params=('%(name)s --name %(name)s '
- '--tenant-id %(tenant)s' % {'name': name,
- 'tenant': tenant_id}))
- self.addCleanup(self._safe_cleanup, 'port-delete %s' % name)
-
- self.neutron('port-create',
- params=('%(name)s-shared --name %(name)s-shared '
- '--tenant-id %(tenant)s' % {'name': name,
- 'tenant': tenant_id}))
- self.addCleanup(self._safe_cleanup, 'port-delete %s-shared' % name)
-
- self.neutron('security-group-create',
- params=('%(name)s --tenant-id %(tenant)s' %
- {'name': name, 'tenant': tenant_id}))
- self.addCleanup(self._safe_cleanup, 'security-group-delete %s' % name)
-
- floatingip = self._create_floatingip(name, tenant_id)
- self.addCleanup(self._safe_cleanup, ('floatingip-delete '
- '%s' % floatingip))
- return floatingip
-
- def _verify_deletion(self, resources, resource_type):
- purged = True
- no_purge_purged = True
- router_interface_owners = ['network:router_interface',
- 'network:router_interface_distributed']
- for row in resources:
- if resource_type == 'port' and row.get('id', None):
- port = self.parser.listing(self.neutron('port-show',
- params=row['id']))
- port_dict = {}
- for row in port:
- port_dict[row['Field']] = row['Value']
- if port_dict['device_owner'] in router_interface_owners:
- if port_dict['tenant_id'] == 'purge-tenant':
- purged = False
- elif port_dict['tenant_id'] == 'no-purge-tenant':
- no_purge_purged = False
- if not purged or not no_purge_purged:
- self.addCleanup(self.neutron,
- ('router-interface-delete %(router)s '
- 'port=%(port)s' %
- {'router': port_dict['device_id'],
- 'port': port_dict['id']}))
- if (row.get('name') == 'purge-me' or
- row.get('id') == self.purge_floatingip):
- purged = False
- elif ('no-purge' in row.get('name', '') or
- row.get('id') == self.no_purge_floatingip):
- no_purge_purged = False
-
- if not purged:
- self.fail('%s not deleted by neutron purge' % resource_type)
-
- if no_purge_purged:
- self.fail('%s owned by another tenant incorrectly deleted '
- 'by neutron purge' % resource_type)
-
- def test_purge(self):
- self.purge_floatingip = self._create_resources('purge-me',
- 'purge-tenant')
- self.no_purge_floatingip = self._create_resources('no-purge',
- 'no-purge-tenant',
- 'purge-tenant')
-
- purge_output = self.neutron('purge', params='purge-tenant').strip()
- if not purge_output:
- self.fail('Purge command did not return feedback')
-
- networks = self.parser.listing(self.neutron('net-list'))
- subnets = self.parser.listing(self.neutron('subnet-list'))
- routers = self.parser.listing(self.neutron('router-list'))
- ports = self.parser.listing(self.neutron('port-list'))
- floatingips = self.parser.listing(self.neutron('floatingip-list'))
-
- self._verify_deletion(networks, 'network')
- self._verify_deletion(subnets, 'subnet')
- self._verify_deletion(ports, 'port')
- self._verify_deletion(routers, 'router')
- self._verify_deletion(floatingips, 'floatingip')
diff --git a/neutronclient/tests/functional/core/test_readonly_neutron.py b/neutronclient/tests/functional/core/test_readonly_neutron.py
deleted file mode 100644
index 4fe989711..000000000
--- a/neutronclient/tests/functional/core/test_readonly_neutron.py
+++ /dev/null
@@ -1,136 +0,0 @@
-# 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 re
-
-from tempest.lib import exceptions
-
-from neutronclient.tests.functional import base
-
-
-class SimpleReadOnlyNeutronClientTest(base.ClientTestBase):
-
- """This is a first pass at a simple read only python-neutronclient test.
-
- This only exercises client commands that are read only.
- This should test commands:
- * as a regular user
- * as a admin user
- * with and without optional parameters
- * initially just check return codes, and later test command outputs
- """
-
- def test_admin_fake_action(self):
- self.assertRaises(exceptions.CommandFailed,
- self.neutron,
- 'this-does-neutron-exist')
-
- # NOTE(mestery): Commands in order listed in 'neutron help'
-
- # Optional arguments:
-
- def test_neutron_fake_action(self):
- self.assertRaises(exceptions.CommandFailed,
- self.neutron,
- 'this-does-not-exist')
-
- def test_neutron_net_list(self):
- net_list = self.parser.listing(self.neutron('net-list'))
- self.assertTableStruct(net_list, ['id', 'name', 'subnets'])
-
- def test_neutron_ext_list(self):
- ext = self.parser.listing(self.neutron('ext-list'))
- self.assertTableStruct(ext, ['alias', 'name'])
-
- def test_neutron_dhcp_agent_list_hosting_net(self):
- self.neutron('dhcp-agent-list-hosting-net',
- params='private')
-
- def test_neutron_agent_list(self):
- agents = self.parser.listing(self.neutron('agent-list'))
- field_names = ['id', 'agent_type', 'host', 'alive', 'admin_state_up']
- self.assertTableStruct(agents, field_names)
-
- def test_neutron_floatingip_list(self):
- self.neutron('floatingip-list')
-
- def test_neutron_meter_label_list(self):
- if not self.is_extension_enabled('metering'):
- self.skipTest('metering is not enabled')
- self.neutron('meter-label-list')
-
- def test_neutron_meter_label_rule_list(self):
- if not self.is_extension_enabled('metering'):
- self.skipTest('metering is not enabled')
- self.neutron('meter-label-rule-list')
-
- def test_neutron_net_external_list(self):
- net_ext_list = self.parser.listing(self.neutron('net-external-list'))
- self.assertTableStruct(net_ext_list, ['id', 'name', 'subnets'])
-
- def test_neutron_port_list(self):
- port_list = self.parser.listing(self.neutron('port-list'))
- self.assertTableStruct(port_list, ['id', 'name', 'mac_address',
- 'fixed_ips'])
-
- def test_neutron_quota_list(self):
- self.neutron('quota-list')
-
- def test_neutron_router_list(self):
- router_list = self.parser.listing(self.neutron('router-list'))
- self.assertTableStruct(router_list, ['id', 'name',
- 'external_gateway_info'])
-
- def test_neutron_security_group_list(self):
- security_grp = self.parser.listing(self.neutron('security-group-list'))
- self.assertTableStruct(security_grp, ['id', 'name',
- 'security_group_rules'])
-
- def test_neutron_security_group_rule_list(self):
- security_grp = self.parser.listing(self.neutron
- ('security-group-rule-list'))
- self.assertTableStruct(security_grp, ['id', 'security_group',
- 'direction', 'ethertype',
- 'port/protocol', 'remote'])
-
- def test_neutron_subnet_list(self):
- subnet_list = self.parser.listing(self.neutron('subnet-list'))
- self.assertTableStruct(subnet_list, ['id', 'name', 'cidr',
- 'allocation_pools'])
-
- def test_neutron_help(self):
- help_text = self.neutron('help')
- lines = help_text.split('\n')
- self.assertFirstLineStartsWith(lines, 'usage: neutron')
-
- commands = []
- cmds_start = lines.index('Commands for API v2.0:')
- command_pattern = re.compile(r'^ {2}([a-z0-9\-\_]+)')
- for line in lines[cmds_start:]:
- match = command_pattern.match(line)
- if match:
- commands.append(match.group(1))
- commands = set(commands)
- wanted_commands = set(('net-create', 'subnet-list', 'port-delete',
- 'router-show', 'agent-update', 'help'))
- self.assertFalse(wanted_commands - commands)
-
- # Optional arguments:
-
- def test_neutron_version(self):
- self.neutron('', flags='--version')
-
- def test_neutron_debug_net_list(self):
- self.neutron('net-list', flags='--debug')
-
- def test_neutron_quiet_net_list(self):
- self.neutron('net-list', flags='--quiet')
diff --git a/neutronclient/tests/functional/core/test_subnet_create.py b/neutronclient/tests/functional/core/test_subnet_create.py
deleted file mode 100644
index ed7f390b8..000000000
--- a/neutronclient/tests/functional/core/test_subnet_create.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2015 Hewlett-Packard Development Company, L.P
-#
-# 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.
-
-from neutronclient.tests.functional import base
-
-
-class SubnetCreateNeutronClientCLITest(base.ClientTestBase):
-
- def test_create_subnet_net_name_first(self):
- self.neutron('net-create', params='netwrk-1')
- self.addCleanup(self.neutron, 'net-delete netwrk-1')
- self.neutron('subnet-create netwrk-1',
- params='--name fake --gateway 192.168.51.1 '
- '192.168.51.0/24')
- self.addCleanup(self.neutron, 'subnet-delete fake')
- subnet_list = self.parser.listing(self.neutron('subnet-list'))
- self.assertTableStruct(subnet_list, ['id', 'name', 'cidr',
- 'allocation_pools'])
- found = False
- for row in subnet_list:
- if row.get('name') == 'fake':
- found = True
- break
- if not found:
- self.fail('Created subnet not found in list')
diff --git a/neutronclient/tests/functional/hooks/fwaas b/neutronclient/tests/functional/hooks/fwaas
deleted file mode 100644
index d9fc704ef..000000000
--- a/neutronclient/tests/functional/hooks/fwaas
+++ /dev/null
@@ -1,2 +0,0 @@
-enable_plugin neutron-fwaas https://opendev.org/openstack/neutron-fwaas
-enable_service q-fwaas
diff --git a/neutronclient/tests/functional/hooks/gate_hook.sh b/neutronclient/tests/functional/hooks/gate_hook.sh
deleted file mode 100755
index c1721d88d..000000000
--- a/neutronclient/tests/functional/hooks/gate_hook.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env bash
-
-set -ex
-
-VENV=${1:-"functional"}
-
-GATE_DEST=$BASE/new
-NEUTRONCLIENT_PATH=$GATE_DEST/python-neutronclient
-GATE_HOOKS=$NEUTRONCLIENT_PATH/neutronclient/tests/functional/hooks
-DEVSTACK_PATH=$GATE_DEST/devstack
-LOCAL_CONF=$DEVSTACK_PATH/late-local.conf
-DSCONF=/tmp/devstack-tools/bin/dsconf
-
-# Install devstack-tools used to produce local.conf; we can't rely on
-# test-requirements.txt because the gate hook is triggered before neutronclient
-# is installed
-sudo -H pip install virtualenv
-virtualenv /tmp/devstack-tools
-/tmp/devstack-tools/bin/pip install -U devstack-tools==0.4.0
-
-# Inject config from hook into localrc
-function load_rc_hook {
- local hook="$1"
- local tmpfile
- local config
- tmpfile=$(tempfile)
- config=$(cat $GATE_HOOKS/$hook)
- echo "[[local|localrc]]" > $tmpfile
- $DSCONF setlc_raw $tmpfile "$config"
- $DSCONF merge_lc $LOCAL_CONF $tmpfile
- rm -f $tmpfile
-}
-
-
-if [ "$VENV" == "functional-adv-svcs" ]
-then
- load_rc_hook fwaas
- load_rc_hook vpnaas
-fi
-
-export DEVSTACK_LOCALCONF=$(cat $LOCAL_CONF)
-$BASE/new/devstack-gate/devstack-vm-gate.sh
diff --git a/neutronclient/tests/functional/hooks/post_test_hook.sh b/neutronclient/tests/functional/hooks/post_test_hook.sh
deleted file mode 100755
index d62d13911..000000000
--- a/neutronclient/tests/functional/hooks/post_test_hook.sh
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/bin/bash -xe
-
-# 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.
-
-# This script is executed inside post_test_hook function in devstack gate.
-
-SCRIPTS_DIR="/usr/os-testr-env/bin/"
-
-function generate_test_logs {
- local path="$1"
- # Compress all $path/*.txt files and move the directories holding those
- # files to /opt/stack/logs. Files with .log suffix have their
- # suffix changed to .txt (so browsers will know to open the compressed
- # files and not download them).
- if [ -d "$path" ]
- then
- sudo find $path -iname "*.log" -type f -exec mv {} {}.txt \; -exec gzip -9 {}.txt \;
- sudo mv $path/* /opt/stack/logs/
- fi
-}
-
-function generate_testr_results {
- # Give job user rights to access tox logs
- sudo -H -u $USER chmod o+rw .
- sudo -H -u $USER chmod o+rw -R .stestr
- if [ -f ".stestr/0" ] ; then
- .tox/$VENV/bin/subunit-1to2 < .stestr/0 > ./stestr.subunit
- $SCRIPTS_DIR/subunit2html ./stestr.subunit testr_results.html
- gzip -9 ./stestr.subunit
- gzip -9 ./testr_results.html
- sudo mv ./*.gz /opt/stack/logs/
- fi
-
- if [ "$venv" == "functional" ] || [ "$venv" == "functional-adv-svcs" ]
- then
- generate_test_logs "/tmp/${venv}-logs"
- fi
-}
-
-export NEUTRONCLIENT_DIR="$BASE/new/python-neutronclient"
-
-sudo chown -R $USER:stack $NEUTRONCLIENT_DIR
-
-# Go to the neutronclient dir
-cd $NEUTRONCLIENT_DIR
-
-# Run tests
-VENV=${1:-"functional"}
-echo "Running neutronclient functional test suite"
-set +e
-# Preserve env for OS_ credentials
-sudo -E -H -u $USER tox -e $VENV
-EXIT_CODE=$?
-set -e
-
-# Collect and parse result
-generate_testr_results
-exit $EXIT_CODE
diff --git a/neutronclient/tests/functional/hooks/vpnaas b/neutronclient/tests/functional/hooks/vpnaas
deleted file mode 100644
index 8b94b37b0..000000000
--- a/neutronclient/tests/functional/hooks/vpnaas
+++ /dev/null
@@ -1 +0,0 @@
-enable_plugin neutron-vpnaas https://opendev.org/openstack/neutron-vpnaas
diff --git a/neutronclient/tests/unit/bgp/__init__.py b/neutronclient/tests/unit/bgp/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/neutronclient/tests/unit/bgp/test_cli20_dragentscheduler.py b/neutronclient/tests/unit/bgp/test_cli20_dragentscheduler.py
deleted file mode 100644
index cbe85d92f..000000000
--- a/neutronclient/tests/unit/bgp/test_cli20_dragentscheduler.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright 2016 Huawei Technologies India Pvt. Ltd.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.bgp import dragentscheduler as bgp_drsched
-from neutronclient.tests.unit import test_cli20
-from neutronclient.tests.unit import test_cli20_agentschedulers as test_as
-
-
-BGP_DRAGENT_ID = 'bgp_dragent_id1'
-BGP_SPEAKER = 'bgp_speaker_id1'
-
-
-class CLITestV20DRAgentScheduler(test_as.CLITestV20AgentScheduler):
-
- def test_add_bgp_speaker_to_dragent(self):
- resource = 'agent'
- cmd = bgp_drsched.AddBGPSpeakerToDRAgent(
- test_cli20.MyApp(sys.stdout), None)
- args = (BGP_DRAGENT_ID, BGP_SPEAKER)
- body = {'bgp_speaker_id': BGP_SPEAKER}
- result = {'bgp_speaker_id': 'bgp_speaker_id', }
- self._test_add_to_agent(resource, cmd, args,
- self.client.BGP_DRINSTANCES,
- body, result)
-
- def test_remove_bgp_speaker_from_dragent(self):
- resource = 'agent'
- cmd = bgp_drsched.RemoveBGPSpeakerFromDRAgent(
- test_cli20.MyApp(sys.stdout), None)
- args = (BGP_DRAGENT_ID, BGP_SPEAKER)
- self._test_remove_from_agent(resource, cmd, args,
- self.client.BGP_DRINSTANCES)
-
- def test_list_bgp_speakers_on_dragent(self):
- resources = 'bgp_speakers'
- cmd = bgp_drsched.ListBGPSpeakersOnDRAgent(
- test_cli20.MyApp(sys.stdout), None)
- path = ((self.client.agent_path + self.client.BGP_DRINSTANCES) %
- BGP_DRAGENT_ID)
- self._test_list_resources(resources, cmd, base_args=[BGP_DRAGENT_ID],
- path=path)
-
- def test_list_dragents_hosting_bgp_speaker(self):
- resources = 'agent'
- cmd = bgp_drsched.ListDRAgentsHostingBGPSpeaker(
- test_cli20.MyApp(sys.stdout), None)
- path = ((self.client.bgp_speaker_path + self.client.BGP_DRAGENTS) %
- BGP_DRAGENT_ID)
- contents = {self.id_field: 'myid1', 'alive': True}
- self._test_list_resources(resources, cmd, base_args=[BGP_DRAGENT_ID],
- path=path, response_contents=contents)
diff --git a/neutronclient/tests/unit/bgp/test_cli20_peer.py b/neutronclient/tests/unit/bgp/test_cli20_peer.py
deleted file mode 100644
index 998b0d5e3..000000000
--- a/neutronclient/tests/unit/bgp/test_cli20_peer.py
+++ /dev/null
@@ -1,224 +0,0 @@
-# Copyright 2016 Huawei Technologies India Pvt. Ltd.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0.bgp import peer as bgp_peer
-from neutronclient.neutron.v2_0.bgp import speaker as bgp_speaker
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20BGPPeerJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['bgp_peer']
-
- def test_create_bgp_peer_with_mandatory_params(self):
- # Create BGP peer with mandatory params.
- resource = 'bgp_peer'
- cmd = bgp_peer.CreatePeer(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- my_id = 'my-id'
- peerip = '1.1.1.1'
- remote_asnum = '1'
- args = [name,
- '--peer-ip', peerip,
- '--remote-as', remote_asnum, ]
- position_names = ['name', 'peer_ip', 'remote_as',
- 'auth_type']
- position_values = [name, peerip, remote_asnum, 'none']
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_create_bgp_peer_with_all_params(self):
- # Create BGP peer with all params.
- resource = 'bgp_peer'
- cmd = bgp_peer.CreatePeer(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- my_id = 'my-id'
- peerip = '1.1.1.1'
- remote_asnum = '65535'
- authType = 'md5'
- password = 'abc'
- args = [name,
- '--peer-ip', peerip,
- '--remote-as', remote_asnum,
- '--auth-type', authType,
- '--password', password]
- position_names = ['name', 'peer_ip', 'remote_as',
- 'auth_type', 'password']
- position_values = [name, peerip, remote_asnum, authType, password]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_create_bgp_peer_with_invalid_min_remote_asnum(self):
- # Create BGP peer with invalid minimum remote-asnum.
- resource = 'bgp_peer'
- cmd = bgp_peer.CreatePeer(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- my_id = 'my-id'
- peerip = '1.1.1.1'
- remote_asnum = '0'
- args = [name,
- '--peer-ip', peerip,
- '--remote-as', remote_asnum, ]
- position_names = ['name', 'peer_ip', 'remote_as', ]
- position_values = [name, peerip, remote_asnum, ]
- exc = self.assertRaises(exceptions.CommandError,
- self._test_create_resource,
- resource, cmd, name, my_id, args,
- position_names, position_values)
- self.assertEqual('remote-as "0" should be an integer [%s:%s].' %
- (bgp_speaker.MIN_AS_NUM, bgp_speaker.MAX_AS_NUM),
- str(exc))
-
- def test_create_bgp_peer_with_invalid_max_remote_asnum(self):
- # Create BGP peer with invalid maximum remote-asnum.
- resource = 'bgp_peer'
- cmd = bgp_peer.CreatePeer(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- my_id = 'my-id'
- peerip = '1.1.1.1'
- remote_asnum = '4294967296'
- args = [name,
- '--peer-ip', peerip,
- '--remote-as', remote_asnum, ]
- position_names = ['name', 'peer_ip', 'remote_as',
- 'auth_type', 'password']
- position_values = [name, peerip, remote_asnum, 'none', '']
- exc = self.assertRaises(exceptions.CommandError,
- self._test_create_resource,
- resource, cmd, name, my_id, args,
- position_names, position_values)
- self.assertEqual('remote-as "4294967296" should be an '
- 'integer [%s:%s].' %
- (bgp_speaker.MIN_AS_NUM, bgp_speaker.MAX_AS_NUM),
- str(exc))
-
- def test_create_authenticated_bgp_peer_without_authtype(self):
- # Create authenticated BGP peer without auth-type.
- resource = 'bgp_peer'
- cmd = bgp_peer.CreatePeer(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- my_id = 'my-id'
- peerip = '1.1.1.1'
- remote_asnum = '2048'
- password = 'abc'
- args = [name,
- '--peer-ip', peerip,
- '--remote-as', remote_asnum,
- '--password', password]
- position_names = ['name', 'peer_ip', 'remote_as', 'password']
- position_values = [name, peerip, remote_asnum, password]
- exc = self.assertRaises(exceptions.CommandError,
- self._test_create_resource,
- resource, cmd, name, my_id, args,
- position_names, position_values)
- self.assertEqual('Must provide auth-type if password is specified.',
- str(exc))
-
- def test_create_authenticated_bgp_peer_without_password(self):
- # Create authenticated BGP peer without password.
- resource = 'bgp_peer'
- cmd = bgp_peer.CreatePeer(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- my_id = 'my-id'
- peerip = '1.1.1.1'
- remote_asnum = '2048'
- authType = 'md5'
- args = [name,
- '--peer-ip', peerip,
- '--remote-as', remote_asnum,
- '--auth-type', authType]
- position_names = ['name', 'peer_ip', 'remote_as', 'auth_type']
- position_values = [name, peerip, remote_asnum, authType]
- exc = self.assertRaises(exceptions.CommandError,
- self._test_create_resource,
- resource, cmd, name, my_id, args,
- position_names, position_values)
- self.assertEqual('Must provide password if auth-type is specified.',
- str(exc))
-
- def test_update_bgp_peer(self):
- # Update BGP peer:
- # myid --advertise-tenant-networks True
- # --advertise-floating-ip-host-routes False
- resource = 'bgp_peer'
- cmd = bgp_peer.UpdatePeer(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'new-name',
- '--password', 'abc'],
- {'name': 'new-name', 'password': 'abc'})
-
- def test_update_bgp_peer_exception(self):
- # Update BGP peer: myid.
- resource = 'bgp_peer'
- cmd = bgp_peer.UpdatePeer(test_cli20.MyApp(sys.stdout),
- None)
- self.assertRaises(exceptions.CommandError,
- self._test_update_resource,
- resource, cmd, 'myid', ['myid'], {})
-
- def test_list_bgp_peer(self):
- # List all BGP peers.
- resources = "bgp_peers"
- cmd = bgp_peer.ListPeers(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, True)
-
- # TODO(Vikram): Add test_list_bgp_peer_pagination
-
- def test_list_bgp_peer_sort(self):
- # sorted list: bgp-peer-list --sort-key name --sort-key id
- # --sort-key asc --sort-key desc
- resources = "bgp_peers"
- cmd = bgp_peer.ListPeers(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_bgp_peer_limit(self):
- # size (1000) limited list: bgp-peer-list -P.
- resources = "bgp_peers"
- cmd = bgp_peer.ListPeers(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_bgp_peer(self):
- # Show BGP peer: --fields id --fields name myid.
- resource = 'bgp_peer'
- cmd = bgp_peer.ShowPeer(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args,
- ['id', 'name'])
-
- def test_delete_bgp_peer(self):
- # Delete BGP peer: bgp_peer_id.
- resource = 'bgp_peer'
- cmd = bgp_peer.DeletePeer(test_cli20.MyApp(sys.stdout),
- None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
diff --git a/neutronclient/tests/unit/bgp/test_cli20_speaker.py b/neutronclient/tests/unit/bgp/test_cli20_speaker.py
deleted file mode 100644
index 5621576d9..000000000
--- a/neutronclient/tests/unit/bgp/test_cli20_speaker.py
+++ /dev/null
@@ -1,273 +0,0 @@
-# Copyright 2016 Huawei Technologies India Pvt. Ltd.
-# All Rights Reserved
-#
-# 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 sys
-from unittest import mock
-
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0.bgp import speaker as bgp_speaker
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20BGPSpeakerJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['bgp_speaker']
-
- def test_create_bgp_speaker_with_minimal_options(self):
- # Create BGP Speaker with mandatory params.
- resource = 'bgp_speaker'
- cmd = bgp_speaker.CreateSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- my_id = 'my-id'
- local_asnum = '1'
- args = [name, '--local-as', local_asnum, ]
- position_names = ['name', 'local_as', 'ip_version']
- position_values = [name, local_asnum, 4]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_create_ipv4_bgp_speaker_with_all_params(self):
- # Create BGP Speaker with all params.
- resource = 'bgp_speaker'
- cmd = bgp_speaker.CreateSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- my_id = 'my-id'
- local_asnum = '1'
- args = [name,
- '--local-as', local_asnum,
- '--ip-version', '4',
- '--advertise-floating-ip-host-routes', 'True',
- '--advertise-tenant-networks', 'True']
- position_names = ['name', 'local_as', 'ip_version',
- 'advertise_floating_ip_host_routes',
- 'advertise_tenant_networks']
- position_values = [name, local_asnum, 4, 'True', 'True']
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_create_ipv6_bgp_speaker_with_all_params(self):
- # Create BGP Speaker with all params.
- resource = 'bgp_speaker'
- cmd = bgp_speaker.CreateSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- my_id = 'my-id'
- local_asnum = '65535'
- args = [name,
- '--local-as', local_asnum,
- '--ip-version', '6',
- '--advertise-floating-ip-host-routes', 'True',
- '--advertise-tenant-networks', 'True']
- position_names = ['name', 'local_as', 'ip_version',
- 'advertise_floating_ip_host_routes',
- 'advertise_tenant_networks']
- position_values = [name, local_asnum, 6, 'True', 'True']
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_create_bgp_speaker_with_invalid_min_local_asnum(self):
- # Create BGP Speaker with invalid minimum local-asnum.
- resource = 'bgp_speaker'
- cmd = bgp_speaker.CreateSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- my_id = 'my-id'
- local_asnum = '0'
- args = [name,
- '--local-as', local_asnum]
- position_names = ['name', 'local_as']
- position_values = [name, local_asnum]
- exc = self.assertRaises(exceptions.CommandError,
- self._test_create_resource,
- resource, cmd, name, my_id, args,
- position_names, position_values)
- self.assertEqual('local-as "0" should be an integer [%s:%s].' %
- (bgp_speaker.MIN_AS_NUM, bgp_speaker.MAX_AS_NUM),
- str(exc))
-
- def test_create_bgp_speaker_with_invalid_max_local_asnum(self):
- # Create BGP Speaker with invalid maximum local-asnum.
- resource = 'bgp_speaker'
- cmd = bgp_speaker.CreateSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- my_id = 'my-id'
- local_asnum = '4294967296'
- args = [name,
- '--local-as', local_asnum]
- position_names = ['name', 'local_as', ]
- position_values = [name, local_asnum, ]
- exc = self.assertRaises(exceptions.CommandError,
- self._test_create_resource,
- resource, cmd, name, my_id, args,
- position_names, position_values)
- self.assertEqual('local-as "4294967296" should be an '
- 'integer [%s:%s].' %
- (bgp_speaker.MIN_AS_NUM, bgp_speaker.MAX_AS_NUM),
- str(exc))
-
- def test_update_bgp_speaker(self):
- # Update BGP Speaker:
- # myid --advertise-tenant-networks True
- # --advertise-floating-ip-host-routes False
- resource = 'bgp_speaker'
- cmd = bgp_speaker.UpdateSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid',
- '--name', 'new-name',
- '--advertise-tenant-networks', 'True',
- '--advertise-floating-ip-host-routes',
- 'False'],
- {'name': 'new-name',
- 'advertise_tenant_networks': 'True',
- 'advertise_floating_ip_host_routes':
- 'False'})
-
- def test_update_bgp_speaker_exception(self):
- # Update BGP Speaker: myid.
- resource = 'bgp_speaker'
- cmd = bgp_speaker.UpdateSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- self.assertRaises(exceptions.CommandError,
- self._test_update_resource,
- resource, cmd, 'myid', ['myid'], {})
-
- def test_list_bgp_speaker(self):
- # List all BGP Speakers.
- resources = "bgp_speakers"
- cmd = bgp_speaker.ListSpeakers(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, True)
-
- @mock.patch.object(bgp_speaker.ListSpeakers, "extend_list")
- def test_list_bgp_speaker_pagination(self, mock_extend_list):
- # List all BGP Speakers with pagination support.
- cmd = bgp_speaker.ListSpeakers(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources_with_pagination("bgp_speakers",
- cmd)
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
-
- def test_list_bgp_speaker_sort(self):
- # sorted list: bgp-speaker-list --sort-key name --sort-key id
- # --sort-key asc --sort-key desc
- resources = "bgp_speakers"
- cmd = bgp_speaker.ListSpeakers(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_bgp_speaker_limit(self):
- # size (1000) limited list: bgp-speaker-list -P.
- resources = "bgp_speakers"
- cmd = bgp_speaker.ListSpeakers(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_bgp_speaker(self):
- # Show BGP Speaker: --fields id --fields name myid.
- resource = 'bgp_speaker'
- cmd = bgp_speaker.ShowSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args,
- ['id', 'name'])
-
- def test_delete_bgp_speaker(self):
- # Delete BGP Speaker: bgp_speaker_id.
- resource = 'bgp_speaker'
- cmd = bgp_speaker.DeleteSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
-
- def _test_add_remove_peer(self, action, cmd, args):
- """Add or Remove BGP Peer to/from a BGP Speaker."""
- resource = 'bgp_speaker'
- subcmd = '%s_bgp_peer' % action
- body = {'bgp_peer_id': 'peerid'}
- if action == 'add':
- retval = {'bgp_peer': 'peerid'}
- retval = self.client.serialize(retval)
- expected_code = 200
- else:
- retval = None
- expected_code = 204
- self._test_update_resource_action(resource, cmd, 'myid',
- subcmd, args, body, expected_code,
- retval)
-
- def test_add_peer_to_bgp_speaker(self):
- # Add peer to BGP speaker: myid peer_id=peerid
- cmd = bgp_speaker.AddPeerToSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- args = ['myid', 'peerid']
- self._test_add_remove_peer('add', cmd, args)
-
- def test_remove_peer_from_bgp_speaker(self):
- # Remove peer from BGP speaker: myid peer_id=peerid
- cmd = bgp_speaker.RemovePeerFromSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- args = ['myid', 'peerid']
- self._test_add_remove_peer('remove', cmd, args)
-
- def _test_add_remove_network(self, action, cmd, args):
- # Add or Remove network to/from a BGP Speaker.
- resource = 'bgp_speaker'
- subcmd = '%s_gateway_network' % action
- body = {'network_id': 'netid'}
- if action == 'add':
- retval = {'network': 'netid'}
- retval = self.client.serialize(retval)
- expected_code = 200
- else:
- retval = None
- expected_code = 204
- self._test_update_resource_action(resource, cmd, 'myid',
- subcmd, args, body, expected_code,
- retval)
-
- def test_add_network_to_bgp_speaker(self):
- # Add peer to BGP speaker: myid network_id=netid
- cmd = bgp_speaker.AddNetworkToSpeaker(test_cli20.MyApp(sys.stdout),
- None)
- args = ['myid', 'netid']
- self._test_add_remove_network('add', cmd, args)
-
- def test_remove_network_from_bgp_speaker(self):
- # Remove network from BGP speaker: myid network_id=netid
- cmd = bgp_speaker.RemoveNetworkFromSpeaker(
- test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'netid']
- self._test_add_remove_network('remove', cmd, args)
-
- def test_list_routes_advertised_by_a_bgp_speaker(self):
- # Retrieve advertised route list
- resources = 'advertised_routes'
- cmd = bgp_speaker.ListRoutesAdvertisedBySpeaker(
- test_cli20.MyApp(sys.stdout), None)
- bs_id = 'bgp_speaker_id1'
- path = ((self.client.bgp_speaker_path + '/get_advertised_routes') %
- bs_id)
- self._test_list_resources(resources, cmd, base_args=[bs_id],
- path=path)
diff --git a/neutronclient/tests/unit/flavor/__init__.py b/neutronclient/tests/unit/flavor/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/neutronclient/tests/unit/flavor/test_cli20_flavor.py b/neutronclient/tests/unit/flavor/test_cli20_flavor.py
deleted file mode 100644
index 22bd8bb9b..000000000
--- a/neutronclient/tests/unit/flavor/test_cli20_flavor.py
+++ /dev/null
@@ -1,154 +0,0 @@
-# Copyright 2015 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.flavor import flavor
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20FlavorJSON(test_cli20.CLITestV20Base):
-
- def setUp(self):
- """Prepare test environment."""
- super(CLITestV20FlavorJSON, self).setUp(plurals={'flavors': 'flavor'})
- self.register_non_admin_status_resource('flavor')
- self.register_non_admin_status_resource('service_profile')
-
- def test_create_flavor_with_missing_params(self):
- """Create test flavor with missing parameters."""
- resource = 'flavor'
- cmd = flavor.CreateFlavor(
- test_cli20.MyApp(sys.stdout), None)
- name = 'Test flavor'
- myid = 'myid'
- position_names = []
- position_values = []
- args = []
- self.assertRaises(
- SystemExit, self._test_create_resource,
- resource, cmd, name, myid, args, position_names, position_values)
-
- def test_create_flavor_with_mandatory_params(self):
- """Create test flavor with minimal parameters."""
- resource = 'flavor'
- cmd = flavor.CreateFlavor(
- test_cli20.MyApp(sys.stdout), None)
- name = 'Test flavor'
- myid = 'myid'
- service_type = 'DUMMY'
- # Defaults are returned in body
- position_names = ['name', 'service_type']
- position_values = [name, service_type]
- args = [name, service_type]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_flavor_with_optional_params(self):
- """Create test flavor including optional parameters."""
- resource = 'flavor'
- cmd = flavor.CreateFlavor(
- test_cli20.MyApp(sys.stdout), None)
- name = 'Test flavor'
- myid = 'myid'
- service_type = 'DUMMY'
- description = 'Test description'
- position_names = ['name', 'service_type', 'description', 'enabled']
- position_values = [name, service_type, description, 'False']
- args = [name, service_type,
- '--description', description,
- '--enabled=False']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_delete_flavor(self):
- """Delete flavor."""
- resource = 'flavor'
- cmd = flavor.DeleteFlavor(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
-
- def test_list_flavors(self):
- """List flavors test."""
- resources = 'flavors'
- cmd = flavor.ListFlavor(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_flavors_with_pagination(self):
- """List flavors test with pagination."""
- resources = 'flavors'
- cmd = flavor.ListFlavor(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_flavors_with_sort(self):
- """List flavors test with sorting by name and id."""
- resources = 'flavors'
- cmd = flavor.ListFlavor(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_show_flavor(self):
- """Show flavor test."""
- resource = 'flavor'
- cmd = flavor.ShowFlavor(
- test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_update_flavor_with_name(self):
- """Update flavor test."""
- resource = 'flavor'
- cmd = flavor.UpdateFlavor(
- test_cli20.MyApp(sys.stdout), None)
- newname = 'Test New Name'
- newdescription = 'New Description'
- args = ['--name', newname,
- '--description', newdescription,
- '--enabled', 'False', self.test_id]
- self._test_update_resource(resource, cmd, self.test_id, args,
- {'name': newname,
- 'description': newdescription,
- 'enabled': 'False'})
-
- def test_associate_flavor(self):
- """Associate flavor test."""
- resource = 'service_profile'
- cmd = flavor.AssociateFlavor(test_cli20.MyApp(sys.stdout), None)
- flavor_id = 'flavor-id'
- profile_id = 'profile-id'
- name = ''
- args = [flavor_id, profile_id]
- position_names = ['id']
- position_values = [profile_id]
- self._test_create_resource(resource, cmd, name, profile_id, args,
- position_names, position_values,
- cmd_resource='flavor_profile_binding',
- parent_id=flavor_id)
-
- def test_disassociate_flavor(self):
- """Disassociate flavor test."""
- resource = 'flavor_profile_binding'
- cmd = flavor.DisassociateFlavor(test_cli20.MyApp(sys.stdout), None)
- flavor_id = 'flavor-id'
- profile_id = 'profile-id'
- args = [flavor_id, profile_id]
- self._test_delete_resource(resource, cmd, profile_id, args,
- parent_id=flavor_id)
diff --git a/neutronclient/tests/unit/flavor/test_cli20_flavor_profile.py b/neutronclient/tests/unit/flavor/test_cli20_flavor_profile.py
deleted file mode 100644
index d13090297..000000000
--- a/neutronclient/tests/unit/flavor/test_cli20_flavor_profile.py
+++ /dev/null
@@ -1,122 +0,0 @@
-# Copyright 2015 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.flavor import flavor_profile
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20FlavorProfileJSON(test_cli20.CLITestV20Base):
-
- def setUp(self):
- """Prepare test environment."""
- super(CLITestV20FlavorProfileJSON, self).setUp(
- plurals={'service_profiles': 'service_profile'})
- self.register_non_admin_status_resource('service_profile')
-
- def test_create_flavor_profile_with_mandatory_params(self):
- """Create test flavor profile test."""
- resource = 'service_profile'
- cmd = flavor_profile.CreateFlavorProfile(
- test_cli20.MyApp(sys.stdout), None)
- name = ''
- description = 'Test flavor profile'
- myid = 'myid'
- metainfo = "{'a':'b'}"
- # Defaults are returned in body
- position_names = ['description', 'metainfo']
- position_values = [description, metainfo]
- args = ['--description', description, '--metainfo', metainfo]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_flavor_profile_with_optional_params(self):
- """Create test flavor profile disabled test."""
- resource = 'service_profile'
- cmd = flavor_profile.CreateFlavorProfile(
- test_cli20.MyApp(sys.stdout), None)
- name = ''
- description = 'Test flavor profile - disabled'
- myid = 'myid'
- driver = 'mydriver'
- metainfo = "{'a':'b'}"
- position_names = ['description', 'driver', 'metainfo', 'enabled']
- position_values = [description, driver, metainfo, 'False']
- args = ['--description', description, '--driver', driver,
- '--metainfo', metainfo, '--enabled=False']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_list_flavor_profiles(self):
- """List flavor profiles test."""
- resources = 'service_profiles'
- cmd = flavor_profile.ListFlavorProfile(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_flavor_profiles_with_pagination(self):
- """List flavor profiles test with pagination."""
- resources = 'service_profiles'
- cmd = flavor_profile.ListFlavorProfile(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_flavor_profiles_with_sort(self):
- """List flavor profiles test with sort by description."""
- resources = 'service_profiles'
- cmd = flavor_profile.ListFlavorProfile(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["description"],
- sort_dir=["asc"])
-
- def test_show_flavor_profile(self):
- """Show flavor profile test."""
- resource = 'service_profile'
- cmd = flavor_profile.ShowFlavorProfile(
- test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_update_flavor_profile(self):
- """Update flavor profile test."""
- resource = 'service_profile'
- cmd = flavor_profile.UpdateFlavorProfile(
- test_cli20.MyApp(sys.stdout), None)
- newdescription = 'Test new description'
- newdriver = 'NewDriver'
- newmetainfo = "{'c':'d'}"
- newenabled = "False"
- args = ['--description', newdescription,
- '--driver', newdriver,
- '--metainfo', newmetainfo,
- '--enabled', newenabled,
- self.test_id]
- self._test_update_resource(resource, cmd, self.test_id, args,
- {'description': newdescription,
- 'driver': newdriver,
- 'metainfo': newmetainfo,
- 'enabled': newenabled})
-
- def test_delete_flavor_profile(self):
- """Delete flavor profile."""
- resource = 'service_profile'
- cmd = flavor_profile.DeleteFlavorProfile(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
diff --git a/neutronclient/tests/unit/fw/__init__.py b/neutronclient/tests/unit/fw/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/neutronclient/tests/unit/fw/test_cli20_firewall.py b/neutronclient/tests/unit/fw/test_cli20_firewall.py
deleted file mode 100644
index f9a2deebf..000000000
--- a/neutronclient/tests/unit/fw/test_cli20_firewall.py
+++ /dev/null
@@ -1,170 +0,0 @@
-# Copyright 2013 Big Switch Networks Inc.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.fw import firewall
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20FirewallJSON(test_cli20.CLITestV20Base):
-
- def test_create_firewall_with_mandatory_params(self):
- # firewall-create with mandatory (none) params.
- resource = 'firewall'
- cmd = firewall.CreateFirewall(test_cli20.MyApp(sys.stdout), None)
- name = ''
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- policy_id = 'my-policy-id'
- args = ['--tenant-id', tenant_id, policy_id, ]
- position_names = ['firewall_policy_id', ]
- position_values = [policy_id, ]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- admin_state_up=True, tenant_id=tenant_id)
-
- def test_create_firewall_with_all_params(self):
- # firewall-create with all params set.
- resource = 'firewall'
- cmd = firewall.CreateFirewall(test_cli20.MyApp(sys.stdout), None)
- name = 'my-name'
- description = 'my-desc'
- policy_id = 'my-policy-id'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- args = ['--description', description,
- '--admin-state-down',
- '--tenant-id', tenant_id,
- policy_id]
- position_names = ['firewall_policy_id', ]
- position_values = [policy_id, ]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- description=description,
- admin_state_up=False,
- tenant_id=tenant_id)
-
- def test_create_firewall_with_routers(self):
- resource = 'firewall'
- cmd = firewall.CreateFirewall(test_cli20.MyApp(sys.stdout), None)
- name = 'my-name'
- policy_id = 'my-policy-id'
- my_id = 'my-id'
- args = ['--router', 'fake-id', '--router', 'fake-name', policy_id]
- router_ids = ['fake-id', 'fake-name']
- position_names = ['firewall_policy_id', 'router_ids']
- position_values = [policy_id, router_ids]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_list_firewalls(self):
- # firewall-list.
- resources = "firewalls"
- cmd = firewall.ListFirewall(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_firewalls_pagination(self):
- # firewall-list with pagination.
- resources = "firewalls"
- cmd = firewall.ListFirewall(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_firewalls_sort(self):
- # sorted list: firewall-list --sort-key name --sort-key id
- # --sort-key asc --sort-key desc
- resources = "firewalls"
- cmd = firewall.ListFirewall(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_firewalls_limit(self):
- # size (1000) limited list: firewall-list -P.
- resources = "firewalls"
- cmd = firewall.ListFirewall(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_firewall_id(self):
- # firewall-show test_id.
- resource = 'firewall'
- cmd = firewall.ShowFirewall(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_show_firewall_id_name(self):
- # firewall-show.
- resource = 'firewall'
- cmd = firewall.ShowFirewall(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_update_firewall(self):
- # firewall-update myid --name newname --tags a b.
- resource = 'firewall'
- cmd = firewall.UpdateFirewall(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'newname'],
- {'name': 'newname', })
-
- def test_update_firewall_using_policy_name(self):
- # firewall-update myid --policy newpolicy.
- resource = 'firewall'
- cmd = firewall.UpdateFirewall(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--policy', 'newpolicy'],
- {'firewall_policy_id': 'newpolicy'})
-
- def test_update_firewall_with_routers(self):
- resource = 'firewall'
- cmd = firewall.UpdateFirewall(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(
- resource, cmd, 'myid',
- ['myid', '--router', 'fake-id', '--router', 'fake-name'],
- {'router_ids': ['fake-id', 'fake-name']})
-
- def test_update_firewall_with_no_routers(self):
- resource = 'firewall'
- cmd = firewall.UpdateFirewall(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(
- resource, cmd, 'myid',
- ['myid', '--no-routers'], {'router_ids': []})
-
- def test_update_firewall_with_bad_router_options(self):
- resource = 'firewall'
- cmd = firewall.UpdateFirewall(test_cli20.MyApp(sys.stdout), None)
- self.assertRaises(
- SystemExit,
- self._test_update_resource,
- resource, cmd, 'myid',
- ['myid', '--no-routers', '--router', 'fake-id'], {})
-
- def test_delete_firewall(self):
- # firewall-delete my-id.
- resource = 'firewall'
- cmd = firewall.DeleteFirewall(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
-
- def test_update_firewall_admin_state(self):
- # firewall-update myid --admin-state-up True.
- resource = 'firewall'
- cmd = firewall.UpdateFirewall(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--admin-state-up', 'True'],
- {'admin_state_up': 'True'})
diff --git a/neutronclient/tests/unit/fw/test_cli20_firewallpolicy.py b/neutronclient/tests/unit/fw/test_cli20_firewallpolicy.py
deleted file mode 100644
index 4cadfb2de..000000000
--- a/neutronclient/tests/unit/fw/test_cli20_firewallpolicy.py
+++ /dev/null
@@ -1,228 +0,0 @@
-# Copyright 2013 Big Switch Networks Inc.
-# All Rights Reserved
-#
-# 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 sys
-from unittest import mock
-
-
-from neutronclient.neutron.v2_0.fw import firewallpolicy
-from neutronclient import shell
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20FirewallPolicyJSON(test_cli20.CLITestV20Base):
- def setUp(self):
- super(CLITestV20FirewallPolicyJSON, self).setUp()
-
- def test_create_firewall_policy_with_mandatory_params(self):
- # firewall-policy-create with mandatory (none) params only.
- resource = 'firewall_policy'
- cmd = firewallpolicy.CreateFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- tenant_id = 'my-tenant'
- name = 'my-name'
- my_id = 'myid'
- args = ['--tenant-id', tenant_id,
- '--admin-state_up',
- name, ]
- position_names = ['name', ]
- position_values = [name, ]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- admin_state_up=True, tenant_id=tenant_id)
-
- def test_create_firewall_policy_with_all_params(self):
- # firewall-policy-create with rule param of misc format.
- resource = 'firewall_policy'
- cmd = firewallpolicy.CreateFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- description = 'my-desc'
- firewall_rules_res = ['rule_id1', 'rule_id2']
- tenant_id = 'my-tenant'
- my_id = 'myid'
- position_names = ['name', ]
- position_values = [name, ]
-
- # check for both str and unicode format firewall_rules_arg
- for firewall_rules_arg in ['rule_id1 rule_id2', u'rule_id1 rule_id2']:
- args = ['--description', description,
- '--shared',
- '--firewall-rules', firewall_rules_arg,
- '--audited',
- '--tenant-id', tenant_id,
- '--admin-state_up',
- name]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- description=description, shared=True,
- firewall_rules=firewall_rules_res,
- audited=True, admin_state_up=True,
- tenant_id=tenant_id)
-
- def test_list_firewall_policies(self):
- # firewall-policy-list.
- resources = "firewall_policies"
- cmd = firewallpolicy.ListFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_firewall_policies_pagination(self):
- # firewall-policy-list."""
- resources = "firewall_policies"
- cmd = firewallpolicy.ListFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_firewall_policies_sort(self):
- # sorted list: firewall-policy-list --sort-key name --sort-key id
- # --sort-key asc --sort-key desc
- resources = "firewall_policies"
- cmd = firewallpolicy.ListFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_firewall_policies_limit(self):
- # size (1000) limited list: firewall-policy-list -P.
- resources = "firewall_policies"
- cmd = firewallpolicy.ListFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_firewall_policy_id(self):
- # firewall-policy-show test_id.
- resource = 'firewall_policy'
- cmd = firewallpolicy.ShowFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_show_firewall_policy_id_name(self):
- # firewall-policy-show.
- resource = 'firewall_policy'
- cmd = firewallpolicy.ShowFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_update_firewall_policy(self):
- # firewall-policy-update myid --name newname.
- resource = 'firewall_policy'
- cmd = firewallpolicy.UpdateFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'newname'],
- {'name': 'newname', })
-
- def test_update_firewall_policy_with_rules(self):
- # firewall-policy-update myid --firewall-rules "rule1 rule2".
- resource = 'firewall_policy'
- cmd = firewallpolicy.UpdateFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- firewall_rules_arg = u'rule_id3 rule_id4'
- firewall_rules_res = ['rule_id3', 'rule_id4']
- self._test_update_resource(
- resource, cmd, 'myid',
- ['myid', '--firewall-rules', firewall_rules_arg],
- {'firewall_rules': firewall_rules_res, })
-
- def test_delete_firewall_policy(self):
- # firewall-policy-delete my-id.
- resource = 'firewall_policy'
- cmd = firewallpolicy.DeleteFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'myid1'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
-
- def test_insert_firewall_rule(self):
- # firewall-policy-insert-rule myid newruleid --insert-before ruleAid
- # --insert-after ruleBid
- resource = 'firewall_policy'
- cmd = firewallpolicy.FirewallPolicyInsertRule(
- test_cli20.MyApp(sys.stdout),
- None)
- myid = 'myid'
- args = ['myid', 'newrule',
- '--insert-before', 'rule2',
- '--insert-after', 'rule1']
- extrafields = {'firewall_rule_id': 'newrule',
- 'insert_before': 'rule2',
- 'insert_after': 'rule1'}
-
- body = extrafields
- path = getattr(self.client, resource + "_insert_path")
- cmd_parser = cmd.get_parser(resource + "_insert_rule")
- resp = (test_cli20.MyResp(204), None)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- shell.run_command(cmd, cmd_parser, args)
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), 4)
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path % myid),
- self.client),
- 'PUT', body=test_cli20.MyComparator(body, self.client),
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
-
- def test_remove_firewall_rule(self):
- # firewall-policy-remove-rule myid ruleid
- resource = 'firewall_policy'
- cmd = firewallpolicy.FirewallPolicyRemoveRule(
- test_cli20.MyApp(sys.stdout),
- None)
- myid = 'myid'
- args = ['myid', 'removerule']
- extrafields = {'firewall_rule_id': 'removerule', }
-
- body = extrafields
- path = getattr(self.client, resource + "_remove_path")
- cmd_parser = cmd.get_parser(resource + "_remove_rule")
- resp = (test_cli20.MyResp(204), None)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- shell.run_command(cmd, cmd_parser, args)
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), 2)
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path % myid),
- self.client),
- 'PUT', body=test_cli20.MyComparator(body, self.client),
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
-
- def test_update_firewall_policy_name_shared_audited(self):
- # firewall-policy-update myid --name newname2 --shared --audited
- resource = 'firewall_policy'
- cmd = firewallpolicy.UpdateFirewallPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'newname2',
- '--shared', 'True', '--audited', 'True'],
- {'name': 'newname2',
- 'shared': 'True', 'audited': 'True'})
diff --git a/neutronclient/tests/unit/fw/test_cli20_firewallrule.py b/neutronclient/tests/unit/fw/test_cli20_firewallrule.py
deleted file mode 100644
index 50fabca8e..000000000
--- a/neutronclient/tests/unit/fw/test_cli20_firewallrule.py
+++ /dev/null
@@ -1,251 +0,0 @@
-# Copyright 2013 Big Switch Networks Inc.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.fw import firewallrule
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20FirewallRuleJSON(test_cli20.CLITestV20Base):
-
- def _test_create_firewall_rule_with_mandatory_params(self, enabled):
- # firewall-rule-create with mandatory (none) params only.
- resource = 'firewall_rule'
- cmd = firewallrule.CreateFirewallRule(test_cli20.MyApp(sys.stdout),
- None)
- tenant_id = 'my-tenant'
- name = ''
- my_id = 'myid'
- protocol = 'tcp'
- action = 'allow'
- ip_version = 4
- args = ['--tenant-id', tenant_id,
- '--admin-state-up',
- '--protocol', protocol,
- '--action', action,
- '--enabled', enabled]
- position_names = []
- position_values = []
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- protocol=protocol, action=action,
- enabled=enabled, tenant_id=tenant_id,
- ip_version=ip_version)
-
- def test_create_enabled_firewall_rule_with_mandatory_params_lcase(self):
- self._test_create_firewall_rule_with_mandatory_params(enabled='true')
-
- def test_create_disabled_firewall_rule_with_mandatory_params_lcase(self):
- self._test_create_firewall_rule_with_mandatory_params(enabled='false')
-
- def test_create_enabled_firewall_rule_with_mandatory_params(self):
- self._test_create_firewall_rule_with_mandatory_params(enabled='True')
-
- def test_create_disabled_firewall_rule_with_mandatory_params(self):
- self._test_create_firewall_rule_with_mandatory_params(enabled='False')
-
- def _setup_create_firewall_rule_with_all_params(
- self, protocol='tcp', protocol_cli=None,
- action='allow', action_cli=None, ip_version='4'):
- # firewall-rule-create with all params set.
- resource = 'firewall_rule'
- cmd = firewallrule.CreateFirewallRule(test_cli20.MyApp(sys.stdout),
- None)
- name = 'my-name'
- description = 'my-desc'
- source_ip = '192.168.1.0/24'
- destination_ip = '192.168.2.0/24'
- source_port = '0:65535'
- destination_port = '0:65535'
- tenant_id = 'my-tenant'
- my_id = 'myid'
- enabled = 'True'
- args = ['--description', description,
- '--shared',
- '--protocol', protocol_cli or protocol,
- '--ip-version', ip_version,
- '--source-ip-address', source_ip,
- '--destination-ip-address', destination_ip,
- '--source-port', source_port,
- '--destination-port', destination_port,
- '--action', action_cli or action,
- '--enabled', enabled,
- '--admin-state-up',
- '--tenant-id', tenant_id]
- position_names = []
- position_values = []
- if protocol == 'any':
- protocol = None
- if ip_version == '4' or ip_version == '6':
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- description=description, shared=True,
- protocol=protocol,
- ip_version=int(ip_version),
- source_ip_address=source_ip,
- destination_ip_address=destination_ip,
- source_port=source_port,
- destination_port=destination_port,
- action=action, enabled='True',
- tenant_id=tenant_id)
- else:
- self.assertRaises(SystemExit, self._test_create_resource,
- resource, cmd, name, my_id, args,
- position_names, position_values,
- ip_version=int(ip_version),
- source_ip_address=source_ip,
- destination_ip_address=destination_ip,
- source_port=source_port,
- destination_port=destination_port,
- action=action, enabled='True',
- tenant_id=tenant_id)
-
- def test_create_firewall_rule_with_all_params(self):
- self._setup_create_firewall_rule_with_all_params()
-
- def test_create_firewall_rule_with_proto_any(self):
- self._setup_create_firewall_rule_with_all_params(protocol='any')
-
- def test_create_firewall_rule_with_IP_version_6(self):
- self._setup_create_firewall_rule_with_all_params(ip_version='6')
-
- def test_create_firewall_rule_with_invalid_IP_version(self):
- self._setup_create_firewall_rule_with_all_params(ip_version='5')
-
- def test_create_firewall_rule_with_proto_action_upper_capitalized(self):
- for protocol in ('TCP', 'Tcp', 'ANY', 'AnY'):
- self._setup_create_firewall_rule_with_all_params(
- protocol=protocol.lower(),
- protocol_cli=protocol)
- for action in ('Allow', 'DENY', 'reject'):
- self._setup_create_firewall_rule_with_all_params(
- action=action.lower(),
- action_cli=action)
-
- def test_list_firewall_rules(self):
- # firewall-rule-list.
- resources = "firewall_rules"
- cmd = firewallrule.ListFirewallRule(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_firewall_rules_pagination(self):
- # firewall-rule-list.
- resources = "firewall_rules"
- cmd = firewallrule.ListFirewallRule(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_firewall_rules_sort(self):
- # firewall-rule-list --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = "firewall_rules"
- cmd = firewallrule.ListFirewallRule(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_firewall_rules_limit(self):
- # firewall-rule-list -P."""
- resources = "firewall_rules"
- cmd = firewallrule.ListFirewallRule(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_firewall_rule_id(self):
- # firewall-rule-show test_id.
- resource = 'firewall_rule'
- cmd = firewallrule.ShowFirewallRule(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_show_firewall_rule_id_name(self):
- # firewall-rule-show.
- resource = 'firewall_rule'
- cmd = firewallrule.ShowFirewallRule(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_update_firewall_rule(self):
- # firewall-rule-update myid --name newname.
- resource = 'firewall_rule'
- cmd = firewallrule.UpdateFirewallRule(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'newname'],
- {'name': 'newname', })
-
- # firewall-rule-update myid --protocol any.
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--protocol', 'any'],
- {'protocol': None, })
-
- # firewall-rule-update myid --description any
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--description', 'any'],
- {'description': 'any', })
-
- # firewall-rule-update myid --source_ip_address 192.192.192.192
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--source_ip_address',
- '192.192.192.192'],
- {'source_ip_address': '192.192.192.192', })
-
- # firewall-rule-update myid --source_port 32767
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--source_port', '32767'],
- {'source_port': '32767', })
-
- # firewall-rule-update myid --destination_ip_address 0.1.0.1
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--destination_ip_address',
- '0.1.0.1'],
- {'destination_ip_address': '0.1.0.1', })
-
- # firewall-rule-update myid --destination_port 65432
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--destination_port',
- '65432'],
- {'destination_port': '65432', })
-
- # firewall-rule-update myid --enabled False
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--enabled', 'False'],
- {'enabled': 'False', })
-
- # firewall-rule-update myid --action reject
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--action', 'reject'],
- {'action': 'reject', })
-
- # firewall-rule-update myid --shared false
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--shared', 'false'],
- {'shared': 'false', })
-
- def test_delete_firewall_rule(self):
- # firewall-rule-delete my-id.
- resource = 'firewall_rule'
- cmd = firewallrule.DeleteFirewallRule(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'myid1'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
diff --git a/neutronclient/tests/unit/lb/__init__.py b/neutronclient/tests/unit/lb/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/neutronclient/tests/unit/lb/test_cli20_healthmonitor.py b/neutronclient/tests/unit/lb/test_cli20_healthmonitor.py
deleted file mode 100644
index 61cb1b1a5..000000000
--- a/neutronclient/tests/unit/lb/test_cli20_healthmonitor.py
+++ /dev/null
@@ -1,202 +0,0 @@
-# Copyright 2013 Mirantis Inc.
-# All Rights Reserved
-#
-# 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 sys
-from unittest import mock
-
-
-from neutronclient.neutron.v2_0.lb import healthmonitor
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20LbHealthmonitorJSON(test_cli20.CLITestV20Base):
- def test_create_healthmonitor_with_mandatory_params(self):
- # lb-healthmonitor-create with mandatory params only.
- resource = 'health_monitor'
- cmd = healthmonitor.CreateHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- admin_state_up = False
- delay = '60'
- max_retries = '2'
- timeout = '10'
- type = 'TCP'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- args = ['--admin-state-down',
- '--delay', delay,
- '--max-retries', max_retries,
- '--timeout', timeout,
- '--type', type,
- '--tenant-id', tenant_id]
- position_names = ['admin_state_up', 'delay', 'max_retries', 'timeout',
- 'type', 'tenant_id']
- position_values = [admin_state_up, delay, max_retries, timeout, type,
- tenant_id]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values)
-
- def test_create_healthmonitor_with_all_params(self):
- # lb-healthmonitor-create with all params set.
- resource = 'health_monitor'
- cmd = healthmonitor.CreateHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- admin_state_up = False
- delay = '60'
- expected_codes = '200-202,204'
- http_method = 'HEAD'
- max_retries = '2'
- timeout = '10'
- type = 'TCP'
- tenant_id = 'my-tenant'
- url_path = '/health'
- my_id = 'my-id'
- args = ['--admin-state-down',
- '--delay', delay,
- '--expected-codes', expected_codes,
- '--http-method', http_method,
- '--max-retries', max_retries,
- '--timeout', timeout,
- '--type', type,
- '--tenant-id', tenant_id,
- '--url-path', url_path]
- position_names = ['admin_state_up', 'delay',
- 'expected_codes', 'http_method',
- 'max_retries', 'timeout',
- 'type', 'tenant_id', 'url_path']
- position_values = [admin_state_up, delay,
- expected_codes, http_method,
- max_retries, timeout,
- type, tenant_id, url_path]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values)
-
- def test_list_healthmonitors(self):
- # lb-healthmonitor-list.
- resources = "health_monitors"
- cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_healthmonitors_pagination(self):
- # lb-healthmonitor-list.
- resources = "health_monitors"
- cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_healthmonitors_sort(self):
- # lb-healthmonitor-list --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = "health_monitors"
- cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_healthmonitors_limit(self):
- # lb-healthmonitor-list -P.
- resources = "health_monitors"
- cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_healthmonitor_id(self):
- # lb-healthmonitor-show test_id.
- resource = 'health_monitor'
- cmd = healthmonitor.ShowHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_update_health_monitor(self):
- # lb-healthmonitor-update myid --name myname --tags a b.
- resource = 'health_monitor'
- cmd = healthmonitor.UpdateHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--timeout', '5'],
- {'timeout': '5', })
-
- def test_delete_healthmonitor(self):
- # lb-healthmonitor-delete my-id."""
- resource = 'health_monitor'
- cmd = healthmonitor.DeleteHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
-
- def test_associate_healthmonitor(self):
- cmd = healthmonitor.AssociateHealthMonitor(
- test_cli20.MyApp(sys.stdout),
- None)
- resource = 'health_monitor'
- health_monitor_id = 'hm-id'
- pool_id = 'p_id'
- args = [health_monitor_id, pool_id]
-
- body = {resource: {'id': health_monitor_id}}
- result = {resource: {'id': health_monitor_id}, }
- result_str = self.client.serialize(result)
-
- path = getattr(self.client,
- "associate_pool_health_monitors_path") % pool_id
- return_tup = (test_cli20.MyResp(200), result_str)
- cmd_parser = cmd.get_parser('test_' + resource)
- parsed_args = cmd_parser.parse_args(args)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=return_tup) as mock_request:
- cmd.run(parsed_args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.end_url(path), 'POST',
- body=test_cli20.MyComparator(body, self.client),
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
-
- def test_disassociate_healthmonitor(self):
- cmd = healthmonitor.DisassociateHealthMonitor(
- test_cli20.MyApp(sys.stdout),
- None)
- resource = 'health_monitor'
- health_monitor_id = 'hm-id'
- pool_id = 'p_id'
- args = [health_monitor_id, pool_id]
-
- path = (getattr(self.client,
- "disassociate_pool_health_monitors_path") %
- {'pool': pool_id, 'health_monitor': health_monitor_id})
- return_tup = (test_cli20.MyResp(204), None)
- cmd_parser = cmd.get_parser('test_' + resource)
- parsed_args = cmd_parser.parse_args(args)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=return_tup) as mock_request:
- cmd.run(parsed_args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.end_url(path), 'DELETE',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
diff --git a/neutronclient/tests/unit/lb/test_cli20_member.py b/neutronclient/tests/unit/lb/test_cli20_member.py
deleted file mode 100644
index 8ce2a0f09..000000000
--- a/neutronclient/tests/unit/lb/test_cli20_member.py
+++ /dev/null
@@ -1,118 +0,0 @@
-# Copyright 2013 Mirantis Inc.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.lb import member
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20LbMemberJSON(test_cli20.CLITestV20Base):
- def setUp(self):
- super(CLITestV20LbMemberJSON, self).setUp(plurals={'tags': 'tag'})
-
- def test_create_member(self):
- # lb-member-create with mandatory params only.
- resource = 'member'
- cmd = member.CreateMember(test_cli20.MyApp(sys.stdout), None)
- address = '10.0.0.1'
- port = '8080'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- pool_id = 'pool-id'
- args = ['--address', address, '--protocol-port', port,
- '--tenant-id', tenant_id, pool_id]
- position_names = ['address', 'protocol_port', 'tenant_id', 'pool_id',
- 'admin_state_up']
- position_values = [address, port, tenant_id, pool_id, True]
- self._test_create_resource(resource, cmd, None, my_id, args,
- position_names, position_values,
- admin_state_up=None)
-
- def test_create_member_all_params(self):
- # lb-member-create with all available params.
- resource = 'member'
- cmd = member.CreateMember(test_cli20.MyApp(sys.stdout), None)
- address = '10.0.0.1'
- admin_state_up = False
- port = '8080'
- weight = '1'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- pool_id = 'pool-id'
- args = ['--address', address, '--admin-state-down',
- '--protocol-port', port, '--weight', weight,
- '--tenant-id', tenant_id, pool_id]
- position_names = [
- 'address', 'admin_state_up', 'protocol_port', 'weight',
- 'tenant_id', 'pool_id'
- ]
- position_values = [address, admin_state_up, port, weight,
- tenant_id, pool_id]
- self._test_create_resource(resource, cmd, None, my_id, args,
- position_names, position_values,
- admin_state_up=None)
-
- def test_list_members(self):
- # lb-member-list.
- resources = "members"
- cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_members_pagination(self):
- # lb-member-list.
- resources = "members"
- cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_members_sort(self):
- # lb-member-list --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = "members"
- cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_members_limit(self):
- # lb-member-list -P.
- resources = "members"
- cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_member_id(self):
- # lb-member-show test_id.
- resource = 'member'
- cmd = member.ShowMember(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_update_member(self):
- # lb-member-update myid --name myname --tags a b.
- resource = 'member'
- cmd = member.UpdateMember(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'myname',
- '--tags', 'a', 'b'],
- {'name': 'myname', 'tags': ['a', 'b'], })
-
- def test_delete_member(self):
- # lb-member-delete my-id.
- resource = 'member'
- cmd = member.DeleteMember(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
diff --git a/neutronclient/tests/unit/lb/test_cli20_pool.py b/neutronclient/tests/unit/lb/test_cli20_pool.py
deleted file mode 100644
index 79bf23df8..000000000
--- a/neutronclient/tests/unit/lb/test_cli20_pool.py
+++ /dev/null
@@ -1,166 +0,0 @@
-# Copyright 2013 Mirantis Inc.
-# All Rights Reserved
-#
-# 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 sys
-from unittest import mock
-
-
-from neutronclient.neutron.v2_0.lb import pool
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20LbPoolJSON(test_cli20.CLITestV20Base):
-
- def test_create_pool_with_mandatory_params(self):
- # lb-pool-create with mandatory params only.
- resource = 'pool'
- cmd = pool.CreatePool(test_cli20.MyApp(sys.stdout), None)
- name = 'my-name'
- lb_method = 'ROUND_ROBIN'
- protocol = 'HTTP'
- subnet_id = 'subnet-id'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- args = ['--lb-method', lb_method,
- '--name', name,
- '--protocol', protocol,
- '--subnet-id', subnet_id,
- '--tenant-id', tenant_id]
- position_names = ['admin_state_up', 'lb_method', 'name',
- 'protocol', 'subnet_id', 'tenant_id']
- position_values = [True, lb_method, name,
- protocol, subnet_id, tenant_id]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_create_pool_with_all_params(self):
- # lb-pool-create with all params set.
- resource = 'pool'
- cmd = pool.CreatePool(test_cli20.MyApp(sys.stdout), None)
- name = 'my-name'
- description = 'my-desc'
- lb_method = 'ROUND_ROBIN'
- protocol = 'HTTP'
- subnet_id = 'subnet-id'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- provider = 'lbaas'
- args = ['--admin-state-down',
- '--description', description,
- '--lb-method', lb_method,
- '--name', name,
- '--protocol', protocol,
- '--subnet-id', subnet_id,
- '--tenant-id', tenant_id,
- '--provider', provider]
- position_names = ['admin_state_up', 'description', 'lb_method', 'name',
- 'protocol', 'subnet_id', 'tenant_id', 'provider']
- position_values = [False, description, lb_method, name,
- protocol, subnet_id, tenant_id, provider]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_list_pools(self):
- # lb-pool-list.
- resources = "pools"
- cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_pools_pagination(self):
- # lb-pool-list.
- resources = "pools"
- cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_pools_sort(self):
- # lb-pool-list --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = "pools"
- cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_pools_limit(self):
- # lb-pool-list -P.
- resources = "pools"
- cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_pool_id(self):
- # lb-pool-show test_id.
- resource = 'pool'
- cmd = pool.ShowPool(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_show_pool_id_name(self):
- # lb-pool-show.
- resource = 'pool'
- cmd = pool.ShowPool(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_update_pool(self):
- # lb-pool-update myid --name newname --tags a b.
- resource = 'pool'
- cmd = pool.UpdatePool(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'newname'],
- {'name': 'newname', })
-
- def test_delete_pool(self):
- # lb-pool-delete my-id.
- resource = 'pool'
- cmd = pool.DeletePool(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
-
- def test_retrieve_pool_stats(self):
- # lb-pool-stats test_id.
- resource = 'pool'
- cmd = pool.RetrievePoolStats(test_cli20.MyApp(sys.stdout), None)
- my_id = self.test_id
- fields = ['bytes_in', 'bytes_out']
- args = ['--fields', 'bytes_in', '--fields', 'bytes_out', my_id]
-
- query = "&".join(["fields=%s" % field for field in fields])
- expected_res = {'stats': {'bytes_in': '1234', 'bytes_out': '4321'}}
- resstr = self.client.serialize(expected_res)
- path = getattr(self.client, "pool_path_stats")
- return_tup = (test_cli20.MyResp(200), resstr)
-
- cmd_parser = cmd.get_parser("test_" + resource)
- parsed_args = cmd_parser.parse_args(args)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=return_tup) as mock_request:
- cmd.run(parsed_args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), 2)
- mock_request.assert_called_once_with(
- test_cli20.end_url(path % my_id, query), 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- _str = self.fake_stdout.make_string()
- self.assertIn('bytes_in', _str)
- self.assertIn('bytes_out', _str)
diff --git a/neutronclient/tests/unit/lb/test_cli20_vip.py b/neutronclient/tests/unit/lb/test_cli20_vip.py
deleted file mode 100644
index b08de447e..000000000
--- a/neutronclient/tests/unit/lb/test_cli20_vip.py
+++ /dev/null
@@ -1,206 +0,0 @@
-# Copyright 2013 Mirantis Inc.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.lb import vip
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20LbVipJSON(test_cli20.CLITestV20Base):
- def setUp(self):
- super(CLITestV20LbVipJSON, self).setUp(plurals={'tags': 'tag'})
-
- def test_create_vip_with_mandatory_params(self):
- # lb-vip-create with all mandatory params.
- resource = 'vip'
- cmd = vip.CreateVip(test_cli20.MyApp(sys.stdout), None)
- pool_id = 'my-pool-id'
- name = 'my-name'
- subnet_id = 'subnet-id'
- protocol_port = '1000'
- protocol = 'TCP'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- args = ['--name', name,
- '--protocol-port', protocol_port,
- '--protocol', protocol,
- '--subnet-id', subnet_id,
- '--tenant-id', tenant_id,
- pool_id]
- position_names = ['pool_id', 'name', 'protocol_port', 'protocol',
- 'subnet_id', 'tenant_id']
- position_values = [pool_id, name, protocol_port, protocol,
- subnet_id, tenant_id]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- admin_state_up=True)
-
- def test_create_vip_with_all_params(self):
- # lb-vip-create with all params.
- resource = 'vip'
- cmd = vip.CreateVip(test_cli20.MyApp(sys.stdout), None)
- pool_id = 'my-pool-id'
- name = 'my-name'
- description = 'my-desc'
- address = '10.0.0.2'
- admin_state = False
- connection_limit = '1000'
- subnet_id = 'subnet-id'
- protocol_port = '80'
- protocol = 'TCP'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- args = ['--name', name,
- '--description', description,
- '--address', address,
- '--admin-state-down',
- '--connection-limit', connection_limit,
- '--protocol-port', protocol_port,
- '--protocol', protocol,
- '--subnet-id', subnet_id,
- '--tenant-id', tenant_id,
- pool_id]
- position_names = ['pool_id', 'name', 'description', 'address',
- 'admin_state_up', 'connection_limit',
- 'protocol_port', 'protocol', 'subnet_id',
- 'tenant_id']
- position_values = [pool_id, name, description, address,
- admin_state, connection_limit, protocol_port,
- protocol, subnet_id,
- tenant_id]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_create_vip_with_session_persistence_params(self):
- # lb-vip-create with mandatory and session-persistence params.
- resource = 'vip'
- cmd = vip.CreateVip(test_cli20.MyApp(sys.stdout), None)
- pool_id = 'my-pool-id'
- name = 'my-name'
- subnet_id = 'subnet-id'
- protocol_port = '1000'
- protocol = 'TCP'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- args = ['--name', name,
- '--protocol-port', protocol_port,
- '--protocol', protocol,
- '--subnet-id', subnet_id,
- '--tenant-id', tenant_id,
- pool_id,
- '--session-persistence', 'type=dict',
- 'type=cookie,cookie_name=pie',
- '--optional-param', 'any']
- position_names = ['pool_id', 'name', 'protocol_port', 'protocol',
- 'subnet_id', 'tenant_id', 'optional_param']
- position_values = [pool_id, name, protocol_port, protocol,
- subnet_id, tenant_id, 'any']
- extra_body = {
- 'session_persistence': {
- 'type': 'cookie',
- 'cookie_name': 'pie',
- },
- }
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- admin_state_up=True, extra_body=extra_body)
-
- def test_list_vips(self):
- # lb-vip-list.
- resources = "vips"
- cmd = vip.ListVip(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_vips_pagination(self):
- # lb-vip-list.
- resources = "vips"
- cmd = vip.ListVip(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_vips_sort(self):
- # lb-vip-list --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = "vips"
- cmd = vip.ListVip(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_vips_limit(self):
- # lb-vip-list -P.
- resources = "vips"
- cmd = vip.ListVip(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_vip_id(self):
- # lb-vip-show test_id.
- resource = 'vip'
- cmd = vip.ShowVip(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_show_vip_id_name(self):
- # lb-vip-show.
- resource = 'vip'
- cmd = vip.ShowVip(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_update_vip(self):
- # lb-vip-update myid --name myname --tags a b.
- resource = 'vip'
- cmd = vip.UpdateVip(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'myname',
- '--tags', 'a', 'b'],
- {'name': 'myname', 'tags': ['a', 'b'], })
-
- def test_update_vip_with_session_persistence(self):
- resource = 'vip'
- cmd = vip.UpdateVip(test_cli20.MyApp(sys.stdout), None)
- body = {
- 'session_persistence': {
- 'type': 'source',
- },
- }
- args = ['myid', '--session-persistence', 'type=dict',
- 'type=source']
- self._test_update_resource(resource, cmd, 'myid', args, body)
-
- def test_update_vip_with_session_persistence_and_name(self):
- resource = 'vip'
- cmd = vip.UpdateVip(test_cli20.MyApp(sys.stdout), None)
- body = {
- 'name': 'newname',
- 'session_persistence': {
- 'type': 'cookie',
- 'cookie_name': 'pie',
- },
- }
- args = ['myid', '--name', 'newname',
- '--session-persistence', 'type=dict',
- 'type=cookie,cookie_name=pie']
- self._test_update_resource(resource, cmd, 'myid', args, body)
-
- def test_delete_vip(self):
- # lb-vip-delete my-id.
- resource = 'vip'
- cmd = vip.DeleteVip(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
diff --git a/neutronclient/tests/unit/lb/v2/__init__.py b/neutronclient/tests/unit/lb/v2/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/neutronclient/tests/unit/lb/v2/test_cli20_healthmonitor.py b/neutronclient/tests/unit/lb/v2/test_cli20_healthmonitor.py
deleted file mode 100644
index 945ac18e3..000000000
--- a/neutronclient/tests/unit/lb/v2/test_cli20_healthmonitor.py
+++ /dev/null
@@ -1,175 +0,0 @@
-# Copyright 2014 Blue Box Group, Inc.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.lb.v2 import healthmonitor
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20LbHealthMonitorJSON(test_cli20.CLITestV20Base):
-
- def test_create_healthmonitor_with_mandatory_params(self):
- # lbaas-healthmonitor-create with mandatory params only.
- resource = 'healthmonitor'
- cmd_resource = 'lbaas_healthmonitor'
- cmd = healthmonitor.CreateHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- type = 'PING'
- max_retries = '3'
- delay = '10'
- timeout = '60'
- pool = 'pool1'
- args = ['--type', type, '--max-retries', max_retries,
- '--delay', delay, '--timeout', timeout, '--pool', pool]
- position_names = ['type', 'max_retries', 'delay', 'timeout', 'pool_id']
- position_values = [type, max_retries, delay, timeout, pool]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource)
-
- def test_create_healthmonitor_with_all_params(self):
- # lbaas-healthmonitor-create with all params set.
- resource = 'healthmonitor'
- cmd_resource = 'lbaas_healthmonitor'
- cmd = healthmonitor.CreateHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- type = 'PING'
- max_retries = '3'
- delay = '10'
- timeout = '60'
- http_method = 'GET'
- expected_codes = '201'
- url_path = '/somepath'
- pool = 'pool1'
- name = 'healthmonitor1'
- args = ['--admin-state-down', '--http-method', http_method,
- '--expected-codes', expected_codes, '--url-path', url_path,
- '--type', type, '--max-retries', max_retries,
- '--delay', delay, '--timeout', timeout, '--pool', pool,
- '--name', name]
- position_names = ['admin_state_up', 'http_method', 'expected_codes',
- 'url_path', 'type', 'max_retries', 'delay',
- 'timeout', 'pool_id', 'name']
- position_values = [False, http_method, expected_codes, url_path,
- type, max_retries, delay, timeout, pool, name]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource)
-
- def test_list_healthmonitors(self):
- # lbaas-healthmonitor-list.
- resources = 'healthmonitors'
- cmd_resources = 'lbaas_healthmonitors'
- cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, True,
- cmd_resources=cmd_resources)
-
- def test_list_healthmonitors_pagination(self):
- # lbaas-healthmonitor-list with pagination.
- resources = 'healthmonitors'
- cmd_resources = 'lbaas_healthmonitors'
- cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources_with_pagination(resources, cmd,
- cmd_resources=cmd_resources)
-
- def test_list_healthmonitors_sort(self):
- # lbaas-healthmonitor-list --sort-key id --sort-key asc.
- resources = 'healthmonitors'
- cmd_resources = 'lbaas_healthmonitors'
- cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, True,
- cmd_resources=cmd_resources)
-
- def test_list_healthmonitors_limit(self):
- # lbaas-healthmonitor-list -P.
- resources = 'healthmonitors'
- cmd_resources = 'lbaas_healthmonitors'
- cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, page_size=1000,
- cmd_resources=cmd_resources)
-
- def test_show_healthmonitor_id(self):
- # lbaas-healthmonitor-show test_id.
- resource = 'healthmonitor'
- cmd_resource = 'lbaas_healthmonitor'
- cmd = healthmonitor.ShowHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'],
- cmd_resource=cmd_resource)
-
- def test_show_healthmonitor_id_name(self):
- # lbaas-healthmonitor-show.
- resource = 'healthmonitor'
- cmd_resource = 'lbaas_healthmonitor'
- cmd = healthmonitor.ShowHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'],
- cmd_resource=cmd_resource)
-
- def _test_update_hm(self, args, expected_values):
- resource = 'healthmonitor'
- cmd_resource = 'lbaas_healthmonitor'
- my_id = 'myid'
- cmd = healthmonitor.UpdateHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- args.insert(0, my_id)
- self._test_update_resource(resource, cmd, my_id,
- args,
- expected_values,
- cmd_resource=cmd_resource)
-
- def test_update_healthmonitor(self):
- # lbaas-healthmonitor-update myid --name newname.
- self._test_update_hm(['--name', 'newname'], {'name': 'newname', })
- # lbaas-healthmonitor-update myid --delay 10.
- self._test_update_hm(['--delay', '10'], {'delay': '10'})
- # lbaas-healthmonitor-update myid --timeout 5.
- self._test_update_hm(['--timeout', '5'], {'timeout': '5', })
- # lbaas-healthmonitor-update myid --delay 10.
- self._test_update_hm(['--http-method', 'OPTIONS'],
- {'http_method': 'OPTIONS'})
- # lbaas-healthmonitor-update myid --url-path /test/string .
- self._test_update_hm(['--url-path', '/test/string'],
- {'url_path': '/test/string', })
- # lbaas-healthmonitor-update myid --max-retries 5
- self._test_update_hm(['--max-retries', '5'], {'max_retries': '5'})
- # lbaas-healthmonitor-update myid --expected-codes 201
- self._test_update_hm(['--expected-codes', '201'],
- {'expected_codes': '201'})
- # lbaas-healthmonitor-update myid --admin-state-up False
- self._test_update_hm(['--admin-state-up', 'False'],
- {'admin_state_up': 'False'})
-
- def test_delete_healthmonitor(self):
- # lbaas-healthmonitor-delete my-id.
- resource = 'healthmonitor'
- cmd_resource = 'lbaas_healthmonitor'
- cmd = healthmonitor.DeleteHealthMonitor(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args,
- cmd_resource=cmd_resource)
diff --git a/neutronclient/tests/unit/lb/v2/test_cli20_l7policy.py b/neutronclient/tests/unit/lb/v2/test_cli20_l7policy.py
deleted file mode 100644
index 71869315b..000000000
--- a/neutronclient/tests/unit/lb/v2/test_cli20_l7policy.py
+++ /dev/null
@@ -1,260 +0,0 @@
-# Copyright 2016 Radware LTD.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0.lb.v2 import l7policy
-from neutronclient.tests.unit import test_cli20
-
-"""Structure for mapping cli and api arguments
-
-The structure maps cli arguments and a list of its
-api argument name, default cli value and default api value.
-It helps to make tests more general for different argument types.
-"""
-args_conf = {
- 'name': ['name', 'test_policy', 'test_policy'],
- 'description': ['description', 'test policy', 'test policy'],
- 'listener': ['listener_id', 'test_listener', 'test_listener'],
- 'admin-state-up': ['admin_state_up', True, True],
- 'admin-state-down': ['admin_state_up', None, False],
- 'action': ['action', 'REJECT', 'REJECT'],
- 'redirect-url': ['redirect_url', 'http://url', 'http://url'],
- 'redirect-pool': ['redirect_pool_id', 'test_pool', 'test_pool'],
- 'position': ['position', '1', 1]}
-
-
-class CLITestV20LbL7PolicyJSON(test_cli20.CLITestV20Base):
-
- def _get_test_args(self, *args, **kwargs):
- """Function for generically building testing arguments"""
- cli_args = []
- api_args = {}
- for arg in args:
- cli_args.append('--' + arg)
- if not args_conf[arg][1]:
- pass
- elif arg in kwargs:
- cli_args.append(str(kwargs[arg]))
- else:
- cli_args.append(args_conf[arg][1])
-
- if arg in kwargs:
- api_args[args_conf[arg][0]] = kwargs[arg]
- else:
- api_args[args_conf[arg][0]] = args_conf[arg][2]
-
- return cli_args, api_args
-
- def _test_create_policy(self, *args, **kwargs):
- resource = 'l7policy'
- cmd_resource = 'lbaas_l7policy'
- cmd = l7policy.CreateL7Policy(test_cli20.MyApp(sys.stdout), None)
- cli_args, api_args = self._get_test_args(*args, **kwargs)
- position_names = list(api_args.keys())
- position_values = list(api_args.values())
- self._test_create_resource(resource, cmd, None, 'test_id',
- cli_args, position_names, position_values,
- cmd_resource=cmd_resource)
-
- def _test_update_policy(self, *args, **kwargs):
- resource = 'l7policy'
- cmd_resource = 'lbaas_l7policy'
- cmd = l7policy.UpdateL7Policy(test_cli20.MyApp(sys.stdout), None)
- cli_args, api_args = self._get_test_args(*args, **kwargs)
- cli_args.append('test_id')
- self._test_update_resource(resource, cmd, 'test_id',
- cli_args, api_args,
- cmd_resource=cmd_resource)
-
- def test_create_policy_with_mandatory_params(self):
- # lbaas-l7policy-create with mandatory params only.
- self._test_create_policy('action', 'listener')
-
- def test_create_policy_with_all_params(self):
- # lbaas-l7policy-create REJECT policy.
- self._test_create_policy('name', 'description',
- 'action', 'listener',
- 'position')
-
- def test_create_disabled_policy(self):
- # lbaas-l7policy-create disabled REJECT policy.
- self._test_create_policy('action', 'listener', 'admin-state-down')
-
- def test_create_url_redirect_policy(self):
- # lbaas-l7policy-create REDIRECT_TO_URL policy.
- self._test_create_policy('name', 'description',
- 'action', 'listener',
- 'redirect-url',
- action='REDIRECT_TO_URL')
-
- def test_create_url_redirect_policy_no_url(self):
- # lbaas-l7policy-create REDIRECT_TO_URL policy without url argument.
- self.assertRaises(exceptions.CommandError,
- self._test_create_policy,
- 'name', 'description',
- 'action', 'listener',
- action='REDIRECT_TO_URL')
-
- def test_create_pool_redirect_policy(self):
- # lbaas-l7policy-create REDIRECT_TO_POOL policy.
- self._test_create_policy('name', 'description',
- 'action', 'listener',
- 'redirect-pool',
- action='REDIRECT_TO_POOL')
-
- def test_create_pool_redirect_policy_no_pool(self):
- # lbaas-l7policy-create REDIRECT_TO_POOL policy without pool argument.
- self.assertRaises(exceptions.CommandError,
- self._test_create_policy,
- 'name', 'description',
- 'action', 'listener',
- action='REDIRECT_TO_POOL')
-
- def test_create_reject_policy_with_url(self):
- # lbaas-l7policy-create REJECT policy while specifying url argument.
- self.assertRaises(exceptions.CommandError,
- self._test_create_policy,
- 'action', 'listener',
- 'redirect-url')
-
- def test_create_reject_policy_with_pool(self):
- # lbaas-l7policy-create REJECT policy while specifying pool argument.
- self.assertRaises(exceptions.CommandError,
- self._test_create_policy,
- 'action', 'listener',
- 'redirect-pool')
-
- def test_create_pool_redirect_policy_with_url(self):
- # lbaas-l7policy-create REDIRECT_TO_POOL policy with url argument.
- self.assertRaises(exceptions.CommandError,
- self._test_create_policy,
- 'action', 'listener',
- 'redirect-pool', 'redirect-url',
- action='REDIRECT_TO_POOL')
-
- def test_create_url_redirect_policy_with_pool(self):
- # lbaas-l7policy-create REDIRECT_TO_URL policy with pool argument.
- self.assertRaises(exceptions.CommandError,
- self._test_create_policy,
- 'action', 'listener',
- 'redirect-pool', 'redirect-url',
- action='REDIRECT_TO_URL')
-
- def test_list_policies(self):
- # lbaas-l7policy-list.
-
- resources = 'l7policies'
- cmd_resources = 'lbaas_l7policies'
- cmd = l7policy.ListL7Policy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True,
- cmd_resources=cmd_resources)
-
- def test_list_policies_pagination(self):
- # lbaas-l7policy-list with pagination.
-
- resources = 'l7policies'
- cmd_resources = 'lbaas_l7policies'
- cmd = l7policy.ListL7Policy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(
- resources, cmd, cmd_resources=cmd_resources)
-
- def test_list_policies_sort(self):
- # lbaas-l7policy-list --sort-key id --sort-key asc.
-
- resources = 'l7policies'
- cmd_resources = 'lbaas_l7policies'
- cmd = l7policy.ListL7Policy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(
- resources, cmd, True, cmd_resources=cmd_resources)
-
- def test_list_policies_limit(self):
- # lbaas-l7policy-list -P.
-
- resources = 'l7policies'
- cmd_resources = 'lbaas_l7policies'
- cmd = l7policy.ListL7Policy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(
- resources, cmd, page_size=1000, cmd_resources=cmd_resources)
-
- def test_show_policy_id(self):
- # lbaas-l7policy-show test_id.
-
- resource = 'l7policy'
- cmd_resource = 'lbaas_l7policy'
- cmd = l7policy.ShowL7Policy(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'test_id', self.test_id]
- self._test_show_resource(
- resource, cmd, self.test_id, args,
- ['test_id'], cmd_resource=cmd_resource)
-
- def test_show_policy_id_name(self):
- # lbaas-l7policy-show.
-
- resource = 'l7policy'
- cmd_resource = 'lbaas_l7policy'
- cmd = l7policy.ShowL7Policy(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'test_id', '--fields', 'name', self.test_id]
- self._test_show_resource(
- resource, cmd, self.test_id, args,
- ['test_id', 'name'], cmd_resource=cmd_resource)
-
- def test_disable_policy(self):
- # lbaas-l7policy-update test_id --admin-state-up False.
-
- self._test_update_policy('admin-state-up',
- **{'admin-state-up': 'False'})
-
- def test_update_policy_name_and_description(self):
- # lbaas-l7policy-update test_id --name other --description other_desc.
-
- self._test_update_policy('name', 'description',
- name='name',
- description='other desc')
-
- def test_update_pool_redirect_policy(self):
- # lbaas-l7policy-update test_id --action REDIRECT_TO_POOL
- # --redirect-pool id.
-
- self._test_update_policy('action', 'redirect-pool',
- **{'action': 'REDIRECT_TO_POOL',
- 'redirect-pool': 'id'})
-
- def test_update_url_redirect_policy(self):
- # lbaas-l7policy-update test_id --action REDIRECT_TO_URL
- # --redirect-url http://other_url.
-
- self._test_update_policy('action', 'redirect-url',
- **{'action': 'REDIRECT_TO_URL',
- 'redirect-url': 'http://other_url'})
-
- def test_update_policy_position(self):
- # lbaas-l7policy-update test_id --position 2.
-
- self._test_update_policy('position',
- position=2)
-
- def test_delete_policy(self):
- # lbaas-l7policy-delete test_id.
-
- resource = 'l7policy'
- cmd_resource = 'lbaas_l7policy'
- cmd = l7policy.DeleteL7Policy(test_cli20.MyApp(sys.stdout), None)
- test_id = 'test_id'
- args = [test_id]
- self._test_delete_resource(resource, cmd, test_id, args,
- cmd_resource=cmd_resource)
diff --git a/neutronclient/tests/unit/lb/v2/test_cli20_l7rule.py b/neutronclient/tests/unit/lb/v2/test_cli20_l7rule.py
deleted file mode 100644
index 54830542d..000000000
--- a/neutronclient/tests/unit/lb/v2/test_cli20_l7rule.py
+++ /dev/null
@@ -1,210 +0,0 @@
-# Copyright 2016 Radware LTD.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.lb.v2 import l7rule
-from neutronclient.tests.unit import test_cli20
-
-
-"""Structure for mapping cli and api arguments
-
-The structure maps cli arguments and a list of its
-api argument name, default cli value and default api value.
-It helps to make tests more general for different argument types.
-"""
-args_conf = {
- 'admin-state-up': ['admin_state_up', True, True],
- 'admin-state-down': ['admin_state_up', None, False],
- 'type': ['type', 'HOST_NAME', 'HOST_NAME'],
- 'compare-type': ['compare_type', 'EQUAL_TO', 'EQUAL_TO'],
- 'invert-compare': ['invert', None, True],
- 'key': ['key', 'key', 'key'],
- 'value': ['value', 'value', 'value']}
-
-
-class CLITestV20LbL7RuleJSON(test_cli20.CLITestV20Base):
-
- def _get_test_args(self, *args, **kwargs):
- """Function for generically building testing arguments"""
- cli_args = []
- api_args = {}
- for arg in args:
- cli_args.append('--' + arg)
- if not args_conf[arg][1]:
- pass
- elif arg in kwargs:
- cli_args.append(str(kwargs[arg]))
- else:
- cli_args.append(args_conf[arg][1])
-
- if arg in kwargs:
- api_args[args_conf[arg][0]] = kwargs[arg]
- else:
- api_args[args_conf[arg][0]] = args_conf[arg][2]
-
- if 'invert' not in api_args:
- api_args['invert'] = False
- return cli_args, api_args
-
- def _test_create_rule(self, *args, **kwargs):
- resource = 'rule'
- cmd_resource = 'lbaas_l7rule'
- cmd = l7rule.CreateL7Rule(test_cli20.MyApp(sys.stdout), None)
- cli_args, api_args = self._get_test_args(*args, **kwargs)
- position_names = list(api_args.keys())
- position_values = list(api_args.values())
- cli_args.append('test_policy')
- self._test_create_resource(resource, cmd, None, 'test_id',
- cli_args, position_names, position_values,
- cmd_resource=cmd_resource,
- parent_id='test_policy')
-
- def _test_update_rule(self, *args, **kwargs):
- resource = 'rule'
- cmd_resource = 'lbaas_l7rule'
- cmd = l7rule.UpdateL7Rule(test_cli20.MyApp(sys.stdout), None)
- cli_args, api_args = self._get_test_args(*args, **kwargs)
- cli_args.append('test_id')
- cli_args.append('test_policy')
- self._test_update_resource(resource, cmd, 'test_id',
- cli_args, api_args,
- cmd_resource=cmd_resource,
- parent_id='test_policy')
-
- def test_create_rule_with_mandatory_params(self):
- # lbaas-l7rule-create with mandatory params only.
-
- self._test_create_rule('type', 'compare-type',
- 'value')
-
- def test_create_disabled_rule(self):
- # lbaas-l7rule-create disabled rule.
-
- self._test_create_rule('type', 'compare-type',
- 'value', 'admin-state-down')
-
- def test_create_rule_with_all_params(self):
- # lbaas-l7rule-create with all params set.
-
- self._test_create_rule('type', 'compare-type',
- 'invert-compare', 'key', 'value',
- type='HEADER', compare_type='CONTAINS',
- key='other_key', value='other_value')
-
- def test_create_rule_with_inverted_compare(self):
- # lbaas-l7rule-create with invertted compare type.
-
- self._test_create_rule('type', 'compare-type',
- 'invert-compare', 'value')
-
- def test_list_rules(self):
- # lbaas-l7rule-list.
-
- resources = 'rules'
- cmd_resources = 'lbaas_l7rules'
- cmd = l7rule.ListL7Rule(test_cli20.MyApp(sys.stdout), None)
-
- policy_id = 'policy_id'
- self._test_list_resources(resources, cmd, True,
- base_args=[policy_id],
- cmd_resources=cmd_resources,
- parent_id=policy_id,
- query="l7policy_id=%s" % policy_id)
-
- def test_list_rules_pagination(self):
- # lbaas-l7rule-list with pagination.
-
- resources = 'rules'
- cmd_resources = 'lbaas_l7rules'
- cmd = l7rule.ListL7Rule(test_cli20.MyApp(sys.stdout), None)
- policy_id = 'policy_id'
- self._test_list_resources_with_pagination(
- resources, cmd, base_args=[policy_id],
- cmd_resources=cmd_resources, parent_id=policy_id,
- query="l7policy_id=%s" % policy_id)
-
- def test_list_rules_sort(self):
- # lbaas-l7rule-list --sort-key id --sort-key asc.
-
- resources = 'rules'
- cmd_resources = 'lbaas_l7rules'
- cmd = l7rule.ListL7Rule(test_cli20.MyApp(sys.stdout), None)
- policy_id = 'policy_id'
- self._test_list_resources(
- resources, cmd, True, base_args=[policy_id],
- cmd_resources=cmd_resources, parent_id=policy_id,
- query="l7policy_id=%s" % policy_id)
-
- def test_list_rules_limit(self):
- # lbaas-l7rule-list -P.
-
- resources = 'rules'
- cmd_resources = 'lbaas_l7rules'
- cmd = l7rule.ListL7Rule(test_cli20.MyApp(sys.stdout), None)
- policy_id = 'policy_id'
- self._test_list_resources(resources, cmd, page_size=1000,
- base_args=[policy_id],
- cmd_resources=cmd_resources,
- parent_id=policy_id,
- query="l7policy_id=%s" % policy_id)
-
- def test_show_rule_id(self):
- # lbaas-l7rule-show test_id.
-
- resource = 'rule'
- cmd_resource = 'lbaas_l7rule'
- policy_id = 'policy_id'
- cmd = l7rule.ShowL7Rule(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id, policy_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'],
- cmd_resource=cmd_resource,
- parent_id=policy_id)
-
- def test_update_rule_type(self):
- # lbaas-l7rule-update test_id --type HEADER test_policy
-
- self._test_update_rule('type', type='HEADER')
-
- def test_update_rule_compare_type(self):
- # lbaas-l7rule-update test_id --compare-type CONTAINS test_policy.
-
- self._test_update_rule('compare-type',
- **{'compare-type': 'CONTAINS'})
-
- def test_update_rule_inverted_compare_type(self):
- # lbaas-l7rule-update test_id --invert-compare test_policy.
-
- self._test_update_rule('invert-compare')
-
- def test_update_rule_key_value(self):
- # lbaas-l7rule-update test_id --key other --value other test_policy.
-
- self._test_update_rule('key', 'value',
- key='other', value='other')
-
- def test_delete_rule(self):
- # lbaas-l7rule-delete test_id policy_id.
-
- resource = 'rule'
- cmd_resource = 'lbaas_l7rule'
- policy_id = 'policy_id'
- test_id = 'test_id'
- cmd = l7rule.DeleteL7Rule(test_cli20.MyApp(sys.stdout), None)
- args = [test_id, policy_id]
- self._test_delete_resource(resource, cmd, test_id, args,
- cmd_resource=cmd_resource,
- parent_id=policy_id)
diff --git a/neutronclient/tests/unit/lb/v2/test_cli20_listener.py b/neutronclient/tests/unit/lb/v2/test_cli20_listener.py
deleted file mode 100644
index 3993ea7f7..000000000
--- a/neutronclient/tests/unit/lb/v2/test_cli20_listener.py
+++ /dev/null
@@ -1,194 +0,0 @@
-# Copyright 2014 Blue Box Group, Inc.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0.lb.v2 import listener
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20LbListenerJSON(test_cli20.CLITestV20Base):
-
- def test_create_listener_with_loadbalancer(self):
- # lbaas-listener-create with --loadbalancer
- resource = 'listener'
- cmd_resource = 'lbaas_listener'
- cmd = listener.CreateListener(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- loadbalancer_id = 'loadbalancer'
- protocol = 'TCP'
- protocol_port = '80'
- args = ['--protocol', protocol, '--protocol-port', protocol_port,
- '--loadbalancer', loadbalancer_id]
- position_names = ['protocol', 'protocol_port', 'loadbalancer_id']
- position_values = [protocol, protocol_port, loadbalancer_id,
- True]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource)
-
- def test_create_listener_with_default_pool(self):
- # lbaas-listener-create with --default-pool and no --loadbalancer.
- resource = 'listener'
- cmd_resource = 'lbaas_listener'
- cmd = listener.CreateListener(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- default_pool_id = 'default-pool'
- protocol = 'TCP'
- protocol_port = '80'
- args = ['--protocol', protocol, '--protocol-port', protocol_port,
- '--default-pool', default_pool_id]
- position_names = ['protocol', 'protocol_port', 'default_pool_id']
- position_values = [protocol, protocol_port, default_pool_id,
- True]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource)
-
- def test_create_listener_with_no_loadbalancer_or_default_pool(self):
- # lbaas-listener-create without --default-pool or --loadbalancer.
- resource = 'listener'
- cmd_resource = 'lbaas_listener'
- cmd = listener.CreateListener(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- protocol = 'TCP'
- protocol_port = '80'
- args = ['--protocol', protocol, '--protocol-port', protocol_port]
- position_names = ['protocol', 'protocol_port']
- position_values = [protocol, protocol_port, True]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource,
- no_api_call=True,
- expected_exception=exceptions.CommandError)
-
- def test_create_listener_with_all_params(self):
- # lbaas-listener-create with all params set.
- resource = 'listener'
- cmd_resource = 'lbaas_listener'
- cmd = listener.CreateListener(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- loadbalancer = 'loadbalancer'
- default_pool_id = 'default-pool'
- protocol = 'TCP'
- protocol_port = '80'
- connection_limit = 10
- def_tls_cont_ref = '11111'
- args = ['--admin-state-down',
- '--protocol', protocol, '--protocol-port', protocol_port,
- '--loadbalancer', loadbalancer,
- '--default-pool', default_pool_id,
- '--default-tls-container-ref', def_tls_cont_ref,
- '--sni-container-refs', '1111', '2222', '3333',
- '--connection-limit', '10']
- position_names = ['admin_state_up',
- 'protocol', 'protocol_port', 'loadbalancer_id',
- 'default_pool_id',
- 'default_tls_container_ref', 'sni_container_refs',
- 'connection_limit']
- position_values = [False, protocol, protocol_port, loadbalancer,
- default_pool_id,
- def_tls_cont_ref, ['1111', '2222', '3333'],
- connection_limit]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource)
-
- def test_list_listeners(self):
- # lbaas-listener-list.
- resources = 'listeners'
- cmd_resources = 'lbaas_listeners'
- cmd = listener.ListListener(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True,
- cmd_resources=cmd_resources)
-
- def test_list_listeners_pagination(self):
- # lbaas-listener-list with pagination.
- resources = 'listeners'
- cmd_resources = 'lbaas_listeners'
- cmd = listener.ListListener(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd,
- cmd_resources=cmd_resources)
-
- def test_list_listeners_sort(self):
- # lbaas-listener-list --sort-key id --sort-key asc.
- resources = 'listeners'
- cmd_resources = 'lbaas_listeners'
- cmd = listener.ListListener(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True,
- cmd_resources=cmd_resources)
-
- def test_list_listeners_limit(self):
- # lbaas-listener-list -P.
- resources = 'listeners'
- cmd_resources = 'lbaas_listeners'
- cmd = listener.ListListener(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000,
- cmd_resources=cmd_resources)
-
- def test_show_listener_id(self):
- # lbaas-listener-show test_id.
- resource = 'listener'
- cmd_resource = 'lbaas_listener'
- cmd = listener.ShowListener(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'],
- cmd_resource=cmd_resource)
-
- def test_show_listener_id_name(self):
- # lbaas-listener-show.
- resource = 'listener'
- cmd_resource = 'lbaas_listener'
- cmd = listener.ShowListener(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'],
- cmd_resource=cmd_resource)
-
- def _test_update_listener(self, args, expected_values):
- resource = 'listener'
- cmd_resource = 'lbaas_listener'
- my_id = 'myid'
- args.insert(0, my_id)
- cmd = listener.UpdateListener(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, my_id,
- args, expected_values,
- cmd_resource=cmd_resource)
-
- def test_update_listener(self):
- # lbaas-listener-update myid --name newname.
- self._test_update_listener(['--name', 'newname'],
- {'name': 'newname', })
- # lbaas-listener-update myid --description check.
- self._test_update_listener(['--description', 'check'],
- {'description': 'check', })
- # lbaas-listener-update myid --connection-limit -1
- self._test_update_listener(['--connection-limit', '-1'],
- {'connection_limit': -1, })
- # lbaas-listener-update myid --admin-state-up False.
- self._test_update_listener(['--admin-state-up', 'False'],
- {'admin_state_up': 'False', })
-
- def test_delete_listener(self):
- # lbaas-listener-delete my-id.
- resource = 'listener'
- cmd_resource = 'lbaas_listener'
- cmd = listener.DeleteListener(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args,
- cmd_resource=cmd_resource)
diff --git a/neutronclient/tests/unit/lb/v2/test_cli20_loadbalancer.py b/neutronclient/tests/unit/lb/v2/test_cli20_loadbalancer.py
deleted file mode 100644
index 3a6010cee..000000000
--- a/neutronclient/tests/unit/lb/v2/test_cli20_loadbalancer.py
+++ /dev/null
@@ -1,213 +0,0 @@
-# Copyright 2014 Blue Box Group, Inc.
-# All Rights Reserved
-#
-# 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 sys
-from unittest import mock
-
-
-from neutronclient.neutron.v2_0.lb.v2 import loadbalancer as lb
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20LbLoadBalancerJSON(test_cli20.CLITestV20Base):
-
- def test_create_loadbalancer_with_mandatory_params(self):
- # lbaas-loadbalancer-create with mandatory params only.
- resource = 'loadbalancer'
- cmd_resource = 'lbaas_loadbalancer'
- cmd = lb.CreateLoadBalancer(test_cli20.MyApp(sys.stdout), None)
- name = 'lbaas-loadbalancer-name'
- vip_subnet_id = 'vip-subnet'
- my_id = 'my-id'
- args = [vip_subnet_id]
- position_names = ['vip_subnet_id']
- position_values = [vip_subnet_id]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource)
-
- def test_create_loadbalancer_with_all_params(self):
- # lbaas-loadbalancer-create with all params set.
- resource = 'loadbalancer'
- cmd_resource = 'lbaas_loadbalancer'
- cmd = lb.CreateLoadBalancer(test_cli20.MyApp(sys.stdout), None)
- name = 'lbaas-loadbalancer-name'
- description = 'lbaas-loadbalancer-desc'
- flavor_id = 'lbaas-loadbalancer-flavor'
- vip_subnet_id = 'vip-subnet'
- my_id = 'my-id'
- args = ['--admin-state-down', '--description', description,
- '--name', name, '--flavor', flavor_id, vip_subnet_id]
- position_names = ['admin_state_up', 'description', 'name',
- 'flavor_id', 'vip_subnet_id']
- position_values = [False, description, name, flavor_id, vip_subnet_id]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource)
-
- def test_list_loadbalancers(self):
- # lbaas-loadbalancer-list.
- resources = 'loadbalancers'
- cmd_resources = 'lbaas_loadbalancers'
- cmd = lb.ListLoadBalancer(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True,
- cmd_resources=cmd_resources)
-
- def test_list_loadbalancers_pagination(self):
- # lbaas-loadbalancer-list with pagination.
- resources = 'loadbalancers'
- cmd_resources = 'lbaas_loadbalancers'
- cmd = lb.ListLoadBalancer(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd,
- cmd_resources=cmd_resources)
-
- def test_list_loadbalancers_sort(self):
- # lbaas-loadbalancer-list --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = 'loadbalancers'
- cmd_resources = 'lbaas_loadbalancers'
- cmd = lb.ListLoadBalancer(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"],
- cmd_resources=cmd_resources)
-
- def test_list_loadbalancers_limit(self):
- # lbaas-loadbalancer-list -P.
- resources = 'loadbalancers'
- cmd_resources = 'lbaas_loadbalancers'
- cmd = lb.ListLoadBalancer(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000,
- cmd_resources=cmd_resources)
-
- def test_show_loadbalancer_id(self):
- # lbaas-loadbalancer-loadbalancer-show test_id.
- resource = 'loadbalancer'
- cmd_resource = 'lbaas_loadbalancer'
- cmd = lb.ShowLoadBalancer(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'],
- cmd_resource=cmd_resource)
-
- def test_show_loadbalancer_id_name(self):
- # lbaas-loadbalancer-loadbalancer-show.
- resource = 'loadbalancer'
- cmd_resource = 'lbaas_loadbalancer'
- cmd = lb.ShowLoadBalancer(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'],
- cmd_resource=cmd_resource)
-
- def _test_update_lb(self, args, expected_values):
- resource = 'loadbalancer'
- cmd_resource = 'lbaas_loadbalancer'
- my_id = 'myid'
- args.insert(0, my_id)
- cmd = lb.UpdateLoadBalancer(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, my_id,
- args, expected_values,
- cmd_resource=cmd_resource)
-
- def test_update_loadbalancer(self):
- # lbaas-loadbalancer-update myid --name newname.
- self._test_update_lb(['--name', 'newname'], {'name': 'newname', })
- # lbaas-loadbalancer-update myid --description check.
- self._test_update_lb(['--description', 'check'],
- {'description': 'check', })
- # lbaas-loadbalancer-update myid --admin-state-up False.
- self._test_update_lb(['--admin-state-up', 'False'],
- {'admin_state_up': 'False', })
-
- def test_delete_loadbalancer(self):
- # lbaas-loadbalancer-loadbalancer-delete my-id.
- resource = 'loadbalancer'
- cmd_resource = 'lbaas_loadbalancer'
- cmd = lb.DeleteLoadBalancer(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args,
- cmd_resource=cmd_resource)
-
- def test_retrieve_loadbalancer_stats(self):
- # lbaas-loadbalancer-stats test_id.
- resource = 'loadbalancer'
- cmd = lb.RetrieveLoadBalancerStats(test_cli20.MyApp(sys.stdout), None)
- my_id = self.test_id
- fields = ['bytes_in', 'bytes_out']
- args = ['--fields', 'bytes_in', '--fields', 'bytes_out', my_id]
-
- query = "&".join(["fields=%s" % field for field in fields])
- expected_res = {'stats': {'bytes_in': '1234', 'bytes_out': '4321'}}
- resstr = self.client.serialize(expected_res)
- path = getattr(self.client, "lbaas_loadbalancer_path_stats")
- return_tup = (test_cli20.MyResp(200), resstr)
-
- cmd_parser = cmd.get_parser("test_" + resource)
- parsed_args = cmd_parser.parse_args(args)
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=return_tup) as mock_request:
- cmd.run(parsed_args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), 2)
- mock_request.assert_called_once_with(
- test_cli20.end_url(path % my_id, query), 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- _str = self.fake_stdout.make_string()
- self.assertIn('bytes_in', _str)
- self.assertIn('1234', _str)
- self.assertIn('bytes_out', _str)
- self.assertIn('4321', _str)
-
- def test_get_loadbalancer_statuses(self):
- # lbaas-loadbalancer-status test_id.
- resource = 'loadbalancer'
- cmd = lb.RetrieveLoadBalancerStatus(test_cli20.MyApp(sys.stdout), None)
- my_id = self.test_id
- args = [my_id]
-
- expected_res = {'statuses': {'operating_status': 'ONLINE',
- 'provisioning_status': 'ACTIVE'}}
-
- resstr = self.client.serialize(expected_res)
-
- path = getattr(self.client, "lbaas_loadbalancer_path_status")
- return_tup = (test_cli20.MyResp(200), resstr)
-
- cmd_parser = cmd.get_parser("test_" + resource)
- parsed_args = cmd_parser.parse_args(args)
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=return_tup) as mock_request:
- cmd.run(parsed_args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.end_url(path % my_id), 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- _str = self.fake_stdout.make_string()
- self.assertIn('operating_status', _str)
- self.assertIn('ONLINE', _str)
- self.assertIn('provisioning_status', _str)
- self.assertIn('ACTIVE', _str)
diff --git a/neutronclient/tests/unit/lb/v2/test_cli20_member.py b/neutronclient/tests/unit/lb/v2/test_cli20_member.py
deleted file mode 100644
index 057da4254..000000000
--- a/neutronclient/tests/unit/lb/v2/test_cli20_member.py
+++ /dev/null
@@ -1,171 +0,0 @@
-# Copyright 2014 Blue Box Group, Inc.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.lb.v2 import member
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20LbMemberJSON(test_cli20.CLITestV20Base):
-
- def test_create_member_with_mandatory_params(self):
- # lbaas-member-create with mandatory params only.
- resource = 'member'
- cmd_resource = 'lbaas_member'
- cmd = member.CreateMember(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- address = '10.1.1.1'
- protocol_port = '80'
- pool_id = 'pool-id'
- subnet_id = 'subnet-id'
- args = ['--address', address, '--protocol-port', protocol_port,
- '--subnet', subnet_id, pool_id]
- position_names = ['admin_state_up', 'address',
- 'protocol_port', 'subnet_id']
- position_values = [True, address, protocol_port, subnet_id]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource,
- parent_id=pool_id)
-
- def test_create_member_with_all_params(self):
- # lbaas-member-create with all params set.
- resource = 'member'
- cmd_resource = 'lbaas_member'
- cmd = member.CreateMember(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- address = '10.1.1.1'
- protocol_port = '80'
- pool_id = 'pool-id'
- subnet_id = 'subnet-id'
- weight = '100'
- name = 'member1'
- args = ['--address', address, '--protocol-port', protocol_port,
- '--subnet', subnet_id, pool_id, '--weight', weight,
- '--admin-state-down', '--name', name]
- position_names = ['admin_state_up', 'address', 'protocol_port',
- 'subnet_id', 'weight', 'name']
- position_values = [False, address, protocol_port,
- subnet_id, weight, name]
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource,
- parent_id=pool_id)
-
- def test_list_members(self):
- # lbaas-member-list.
- resources = 'members'
- cmd_resources = 'lbaas_members'
- pool_id = 'pool-id'
- cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True, base_args=[pool_id],
- cmd_resources=cmd_resources,
- parent_id=pool_id,
- query="pool_id=%s" % pool_id)
-
- def test_list_members_pagination(self):
- # lbaas-member-list with pagination.
- resources = 'members'
- cmd_resources = 'lbaas_members'
- pool_id = 'pool-id'
- cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd,
- base_args=[pool_id],
- cmd_resources=cmd_resources,
- parent_id=pool_id,
- query="pool_id=%s" % pool_id)
-
- def test_list_members_sort(self):
- # lbaas-member-list --sort-key id --sort-key asc.
- resources = 'members'
- cmd_resources = 'lbaas_members'
- pool_id = 'pool-id'
- cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True, base_args=[pool_id],
- cmd_resources=cmd_resources,
- parent_id=pool_id,
- query="pool_id=%s" % pool_id)
-
- def test_list_members_limit(self):
- # lbaas-member-list -P.
- resources = 'members'
- cmd_resources = 'lbaas_members'
- pool_id = 'pool-id'
- cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000,
- base_args=[pool_id],
- cmd_resources=cmd_resources,
- parent_id=pool_id,
- query="pool_id=%s" % pool_id)
-
- def test_show_member_id(self):
- # lbaas-member-show test_id.
- resource = 'member'
- cmd_resource = 'lbaas_member'
- pool_id = 'pool-id'
- cmd = member.ShowMember(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id, pool_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'],
- cmd_resource=cmd_resource, parent_id=pool_id)
-
- def test_show_member_id_name(self):
- # lbaas-member-show.
- resource = 'member'
- cmd_resource = 'lbaas_member'
- pool_id = 'pool-id'
- cmd = member.ShowMember(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id, pool_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'],
- cmd_resource=cmd_resource, parent_id=pool_id)
-
- def test_update_member(self):
- # lbaas-member-update myid --name newname.
- resource = 'member'
- cmd_resource = 'lbaas_member'
- my_id = 'my-id'
- pool_id = 'pool-id'
- args = [my_id, pool_id, '--name', 'newname']
- cmd = member.UpdateMember(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, my_id, args,
- {'name': 'newname', },
- cmd_resource=cmd_resource,
- parent_id=pool_id)
- # lbaas-member-update myid --weight 100.
- args = [my_id, pool_id, '--weight', '100']
- self._test_update_resource(resource, cmd, my_id, args,
- {'weight': '100', },
- cmd_resource=cmd_resource,
- parent_id=pool_id)
- # lbaas-member-update myid --admin-state-up False
- args = [my_id, pool_id, '--admin-state-up', 'False']
- self._test_update_resource(resource, cmd, my_id, args,
- {'admin_state_up': 'False', },
- cmd_resource=cmd_resource,
- parent_id=pool_id)
-
- def test_delete_member(self):
- # lbaas-member-delete my-id.
- resource = 'member'
- cmd_resource = 'lbaas_member'
- cmd = member.DeleteMember(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- pool_id = 'pool-id'
- args = [my_id, pool_id]
- self._test_delete_resource(resource, cmd, my_id, args,
- cmd_resource=cmd_resource,
- parent_id=pool_id)
diff --git a/neutronclient/tests/unit/lb/v2/test_cli20_pool.py b/neutronclient/tests/unit/lb/v2/test_cli20_pool.py
deleted file mode 100644
index 8c1f428a3..000000000
--- a/neutronclient/tests/unit/lb/v2/test_cli20_pool.py
+++ /dev/null
@@ -1,202 +0,0 @@
-# Copyright 2014 Blue Box Group, Inc.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0.lb.v2 import pool
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20LbPoolJSON(test_cli20.CLITestV20Base):
-
- def test_create_pool_with_listener(self):
- # lbaas-pool-create with listener
- resource = 'pool'
- cmd_resource = 'lbaas_pool'
- cmd = pool.CreatePool(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- lb_algorithm = 'ROUND_ROBIN'
- listener = 'listener'
- protocol = 'TCP'
- args = ['--lb-algorithm', lb_algorithm, '--protocol', protocol,
- '--listener', listener]
- position_names = ['admin_state_up', 'lb_algorithm', 'protocol',
- 'listener_id']
- position_values = [True, lb_algorithm, protocol, listener]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource)
-
- def test_create_pool_with_loadbalancer_no_listener(self):
- """lbaas-pool-create with loadbalancer, no listener."""
- resource = 'pool'
- cmd_resource = 'lbaas_pool'
- cmd = pool.CreatePool(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- lb_algorithm = 'ROUND_ROBIN'
- loadbalancer = 'loadbalancer'
- protocol = 'TCP'
- args = ['--lb-algorithm', lb_algorithm, '--protocol', protocol,
- '--loadbalancer', loadbalancer]
- position_names = ['admin_state_up', 'lb_algorithm', 'protocol',
- 'loadbalancer_id']
- position_values = [True, lb_algorithm, protocol, loadbalancer]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource)
-
- def test_create_pool_with_no_listener_or_loadbalancer(self):
- """lbaas-pool-create with no listener or loadbalancer."""
- resource = 'pool'
- cmd_resource = 'lbaas_pool'
- cmd = pool.CreatePool(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- lb_algorithm = 'ROUND_ROBIN'
- protocol = 'TCP'
- args = ['--lb-algorithm', lb_algorithm, '--protocol', protocol]
- position_names = ['admin_state_up', 'lb_algorithm', 'protocol']
- position_values = [True, lb_algorithm, protocol]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource,
- no_api_call=True,
- expected_exception=exceptions.CommandError)
-
- def test_create_pool_with_all_params(self):
- # lbaas-pool-create with all params set.
- resource = 'pool'
- cmd_resource = 'lbaas_pool'
- cmd = pool.CreatePool(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- lb_algorithm = 'ROUND_ROBIN'
- listener = 'listener'
- loadbalancer = 'loadbalancer'
- protocol = 'TCP'
- description = 'description'
- session_persistence_str = 'type=APP_COOKIE,cookie_name=1234'
- session_persistence = {'type': 'APP_COOKIE',
- 'cookie_name': '1234'}
- name = 'my-pool'
- args = ['--lb-algorithm', lb_algorithm, '--protocol', protocol,
- '--description', description, '--session-persistence',
- session_persistence_str, '--admin-state-down', '--name', name,
- '--listener', listener, '--loadbalancer', loadbalancer]
- position_names = ['lb_algorithm', 'protocol', 'description',
- 'session_persistence', 'admin_state_up', 'name',
- 'listener_id', 'loadbalancer_id']
- position_values = [lb_algorithm, protocol, description,
- session_persistence, False, name, listener,
- loadbalancer]
- self._test_create_resource(resource, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=cmd_resource)
-
- def test_list_pools(self):
- # lbaas-pool-list.
- resources = 'pools'
- cmd_resources = 'lbaas_pools'
- cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True,
- cmd_resources=cmd_resources)
-
- def test_list_pools_pagination(self):
- # lbaas-pool-list with pagination.
- resources = 'pools'
- cmd_resources = 'lbaas_pools'
- cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd,
- cmd_resources=cmd_resources)
-
- def test_list_pools_sort(self):
- # lbaas-pool-list --sort-key id --sort-key asc.
- resources = 'pools'
- cmd_resources = 'lbaas_pools'
- cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True,
- cmd_resources=cmd_resources)
-
- def test_list_pools_limit(self):
- # lbaas-pool-list -P.
- resources = 'pools'
- cmd_resources = 'lbaas_pools'
- cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000,
- cmd_resources=cmd_resources)
-
- def test_show_pool_id(self):
- # lbaas-pool-show test_id.
- resource = 'pool'
- cmd_resource = 'lbaas_pool'
- cmd = pool.ShowPool(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'],
- cmd_resource=cmd_resource)
-
- def test_show_pool_id_name(self):
- # lbaas-pool-show.
- resource = 'pool'
- cmd_resource = 'lbaas_pool'
- cmd = pool.ShowPool(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'],
- cmd_resource=cmd_resource)
-
- def test_update_pool(self):
- # lbaas-pool-update myid --name newname --description SuperPool
- # --lb-algorithm SOURCE_IP --admin-state-up
- # --session-persistence type=dict,type=HTTP_COOKIE,cookie_name=pie
-
- resource = 'pool'
- cmd_resource = 'lbaas_pool'
- cmd = pool.UpdatePool(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', '--name', 'newname',
- '--description', 'SuperPool', '--lb-algorithm', "SOURCE_IP",
- '--admin-state-up', 'True',
- '--session-persistence', 'type=dict,'
- 'type=HTTP_COOKIE,cookie_name=pie']
- body = {'name': 'newname',
- "description": "SuperPool",
- "lb_algorithm": "SOURCE_IP",
- "admin_state_up": 'True',
- 'session_persistence': {
- 'type': 'HTTP_COOKIE',
- 'cookie_name': 'pie',
- }, }
- self._test_update_resource(resource, cmd, 'myid', args, body,
- cmd_resource=cmd_resource)
- # lbaas-pool-update myid --name Name
- # --no-session-persistence
-
- resource = 'pool'
- cmd_resource = 'lbaas_pool'
- cmd = pool.UpdatePool(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', '--name', 'Name', '--no-session-persistence']
- body = {'name': "Name",
- "session_persistence": None, }
- self._test_update_resource(resource, cmd, 'myid', args, body,
- cmd_resource=cmd_resource)
-
- def test_delete_pool(self):
- # lbaas-pool-delete my-id.
- resource = 'pool'
- cmd_resource = 'lbaas_pool'
- cmd = pool.DeletePool(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args,
- cmd_resource=cmd_resource)
diff --git a/neutronclient/tests/unit/qos/__init__.py b/neutronclient/tests/unit/qos/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/neutronclient/tests/unit/qos/test_cli20_bandwidth_limit_rule.py b/neutronclient/tests/unit/qos/test_cli20_bandwidth_limit_rule.py
deleted file mode 100644
index 8d4380a81..000000000
--- a/neutronclient/tests/unit/qos/test_cli20_bandwidth_limit_rule.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# Copyright 2015 Huawei Technologies India Pvt Ltd.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.qos import bandwidth_limit_rule as bw_rule
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20QoSBandwidthLimitRuleJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['bandwidth_limit_rule']
-
- def setUp(self):
- super(CLITestV20QoSBandwidthLimitRuleJSON, self).setUp()
- self.res = 'bandwidth_limit_rule'
- self.cmd_res = 'qos_bandwidth_limit_rule'
- self.ress = self.res + 's'
- self.cmd_ress = self.cmd_res + 's'
-
- def test_create_bandwidth_limit_rule_with_max_kbps(self):
- cmd = bw_rule.CreateQoSBandwidthLimitRule(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- max_kbps = '1337'
- policy_id = 'policy_id'
- args = ['--max-kbps', max_kbps, policy_id]
- position_names = ['max_kbps']
- position_values = [max_kbps]
- self._test_create_resource(self.res, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=self.cmd_res,
- parent_id=policy_id)
-
- def test_create_bandwidth_limit_rule_with_max_burst_kbps(self):
- cmd = bw_rule.CreateQoSBandwidthLimitRule(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- max_burst_kbps = '1337'
- policy_id = 'policy_id'
- args = ['--max-burst-kbps', max_burst_kbps, policy_id]
- position_names = ['max_burst_kbps']
- position_values = [max_burst_kbps]
- self._test_create_resource(self.res, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=self.cmd_res,
- parent_id=policy_id)
-
- def test_create_bandwidth_limit_rule_with_all_params(self):
- cmd = bw_rule.CreateQoSBandwidthLimitRule(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- max_kbps = '1337'
- max_burst_kbps = '1337'
- policy_id = 'policy_id'
- args = ['--max-kbps', max_kbps,
- '--max-burst-kbps', max_burst_kbps,
- policy_id]
- position_names = ['max_kbps', 'max_burst_kbps']
- position_values = [max_kbps, max_burst_kbps]
- self._test_create_resource(self.res, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=self.cmd_res,
- parent_id=policy_id)
-
- def test_update_bandwidth_limit_rule_with_max_kbps(self):
- cmd = bw_rule.UpdateQoSBandwidthLimitRule(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- max_kbps = '1337'
- policy_id = 'policy_id'
- args = ['--max-kbps', max_kbps, my_id, policy_id]
- self._test_update_resource(self.res, cmd, my_id, args,
- {'max_kbps': max_kbps, },
- cmd_resource=self.cmd_res,
- parent_id=policy_id)
-
- def test_update_bandwidth_limit_rule_with_max_burst_kbps(self):
- cmd = bw_rule.UpdateQoSBandwidthLimitRule(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- max_burst_kbps = '1337'
- policy_id = 'policy_id'
- args = ['--max-burst-kbps', max_burst_kbps,
- my_id, policy_id]
- self._test_update_resource(self.res, cmd, my_id, args,
- {'max_burst_kbps': max_burst_kbps},
- cmd_resource=self.cmd_res,
- parent_id=policy_id)
-
- def test_update_bandwidth_limit_rule_with_all_params(self):
- cmd = bw_rule.UpdateQoSBandwidthLimitRule(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- max_kbps = '1337'
- max_burst_kbps = '1337'
- policy_id = 'policy_id'
- args = ['--max-kbps', max_kbps,
- '--max-burst-kbps', max_burst_kbps,
- my_id, policy_id]
- self._test_update_resource(self.res, cmd, my_id, args,
- {'max_kbps': max_kbps,
- 'max_burst_kbps': max_burst_kbps},
- cmd_resource=self.cmd_res,
- parent_id=policy_id)
-
- def test_delete_bandwidth_limit_rule(self):
- cmd = bw_rule.DeleteQoSBandwidthLimitRule(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- policy_id = 'policy_id'
- args = [my_id, policy_id]
- self._test_delete_resource(self.res, cmd, my_id, args,
- cmd_resource=self.cmd_res,
- parent_id=policy_id)
-
- def test_show_bandwidth_limit_rule(self):
- cmd = bw_rule.ShowQoSBandwidthLimitRule(test_cli20.MyApp(sys.stdout),
- None)
- policy_id = 'policy_id'
- args = ['--fields', 'id', self.test_id, policy_id]
- self._test_show_resource(self.res, cmd, self.test_id, args,
- ['id'], cmd_resource=self.cmd_res,
- parent_id=policy_id)
diff --git a/neutronclient/tests/unit/qos/test_cli20_dscp_marking_rule.py b/neutronclient/tests/unit/qos/test_cli20_dscp_marking_rule.py
deleted file mode 100644
index 881b2f373..000000000
--- a/neutronclient/tests/unit/qos/test_cli20_dscp_marking_rule.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright 2016 Comcast Inc.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0.qos import dscp_marking_rule as dscp_rule
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20QoSDscpMarkingRuleJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['dscp_marking_rule']
-
- def setUp(self):
- super(CLITestV20QoSDscpMarkingRuleJSON, self).setUp()
- self.dscp_res = 'dscp_marking_rule'
- self.dscp_cmd_res = 'qos_dscp_marking_rule'
- self.dscp_ress = self.dscp_res + 's'
- self.dscp_cmd_ress = self.dscp_cmd_res + 's'
-
- def test_create_dscp_marking_rule_with_dscp_mark(self):
- cmd = dscp_rule.CreateQoSDscpMarkingRule(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- policy_id = 'policy_id'
- position_names = ['dscp_mark']
- valid_dscp_marks = ['0', '56']
- invalid_dscp_marks = ['-1', '19', '42', '44', '57', '58']
- for dscp_mark in valid_dscp_marks:
- args = ['--dscp-mark', dscp_mark, policy_id]
- position_values = [dscp_mark]
- self._test_create_resource(self.dscp_res, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=self.dscp_cmd_res,
- parent_id=policy_id)
- for dscp_mark in invalid_dscp_marks:
- args = ['--dscp-mark', dscp_mark, policy_id]
- position_values = [dscp_mark]
- self._test_create_resource(
- self.dscp_res, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=self.dscp_cmd_res,
- parent_id=policy_id,
- no_api_call=True,
- expected_exception=exceptions.CommandError)
-
- def test_update_dscp_marking_rule_with_dscp_mark(self):
- cmd = dscp_rule.UpdateQoSDscpMarkingRule(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- dscp_mark = '56'
- policy_id = 'policy_id'
- args = ['--dscp-mark', dscp_mark,
- my_id, policy_id]
- self._test_update_resource(self.dscp_res, cmd, my_id, args,
- {'dscp_mark': dscp_mark},
- cmd_resource=self.dscp_cmd_res,
- parent_id=policy_id)
-
- def test_delete_dscp_marking_rule(self):
- cmd = dscp_rule.DeleteQoSDscpMarkingRule(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- policy_id = 'policy_id'
- args = [my_id, policy_id]
- self._test_delete_resource(self.dscp_res, cmd, my_id, args,
- cmd_resource=self.dscp_cmd_res,
- parent_id=policy_id)
-
- def test_show_dscp_marking_rule(self):
- cmd = dscp_rule.ShowQoSDscpMarkingRule(test_cli20.MyApp(sys.stdout),
- None)
- policy_id = 'policy_id'
- args = ['--fields', 'id', self.test_id, policy_id]
- self._test_show_resource(self.dscp_res, cmd, self.test_id, args,
- ['id'], cmd_resource=self.dscp_cmd_res,
- parent_id=policy_id)
diff --git a/neutronclient/tests/unit/qos/test_cli20_minimum_bandwidth_rule.py b/neutronclient/tests/unit/qos/test_cli20_minimum_bandwidth_rule.py
deleted file mode 100644
index 39dccd614..000000000
--- a/neutronclient/tests/unit/qos/test_cli20_minimum_bandwidth_rule.py
+++ /dev/null
@@ -1,143 +0,0 @@
-# Copyright (c) 2016 Intel Corporation.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.qos import minimum_bandwidth_rule as bw_rule
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20QoSMinimumBandwidthRuleJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['minimum_bandwidth_rule']
-
- def setUp(self):
- super(CLITestV20QoSMinimumBandwidthRuleJSON, self).setUp()
- self.res = 'minimum_bandwidth_rule'
- self.cmd_res = 'qos_minimum_bandwidth_rule'
- self.ress = self.res + 's'
- self.cmd_ress = self.cmd_res + 's'
-
- def test_create_minimum_bandwidth_rule_min_kbps_only(self):
- cmd = bw_rule.CreateQoSMinimumBandwidthRule(
- test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- min_kbps = '1500'
- policy_id = 'policy_id'
- args = ['--min-kbps', min_kbps,
- policy_id]
- position_names = ['min_kbps']
- position_values = [min_kbps]
- self.assertRaises(SystemExit, self._test_create_resource,
- self.res, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=self.cmd_res,
- parent_id=policy_id,
- no_api_call=True)
-
- def test_create_minimum_bandwidth_rule_direction_only(self):
- cmd = bw_rule.CreateQoSMinimumBandwidthRule(
- test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- direction = 'egress'
- policy_id = 'policy_id'
- args = ['--direction', direction,
- policy_id]
- position_names = ['direction']
- position_values = [direction]
- self.assertRaises(SystemExit, self._test_create_resource,
- self.res, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=self.cmd_res,
- parent_id=policy_id,
- no_api_call=True)
-
- def test_create_minimum_bandwidth_rule_none(self):
- cmd = bw_rule.CreateQoSMinimumBandwidthRule(
- test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- policy_id = 'policy_id'
- args = [policy_id]
- position_names = []
- position_values = []
- self.assertRaises(SystemExit, self._test_create_resource,
- self.res, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=self.cmd_res,
- parent_id=policy_id,
- no_api_call=True)
-
- def test_create_minimum_bandwidth_rule_all(self):
- cmd = bw_rule.CreateQoSMinimumBandwidthRule(
- test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- min_kbps = '1500'
- direction = 'egress'
- policy_id = 'policy_id'
- args = ['--min-kbps', min_kbps,
- '--direction', direction,
- policy_id]
- position_names = ['direction', 'min_kbps']
- position_values = [direction, min_kbps]
- self._test_create_resource(self.res, cmd, '', my_id, args,
- position_names, position_values,
- cmd_resource=self.cmd_res,
- parent_id=policy_id)
-
- def test_update_minimum_bandwidth_rule(self):
- cmd = bw_rule.UpdateQoSMinimumBandwidthRule(
- test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- min_kbps = '1200'
- direction = 'egress'
- policy_id = 'policy_id'
- args = ['--min-kbps', min_kbps,
- '--direction', direction,
- my_id, policy_id]
- self._test_update_resource(self.res, cmd, my_id, args,
- {'min_kbps': min_kbps,
- 'direction': direction},
- cmd_resource=self.cmd_res,
- parent_id=policy_id)
-
- def test_delete_minimum_bandwidth_rule(self):
- cmd = bw_rule.DeleteQoSMinimumBandwidthRule(
- test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- policy_id = 'policy_id'
- args = [my_id, policy_id]
- self._test_delete_resource(self.res, cmd, my_id, args,
- cmd_resource=self.cmd_res,
- parent_id=policy_id)
-
- def test_show_minimum_bandwidth_rule(self):
- cmd = bw_rule.ShowQoSMinimumBandwidthRule(
- test_cli20.MyApp(sys.stdout), None)
- policy_id = 'policy_id'
- args = [self.test_id, policy_id]
- self._test_show_resource(self.res, cmd, self.test_id, args,
- [], cmd_resource=self.cmd_res,
- parent_id=policy_id)
-
- def test_list_minimum_bandwidth_rule(self):
- cmd = bw_rule.ListQoSMinimumBandwidthRules(
- test_cli20.MyApp(sys.stdout), None)
- policy_id = 'policy_id'
- args = [policy_id]
- contents = [{'name': 'rule1', 'min-kbps': 1000, 'direction': 'egress'}]
- self._test_list_resources(self.ress, cmd, parent_id=policy_id,
- cmd_resources=self.cmd_ress,
- base_args=args, response_contents=contents)
diff --git a/neutronclient/tests/unit/qos/test_cli20_policy.py b/neutronclient/tests/unit/qos/test_cli20_policy.py
deleted file mode 100644
index b1db866e4..000000000
--- a/neutronclient/tests/unit/qos/test_cli20_policy.py
+++ /dev/null
@@ -1,192 +0,0 @@
-# Copyright 2015 Huawei Technologies India Pvt Ltd.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.qos import policy as policy
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20QoSPolicyJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['policy']
-
- def setUp(self):
- super(CLITestV20QoSPolicyJSON, self).setUp()
- self.res = 'policy'
- self.cmd_res = 'qos_policy'
- self.ress = "policies"
- self.cmd_ress = 'qos_policies'
-
- def test_create_policy_with_only_keyattributes(self):
- # Create qos policy abc.
- cmd = policy.CreateQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- myid = 'myid'
- name = 'abc'
- args = [name]
- position_names = ['name']
- position_values = [name]
- self._test_create_resource(self.res, cmd, name, myid, args,
- position_names, position_values,
- cmd_resource=self.cmd_res)
-
- def test_create_policy_with_description(self):
- # Create qos policy xyz --description abc.
- cmd = policy.CreateQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- myid = 'myid'
- name = 'abc'
- description = 'policy_abc'
- args = [name, '--description', description]
- position_names = ['name', 'description']
- position_values = [name, description]
- self._test_create_resource(self.res, cmd, name, myid, args,
- position_names, position_values,
- cmd_resource=self.cmd_res)
-
- def test_create_policy_with_shared(self):
- # Create qos policy abc shared across tenants
- cmd = policy.CreateQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- myid = 'myid'
- name = 'abc'
- description = 'policy_abc'
- args = [name, '--description', description, '--shared']
- position_names = ['name', 'description', 'shared']
- position_values = [name, description, True]
- self._test_create_resource(self.res, cmd, name, myid, args,
- position_names, position_values,
- cmd_resource=self.cmd_res)
-
- def test_create_policy_with_unicode(self):
- # Create qos policy u'\u7f51\u7edc'.
- cmd = policy.CreateQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- myid = 'myid'
- name = u'\u7f51\u7edc'
- description = u'\u7f51\u7edc'
- args = [name, '--description', description]
- position_names = ['name', 'description']
- position_values = [name, description]
- self._test_create_resource(self.res, cmd, name, myid, args,
- position_names, position_values,
- cmd_resource=self.cmd_res)
-
- def test_update_policy(self):
- # policy-update myid --name newname.
- cmd = policy.UpdateQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(self.res, cmd, 'myid',
- ['myid', '--name', 'newname'],
- {'name': 'newname', },
- cmd_resource=self.cmd_res)
-
- def test_update_policy_description(self):
- # policy-update myid --name newname --description newdesc
- cmd = policy.UpdateQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(self.res, cmd, 'myid',
- ['myid', '--description', 'newdesc'],
- {'description': 'newdesc', },
- cmd_resource=self.cmd_res)
-
- def test_update_policy_to_shared(self):
- # policy-update myid --shared
- cmd = policy.UpdateQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(self.res, cmd, 'myid',
- ['myid', '--shared'],
- {'shared': True, },
- cmd_resource=self.cmd_res)
-
- def test_update_policy_to_no_shared(self):
- # policy-update myid --no-shared
- cmd = policy.UpdateQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(self.res, cmd, 'myid',
- ['myid', '--no-shared'],
- {'shared': False, },
- cmd_resource=self.cmd_res)
-
- def test_update_policy_to_shared_no_shared_together(self):
- # policy-update myid --shared --no-shared
- cmd = policy.UpdateQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self.assertRaises(
- SystemExit,
- self._test_update_resource,
- self.res, cmd, 'myid',
- ['myid', '--shared', '--no-shared'], {},
- cmd_resource=self.cmd_res
- )
-
- def test_list_policies(self):
- # qos-policy-list.
- cmd = policy.ListQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(self.ress, cmd, True,
- cmd_resources=self.cmd_ress)
-
- def test_list_policies_pagination(self):
- # qos-policy-list for pagination.
- cmd = policy.ListQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources_with_pagination(self.ress, cmd,
- cmd_resources=self.cmd_ress)
-
- def test_list_policies_sort(self):
- # sorted list: qos-policy-list --sort-key name --sort-key id
- # --sort-key asc --sort-key desc
- cmd = policy.ListQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(self.ress, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"],
- cmd_resources=self.cmd_ress)
-
- def test_list_policies_limit(self):
- # size (1000) limited list: qos-policy-list -P.
- cmd = policy.ListQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(self.ress, cmd, page_size=1000,
- cmd_resources=self.cmd_ress)
-
- def test_show_policy_id(self):
- # qos-policy-show test_id.
- cmd = policy.ShowQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(self.res, cmd, self.test_id, args,
- ['id'], cmd_resource=self.cmd_res)
-
- def test_show_policy_name(self):
- # qos-policy-show.
- cmd = policy.ShowQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(self.res, cmd, self.test_id,
- args, ['id', 'name'],
- cmd_resource=self.cmd_res)
-
- def test_delete_policy(self):
- # qos-policy-delete my-id.
- cmd = policy.DeleteQoSPolicy(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'myid1'
- args = [my_id]
- self._test_delete_resource(self.res, cmd, my_id, args,
- cmd_resource=self.cmd_res)
diff --git a/neutronclient/tests/unit/qos/test_cli20_rule.py b/neutronclient/tests/unit/qos/test_cli20_rule.py
deleted file mode 100644
index f77c3c410..000000000
--- a/neutronclient/tests/unit/qos/test_cli20_rule.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2015 Huawei Technologies India Pvt Ltd.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.qos import rule as qos_rule
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20QoSRuleJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['bandwidth_limit_rule',
- 'dscp_marking_rule',
- 'minimum_bandwidth_rule']
-
- def setUp(self):
- super(CLITestV20QoSRuleJSON, self).setUp()
-
- def test_list_qos_rule_types(self):
- # qos_rule_types.
- resources = 'rule_types'
- cmd_resources = 'qos_rule_types'
- response_contents = [{'type': 'bandwidth_limit'},
- {'type': 'dscp_marking'},
- {'type': 'minimum_bandwidth'}]
-
- cmd = qos_rule.ListQoSRuleTypes(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, True,
- response_contents=response_contents,
- cmd_resources=cmd_resources)
diff --git a/neutronclient/tests/unit/test_auto_allocated_topology.py b/neutronclient/tests/unit/test_auto_allocated_topology.py
deleted file mode 100644
index e2f7e5b13..000000000
--- a/neutronclient/tests/unit/test_auto_allocated_topology.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# Copyright 2016 IBM
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0 import auto_allocated_topology as aat
-from neutronclient.tests.unit import test_cli20
-
-
-class TestAutoAllocatedTopologyJSON(test_cli20.CLITestV20Base):
-
- def test_show_auto_allocated_topology_arg(self):
- resource = 'auto_allocated_topology'
- cmd = aat.ShowAutoAllocatedTopology(test_cli20.MyApp(sys.stdout), None)
- args = ['--tenant-id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args)
-
- def test_show_auto_allocated_topology_posarg(self):
- resource = 'auto_allocated_topology'
- cmd = aat.ShowAutoAllocatedTopology(test_cli20.MyApp(sys.stdout), None)
- args = ['some-tenant']
- self._test_show_resource(resource, cmd, "some-tenant", args)
-
- def test_show_auto_allocated_topology_no_arg(self):
- resource = 'auto_allocated_topology'
- cmd = aat.ShowAutoAllocatedTopology(test_cli20.MyApp(sys.stdout), None)
- args = []
- self._test_show_resource(resource, cmd, "None", args)
-
- def test_show_auto_allocated_topology_dry_run_as_tenant(self):
- resource = 'auto_allocated_topology'
- cmd = aat.ShowAutoAllocatedTopology(test_cli20.MyApp(sys.stdout), None)
- args = ['--dry-run']
- self._test_show_resource(resource, cmd, "None", args,
- fields=('dry-run',))
-
- def test_show_auto_allocated_topology_dry_run_as_admin(self):
- resource = 'auto_allocated_topology'
- cmd = aat.ShowAutoAllocatedTopology(test_cli20.MyApp(sys.stdout), None)
- args = ['--dry-run', 'some-tenant']
- self._test_show_resource(resource, cmd, "some-tenant", args,
- fields=('dry-run',))
-
- def test_delete_auto_allocated_topology_arg(self):
- resource = 'auto_allocated_topology'
- cmd = aat.DeleteAutoAllocatedTopology(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--tenant-id', self.test_id]
- self._test_delete_resource(resource, cmd, self.test_id, args)
-
- def test_delete_auto_allocated_topology_posarg(self):
- resource = 'auto_allocated_topology'
- cmd = aat.DeleteAutoAllocatedTopology(test_cli20.MyApp(sys.stdout),
- None)
- args = ['some-tenant']
- self._test_delete_resource(resource, cmd, "some-tenant", args)
-
- def test_delete_auto_allocated_topology_no_arg(self):
- resource = 'auto_allocated_topology'
- cmd = aat.DeleteAutoAllocatedTopology(test_cli20.MyApp(sys.stdout),
- None)
- args = []
- self._test_delete_resource(resource, cmd, "None", args)
diff --git a/neutronclient/tests/unit/test_cli20.py b/neutronclient/tests/unit/test_cli20.py
deleted file mode 100644
index a067ee893..000000000
--- a/neutronclient/tests/unit/test_cli20.py
+++ /dev/null
@@ -1,1215 +0,0 @@
-# Copyright 2012 OpenStack Foundation.
-# All Rights Reserved
-#
-# 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 contextlib
-from io import StringIO
-import itertools
-import sys
-from unittest import mock
-import urllib.parse as urlparse
-
-from oslo_serialization import jsonutils
-from oslo_utils import encodeutils
-from oslotest import base
-import requests
-import yaml
-
-from neutronclient.common import constants
-from neutronclient.common import exceptions
-from neutronclient.common import utils
-from neutronclient.neutron import v2_0 as neutronV2_0
-from neutronclient.neutron.v2_0 import network
-from neutronclient import shell
-from neutronclient.v2_0 import client
-
-API_VERSION = "2.0"
-TOKEN = 'testtoken'
-ENDURL = 'localurl'
-REQUEST_ID = 'test_request_id'
-
-
-@contextlib.contextmanager
-def capture_std_streams():
- fake_stdout, fake_stderr = StringIO(), StringIO()
- stdout, stderr = sys.stdout, sys.stderr
- try:
- sys.stdout, sys.stderr = fake_stdout, fake_stderr
- yield fake_stdout, fake_stderr
- finally:
- sys.stdout, sys.stderr = stdout, stderr
-
-
-class FakeStdout(object):
-
- def __init__(self):
- self.content = []
-
- def write(self, text):
- self.content.append(text)
-
- def make_string(self):
- result = ''
- for line in self.content:
- result += encodeutils.safe_decode(line, 'utf-8')
- return result
-
-
-class MyRequest(requests.Request):
- def __init__(self, method=None):
- self.method = method
-
-
-class MyResp(requests.Response):
- def __init__(self, status_code, headers=None, reason=None,
- request=None, url=None):
- self.status_code = status_code
- self.headers = headers or {}
- self.reason = reason
- self.request = request or MyRequest()
- self.url = url
-
-
-class MyApp(object):
- def __init__(self, _stdout):
- self.stdout = _stdout
-
-
-def end_url(path, query=None):
- _url_str = ENDURL + "/v" + API_VERSION + path
- return query and _url_str + "?" + query or _url_str
-
-
-class MyUrlComparator(object):
- def __init__(self, lhs, client):
- self.lhs = lhs
- self.client = client
-
- def __eq__(self, rhs):
- lhsp = urlparse.urlparse(self.lhs)
- rhsp = urlparse.urlparse(rhs)
-
- lhs_qs = urlparse.parse_qsl(lhsp.query)
- rhs_qs = urlparse.parse_qsl(rhsp.query)
-
- return (lhsp.scheme == rhsp.scheme and
- lhsp.netloc == rhsp.netloc and
- lhsp.path == rhsp.path and
- len(lhs_qs) == len(rhs_qs) and
- set(lhs_qs) == set(rhs_qs))
-
- def __str__(self):
- return self.lhs
-
- def __repr__(self):
- return str(self)
-
-
-class MyComparator(object):
- def __init__(self, lhs, client):
- self.lhs = lhs
- self.client = client
-
- def _com_dict(self, lhs, rhs):
- if len(lhs) != len(rhs):
- return False
- for key, value in lhs.items():
- if key not in rhs:
- return False
- rhs_value = rhs[key]
- if not self._com(value, rhs_value):
- return False
- return True
-
- def _com_list(self, lhs, rhs):
- if len(lhs) != len(rhs):
- return False
- for lhs_value in lhs:
- if lhs_value not in rhs:
- return False
- return True
-
- def _com(self, lhs, rhs):
- if lhs is None:
- return rhs is None
- if isinstance(lhs, dict):
- if not isinstance(rhs, dict):
- return False
- return self._com_dict(lhs, rhs)
- if isinstance(lhs, list):
- if not isinstance(rhs, list):
- return False
- return self._com_list(lhs, rhs)
- if isinstance(lhs, tuple):
- if not isinstance(rhs, tuple):
- return False
- return self._com_list(lhs, rhs)
- return lhs == rhs
-
- def __eq__(self, rhs):
- if self.client:
- rhs = self.client.deserialize(rhs, 200)
- return self._com(self.lhs, rhs)
-
- def __repr__(self):
- if self.client:
- return self.client.serialize(self.lhs)
- return str(self.lhs)
-
-
-class ContainsKeyValue(object):
- """Checks whether key/value pair(s) are included in a dict parameter.
-
- This class just checks whether specifid key/value pairs passed in
- __init__() are included in a dict parameter. The comparison does not
- fail even if other key/value pair(s) exists in a target dict.
- """
-
- def __init__(self, expected):
- self._expected = expected
-
- def __eq__(self, other):
- if not isinstance(other, dict):
- return False
- for key, value in self._expected.items():
- if key not in other:
- return False
- if other[key] != value:
- return False
- return True
-
- def __repr__(self):
- return ('<%s (expected: %s)>' %
- (self.__class__.__name__, self._expected))
-
-
-class IsA(object):
- """Checks whether the parameter is of specific type."""
-
- def __init__(self, expected_type):
- self._expected_type = expected_type
-
- def __eq__(self, other):
- return isinstance(other, self._expected_type)
-
- def __repr__(self):
- return ('<%s (expected: %s)>' %
- (self.__class__.__name__, self._expected_type))
-
-
-class CLITestV20Base(base.BaseTestCase):
-
- test_id = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
- id_field = 'id'
-
- non_admin_status_resources = []
-
- def _find_resourceid(self, client, resource, name_or_id,
- cmd_resource=None, parent_id=None):
- return name_or_id
-
- def setUp(self, plurals=None):
- """Prepare the test environment."""
- super(CLITestV20Base, self).setUp()
- client.Client.EXTED_PLURALS.update(constants.PLURALS)
- if plurals is not None:
- client.Client.EXTED_PLURALS.update(plurals)
- self.metadata = {'plurals': client.Client.EXTED_PLURALS}
- self.endurl = ENDURL
- self.fake_stdout = FakeStdout()
-
- self.addCleanup(mock.patch.stopall)
- mock.patch('sys.stdout', new=self.fake_stdout).start()
- mock.patch('neutronclient.neutron.v2_0.find_resourceid_by_name_or_id',
- new=self._find_resourceid).start()
- mock.patch('neutronclient.neutron.v2_0.find_resourceid_by_id',
- new=self._find_resourceid).start()
-
- self.client = client.Client(token=TOKEN, endpoint_url=self.endurl)
-
- def register_non_admin_status_resource(self, resource_name):
- # TODO(amotoki):
- # It is recommended to define
- # "non_admin_status_resources in each test class rather than
- # using register_non_admin_status_resource method.
-
- # If we change self.non_admin_status_resources like this,
- # we need to ensure this should be an instance variable
- # to avoid changing the class variable.
- if (id(self.non_admin_status_resources) ==
- id(self.__class__.non_admin_status_resources)):
- self.non_admin_status_resources = (self.__class__.
- non_admin_status_resources[:])
- self.non_admin_status_resources.append(resource_name)
-
- def _test_create_resource(self, resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id=None, tags=None, admin_state_up=True,
- extra_body=None, cmd_resource=None,
- parent_id=None, no_api_call=False,
- expected_exception=None,
- **kwargs):
- if not cmd_resource:
- cmd_resource = resource
- if (resource in self.non_admin_status_resources):
- body = {resource: {}, }
- else:
- body = {resource: {'admin_state_up': admin_state_up, }, }
- if tenant_id:
- body[resource].update({'tenant_id': tenant_id})
- if tags:
- body[resource].update({'tags': tags})
- if extra_body:
- body[resource].update(extra_body)
- body[resource].update(kwargs)
-
- for i in range(len(position_names)):
- body[resource].update({position_names[i]: position_values[i]})
- ress = {resource:
- {self.id_field: myid}, }
- if name:
- ress[resource].update({'name': name})
- resstr = self.client.serialize(ress)
- # url method body
- resource_plural = self.client.get_resource_plural(cmd_resource)
- path = getattr(self.client, resource_plural + "_path")
- if parent_id:
- path = path % parent_id
- mock_body = MyComparator(body, self.client)
-
- cmd_parser = cmd.get_parser('create_' + resource)
- resp = (MyResp(200), resstr)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- if expected_exception:
- self.assertRaises(expected_exception,
- shell.run_command, cmd, cmd_parser, args)
- else:
- shell.run_command(cmd, cmd_parser, args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), None)
- if not no_api_call:
- mock_request.assert_called_once_with(
- end_url(path), 'POST',
- body=mock_body,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN}))
- if not expected_exception:
- _str = self.fake_stdout.make_string()
- self.assertIn(myid, _str)
- if name:
- self.assertIn(name, _str)
-
- def _test_list_columns(self, cmd, resources,
- resources_out, args=('-f', 'json'),
- cmd_resources=None, parent_id=None):
- if not cmd_resources:
- cmd_resources = resources
-
- resstr = self.client.serialize(resources_out)
-
- path = getattr(self.client, cmd_resources + "_path")
- if parent_id:
- path = path % parent_id
- cmd_parser = cmd.get_parser("list_" + cmd_resources)
- resp = (MyResp(200), resstr)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- shell.run_command(cmd, cmd_parser, args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), None)
- mock_request.assert_called_once_with(
- end_url(path), 'GET',
- body=None,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN}))
-
- def _test_list_resources(self, resources, cmd, detail=False, tags=(),
- fields_1=(), fields_2=(), page_size=None,
- sort_key=(), sort_dir=(), response_contents=None,
- base_args=None, path=None, cmd_resources=None,
- parent_id=None, output_format=None, query=""):
- if not cmd_resources:
- cmd_resources = resources
- if response_contents is None:
- contents = [{self.id_field: 'myid1', },
- {self.id_field: 'myid2', }, ]
- else:
- contents = response_contents
- reses = {resources: contents}
- resstr = self.client.serialize(reses)
- # url method body
- args = base_args if base_args is not None else []
- if detail:
- args.append('-D')
- 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)
- tag_query = urlparse.urlencode(
- {'tag': encodeutils.safe_encode(tag)})
- if query:
- query += "&" + tag_query
- else:
- query = tag_query
- if (not tags) and fields_2:
- args.append('--')
- if fields_2:
- args.append("--fields")
- for field in fields_2:
- args.append(field)
- if detail:
- query = query and query + '&verbose=True' or 'verbose=True'
- for field in itertools.chain(fields_1, fields_2):
- if query:
- query += "&fields=" + field
- else:
- query = "fields=" + field
- if page_size:
- args.append("--page-size")
- args.append(str(page_size))
- if query:
- query += "&limit=%s" % page_size
- else:
- query = "limit=%s" % page_size
- if sort_key:
- for key in sort_key:
- args.append('--sort-key')
- args.append(key)
- if query:
- query += '&'
- query += 'sort_key=%s' % key
- if sort_dir:
- len_diff = len(sort_key) - len(sort_dir)
- if len_diff > 0:
- sort_dir = tuple(sort_dir) + ('asc',) * len_diff
- elif len_diff < 0:
- sort_dir = sort_dir[:len(sort_key)]
- for dir in sort_dir:
- args.append('--sort-dir')
- args.append(dir)
- if query:
- query += '&'
- query += 'sort_dir=%s' % dir
- if path is None:
- path = getattr(self.client, cmd_resources + "_path")
- if parent_id:
- path = path % parent_id
- if output_format:
- args.append('-f')
- args.append(output_format)
- cmd_parser = cmd.get_parser("list_" + cmd_resources)
- resp = (MyResp(200), resstr)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- shell.run_command(cmd, cmd_parser, args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), None)
- mock_request.assert_called_once_with(
- MyUrlComparator(end_url(path, query), self.client),
- 'GET',
- body=None,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN}))
- _str = self.fake_stdout.make_string()
- if response_contents is None:
- self.assertIn('myid1', _str)
- return _str
-
- def _test_list_resources_with_pagination(self, resources, cmd,
- base_args=None,
- cmd_resources=None,
- parent_id=None, query=""):
- if not cmd_resources:
- cmd_resources = resources
-
- path = getattr(self.client, cmd_resources + "_path")
- if parent_id:
- path = path % parent_id
- fake_query = "marker=myid2&limit=2"
- reses1 = {resources: [{'id': 'myid1', },
- {'id': 'myid2', }],
- '%s_links' % resources: [{'href': end_url(path, fake_query),
- 'rel': 'next'}]}
- reses2 = {resources: [{'id': 'myid3', },
- {'id': 'myid4', }]}
- resstr1 = self.client.serialize(reses1)
- resstr2 = self.client.serialize(reses2)
- cmd_parser = cmd.get_parser("list_" + cmd_resources)
- args = base_args if base_args is not None else []
- mock_request_calls = [
- mock.call(
- end_url(path, query), 'GET',
- body=None,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN})),
- mock.call(
- MyUrlComparator(end_url(path, fake_query),
- self.client), 'GET',
- body=None,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN}))]
- mock_request_resp = [(MyResp(200), resstr1), (MyResp(200), resstr2)]
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient,
- "request") as mock_request:
- mock_request.side_effect = mock_request_resp
- shell.run_command(cmd, cmd_parser, args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), None)
- self.assertEqual(2, mock_request.call_count)
- mock_request.assert_has_calls(mock_request_calls)
-
- def _test_update_resource(self, resource, cmd, myid, args, extrafields,
- cmd_resource=None, parent_id=None):
- if not cmd_resource:
- cmd_resource = resource
-
- body = {resource: extrafields}
- path = getattr(self.client, cmd_resource + "_path")
- if parent_id:
- path = path % (parent_id, myid)
- else:
- path = path % myid
- mock_body = MyComparator(body, self.client)
-
- cmd_parser = cmd.get_parser("update_" + cmd_resource)
- resp = (MyResp(204), None)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- shell.run_command(cmd, cmd_parser, args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), None)
- mock_request.assert_called_once_with(
- MyUrlComparator(end_url(path), self.client),
- 'PUT',
- body=mock_body,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN}))
- _str = self.fake_stdout.make_string()
- self.assertIn(myid, _str)
-
- def _test_show_resource(self, resource, cmd, myid, args, fields=(),
- cmd_resource=None, parent_id=None):
- if not cmd_resource:
- cmd_resource = resource
-
- query = "&".join(["fields=%s" % field for field in fields])
- expected_res = {resource:
- {self.id_field: myid,
- 'name': 'myname', }, }
- resstr = self.client.serialize(expected_res)
- path = getattr(self.client, cmd_resource + "_path")
- if parent_id:
- path = path % (parent_id, myid)
- else:
- path = path % myid
- cmd_parser = cmd.get_parser("show_" + cmd_resource)
- resp = (MyResp(200), resstr)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- shell.run_command(cmd, cmd_parser, args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), None)
- mock_request.assert_called_once_with(
- end_url(path, query), 'GET',
- body=None,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN}))
- _str = self.fake_stdout.make_string()
- self.assertIn(myid, _str)
- self.assertIn('myname', _str)
-
- def _test_set_path_and_delete(self, path, parent_id, myid,
- mock_request_calls, mock_request_returns,
- delete_fail=False):
- return_val = 404 if delete_fail else 204
- if parent_id:
- path = path % (parent_id, myid)
- else:
- path = path % (myid)
- mock_request_returns.append((MyResp(return_val), None))
- mock_request_calls.append(mock.call(
- end_url(path), 'DELETE',
- body=None,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN})))
-
- def _test_delete_resource(self, resource, cmd, myid, args,
- cmd_resource=None, parent_id=None,
- extra_id=None, delete_fail=False):
- mock_request_calls = []
- mock_request_returns = []
- if not cmd_resource:
- cmd_resource = resource
- path = getattr(self.client, cmd_resource + "_path")
- self._test_set_path_and_delete(path, parent_id, myid,
- mock_request_calls,
- mock_request_returns)
- # extra_id is used to test for bulk_delete
- if extra_id:
- self._test_set_path_and_delete(path, parent_id, extra_id,
- mock_request_calls,
- mock_request_returns,
- delete_fail)
- cmd_parser = cmd.get_parser("delete_" + cmd_resource)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient,
- "request") as mock_request:
- mock_request.side_effect = mock_request_returns
- shell.run_command(cmd, cmd_parser, args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), None)
- mock_request.assert_has_calls(mock_request_calls)
- _str = self.fake_stdout.make_string()
- self.assertIn(myid, _str)
- if extra_id:
- self.assertIn(extra_id, _str)
-
- def _test_update_resource_action(self, resource, cmd, myid, action, args,
- body, expected_code=200, retval=None,
- cmd_resource=None):
- if not cmd_resource:
- cmd_resource = resource
- path = getattr(self.client, cmd_resource + "_path")
- path_action = '%s/%s' % (myid, action)
- cmd_parser = cmd.get_parser("update_" + cmd_resource)
- resp = (MyResp(expected_code), retval)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- shell.run_command(cmd, cmd_parser, args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), None)
- mock_request.assert_called_once_with(
- end_url(path % path_action), 'PUT',
- body=MyComparator(body, self.client),
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN}))
- _str = self.fake_stdout.make_string()
- self.assertIn(myid, _str)
-
- def assert_mock_multiple_calls_with_same_arguments(
- self, mocked_method, expected_call, count):
- if count is None:
- self.assertLessEqual(1, mocked_method.call_count)
- else:
- self.assertEqual(count, mocked_method.call_count)
- mocked_method.assert_has_calls(
- [expected_call] * mocked_method.call_count)
-
-
-class TestListCommand(neutronV2_0.ListCommand):
- resource = 'test_resource'
- filter_attrs = [
- 'name',
- 'admin_state_up',
- {'name': 'foo', 'help': 'non-boolean attribute foo'},
- {'name': 'bar', 'help': 'boolean attribute bar',
- 'boolean': True},
- {'name': 'baz', 'help': 'integer attribute baz',
- 'argparse_kwargs': {'choices': ['baz1', 'baz2']}},
- ]
-
-
-class ListCommandTestCase(CLITestV20Base):
-
- def setUp(self):
- super(ListCommandTestCase, self).setUp()
- self.client.extend_list('test_resources', '/test_resources', None)
- setattr(self.client, 'test_resources_path', '/test_resources')
-
- def _test_list_resources_filter_params(self, base_args='', query=''):
- resources = 'test_resources'
- cmd = TestListCommand(MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- base_args=base_args.split(),
- query=query)
-
- def _test_list_resources_with_arg_error(self, base_args=''):
- resources = 'test_resources'
- cmd = TestListCommand(MyApp(sys.stdout), None)
- # argparse parse error leads to SystemExit
- self.assertRaises(SystemExit,
- self._test_list_resources,
- resources, cmd,
- base_args=base_args.split())
-
- def test_list_resources_without_filter(self):
- self._test_list_resources_filter_params()
-
- def test_list_resources_use_default_filter(self):
- self._test_list_resources_filter_params(
- base_args='--name val1 --admin-state-up False',
- query='name=val1&admin_state_up=False')
-
- def test_list_resources_use_custom_filter(self):
- self._test_list_resources_filter_params(
- base_args='--foo FOO --bar True',
- query='foo=FOO&bar=True')
-
- def test_list_resources_boolean_check_default_filter(self):
- self._test_list_resources_filter_params(
- base_args='--admin-state-up True', query='admin_state_up=True')
- self._test_list_resources_filter_params(
- base_args='--admin-state-up False', query='admin_state_up=False')
- self._test_list_resources_with_arg_error(
- base_args='--admin-state-up non-true-false')
-
- def test_list_resources_boolean_check_custom_filter(self):
- self._test_list_resources_filter_params(
- base_args='--bar True', query='bar=True')
- self._test_list_resources_filter_params(
- base_args='--bar False', query='bar=False')
- self._test_list_resources_with_arg_error(
- base_args='--bar non-true-false')
-
- def test_list_resources_argparse_kwargs(self):
- self._test_list_resources_filter_params(
- base_args='--baz baz1', query='baz=baz1')
- self._test_list_resources_filter_params(
- base_args='--baz baz2', query='baz=baz2')
- self._test_list_resources_with_arg_error(
- base_args='--bar non-choice')
-
-
-class ClientV2TestJson(CLITestV20Base):
- def test_do_request_unicode(self):
- unicode_text = u'\u7f51\u7edc'
- # url with unicode
- action = u'/test'
- expected_action = action
- # query string with unicode
- params = {'test': unicode_text}
- expect_query = urlparse.urlencode(utils.safe_encode_dict(params))
- # request body with unicode
- body = params
- expect_body = self.client.serialize(body)
- self.client.httpclient.auth_token = encodeutils.safe_encode(
- unicode_text)
- expected_auth_token = encodeutils.safe_encode(unicode_text)
- resp_headers = {'x-openstack-request-id': REQUEST_ID}
- resp = (MyResp(200, resp_headers), expect_body)
-
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- result = self.client.do_request('PUT', action, body=body,
- params=params)
-
- mock_request.assert_called_once_with(
- end_url(expected_action, query=expect_query),
- 'PUT', body=expect_body,
- headers=ContainsKeyValue({'X-Auth-Token': expected_auth_token}))
- # test response with unicode
- self.assertEqual(body, result)
-
- def test_do_request_error_without_response_body(self):
- params = {'test': 'value'}
- expect_query = urlparse.urlencode(params)
- self.client.httpclient.auth_token = 'token'
- resp_headers = {'x-openstack-request-id': REQUEST_ID}
- resp = (MyResp(400, headers=resp_headers, reason='An error'), '')
-
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- error = self.assertRaises(exceptions.NeutronClientException,
- self.client.do_request, 'PUT', '/test',
- body='', params=params)
-
- mock_request.assert_called_once_with(
- MyUrlComparator(end_url('/test', query=expect_query), self.client),
- 'PUT', body='',
- headers=ContainsKeyValue({'X-Auth-Token': 'token'}))
- expected_error = "An error\nNeutron server returns " \
- "request_ids: %s" % [REQUEST_ID]
- self.assertEqual(expected_error, str(error))
-
- def test_do_request_with_long_uri_exception(self):
- long_string = 'x' * 8200 # 8200 > MAX_URI_LEN:8192
- params = {'id': long_string}
- exception = self.assertRaises(exceptions.RequestURITooLong,
- self.client.do_request,
- 'GET', '/test', body='', params=params)
- self.assertNotEqual(0, exception.excess)
-
- def test_do_request_request_ids(self):
- params = {'test': 'value'}
- expect_query = urlparse.urlencode(params)
- self.client.httpclient.auth_token = 'token'
- body = params
- expect_body = self.client.serialize(body)
- resp_headers = {'x-openstack-request-id': REQUEST_ID}
- resp = (MyResp(200, resp_headers), expect_body)
-
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- result = self.client.do_request('PUT', '/test', body=body,
- params=params)
-
- mock_request.assert_called_once_with(
- MyUrlComparator(end_url('/test', query=expect_query), self.client),
- 'PUT', body=expect_body,
- headers=ContainsKeyValue({'X-Auth-Token': 'token'}))
-
- self.assertEqual(body, result)
- self.assertEqual([REQUEST_ID], result.request_ids)
-
- def test_list_request_ids_with_retrieve_all_true(self):
- path = '/test'
- resources = 'tests'
- fake_query = "marker=myid2&limit=2"
- reses1 = {resources: [{'id': 'myid1', },
- {'id': 'myid2', }],
- '%s_links' % resources: [{'href': end_url(path, fake_query),
- 'rel': 'next'}]}
- reses2 = {resources: [{'id': 'myid3', },
- {'id': 'myid4', }]}
- resstr1 = self.client.serialize(reses1)
- resstr2 = self.client.serialize(reses2)
- resp_headers = {'x-openstack-request-id': REQUEST_ID}
- resp = [(MyResp(200, resp_headers), resstr1),
- (MyResp(200, resp_headers), resstr2)]
- with mock.patch.object(self.client.httpclient, "request",
- side_effect=resp) as mock_request:
- result = self.client.list(resources, path)
-
- self.assertEqual(2, mock_request.call_count)
- mock_request.assert_has_calls([
- mock.call(
- end_url(path, ""), 'GET',
- body=None,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN})),
- mock.call(
- MyUrlComparator(end_url(path, fake_query),
- self.client), 'GET',
- body=None,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN}))])
-
- self.assertEqual([REQUEST_ID, REQUEST_ID], result.request_ids)
-
- def test_list_request_ids_with_retrieve_all_false(self):
- path = '/test'
- resources = 'tests'
- fake_query = "marker=myid2&limit=2"
- reses1 = {resources: [{'id': 'myid1', },
- {'id': 'myid2', }],
- '%s_links' % resources: [{'href': end_url(path, fake_query),
- 'rel': 'next'}]}
- reses2 = {resources: [{'id': 'myid3', },
- {'id': 'myid4', }]}
- resstr1 = self.client.serialize(reses1)
- resstr2 = self.client.serialize(reses2)
- resp_headers = {'x-openstack-request-id': REQUEST_ID}
- resp = [(MyResp(200, resp_headers), resstr1),
- (MyResp(200, resp_headers), resstr2)]
- with mock.patch.object(self.client.httpclient, "request",
- side_effect=resp) as mock_request:
- result = self.client.list(resources, path, retrieve_all=False)
- next(result)
- self.assertEqual([REQUEST_ID], result.request_ids)
- next(result)
- self.assertEqual([REQUEST_ID, REQUEST_ID], result.request_ids)
-
- self.assertEqual(2, mock_request.call_count)
- mock_request.assert_has_calls([
- mock.call(
- end_url(path, ""), 'GET',
- body=None,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN})),
- mock.call(
- MyUrlComparator(end_url(path, fake_query), self.client), 'GET',
- body=None,
- headers=ContainsKeyValue({'X-Auth-Token': TOKEN}))])
-
- def test_deserialize_without_data(self):
- data = u''
- result = self.client.deserialize(data, 200)
- self.assertEqual(data, result)
-
- def test_update_resource(self):
- params = {'test': 'value'}
- expect_query = urlparse.urlencode(params)
- self.client.httpclient.auth_token = 'token'
- body = params
- expect_body = self.client.serialize(body)
- resp_headers = {'x-openstack-request-id': REQUEST_ID}
- resp = (MyResp(200, resp_headers), expect_body)
-
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- result = self.client._update_resource('/test', body=body,
- params=params)
-
- mock_request.assert_called_once_with(
- MyUrlComparator(end_url('/test', query=expect_query), self.client),
- 'PUT', body=expect_body,
- headers=ContainsKeyValue({'X-Auth-Token': 'token'}))
- self.assertNotIn('If-Match', mock_request.call_args[1]['headers'])
-
- self.assertEqual(body, result)
- self.assertEqual([REQUEST_ID], result.request_ids)
-
- def test_update_resource_with_revision_number(self):
- params = {'test': 'value'}
- expect_query = urlparse.urlencode(params)
- self.client.httpclient.auth_token = 'token'
- body = params
- expect_body = self.client.serialize(body)
- resp_headers = {'x-openstack-request-id': REQUEST_ID}
- resp = (MyResp(200, resp_headers), expect_body)
-
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- result = self.client._update_resource('/test', body=body,
- params=params,
- revision_number=1)
-
- mock_request.assert_called_once_with(
- MyUrlComparator(end_url('/test', query=expect_query), self.client),
- 'PUT', body=expect_body,
- headers=ContainsKeyValue(
- {'X-Auth-Token': 'token', 'If-Match': 'revision_number=1'}))
-
- self.assertEqual(body, result)
- self.assertEqual([REQUEST_ID], result.request_ids)
-
-
-class CLITestV20ExceptionHandler(CLITestV20Base):
-
- def _test_exception_handler_v20(
- self, expected_exception, status_code, expected_msg,
- error_type=None, error_msg=None, error_detail=None,
- request_id=None, error_content=None):
-
- resp = MyResp(status_code, {'x-openstack-request-id': request_id})
- if request_id is not None:
- expected_msg += "\nNeutron server returns " \
- "request_ids: %s" % [request_id]
- if error_content is None:
- error_content = {'NeutronError': {'type': error_type,
- 'message': error_msg,
- 'detail': error_detail}}
- expected_content = self.client._convert_into_with_meta(error_content,
- resp)
-
- e = self.assertRaises(expected_exception,
- client.exception_handler_v20,
- status_code, expected_content)
- self.assertEqual(status_code, e.status_code)
- self.assertEqual(expected_exception.__name__,
- e.__class__.__name__)
-
- if expected_msg is None:
- if error_detail:
- expected_msg = '\n'.join([error_msg, error_detail])
- else:
- expected_msg = error_msg
- self.assertEqual(expected_msg, e.message)
-
- def test_exception_handler_v20_ip_address_in_use(self):
- err_msg = ('Unable to complete operation for network '
- 'fake-network-uuid. The IP address fake-ip is in use.')
- self._test_exception_handler_v20(
- exceptions.IpAddressInUseClient, 409, err_msg,
- 'IpAddressInUse', err_msg, '', REQUEST_ID)
-
- def test_exception_handler_v20_neutron_known_error(self):
- known_error_map = [
- ('NetworkNotFound', exceptions.NetworkNotFoundClient, 404),
- ('PortNotFound', exceptions.PortNotFoundClient, 404),
- ('NetworkInUse', exceptions.NetworkInUseClient, 409),
- ('PortInUse', exceptions.PortInUseClient, 409),
- ('StateInvalid', exceptions.StateInvalidClient, 400),
- ('IpAddressInUse', exceptions.IpAddressInUseClient, 409),
- ('IpAddressGenerationFailure',
- exceptions.IpAddressGenerationFailureClient, 409),
- ('MacAddressInUse', exceptions.MacAddressInUseClient, 409),
- ('ExternalIpAddressExhausted',
- exceptions.ExternalIpAddressExhaustedClient, 400),
- ('OverQuota', exceptions.OverQuotaClient, 409),
- ('InvalidIpForNetwork', exceptions.InvalidIpForNetworkClient, 400),
- ('InvalidIpForSubnet', exceptions.InvalidIpForSubnetClient, 400),
- ('IpAddressAlreadyAllocated',
- exceptions.IpAddressAlreadyAllocatedClient, 400),
- ]
-
- error_msg = 'dummy exception message'
- error_detail = 'sample detail'
- for server_exc, client_exc, status_code in known_error_map:
- self._test_exception_handler_v20(
- client_exc, status_code,
- error_msg + '\n' + error_detail,
- server_exc, error_msg, error_detail, REQUEST_ID)
-
- def test_exception_handler_v20_neutron_known_error_without_detail(self):
- error_msg = 'Network not found'
- error_detail = ''
- self._test_exception_handler_v20(
- exceptions.NetworkNotFoundClient, 404,
- error_msg,
- 'NetworkNotFound', error_msg, error_detail, REQUEST_ID)
-
- def test_exception_handler_v20_unknown_error_to_per_code_exception(self):
- for status_code, client_exc in exceptions.HTTP_EXCEPTION_MAP.items():
- error_msg = 'Unknown error'
- error_detail = 'This is detail'
- self._test_exception_handler_v20(
- client_exc, status_code,
- error_msg + '\n' + error_detail,
- 'UnknownError', error_msg, error_detail, [REQUEST_ID])
-
- def test_exception_handler_v20_neutron_unknown_status_code(self):
- error_msg = 'Unknown error'
- error_detail = 'This is detail'
- self._test_exception_handler_v20(
- exceptions.NeutronClientException, 501,
- error_msg + '\n' + error_detail,
- 'UnknownError', error_msg, error_detail, REQUEST_ID)
-
- def test_exception_handler_v20_bad_neutron_error(self):
- for status_code, client_exc in exceptions.HTTP_EXCEPTION_MAP.items():
- error_content = {'NeutronError': {'unknown_key': 'UNKNOWN'}}
- self._test_exception_handler_v20(
- client_exc, status_code,
- expected_msg="{'unknown_key': 'UNKNOWN'}",
- error_content=error_content,
- request_id=REQUEST_ID)
-
- def test_exception_handler_v20_error_dict_contains_message(self):
- error_content = {'message': 'This is an error message'}
- for status_code, client_exc in exceptions.HTTP_EXCEPTION_MAP.items():
- self._test_exception_handler_v20(
- client_exc, status_code,
- expected_msg='This is an error message',
- error_content=error_content,
- request_id=REQUEST_ID)
-
- def test_exception_handler_v20_error_dict_not_contain_message(self):
- # 599 is not contained in HTTP_EXCEPTION_MAP.
- error_content = {'error': 'This is an error message'}
- expected_msg = '%s-%s' % (599, error_content)
- self._test_exception_handler_v20(
- exceptions.NeutronClientException, 599,
- expected_msg=expected_msg,
- request_id=None,
- error_content=error_content)
-
- def test_exception_handler_v20_default_fallback(self):
- # 599 is not contained in HTTP_EXCEPTION_MAP.
- error_content = 'This is an error message'
- expected_msg = '%s-%s' % (599, error_content)
- self._test_exception_handler_v20(
- exceptions.NeutronClientException, 599,
- expected_msg=expected_msg,
- request_id=None,
- error_content=error_content)
-
- def test_exception_status(self):
- e = exceptions.BadRequest()
- self.assertEqual(400, e.status_code)
-
- e = exceptions.BadRequest(status_code=499)
- self.assertEqual(499, e.status_code)
-
- # SslCertificateValidationError has no explicit status_code,
- # but should have a 'safe' defined fallback.
- e = exceptions.SslCertificateValidationError()
- self.assertIsNotNone(e.status_code)
-
- e = exceptions.SslCertificateValidationError(status_code=599)
- self.assertEqual(599, e.status_code)
-
- def test_connection_failed(self):
- self.client.httpclient.auth_token = 'token'
- excp = requests.exceptions.ConnectionError('Connection refused')
-
- with mock.patch.object(self.client.httpclient, "request",
- side_effect=excp) as mock_request:
- error = self.assertRaises(exceptions.ConnectionFailed,
- self.client.get, '/test')
-
- mock_request.assert_called_once_with(
- end_url('/test'), 'GET',
- body=None,
- headers=ContainsKeyValue({'X-Auth-Token': 'token'}))
- # NB: ConnectionFailed has no explicit status_code, so this
- # tests that there is a fallback defined.
- self.assertIsNotNone(error.status_code)
-
-
-class DictWithMetaTest(base.BaseTestCase):
-
- def test_dict_with_meta(self):
- body = {'test': 'value'}
- resp = MyResp(200, {'x-openstack-request-id': REQUEST_ID})
- obj = client._DictWithMeta(body, resp)
- self.assertEqual(body, obj)
-
- # Check request_ids attribute is added to obj
- self.assertTrue(hasattr(obj, 'request_ids'))
- self.assertEqual([REQUEST_ID], obj.request_ids)
-
-
-class TupleWithMetaTest(base.BaseTestCase):
-
- def test_tuple_with_meta(self):
- body = ('test', 'value')
- resp = MyResp(200, {'x-openstack-request-id': REQUEST_ID})
- obj = client._TupleWithMeta(body, resp)
- self.assertEqual(body, obj)
-
- # Check request_ids attribute is added to obj
- self.assertTrue(hasattr(obj, 'request_ids'))
- self.assertEqual([REQUEST_ID], obj.request_ids)
-
-
-class StrWithMetaTest(base.BaseTestCase):
-
- def test_str_with_meta(self):
- body = "test_string"
- resp = MyResp(200, {'x-openstack-request-id': REQUEST_ID})
- obj = client._StrWithMeta(body, resp)
- self.assertEqual(body, obj)
-
- # Check request_ids attribute is added to obj
- self.assertTrue(hasattr(obj, 'request_ids'))
- self.assertEqual([REQUEST_ID], obj.request_ids)
-
-
-class GeneratorWithMetaTest(base.BaseTestCase):
-
- body = {'test': 'value'}
- resp = MyResp(200, {'x-openstack-request-id': REQUEST_ID})
-
- def _pagination(self, collection, path, **params):
- obj = client._DictWithMeta(self.body, self.resp)
- yield obj
-
- def test_generator(self):
- obj = client._GeneratorWithMeta(self._pagination, 'test_collection',
- 'test_path', test_args='test_args')
- self.assertEqual(self.body, next(obj))
-
- self.assertTrue(hasattr(obj, 'request_ids'))
- self.assertEqual([REQUEST_ID], obj.request_ids)
-
-
-class CLITestV20OutputFormatter(CLITestV20Base):
-
- def _test_create_resource_with_formatter(self, fmt):
- resource = 'network'
- cmd = network.CreateNetwork(MyApp(sys.stdout), None)
- args = ['-f', fmt, 'myname']
- position_names = ['name']
- position_values = ['myname']
- self._test_create_resource(resource, cmd, 'myname', 'myid', args,
- position_names, position_values)
-
- def test_create_resource_table(self):
- self._test_create_resource_with_formatter('table')
- print(self.fake_stdout.content)
- # table data is contains in the third element.
- data = self.fake_stdout.content[2].split('\n')
- self.assertTrue(any(' id ' in d for d in data))
- self.assertTrue(any(' name ' in d for d in data))
-
- def test_create_resource_json(self):
- self._test_create_resource_with_formatter('json')
- data = jsonutils.loads(self.fake_stdout.make_string())
- self.assertEqual('myname', data['name'])
- self.assertEqual('myid', data['id'])
-
- def test_create_resource_yaml(self):
- self._test_create_resource_with_formatter('yaml')
- data = yaml.safe_load(self.fake_stdout.make_string())
- self.assertEqual('myname', data['name'])
- self.assertEqual('myid', data['id'])
-
- def _test_show_resource_with_formatter(self, fmt):
- resource = 'network'
- cmd = network.ShowNetwork(MyApp(sys.stdout), None)
- args = ['-f', fmt, '-F', 'id', '-F', 'name', 'myid']
- self._test_show_resource(resource, cmd, 'myid',
- args, ['id', 'name'])
-
- def test_show_resource_table(self):
- self._test_show_resource_with_formatter('table')
- data = self.fake_stdout.content[0].split('\n')
- self.assertTrue(any(' id ' in d for d in data))
- self.assertTrue(any(' name ' in d for d in data))
-
- def test_show_resource_json(self):
- self._test_show_resource_with_formatter('json')
- data = jsonutils.loads(''.join(self.fake_stdout.content))
- self.assertEqual('myname', data['name'])
- self.assertEqual('myid', data['id'])
-
- def test_show_resource_yaml(self):
- self._test_show_resource_with_formatter('yaml')
- data = yaml.safe_load(''.join(self.fake_stdout.content))
- self.assertEqual('myname', data['name'])
- self.assertEqual('myid', data['id'])
-
- @mock.patch.object(network.ListNetwork, "extend_list")
- def _test_list_resources_with_formatter(self, fmt, mock_extend_list):
- resources = 'networks'
- cmd = network.ListNetwork(MyApp(sys.stdout), None)
- # ListNetwork has its own extend_list, so we need to stub out it
- # to avoid an extra API call.
- self._test_list_resources(resources, cmd, output_format=fmt)
- mock_extend_list.assert_called_once_with(IsA(list), mock.ANY)
-
- def test_list_resources_table(self):
- self._test_list_resources_with_formatter('table')
- data = self.fake_stdout.content[0].split('\n')
- self.assertTrue(any(' id ' in d for d in data))
- self.assertTrue(any(' myid1 ' in d for d in data))
- self.assertTrue(any(' myid2 ' in d for d in data))
-
- def test_list_resources_json(self):
- self._test_list_resources_with_formatter('json')
- data = jsonutils.loads(''.join(self.fake_stdout.content))
- self.assertEqual(['myid1', 'myid2'], [d['id'] for d in data])
-
- def test_list_resources_yaml(self):
- self._test_list_resources_with_formatter('yaml')
- data = yaml.safe_load(''.join(self.fake_stdout.content))
- self.assertEqual(['myid1', 'myid2'], [d['id'] for d in data])
diff --git a/neutronclient/tests/unit/test_cli20_address_scope.py b/neutronclient/tests/unit/test_cli20_address_scope.py
deleted file mode 100644
index 902f7e653..000000000
--- a/neutronclient/tests/unit/test_cli20_address_scope.py
+++ /dev/null
@@ -1,175 +0,0 @@
-# Copyright 2015 Huawei Technologies India Pvt. Ltd.
-# All Rights Reserved
-#
-# 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 sys
-from unittest import mock
-
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0 import address_scope
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20AddressScopeJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['address_scope']
-
- def setUp(self):
- super(CLITestV20AddressScopeJSON, self).setUp(plurals={'tags': 'tag'})
-
- def test_create_address_scope_with_minimum_option_ipv4(self):
- """Create address_scope: foo-address-scope with minimum option."""
- resource = 'address_scope'
- cmd = address_scope.CreateAddressScope(
- test_cli20.MyApp(sys.stdout), None)
- name = 'foo-address-scope'
- myid = 'myid'
- args = [name, '4']
- position_names = ['name', 'ip_version']
- position_values = [name, 4]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_address_scope_with_minimum_option_ipv6(self):
- """Create address_scope: foo-address-scope with minimum option."""
- resource = 'address_scope'
- cmd = address_scope.CreateAddressScope(
- test_cli20.MyApp(sys.stdout), None)
- name = 'foo-address-scope'
- myid = 'myid'
- args = [name, '6']
- position_names = ['name', 'ip_version']
- position_values = [name, 6]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_address_scope_with_minimum_option_bad_ip_version(self):
- """Create address_scope: foo-address-scope with minimum option."""
- resource = 'address_scope'
- cmd = address_scope.CreateAddressScope(
- test_cli20.MyApp(sys.stdout), None)
- name = 'foo-address-scope'
- myid = 'myid'
- args = [name, '5']
- position_names = ['name', 'ip_version']
- position_values = [name, 5]
- self.assertRaises(SystemExit, self._test_create_resource,
- resource, cmd, name, myid, args, position_names,
- position_values)
-
- def test_create_address_scope_with_all_option(self):
- # Create address_scope: foo-address-scope with all options.
- resource = 'address_scope'
- cmd = address_scope.CreateAddressScope(
- test_cli20.MyApp(sys.stdout), None)
- name = 'foo-address-scope'
- myid = 'myid'
- args = [name, '4', '--shared']
- position_names = ['name', 'ip_version', 'shared']
- position_values = [name, 4, True]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_address_scope_with_unicode(self):
- # Create address_scope: u'\u7f51\u7edc'.
- resource = 'address_scope'
- cmd = address_scope.CreateAddressScope(
- test_cli20.MyApp(sys.stdout), None)
- name = u'\u7f51\u7edc'
- ip_version = u'4'
- myid = 'myid'
- args = [name, ip_version]
- position_names = ['name', 'ip_version']
- position_values = [name, 4]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_update_address_scope_exception(self):
- # Update address_scope (Negative) : myid.
- resource = 'address_scope'
- cmd = address_scope.UpdateAddressScope(
- test_cli20.MyApp(sys.stdout), None)
- self.assertRaises(exceptions.CommandError, self._test_update_resource,
- resource, cmd, 'myid', ['myid'], {})
-
- def test_update_address_scope(self):
- # Update address_scope: myid --name newname-address-scope.
- resource = 'address_scope'
- cmd = address_scope.UpdateAddressScope(
- test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'newname-address-scope'],
- {'name': 'newname-address-scope'}
- )
- # Update address_scope: myid --shared
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--shared', 'True'],
- {'shared': "True"}
- )
-
- def test_list_address_scope(self):
- # address_scope-list.
- resources = "address_scopes"
- cmd = address_scope.ListAddressScope(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, True)
-
- @mock.patch.object(address_scope.ListAddressScope, "extend_list")
- def test_list_address_scope_pagination(self, mock_extend_list):
- # address_scope-list.
- cmd = address_scope.ListAddressScope(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources_with_pagination("address_scopes",
- cmd)
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
-
- def test_list_address_scope_sort(self):
- # sorted list:
- # address_scope-list --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = "address_scopes"
- cmd = address_scope.ListAddressScope(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id", "ip_version"],
- sort_dir=["asc", "desc"])
-
- def test_list_address_scope_limit(self):
- # size (1000) limited list: address_scope-list -P.
- resources = "address_scopes"
- cmd = address_scope.ListAddressScope(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_address_scope(self):
- # Show address_scope: --fields id --fields name myid.
- resource = 'address_scope'
- cmd = address_scope.ShowAddressScope(
- test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id,
- '--fields', 'ip_version', '6']
- self._test_show_resource(resource, cmd, self.test_id, args,
- ['id', 'name', 'ip_version'])
-
- def test_delete_address_scope(self):
- # Delete address_scope: address_scope_id.
- resource = 'address_scope'
- cmd = address_scope.DeleteAddressScope(
- test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
diff --git a/neutronclient/tests/unit/test_cli20_agents.py b/neutronclient/tests/unit/test_cli20_agents.py
deleted file mode 100644
index 7641d2741..000000000
--- a/neutronclient/tests/unit/test_cli20_agents.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# All Rights Reserved
-#
-# 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 sys
-
-from oslo_serialization import jsonutils
-
-from neutronclient.neutron.v2_0 import agent
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20Agent(test_cli20.CLITestV20Base):
- def test_list_agents(self):
- contents = {'agents': [{'id': 'myname', 'agent_type': 'mytype',
- 'alive': True}]}
- args = ['-f', 'json']
- resources = "agents"
-
- cmd = agent.ListAgent(test_cli20.MyApp(sys.stdout), None)
- self._test_list_columns(cmd, resources, contents, args)
- _str = self.fake_stdout.make_string()
-
- returned_agents = jsonutils.loads(_str)
- self.assertEqual(1, len(returned_agents))
- ag = returned_agents[0]
- self.assertEqual(3, len(ag))
- self.assertIn("alive", ag.keys())
-
- def test_list_agents_field(self):
- contents = {'agents': [{'alive': True}]}
- args = ['-f', 'json']
- resources = "agents"
- smile = ':-)'
-
- cmd = agent.ListAgent(test_cli20.MyApp(sys.stdout), None)
- self._test_list_columns(cmd, resources, contents, args)
- _str = self.fake_stdout.make_string()
-
- returned_agents = jsonutils.loads(_str)
- self.assertEqual(1, len(returned_agents))
- ag = returned_agents[0]
- self.assertEqual(1, len(ag))
- self.assertIn("alive", ag.keys())
- self.assertIn(smile, ag.values())
-
- def test_list_agents_zone_field(self):
- contents = {'agents': [{'availability_zone': 'myzone'}]}
- args = ['-f', 'json']
- resources = "agents"
-
- cmd = agent.ListAgent(test_cli20.MyApp(sys.stdout), None)
- self._test_list_columns(cmd, resources, contents, args)
- _str = self.fake_stdout.make_string()
-
- returned_agents = jsonutils.loads(_str)
- self.assertEqual(1, len(returned_agents))
- ag = returned_agents[0]
- self.assertEqual(1, len(ag))
- self.assertIn("availability_zone", ag.keys())
- self.assertIn('myzone', ag.values())
-
- def test_update_agent(self):
- # agent-update myid --admin-state-down --description mydescr.
- resource = 'agent'
- cmd = agent.UpdateAgent(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(
- resource, cmd, 'myid',
- ['myid', '--admin-state-down', '--description', 'mydescr'],
- {'description': 'mydescr', 'admin_state_up': False}
- )
-
- def test_show_agent(self):
- # Show agent: --field id --field binary myid.
- resource = 'agent'
- cmd = agent.ShowAgent(test_cli20.MyApp(sys.stdout), None)
- args = ['--field', 'id', '--field', 'binary', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'binary'])
-
- def test_delete_agent(self):
- # Delete agent: myid.
- resource = 'agent'
- cmd = agent.DeleteAgent(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
diff --git a/neutronclient/tests/unit/test_cli20_agentschedulers.py b/neutronclient/tests/unit/test_cli20_agentschedulers.py
deleted file mode 100644
index 817909d38..000000000
--- a/neutronclient/tests/unit/test_cli20_agentschedulers.py
+++ /dev/null
@@ -1,209 +0,0 @@
-# Copyright 2013 Mirantis Inc.
-# All Rights Reserved
-#
-# 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 sys
-from unittest import mock
-
-
-from neutronclient.neutron.v2_0 import agentscheduler
-from neutronclient.neutron.v2_0 import network
-from neutronclient.tests.unit import test_cli20
-
-
-AGENT_ID = 'agent_id1'
-NETWORK_ID = 'net_id1'
-ROUTER_ID = 'router_id1'
-
-
-class CLITestV20AgentScheduler(test_cli20.CLITestV20Base):
- def _test_add_to_agent(self, resource, cmd, cmd_args, destination,
- body, result):
- path = ((self.client.agent_path + destination) %
- cmd_args[0])
-
- result_str = self.client.serialize(result)
- return_tup = (test_cli20.MyResp(200), result_str)
-
- cmd_parser = cmd.get_parser('test_' + resource)
- parsed_args = cmd_parser.parse_args(cmd_args)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=return_tup) as mock_request:
- cmd.run(parsed_args)
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.end_url(path), 'POST',
- body=test_cli20.MyComparator(body, self.client),
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
-
- def _test_remove_from_agent(self, resource, cmd, cmd_args, destination):
- path = ((self.client.agent_path + destination + '/%s') %
- cmd_args)
-
- return_tup = (test_cli20.MyResp(204), None)
- cmd_parser = cmd.get_parser('test_' + resource)
- parsed_args = cmd_parser.parse_args(cmd_args)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=return_tup) as mock_request:
- cmd.run(parsed_args)
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.end_url(path), 'DELETE',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
-
-
-class CLITestV20DHCPAgentScheduler(CLITestV20AgentScheduler):
-
- def test_add_network_to_agent(self):
- resource = 'agent'
- cmd = agentscheduler.AddNetworkToDhcpAgent(
- test_cli20.MyApp(sys.stdout), None)
- args = (AGENT_ID, NETWORK_ID)
- body = {'network_id': NETWORK_ID}
- result = {'network_id': 'net_id', }
- self._test_add_to_agent(resource, cmd, args, self.client.DHCP_NETS,
- body, result)
-
- def test_remove_network_from_agent(self):
- resource = 'agent'
- cmd = agentscheduler.RemoveNetworkFromDhcpAgent(
- test_cli20.MyApp(sys.stdout), None)
- args = (AGENT_ID, NETWORK_ID)
- self._test_remove_from_agent(resource, cmd, args,
- self.client.DHCP_NETS)
-
- @mock.patch.object(network.ListNetwork, "extend_list")
- def test_list_networks_on_agent(self, mock_extend_list):
- resources = 'networks'
- cmd = agentscheduler.ListNetworksOnDhcpAgent(
- test_cli20.MyApp(sys.stdout), None)
- agent_id = 'agent_id1'
- path = ((self.client.agent_path + self.client.DHCP_NETS) %
- agent_id)
- self._test_list_resources(resources, cmd, base_args=[agent_id],
- path=path)
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
-
- def test_list_agents_hosting_network(self):
- resources = 'agent'
- cmd = agentscheduler.ListDhcpAgentsHostingNetwork(
- test_cli20.MyApp(sys.stdout), None)
- agent_id = 'agent_id1'
- path = ((self.client.network_path + self.client.DHCP_AGENTS) %
- agent_id)
- contents = {self.id_field: 'myid1', 'alive': True}
- self._test_list_resources(resources, cmd, base_args=[agent_id],
- path=path, response_contents=contents)
-
-
-class CLITestV20L3AgentScheduler(CLITestV20AgentScheduler):
-
- def test_add_router_to_agent(self):
- resource = 'agent'
- cmd = agentscheduler.AddRouterToL3Agent(
- test_cli20.MyApp(sys.stdout), None)
- args = (AGENT_ID, ROUTER_ID)
- body = {'router_id': ROUTER_ID}
- result = {'network_id': 'net_id', }
- self._test_add_to_agent(resource, cmd, args, self.client.L3_ROUTERS,
- body, result)
-
- def test_remove_router_from_agent(self):
- resource = 'agent'
- cmd = agentscheduler.RemoveRouterFromL3Agent(
- test_cli20.MyApp(sys.stdout), None)
- args = (AGENT_ID, ROUTER_ID)
- self._test_remove_from_agent(resource, cmd, args,
- self.client.L3_ROUTERS)
-
- def test_list_routers_on_agent(self):
- resources = 'router'
- cmd = agentscheduler.ListRoutersOnL3Agent(
- test_cli20.MyApp(sys.stdout), None)
- agent_id = 'agent_id1'
- path = ((self.client.agent_path + self.client.L3_ROUTERS) %
- agent_id)
- contents = {self.id_field: 'myid1', 'name': 'my_name'}
- self._test_list_resources(resources, cmd, base_args=[agent_id],
- path=path, response_contents=contents)
-
- def test_list_agents_hosting_router(self):
- resources = 'agent'
- cmd = agentscheduler.ListL3AgentsHostingRouter(
- test_cli20.MyApp(sys.stdout), None)
- agent_id = 'agent_id1'
- path = ((self.client.router_path + self.client.L3_AGENTS) %
- agent_id)
- contents = {self.id_field: 'myid1', 'alive': True}
- self._test_list_resources(resources, cmd, base_args=[agent_id],
- path=path, response_contents=contents)
-
-
-class CLITestV20LBaaSAgentScheduler(test_cli20.CLITestV20Base):
-
- def test_list_pools_on_agent(self):
- resources = 'pools'
- cmd = agentscheduler.ListPoolsOnLbaasAgent(
- test_cli20.MyApp(sys.stdout), None)
- agent_id = 'agent_id1'
- path = ((self.client.agent_path + self.client.LOADBALANCER_POOLS) %
- agent_id)
- self._test_list_resources(resources, cmd, base_args=[agent_id],
- path=path)
-
- def test_get_lbaas_agent_hosting_pool(self):
- resources = 'agent'
- cmd = agentscheduler.GetLbaasAgentHostingPool(
- test_cli20.MyApp(sys.stdout), None)
- pool_id = 'pool_id1'
- path = ((self.client.pool_path + self.client.LOADBALANCER_AGENT) %
- pool_id)
- contents = {self.id_field: 'myid1', 'alive': True}
- self._test_list_resources(resources, cmd, base_args=[pool_id],
- path=path, response_contents=contents)
-
-
-class CLITestV20LBaaSV2AgentScheduler(test_cli20.CLITestV20Base):
-
- def test_list_loadbalancers_on_agent(self):
- resources = 'loadbalancers'
- cmd = agentscheduler.ListLoadBalancersOnLbaasAgent(
- test_cli20.MyApp(sys.stdout), None)
- agent_id = 'agent_id1'
- path = ((self.client.agent_path + self.client.AGENT_LOADBALANCERS) %
- agent_id)
- self._test_list_resources(resources, cmd, base_args=[agent_id],
- path=path)
-
- def test_get_lbaas_agent_hosting_pool(self):
- resources = 'agent'
- cmd = agentscheduler.GetLbaasAgentHostingLoadBalancer(
- test_cli20.MyApp(sys.stdout), None)
- lb_id = 'lb_id1'
- path = ((self.client.lbaas_loadbalancer_path +
- self.client.LOADBALANCER_HOSTING_AGENT) % lb_id)
- contents = {self.id_field: 'myid1', 'alive': True}
- self._test_list_resources(resources, cmd, base_args=[lb_id],
- path=path, response_contents=contents)
diff --git a/neutronclient/tests/unit/test_cli20_az.py b/neutronclient/tests/unit/test_cli20_az.py
deleted file mode 100644
index cb127c529..000000000
--- a/neutronclient/tests/unit/test_cli20_az.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# 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 sys
-
-from neutronclient.neutron.v2_0 import availability_zone as az
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20Agent(test_cli20.CLITestV20Base):
- def test_list_agents(self):
- contents = {'availability_zones': [{'name': 'zone1',
- 'resource': 'network',
- 'state': 'available'},
- {'name': 'zone2',
- 'resource': 'router',
- 'state': 'unavailable'}]}
- args = ['-f', 'json']
- resources = "availability_zones"
-
- cmd = az.ListAvailabilityZone(test_cli20.MyApp(sys.stdout), None)
- self._test_list_columns(cmd, resources, contents, args)
diff --git a/neutronclient/tests/unit/test_cli20_extensions.py b/neutronclient/tests/unit/test_cli20_extensions.py
deleted file mode 100644
index cc2913747..000000000
--- a/neutronclient/tests/unit/test_cli20_extensions.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright 2013 NEC Corporation
-# All Rights Reserved.
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0 import extension
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20Extension(test_cli20.CLITestV20Base):
- id_field = 'alias'
-
- def test_list_extensions(self):
- resources = 'extensions'
- cmd = extension.ListExt(test_cli20.MyApp(sys.stdout), None)
- contents = [{'alias': 'ext1', 'name': 'name1', 'other': 'other1'},
- {'alias': 'ext2', 'name': 'name2', 'other': 'other2'}]
- ret = self._test_list_resources(resources, cmd,
- response_contents=contents)
- ret_words = set(ret.split())
- # Check only the default columns are shown.
- self.assertIn('name', ret_words)
- self.assertIn('alias', ret_words)
- self.assertNotIn('other', ret_words)
-
- def test_show_extension(self):
- # -F option does not work for ext-show at the moment, so -F option
- # is not passed in the commandline args as other tests do.
- resource = 'extension'
- cmd = extension.ShowExt(test_cli20.MyApp(sys.stdout), None)
- args = [self.test_id]
- ext_alias = self.test_id
- self._test_show_resource(resource, cmd, ext_alias, args, fields=[])
diff --git a/neutronclient/tests/unit/test_cli20_floatingips.py b/neutronclient/tests/unit/test_cli20_floatingips.py
deleted file mode 100644
index d77bda6e8..000000000
--- a/neutronclient/tests/unit/test_cli20_floatingips.py
+++ /dev/null
@@ -1,193 +0,0 @@
-# Copyright 2012 Red Hat
-# All Rights Reserved.
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0 import floatingip as fip
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20FloatingIpsJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['floatingip']
-
- def test_create_floatingip(self):
- # Create floatingip: fip1.
- resource = 'floatingip'
- cmd = fip.CreateFloatingIP(test_cli20.MyApp(sys.stdout), None)
- name = 'fip1'
- myid = 'myid'
- args = [name, '--description', 'floats like a butterfly']
- position_names = ['floating_network_id']
- position_values = [name]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- description='floats like a butterfly')
-
- def test_create_floatingip_and_port(self):
- # Create floatingip: fip1.
- resource = 'floatingip'
- cmd = fip.CreateFloatingIP(test_cli20.MyApp(sys.stdout), None)
- name = 'fip1'
- myid = 'myid'
- pid = 'mypid'
- args = [name, '--port_id', pid]
- position_names = ['floating_network_id', 'port_id']
- position_values = [name, pid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- # Test dashed options
- args = [name, '--port-id', pid]
- position_names = ['floating_network_id', 'port_id']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_floatingip_and_port_and_address(self):
- # Create floatingip: fip1 with a given port and address.
- resource = 'floatingip'
- cmd = fip.CreateFloatingIP(test_cli20.MyApp(sys.stdout), None)
- name = 'fip1'
- myid = 'myid'
- pid = 'mypid'
- addr = '10.0.0.99'
- args = [name, '--port_id', pid, '--fixed_ip_address', addr]
- position_names = ['floating_network_id', 'port_id', 'fixed_ip_address']
- position_values = [name, pid, addr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
- # Test dashed options
- args = [name, '--port-id', pid, '--fixed-ip-address', addr]
- position_names = ['floating_network_id', 'port_id', 'fixed_ip_address']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_floatingip_with_ip_address_of_floating_ip(self):
- # Create floatingip: fip1 with a given IP address of floating IP.
- resource = 'floatingip'
- cmd = fip.CreateFloatingIP(test_cli20.MyApp(sys.stdout), None)
- name = 'fip1'
- myid = 'myid'
- addr = '10.0.0.99'
-
- args = [name, '--floating-ip-address', addr]
- position_values = [name, addr]
- position_names = ['floating_network_id', 'floating_ip_address']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_floatingip_with_subnet_id(self):
- # Create floatingip: fip1 on a given subnet id.
- resource = 'floatingip'
- cmd = fip.CreateFloatingIP(test_cli20.MyApp(sys.stdout), None)
- name = 'fip1'
- myid = 'myid'
- subnet_id = 'mysubnetid'
-
- args = [name, '--subnet', subnet_id]
- position_values = [name, subnet_id]
- position_names = ['floating_network_id', 'subnet_id']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_floatingip_with_subnet_id_and_port(self):
- # Create floatingip: fip1 on a given subnet id and port.
- resource = 'floatingip'
- cmd = fip.CreateFloatingIP(test_cli20.MyApp(sys.stdout), None)
- name = 'fip1'
- myid = 'myid'
- pid = 'mypid'
- subnet_id = 'mysubnetid'
-
- args = [name, '--subnet', subnet_id, '--port-id', pid]
- position_values = [name, subnet_id, pid]
- position_names = ['floating_network_id', 'subnet_id', 'port_id']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_floatingip_with_dns_name_and_dns_domain(self):
- # Create floatingip: fip1 with dns name and dns domain.
- resource = 'floatingip'
- cmd = fip.CreateFloatingIP(test_cli20.MyApp(sys.stdout), None)
- name = 'fip1'
- myid = 'myid'
- dns_name_name = 'my-floatingip'
- dns_domain_name = 'my-domain.org.'
- args = [name, '--dns-name', dns_name_name, '--dns-domain',
- dns_domain_name]
- position_names = ['floating_network_id', 'dns_name', 'dns_domain']
- position_values = [name, dns_name_name, dns_domain_name]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_list_floatingips(self):
- # list floatingips: -D.
- resources = 'floatingips'
- cmd = fip.ListFloatingIP(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_floatingips_pagination(self):
- resources = 'floatingips'
- cmd = fip.ListFloatingIP(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_floatingips_sort(self):
- # list floatingips:
- # --sort-key name --sort-key id --sort-key asc --sort-key desc
- resources = 'floatingips'
- cmd = fip.ListFloatingIP(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_floatingips_limit(self):
- # list floatingips: -P.
- resources = 'floatingips'
- cmd = fip.ListFloatingIP(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_delete_floatingip(self):
- # Delete floatingip: fip1.
- resource = 'floatingip'
- cmd = fip.DeleteFloatingIP(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
-
- def test_show_floatingip(self):
- # Show floatingip: --fields id.
- resource = 'floatingip'
- cmd = fip.ShowFloatingIP(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id'])
-
- def test_disassociate_ip(self):
- # Disassociate floating IP: myid.
- resource = 'floatingip'
- cmd = fip.DisassociateFloatingIP(test_cli20.MyApp(sys.stdout), None)
- args = ['myid']
- self._test_update_resource(resource, cmd, 'myid',
- args, {"port_id": None}
- )
-
- def test_associate_ip(self):
- # Associate floating IP: myid portid.
- resource = 'floatingip'
- cmd = fip.AssociateFloatingIP(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'portid']
- self._test_update_resource(resource, cmd, 'myid',
- args, {"port_id": "portid"}
- )
diff --git a/neutronclient/tests/unit/test_cli20_metering.py b/neutronclient/tests/unit/test_cli20_metering.py
deleted file mode 100644
index 9ecf04734..000000000
--- a/neutronclient/tests/unit/test_cli20_metering.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# Copyright (C) 2013 eNovance SAS
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0 import metering
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20MeteringJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['metering_label', 'metering_label_rule']
-
- def test_create_metering_label(self):
- # Create a metering label.
- resource = 'metering_label'
- cmd = metering.CreateMeteringLabel(
- test_cli20.MyApp(sys.stdout), None)
- name = 'my label'
- myid = 'myid'
- description = 'my description'
- args = [name, '--description', description, '--shared']
- position_names = ['name', 'description', 'shared']
- position_values = [name, description, True]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_list_metering_labels(self):
- resources = "metering_labels"
- cmd = metering.ListMeteringLabel(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd)
-
- def test_delete_metering_label(self):
- # Delete a metering label.
- resource = 'metering_label'
- cmd = metering.DeleteMeteringLabel(
- test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
-
- def test_show_metering_label(self):
- resource = 'metering_label'
- cmd = metering.ShowMeteringLabel(
- test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id'])
-
- def test_create_metering_label_rule(self):
- resource = 'metering_label_rule'
- cmd = metering.CreateMeteringLabelRule(
- test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- metering_label_id = 'aaa'
- remote_ip_prefix = '10.0.0.0/24'
- direction = 'ingress'
- args = [metering_label_id, remote_ip_prefix, '--direction', direction,
- '--excluded']
- position_names = ['metering_label_id', 'remote_ip_prefix', 'direction',
- 'excluded']
- position_values = [metering_label_id, remote_ip_prefix,
- direction, True]
- self._test_create_resource(resource, cmd, metering_label_id,
- myid, args, position_names, position_values)
-
- def test_list_metering_label_rules(self):
- resources = "metering_label_rules"
- cmd = metering.ListMeteringLabelRule(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd)
-
- def test_delete_metering_label_rule(self):
- resource = 'metering_label_rule'
- cmd = metering.DeleteMeteringLabelRule(
- test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
-
- def test_show_metering_label_rule(self):
- resource = 'metering_label_rule'
- cmd = metering.ShowMeteringLabelRule(
- test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id'])
diff --git a/neutronclient/tests/unit/test_cli20_network.py b/neutronclient/tests/unit/test_cli20_network.py
deleted file mode 100644
index b1f69acc8..000000000
--- a/neutronclient/tests/unit/test_cli20_network.py
+++ /dev/null
@@ -1,698 +0,0 @@
-# All Rights Reserved
-#
-# 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 itertools
-import sys
-from unittest import mock
-
-from oslo_serialization import jsonutils
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0 import network
-from neutronclient import shell
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20CreateNetworkJSON(test_cli20.CLITestV20Base):
- def setUp(self):
- super(CLITestV20CreateNetworkJSON, self).setUp(plurals={'tags': 'tag'})
-
- def _test_create_network(self, **kwargs):
- cmd = network.CreateNetwork(test_cli20.MyApp(sys.stdout), None)
- resource = kwargs.pop('resource', 'network')
-
- name = kwargs.pop('name', 'myname')
- myid = kwargs.pop('myid', 'myid')
- args = kwargs.pop('args', [name, ])
- position_names = kwargs.pop('position_names', ['name', ])
- position_values = kwargs.pop('position_values', [name, ])
-
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- **kwargs)
-
- def test_create_network(self):
- # Create net: myname.
- self._test_create_network()
-
- def test_create_network_with_unicode(self):
- # Create net: u'\u7f51\u7edc'.
- self._test_create_network(name=u'\u7f51\u7edc')
-
- def test_create_network_description(self):
- # Create net: --tenant_id tenantid myname.
- name = 'myname'
- args = ['--description', 'Nice network', name]
- self._test_create_network(name=name,
- args=args,
- description='Nice network')
-
- def test_create_network_tenant_underscore(self):
- # Create net: --tenant_id tenantid myname.
- name = 'myname'
- args = ['--tenant_id', 'tenantid', name]
- self._test_create_network(name=name, args=args, tenant_id="tenantid")
-
- def test_create_network_tenant_dash(self):
- # Test dashed options
- # Create net: --tenant_id tenantid myname.
- name = 'myname'
- args = ['--tenant-id', 'tenantid', name]
- self._test_create_network(name=name, args=args, tenant_id="tenantid")
-
- def test_create_network_provider_args(self):
- # Create net: with --provider arguments.
- # Test --provider attributes before network name
- name = 'myname'
- args = ['--provider:network_type', 'vlan',
- '--provider:physical_network', 'physnet1',
- '--provider:segmentation_id', '400', name]
- position_names = ['provider:network_type',
- 'provider:physical_network',
- 'provider:segmentation_id', 'name']
- position_values = ['vlan', 'physnet1', '400', name]
- self._test_create_network(name=name,
- args=args,
- position_names=position_names,
- position_values=position_values)
-
- def test_create_network_tags(self):
- # Create net: myname --tags a b.
- name = 'myname'
- args = [name, '--tags', 'a', 'b']
- self._test_create_network(name=name, args=args, tags=['a', 'b'])
-
- def test_create_network_state_underscore(self):
- # Create net: --admin_state_down myname.
- name = 'myname'
- args = ['--admin_state_down', name, ]
- self._test_create_network(name=name, args=args, admin_state_up=False)
-
- def test_create_network_state_dash(self):
- # Test dashed options
- name = 'myname'
- args = ['--admin-state-down', name, ]
- self._test_create_network(name=name, args=args, admin_state_up=False)
-
- def test_create_network_vlan_transparent(self):
- # Create net: myname --vlan-transparent True.
- name = 'myname'
- args = ['--vlan-transparent', 'True', name]
- self._test_create_network(name=name,
- args=args,
- vlan_transparent='True')
-
- def test_create_network_with_qos_policy(self):
- # Create net: --qos-policy mypolicy.
- name = 'myname'
- qos_policy_name = 'mypolicy'
- args = [name, '--qos-policy', qos_policy_name]
- position_names = ['name', 'qos_policy_id']
- position_values = [name, qos_policy_name]
- self._test_create_network(name=name,
- args=args,
- position_names=position_names,
- position_values=position_values)
-
- def test_create_network_with_az_hint(self):
- # Create net: --availability-zone-hint zone1
- # --availability-zone-hint zone2.
- name = 'myname'
- args = ['--availability-zone-hint', 'zone1',
- '--availability-zone-hint', 'zone2', name]
- position_names = ['availability_zone_hints', 'name']
- position_values = [['zone1', 'zone2'], name]
- self._test_create_network(name=name,
- args=args,
- position_names=position_names,
- position_values=position_values)
-
- def test_create_network_with_dns_domain(self):
- # Create net: --dns-domain my-domain.org.
- name = 'myname'
- dns_domain_name = 'my-domain.org.'
- args = [name, '--dns-domain', dns_domain_name]
- position_names = ['name', 'dns_domain']
- position_values = [name, dns_domain_name]
- self._test_create_network(name=name,
- args=args,
- position_names=position_names,
- position_values=position_values)
-
-
-class CLITestV20ListNetworkJSON(test_cli20.CLITestV20Base):
- def setUp(self):
- super(CLITestV20ListNetworkJSON, self).setUp(plurals={'tags': 'tag'})
-
- def test_list_nets_empty_with_column(self):
- resources = "networks"
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- reses = {resources: []}
- resstr = self.client.serialize(reses)
- resp = (test_cli20.MyResp(200), resstr)
- # url method body
- query = "id=myfakeid"
- args = ['-c', 'id', '--', '--id', 'myfakeid']
- path = getattr(self.client, resources + "_path")
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request, \
- mock.patch.object(network.ListNetwork, "extend_list",
- return_value=None) as mock_extend_list:
- cmd_parser = cmd.get_parser("list_" + resources)
- shell.run_command(cmd, cmd_parser, args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(test_cli20.end_url(path, query),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
- _str = self.fake_stdout.make_string()
- self.assertEqual('\n', _str)
-
- def _test_list_networks(self, cmd, detail=False, tags=(),
- fields_1=(), fields_2=(), page_size=None,
- sort_key=(), sort_dir=(), base_args=None,
- query=''):
- resources = "networks"
- with mock.patch.object(network.ListNetwork, "extend_list",
- return_value=None) as mock_extend_list:
- self._test_list_resources(resources, cmd, detail, tags,
- fields_1, fields_2, page_size=page_size,
- sort_key=sort_key, sort_dir=sort_dir,
- base_args=base_args, query=query)
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
-
- def test_list_nets_pagination(self):
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- with mock.patch.object(network.ListNetwork, "extend_list",
- return_value=None) as mock_extend_list:
- self._test_list_resources_with_pagination("networks", cmd)
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
-
- def test_list_nets_sort(self):
- # list nets:
- # --sort-key name --sort-key id --sort-dir asc --sort-dir desc
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_networks(cmd, sort_key=['name', 'id'],
- sort_dir=['asc', 'desc'])
-
- def test_list_nets_sort_with_keys_more_than_dirs(self):
- # list nets: --sort-key name --sort-key id --sort-dir desc
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_networks(cmd, sort_key=['name', 'id'],
- sort_dir=['desc'])
-
- def test_list_nets_sort_with_dirs_more_than_keys(self):
- # list nets: --sort-key name --sort-dir desc --sort-dir asc
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_networks(cmd, sort_key=['name'],
- sort_dir=['desc', 'asc'])
-
- def test_list_nets_limit(self):
- # list nets: -P.
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_networks(cmd, page_size=1000)
-
- def test_list_nets_detail(self):
- # list nets: -D.
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_networks(cmd, True)
-
- def test_list_nets_tags(self):
- # List nets: -- --tags a b.
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_networks(cmd, tags=['a', 'b'])
-
- def test_list_nets_tags_with_unicode(self):
- # List nets: -- --tags u'\u7f51\u7edc'.
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_networks(cmd, tags=[u'\u7f51\u7edc'])
-
- def test_list_nets_detail_tags(self):
- # List nets: -D -- --tags a b.
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_networks(cmd, detail=True, tags=['a', 'b'])
-
- def _test_list_nets_extend_subnets(self, data, expected):
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- nets_path = getattr(self.client, 'networks_path')
- subnets_path = getattr(self.client, 'subnets_path')
- nets_query = ''
- filters = ''
- for n in data:
- for s in n['subnets']:
- filters = filters + "&id=%s" % s
- subnets_query = 'fields=id&fields=cidr' + filters
- with mock.patch.object(cmd, 'get_client',
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient,
- "request") as mock_request:
- resp1 = (test_cli20.MyResp(200),
- self.client.serialize({'networks': data}))
- resp2 = (test_cli20.MyResp(200),
- self.client.serialize({'subnets': [
- {'id': 'mysubid1', 'cidr': '192.168.1.0/24'},
- {'id': 'mysubid2', 'cidr': '172.16.0.0/24'},
- {'id': 'mysubid3', 'cidr': '10.1.1.0/24'}]}))
- mock_request.side_effect = [resp1, resp2]
- args = []
- cmd_parser = cmd.get_parser('list_networks')
- parsed_args = cmd_parser.parse_args(args)
- result = cmd.take_action(parsed_args)
-
- mock_get_client.assert_called_with()
- self.assertEqual(2, mock_request.call_count)
- mock_request.assert_has_calls([
- mock.call(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(nets_path, nets_query),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN})),
- mock.call(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(subnets_path, subnets_query),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))])
- _result = [x for x in result[1]]
- self.assertEqual(len(expected), len(_result))
- for res, exp in zip(_result, expected):
- self.assertEqual(len(exp), len(res))
- for obsrvd, expctd in zip(res, exp):
- self.assertEqual(expctd, obsrvd)
-
- def test_list_nets_extend_subnets(self):
- data = [{'id': 'netid1', 'name': 'net1', 'subnets': ['mysubid1']},
- {'id': 'netid2', 'name': 'net2', 'subnets': ['mysubid2',
- 'mysubid3']}]
- # id, name, subnets
- expected = [('netid1', 'net1', 'mysubid1 192.168.1.0/24'),
- ('netid2', 'net2',
- 'mysubid2 172.16.0.0/24\nmysubid3 10.1.1.0/24')]
- self._test_list_nets_extend_subnets(data, expected)
-
- def test_list_nets_extend_subnets_no_subnet(self):
- data = [{'id': 'netid1', 'name': 'net1', 'subnets': ['mysubid1']},
- {'id': 'netid2', 'name': 'net2', 'subnets': ['mysubid4']}]
- # id, name, subnets
- expected = [('netid1', 'net1', 'mysubid1 192.168.1.0/24'),
- ('netid2', 'net2', 'mysubid4 ')]
- self._test_list_nets_extend_subnets(data, expected)
-
- def test_list_nets_fields(self):
- # List nets: --fields a --fields b -- --fields c d.
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_networks(cmd,
- fields_1=['a', 'b'], fields_2=['c', 'd'])
-
- def _test_list_nets_columns(self, cmd, returned_body,
- args=('-f', 'json')):
- resources = 'networks'
- with mock.patch.object(network.ListNetwork, "extend_list",
- return_value=None) as mock_extend_list:
- self._test_list_columns(cmd, resources, returned_body, args=args)
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
-
- def test_list_nets_defined_column(self):
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- returned_body = {"networks": [{"name": "buildname3",
- "id": "id3",
- "tenant_id": "tenant_3",
- "subnets": []}]}
- self._test_list_nets_columns(cmd, returned_body,
- args=['-f', 'json', '-c', 'id'])
- _str = self.fake_stdout.make_string()
- returned_networks = jsonutils.loads(_str)
- self.assertEqual(1, len(returned_networks))
- net = returned_networks[0]
- self.assertEqual(1, len(net))
- self.assertIn("id", net.keys())
-
- def test_list_nets_with_default_column(self):
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- returned_body = {"networks": [{"name": "buildname3",
- "id": "id3",
- "tenant_id": "tenant_3",
- "subnets": []}]}
- self._test_list_nets_columns(cmd, returned_body)
- _str = self.fake_stdout.make_string()
- returned_networks = jsonutils.loads(_str)
- self.assertEqual(1, len(returned_networks))
- net = returned_networks[0]
- self.assertEqual(3, len(net))
- self.assertEqual(0, len(set(net) ^ set(cmd.list_columns)))
-
- def test_list_external_nets_empty_with_column(self):
- resources = "networks"
- cmd = network.ListExternalNetwork(test_cli20.MyApp(sys.stdout), None)
- 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")
- resp = (test_cli20.MyResp(200), resstr)
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request, \
- mock.patch.object(network.ListNetwork, "extend_list",
- return_value=None) as mock_extend_list:
- cmd_parser = cmd.get_parser("list_" + resources)
- shell.run_command(cmd, cmd_parser, args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, query), self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
- _str = self.fake_stdout.make_string()
- self.assertEqual('\n', _str)
-
- def _test_list_external_nets(self, resources, cmd,
- detail=False, tags=(),
- fields_1=(), fields_2=()):
- reses = {resources: [{'id': 'myid1', },
- {'id': 'myid2', }, ], }
-
- resstr = self.client.serialize(reses)
- resp = (test_cli20.MyResp(200), resstr)
-
- # 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)
- for field in itertools.chain(fields_1, fields_2):
- 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")
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request, \
- mock.patch.object(network.ListNetwork, "extend_list",
- return_value=None) as mock_extend_list:
- cmd_parser = cmd.get_parser("list_" + resources)
- shell.run_command(cmd, cmd_parser, args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, query), self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
- _str = self.fake_stdout.make_string()
-
- self.assertIn('myid1', _str)
-
- def test_list_external_nets_detail(self):
- # list external nets: -D.
- resources = "networks"
- cmd = network.ListExternalNetwork(test_cli20.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 = network.ListExternalNetwork(test_cli20.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 = network.ListExternalNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_external_nets(resources, cmd,
- detail=True, tags=['a', 'b'])
-
- def test_list_external_nets_fields(self):
- # List external nets: --fields a --fields b -- --fields c d.
- resources = "networks"
- cmd = network.ListExternalNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_external_nets(resources, cmd,
- fields_1=['a', 'b'],
- fields_2=['c', 'd'])
-
- def test_list_shared_networks(self):
- # list nets : --shared False
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_list_networks(cmd, base_args='--shared False'.split(),
- query='shared=False')
-
-
-class CLITestV20UpdateNetworkJSON(test_cli20.CLITestV20Base):
- def test_update_network_exception(self):
- # Update net: myid.
- resource = 'network'
- cmd = network.UpdateNetwork(test_cli20.MyApp(sys.stdout), None)
- self.assertRaises(exceptions.CommandError, self._test_update_resource,
- resource, cmd, 'myid', ['myid'], {})
-
- def test_update_network(self):
- # Update net: myid --name myname --tags a b.
- resource = 'network'
- cmd = network.UpdateNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'myname',
- '--tags', 'a', 'b', '--description',
- 'This network takes the scenic route'],
- {'name': 'myname', 'tags': ['a', 'b'],
- 'description': 'This network takes the '
- 'scenic route'})
-
- def test_update_network_with_unicode(self):
- # Update net: myid --name u'\u7f51\u7edc' --tags a b.
- resource = 'network'
- cmd = network.UpdateNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', u'\u7f51\u7edc',
- '--tags', 'a', 'b'],
- {'name': u'\u7f51\u7edc',
- 'tags': ['a', 'b'], }
- )
-
- def test_update_network_with_qos_policy(self):
- # Update net: myid --qos-policy mypolicy.
- resource = 'network'
- cmd = network.UpdateNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--qos-policy', 'mypolicy'],
- {'qos_policy_id': 'mypolicy', })
-
- def test_update_network_with_no_qos_policy(self):
- # Update net: myid --no-qos-policy.
- resource = 'network'
- cmd = network.UpdateNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--no-qos-policy'],
- {'qos_policy_id': None, })
-
- def test_update_network_with_dns_domain(self):
- # Update net: myid --dns-domain my-domain.org.
- resource = 'network'
- cmd = network.UpdateNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--dns-domain', 'my-domain.org.'],
- {'dns_domain': 'my-domain.org.', })
-
- def test_update_network_with_no_dns_domain(self):
- # Update net: myid --no-dns-domain
- resource = 'network'
- cmd = network.UpdateNetwork(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--no-dns-domain'],
- {'dns_domain': "", })
-
-
-class CLITestV20ShowNetworkJSON(test_cli20.CLITestV20Base):
- def test_show_network(self):
- # Show net: --fields id --fields name myid.
- resource = 'network'
- cmd = network.ShowNetwork(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args,
- ['id', 'name'])
-
-
-class CLITestV20DeleteNetworkJSON(test_cli20.CLITestV20Base):
- def test_delete_network(self):
- # Delete net: myid.
- resource = 'network'
- cmd = network.DeleteNetwork(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
-
- def test_bulk_delete_network(self):
- # Delete net: myid1 myid2.
- resource = 'network'
- cmd = network.DeleteNetwork(test_cli20.MyApp(sys.stdout), None)
- myid1 = 'myid1'
- myid2 = 'myid2'
- args = [myid1, myid2]
- self._test_delete_resource(resource, cmd, myid1, args, extra_id=myid2)
-
- def test_bulk_delete_network_fail(self):
- # Delete net: myid1 myid2.
- resource = 'network'
- cmd = network.DeleteNetwork(test_cli20.MyApp(sys.stdout), None)
- myid1 = 'myid1'
- myid2 = 'myid2'
- args = [myid1, myid2]
- self.assertRaises(exceptions.NeutronCLIError,
- self._test_delete_resource,
- resource, cmd, myid1, args, extra_id=myid2,
- delete_fail=True)
-
-
-class CLITestV20ExtendListNetworkJSON(test_cli20.CLITestV20Base):
- def _build_test_data(self, data):
- subnet_ids = []
- response = []
- filters = ""
- for n in data:
- if 'subnets' in n:
- subnet_ids.extend(n['subnets'])
- for subnet_id in n['subnets']:
- filters = "%s&id=%s" % (filters, subnet_id)
- response.append({'id': subnet_id,
- 'cidr': '192.168.0.0/16'})
- resp_str = self.client.serialize({'subnets': response})
- resp = (test_cli20.MyResp(200), resp_str)
- return filters, resp
-
- def test_extend_list(self):
- data = [{'id': 'netid%d' % i, 'name': 'net%d' % i,
- 'subnets': ['mysubid%d' % i]}
- for i in range(10)]
- filters, response = self._build_test_data(data)
- path = getattr(self.client, 'subnets_path')
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=response) as mock_request:
- known_args, _vs = cmd.get_parser('create_subnets')\
- .parse_known_args()
- cmd.extend_list(data, known_args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(test_cli20.end_url(
- path, 'fields=id&fields=cidr' + filters), self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
-
- def test_extend_list_exceed_max_uri_len(self):
- data = [{'id': 'netid%d' % i, 'name': 'net%d' % i,
- 'subnets': ['mysubid%d' % i]}
- for i in range(10)]
- # Since in pagination we add &marker= (44 symbols), total change
- # is 45 symbols. Single subnet takes 40 symbols (id=&).
- # Because of it marker will take more space than single subnet filter,
- # and we expect neutron to send last 2 subnets in separate response.
- filters1, response1 = self._build_test_data(data[:len(data) - 2])
- filters2, response2 = self._build_test_data(data[len(data) - 2:])
- path = getattr(self.client, 'subnets_path')
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient,
- "request") as mock_request, \
- mock.patch.object(self.client.httpclient, "_check_uri_length",
- return_value=None) as mock_check_uri_length:
- # 1 char of extra URI len will cause a split in 2 requests
- mock_check_uri_length.side_effect = [
- exceptions.RequestURITooLong(excess=1), None, None]
- mock_request.side_effect = [response1, response2]
- known_args, _vs = cmd.get_parser('create_subnets')\
- .parse_known_args()
- cmd.extend_list(data, known_args)
-
- mock_get_client.assert_called_once_with()
- self.assertEqual(2, mock_request.call_count)
- mock_request.assert_has_calls([
- mock.call(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(
- path, 'fields=id&fields=cidr%s' % filters1),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN})),
- mock.call(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(
- path, 'fields=id&fields=cidr%s' % filters2),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))])
diff --git a/neutronclient/tests/unit/test_cli20_network_ip_availability.py b/neutronclient/tests/unit/test_cli20_network_ip_availability.py
deleted file mode 100644
index eb325a8f6..000000000
--- a/neutronclient/tests/unit/test_cli20_network_ip_availability.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# 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 sys
-
-from neutronclient.neutron.v2_0 import network_ip_availability
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20NetworkIPAvailability(test_cli20.CLITestV20Base):
-
- id_field = 'network_id'
-
- def _test_list_network_ip_availability(self, args, query):
- resources = "network_ip_availabilities"
- cmd = network_ip_availability.ListIpAvailability(test_cli20.MyApp
- (sys.stdout), None)
- self._test_list_resources(resources, cmd,
- base_args=args,
- query=query)
-
- def test_list_network_ip_availability(self):
- self._test_list_network_ip_availability(args=None,
- query='ip_version=4')
-
- def test_list_network_ip_availability_ipv6(self):
- self._test_list_network_ip_availability(
- args=['--ip-version', '6'], query='ip_version=6')
-
- def test_list_network_ip_availability_net_id_and_ipv4(self):
- self._test_list_network_ip_availability(
- args=['--ip-version', '4', '--network-id', 'myid'],
- query='ip_version=4&network_id=myid')
-
- def test_list_network_ip_availability_net_name_and_tenant_id(self):
- self._test_list_network_ip_availability(
- args=['--network-name', 'foo', '--tenant-id', 'mytenant'],
- query='network_name=foo&tenant_id=mytenant&ip_version=4')
-
- def test_show_network_ip_availability(self):
- resource = "network_ip_availability"
- cmd = network_ip_availability.ShowIpAvailability(
- test_cli20.MyApp(sys.stdout), None)
- self._test_show_resource(resource, cmd, self.test_id,
- args=[self.test_id])
diff --git a/neutronclient/tests/unit/test_cli20_port.py b/neutronclient/tests/unit/test_cli20_port.py
deleted file mode 100644
index ab7e95655..000000000
--- a/neutronclient/tests/unit/test_cli20_port.py
+++ /dev/null
@@ -1,794 +0,0 @@
-# Copyright 2012 OpenStack Foundation.
-# All Rights Reserved
-#
-# 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 itertools
-import sys
-from unittest import mock
-
-
-from neutronclient.neutron.v2_0 import port
-from neutronclient import shell
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20PortJSON(test_cli20.CLITestV20Base):
- def setUp(self):
- super(CLITestV20PortJSON, self).setUp(plurals={'tags': 'tag'})
-
- def test_create_port(self):
- # Create port: netid.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = [netid, '--description', 'DESC']
- position_names = ['network_id']
- position_values = []
- position_values.extend([netid])
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- description='DESC')
-
- def test_create_port_extra_dhcp_opts_args(self):
- # Create port: netid --extra_dhcp_opt.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- extra_dhcp_opts = [{'opt_name': 'bootfile-name',
- 'opt_value': 'pxelinux.0'},
- {'opt_name': 'tftp-server',
- 'opt_value': '123.123.123.123'},
- {'opt_name': 'server-ip-address',
- 'opt_value': '123.123.123.45'}]
- args = [netid]
- for dhcp_opt in extra_dhcp_opts:
- args += ['--extra-dhcp-opt',
- ('opt_name=%(opt_name)s,opt_value=%(opt_value)s' %
- dhcp_opt)]
- position_names = ['network_id', 'extra_dhcp_opts']
- position_values = [netid, extra_dhcp_opts]
- position_values.extend([netid])
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_extra_dhcp_opts_args_ip_version(self):
- # Create port: netid --extra_dhcp_opt.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- extra_dhcp_opts = [{'opt_name': 'bootfile-name',
- 'opt_value': 'pxelinux.0',
- 'ip_version': "4"},
- {'opt_name': 'tftp-server',
- 'opt_value': '2001:192:168::1',
- 'ip_version': "6"},
- {'opt_name': 'server-ip-address',
- 'opt_value': '123.123.123.45',
- 'ip_version': "4"}]
- args = [netid]
- for dhcp_opt in extra_dhcp_opts:
- args += ['--extra-dhcp-opt',
- ('opt_name=%(opt_name)s,opt_value=%(opt_value)s,'
- 'ip_version=%(ip_version)s' %
- dhcp_opt)]
- position_names = ['network_id', 'extra_dhcp_opts']
- position_values = [netid, extra_dhcp_opts]
- position_values.extend([netid])
- 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.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--mac_address', 'mac', '--device_id', 'deviceid', netid]
- position_names = ['network_id', 'mac_address', 'device_id']
- position_values = [netid, 'mac', 'deviceid']
- 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']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_vnic_type_normal(self):
- # Create port: --vnic_type normal netid.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--vnic_type', 'normal', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['normal', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- # Test dashed options
- args = ['--vnic-type', 'normal', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['normal', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_vnic_type_direct(self):
- # Create port: --vnic_type direct netid.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--vnic_type', 'direct', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['direct', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- # Test dashed options
- args = ['--vnic-type', 'direct', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['direct', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_vnic_type_direct_physical(self):
- # Create port: --vnic_type direct-physical netid.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--vnic_type', 'direct-physical', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['direct-physical', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- # Test dashed options
- args = ['--vnic-type', 'direct-physical', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['direct-physical', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_vnic_type_macvtap(self):
- # Create port: --vnic_type macvtap netid.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--vnic_type', 'macvtap', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['macvtap', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- # Test dashed options
- args = ['--vnic-type', 'macvtap', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['macvtap', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_vnic_type_baremetal(self):
- # Create port: --vnic_type baremetal netid.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--vnic_type', 'baremetal', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['baremetal', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- # Test dashed options
- args = ['--vnic-type', 'baremetal', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['baremetal', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_vnic_type_smart_nic(self):
- # Create port: --vnic_type smart-nic netid.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--vnic_type', 'smart-nic', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['smart-nic', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- # Test dashed options
- args = ['--vnic-type', 'smart-nic', netid]
- position_names = ['binding:vnic_type', 'network_id']
- position_values = ['smart-nic', netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_with_binding_profile(self):
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--binding_profile', '{"foo":"bar"}', netid]
- position_names = ['binding:profile', 'network_id']
- position_values = [{'foo': 'bar'}, netid]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- # Test dashed options
- args = ['--binding-profile', '{"foo":"bar"}', netid]
- position_names = ['binding:profile', 'network_id']
- position_values = [{'foo': 'bar'}, netid]
- 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.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--tenant_id', 'tenantid', netid, ]
- position_names = ['network_id']
- position_values = []
- position_values.extend([netid])
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- # Test dashed options
- args = ['--tenant-id', 'tenantid', netid, ]
- 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.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = [netid, '--tags', 'a', 'b']
- position_names = ['network_id']
- position_values = []
- position_values.extend([netid])
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tags=['a', 'b'])
-
- def test_create_port_secgroup(self):
- # Create port: --security-group sg1_id netid.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--security-group', 'sg1_id', netid]
- position_names = ['network_id', 'security_groups']
- position_values = [netid, ['sg1_id']]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_secgroups(self):
- # Create port: netid
- # The are --security-group sg1_id
- # --security-group sg2_id
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--security-group', 'sg1_id',
- '--security-group', 'sg2_id',
- netid]
- position_names = ['network_id', 'security_groups']
- position_values = [netid, ['sg1_id', 'sg2_id']]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_secgroup_off(self):
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--no-security-groups', netid]
- position_names = ['network_id', 'security_groups']
- position_values = [netid, []]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_secgroups_list(self):
- # Create port: netid
- # The are --security-groups list=true sg_id1 sg_id2
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = [netid, '--security-groups', 'list=true', 'sg_id1', 'sg_id2']
- position_names = ['network_id', 'security_groups']
- position_values = [netid, ['sg_id1', 'sg_id2']]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_with_qos_policy(self):
- # Create port: --qos-policy mypolicy.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- qos_policy_name = 'mypolicy'
- args = [netid, '--qos-policy', qos_policy_name]
- position_names = ['network_id', 'qos_policy_id']
- position_values = [netid, qos_policy_name]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_with_dns_name(self):
- # Create port: --dns-name my-port.
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- dns_name_name = 'my-port'
- args = [netid, '--dns-name', dns_name_name]
- position_names = ['network_id', 'dns_name']
- position_values = [netid, dns_name_name]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_with_allowed_address_pair_ipaddr(self):
- # Create port:
- # --allowed-address-pair ip_address=addr0
- # --allowed-address-pair ip_address=addr1
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- pairs = [{'ip_address': '123.123.123.123'},
- {'ip_address': '123.123.123.45'}]
- args = [netid,
- '--allowed-address-pair',
- 'ip_address=123.123.123.123',
- '--allowed-address-pair',
- 'ip_address=123.123.123.45']
- position_names = ['network_id', 'allowed_address_pairs']
- position_values = [netid, pairs]
- position_values.extend([netid])
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_port_with_allowed_address_pair(self):
- # Create port:
- # --allowed-address-pair ip_address=addr0,mac_address=mac0
- # --allowed-address-pair ip_address=addr1,mac_address=mac1
- resource = 'port'
- cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- pairs = [{'ip_address': '123.123.123.123',
- 'mac_address': '10:00:00:00:00:00'},
- {'ip_address': '123.123.123.45',
- 'mac_address': '10:00:00:00:00:01'}]
- args = [netid,
- '--allowed-address-pair',
- 'ip_address=123.123.123.123,mac_address=10:00:00:00:00:00',
- '--allowed-address-pair',
- 'ip_address=123.123.123.45,mac_address=10:00:00:00:00:01']
- position_names = ['network_id', 'allowed_address_pairs']
- position_values = [netid, pairs]
- position_values.extend([netid])
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_list_ports(self):
- # List ports: -D.
- resources = "ports"
- cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_ports_pagination(self):
- resources = "ports"
- cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_ports_sort(self):
- # list ports:
- # --sort-key name --sort-key id --sort-key asc --sort-key desc
- resources = "ports"
- cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_ports_limit(self):
- # list ports: -P.
- resources = "ports"
- cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_list_ports_tags(self):
- # List ports: -- --tags a b.
- resources = "ports"
- cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, tags=['a', 'b'])
-
- def test_list_ports_detail_tags(self):
- # List ports: -D -- --tags a b.
- resources = "ports"
- cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, detail=True, tags=['a', 'b'])
-
- def test_list_ports_fields(self):
- # List ports: --fields a --fields b -- --fields c d.
- resources = "ports"
- cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- fields_1=['a', 'b'], fields_2=['c', 'd'])
-
- def test_list_ports_with_fixed_ips_in_csv(self):
- # List ports: -f csv.
- resources = "ports"
- cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
- fixed_ips = [{"subnet_id": "30422057-d6df-4c90-8314-aefb5e326666",
- "ip_address": "10.0.0.12"},
- {"subnet_id": "30422057-d6df-4c90-8314-aefb5e326666",
- "ip_address": "10.0.0.4"}]
- contents = [{'name': 'name1', 'fixed_ips': fixed_ips}]
- self._test_list_resources(resources, cmd, True,
- response_contents=contents,
- output_format='csv')
-
- def _test_list_router_port(self, resources, cmd,
- myid, detail=False, tags=(),
- fields_1=(), fields_2=()):
- 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)
- for field in itertools.chain(fields_1, fields_2):
- 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")
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=(test_cli20.MyResp(200),
- resstr)) as mock_request:
- cmd_parser = cmd.get_parser("list_" + resources)
- shell.run_command(cmd, cmd_parser, args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), 2)
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, query % myid), self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- _str = self.fake_stdout.make_string()
-
- self.assertIn('myid1', _str)
-
- def test_list_router_ports(self):
- # List router ports: -D.
- resources = "ports"
- cmd = port.ListRouterPort(test_cli20.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 = port.ListRouterPort(test_cli20.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 = port.ListRouterPort(test_cli20.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 = port.ListRouterPort(test_cli20.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 --admin-state-up False --tags a b.
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'myname',
- '--admin-state-up', 'False',
- '--description', 'garbage',
- '--tags', 'a', 'b'],
- {'name': 'myname',
- 'admin_state_up': 'False',
- 'description': 'garbage',
- 'tags': ['a', 'b'], })
-
- def test_update_port_secgroup(self):
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = ['--security-group', 'sg1_id', myid]
- updatefields = {'security_groups': ['sg1_id']}
- self._test_update_resource(resource, cmd, myid, args, updatefields)
-
- def test_update_port_secgroups(self):
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = ['--security-group', 'sg1_id',
- '--security-group', 'sg2_id',
- myid]
- updatefields = {'security_groups': ['sg1_id', 'sg2_id']}
- self._test_update_resource(resource, cmd, myid, args, updatefields)
-
- def test_update_port_extra_dhcp_opts(self):
- # Update port: myid --extra_dhcp_opt.
- resource = 'port'
- myid = 'myid'
- args = [myid,
- '--extra-dhcp-opt',
- "opt_name=bootfile-name,opt_value=pxelinux.0",
- '--extra-dhcp-opt',
- "opt_name=tftp-server,opt_value=123.123.123.123",
- '--extra-dhcp-opt',
- "opt_name=server-ip-address,opt_value=123.123.123.45"
- ]
- updatedfields = {'extra_dhcp_opts': [{'opt_name': 'bootfile-name',
- 'opt_value': 'pxelinux.0'},
- {'opt_name': 'tftp-server',
- 'opt_value': '123.123.123.123'},
- {'opt_name': 'server-ip-address',
- 'opt_value': '123.123.123.45'}]}
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, myid, args, updatedfields)
-
- def test_update_port_fixed_ip(self):
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- subnet_id = 'subnet_id'
- ip_addr = '123.123.123.123'
- args = [myid,
- '--fixed-ip',
- "subnet_id=%(subnet_id)s,ip_address=%(ip_addr)s" %
- {'subnet_id': subnet_id,
- 'ip_addr': ip_addr}]
- updated_fields = {"fixed_ips": [{'subnet_id': subnet_id,
- 'ip_address': ip_addr}]}
- self._test_update_resource(resource, cmd, myid, args, updated_fields)
-
- def test_update_port_device_id_device_owner(self):
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = ['--device-id', 'dev_id', '--device-owner', 'fake', myid]
- updatefields = {'device_id': 'dev_id',
- 'device_owner': 'fake'}
- self._test_update_resource(resource, cmd, myid, args, updatefields)
-
- def test_update_port_extra_dhcp_opts_ip_version(self):
- # Update port: myid --extra_dhcp_opt.
- resource = 'port'
- myid = 'myid'
- args = [myid,
- '--extra-dhcp-opt',
- "opt_name=bootfile-name,opt_value=pxelinux.0,ip_version=4",
- '--extra-dhcp-opt',
- "opt_name=tftp-server,opt_value=2001:192:168::1,ip_version=6",
- '--extra-dhcp-opt',
- "opt_name=server-ip-address,opt_value=null,ip_version=4"
- ]
- updatedfields = {'extra_dhcp_opts': [{'opt_name': 'bootfile-name',
- 'opt_value': 'pxelinux.0',
- 'ip_version': '4'},
- {'opt_name': 'tftp-server',
- 'opt_value': '2001:192:168::1',
- 'ip_version': '6'},
- {'opt_name': 'server-ip-address',
- 'opt_value': None,
- 'ip_version': '4'}]}
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, myid, args, updatedfields)
-
- def test_update_port_with_qos_policy(self):
- # Update port: myid --qos-policy mypolicy.
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--qos-policy', 'mypolicy'],
- {'qos_policy_id': 'mypolicy', })
-
- def test_update_port_with_no_qos_policy(self):
- # Update port: myid --no-qos-policy.
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--no-qos-policy'],
- {'qos_policy_id': None, })
-
- def test_update_port_with_dns_name(self):
- # Update port: myid --dns-name my-port.
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--dns-name', 'my-port'],
- {'dns_name': 'my-port', })
-
- def test_update_port_with_no_dns_name(self):
- # Update port: myid --no-dns-name
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--no-dns-name'],
- {'dns_name': "", })
-
- def test_delete_extra_dhcp_opts_from_port(self):
- resource = 'port'
- myid = 'myid'
- args = [myid,
- '--extra-dhcp-opt',
- "opt_name=bootfile-name,opt_value=null",
- '--extra-dhcp-opt',
- "opt_name=tftp-server,opt_value=123.123.123.123",
- '--extra-dhcp-opt',
- "opt_name=server-ip-address,opt_value=123.123.123.45"
- ]
- # the client code will change the null to None and send to server,
- # where its interpreted as delete the DHCP option on the port.
- updatedfields = {'extra_dhcp_opts': [{'opt_name': 'bootfile-name',
- 'opt_value': None},
- {'opt_name': 'tftp-server',
- 'opt_value': '123.123.123.123'},
- {'opt_name': 'server-ip-address',
- 'opt_value': '123.123.123.45'}]}
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, myid, args, updatedfields)
-
- def test_update_port_security_group_off(self):
- # Update port: --no-security-groups myid.
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['--no-security-groups', 'myid'],
- {'security_groups': []})
-
- def test_update_port_allowed_address_pair_ipaddr(self):
- # Update port(ip_address only):
- # --allowed-address-pairs ip_address=addr0
- # --allowed-address-pairs ip_address=addr1
- import sys
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- pairs = [{'ip_address': '123.123.123.123'},
- {'ip_address': '123.123.123.45'}]
- args = [myid,
- '--allowed-address-pair',
- 'ip_address=123.123.123.123',
- '--allowed-address-pair',
- 'ip_address=123.123.123.45']
- updatefields = {'allowed_address_pairs': pairs}
- self._test_update_resource(resource, cmd, myid, args, updatefields)
-
- def test_update_port_allowed_address_pair(self):
- # Update port:
- # --allowed-address-pair ip_address=addr0,mac_address=mac0
- # --allowed-address-pair ip_address_addr1,mac_address=mac1
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- pairs = [{'ip_address': '123.123.123.123',
- 'mac_address': '10:00:00:00:00:00'},
- {'ip_address': '123.123.123.45',
- 'mac_address': '10:00:00:00:00:01'}]
- args = [myid,
- '--allowed-address-pair',
- 'ip_address=123.123.123.123,mac_address=10:00:00:00:00:00',
- '--allowed-address-pair',
- 'ip_address=123.123.123.45,mac_address=10:00:00:00:00:01']
- updatefields = {'allowed_address_pairs': pairs}
- self._test_update_resource(resource, cmd, myid, args, updatefields)
-
- def test_update_port_allowed_address_pairs_off(self):
- # Update port: --no-allowed-address-pairs.
- resource = 'port'
- cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['--no-allowed-address-pairs', 'myid'],
- {'allowed_address_pairs': []})
-
- def test_show_port(self):
- # Show port: --fields id --fields name myid.
- resource = 'port'
- cmd = port.ShowPort(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_delete_port(self):
- # Delete port: myid.
- resource = 'port'
- cmd = port.DeletePort(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
diff --git a/neutronclient/tests/unit/test_cli20_purge.py b/neutronclient/tests/unit/test_cli20_purge.py
deleted file mode 100644
index 9bfd91c53..000000000
--- a/neutronclient/tests/unit/test_cli20_purge.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# Copyright 2016 Cisco Systems
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0 import purge
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20Purge(test_cli20.CLITestV20Base):
-
- def setUp(self):
- super(CLITestV20Purge, self).setUp()
- self.resource_types = ['floatingip', 'port', 'router',
- 'network', 'security_group']
-
- def _generate_resources_dict(self, value=0):
- resources_dict = {}
- resources_dict['true'] = value
- for resource_type in self.resource_types:
- resources_dict[resource_type] = value
- return resources_dict
-
- def _verify_suffix(self, resources, message):
- for resource, value in resources.items():
- if value > 0:
- suffix = list('%(value)d %(resource)s' %
- {'value': value, 'resource': resource})
- if value != 1:
- suffix.append('s')
- suffix = ''.join(suffix)
- self.assertIn(suffix, message)
- else:
- self.assertNotIn(resource, message)
-
- def _verify_message(self, message, deleted, failed):
- message = message.split('.')
- success_prefix = "Deleted "
- failure_prefix = "The following resources could not be deleted: "
- if not deleted['true']:
- for msg in message:
- self.assertNotIn(success_prefix, msg)
- message = message[0]
- if not failed['true']:
- expected = 'Tenant has no supported resources'
- self.assertEqual(expected, message)
- else:
- self.assertIn(failure_prefix, message)
- self._verify_suffix(failed, message)
- else:
- resources_deleted = message[0]
- self.assertIn(success_prefix, resources_deleted)
- self._verify_suffix(deleted, resources_deleted)
- if failed['true']:
- resources_failed = message[1]
- self.assertIn(failure_prefix, resources_failed)
- self._verify_suffix(failed, resources_failed)
- else:
- for msg in message:
- self.assertNotIn(failure_prefix, msg)
-
- def _verify_result(self, my_purge, deleted, failed):
- message = my_purge._build_message(deleted, failed, failed['true'])
- self._verify_message(message, deleted, failed)
-
- def test_build_message(self):
- my_purge = purge.Purge(test_cli20.MyApp(sys.stdout), None)
-
- # Verify message when tenant has no supported resources
- deleted = self._generate_resources_dict()
- failed = self._generate_resources_dict()
- self._verify_result(my_purge, deleted, failed)
-
- # Verify message when tenant has supported resources,
- # and they are all deleteable
- deleted = self._generate_resources_dict(1)
- self._verify_result(my_purge, deleted, failed)
-
- # Verify message when tenant has supported resources,
- # and some are not deleteable
- failed = self._generate_resources_dict(1)
- self._verify_result(my_purge, deleted, failed)
-
- # Verify message when tenant has supported resources,
- # and all are not deleteable
- deleted = self._generate_resources_dict()
- self._verify_result(my_purge, deleted, failed)
diff --git a/neutronclient/tests/unit/test_cli20_rbac.py b/neutronclient/tests/unit/test_cli20_rbac.py
deleted file mode 100644
index ca89df6f9..000000000
--- a/neutronclient/tests/unit/test_cli20_rbac.py
+++ /dev/null
@@ -1,134 +0,0 @@
-# Copyright 2015 Huawei Technologies India Pvt Ltd.
-# All Rights Reserved
-#
-# 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 sys
-
-import testscenarios
-
-from neutronclient.neutron.v2_0 import rbac
-from neutronclient.tests.unit import test_cli20
-
-load_tests = testscenarios.load_tests_apply_scenarios
-
-
-class CLITestV20RBACBaseJSON(test_cli20.CLITestV20Base):
- non_admin_status_resources = ['rbac_policy']
-
- scenarios = [
- ('network rbac objects',
- {'object_type_name': 'network', 'object_type_val': 'network'}),
- ('qos policy rbac objects',
- {'object_type_name': 'qos-policy', 'object_type_val': 'qos_policy'}),
- ]
-
- def test_create_rbac_policy_with_mandatory_params(self):
- # Create rbac: rbac_object --type --action
- # access_as_shared
- resource = 'rbac_policy'
- cmd = rbac.CreateRBACPolicy(test_cli20.MyApp(sys.stdout), None)
- name = 'rbac_object'
- myid = 'myid'
- args = [name, '--type', self.object_type_name,
- '--action', 'access_as_shared']
- position_names = ['object_id', 'object_type',
- 'target_tenant', 'action']
- position_values = [name, self.object_type_val, '*',
- 'access_as_shared']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_rbac_policy_with_all_params(self):
- # Create rbac: rbac_object --type
- # --target-tenant tenant_id --action access_as_external
- resource = 'rbac_policy'
- cmd = rbac.CreateRBACPolicy(test_cli20.MyApp(sys.stdout), None)
- name = 'rbac_object'
- myid = 'myid'
- args = [name, '--type', self.object_type_name,
- '--target-tenant', 'tenant_id',
- '--action', 'access_as_external']
- position_names = ['object_id', 'object_type',
- 'target_tenant', 'action']
- position_values = [name, self.object_type_val, 'tenant_id',
- 'access_as_external']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_rbac_policy_with_unicode(self):
- # Create rbac policy u'\u7f51\u7edc'.
- resource = 'rbac_policy'
- cmd = rbac.CreateRBACPolicy(test_cli20.MyApp(sys.stdout), None)
- name = u'\u7f51\u7edc'
- myid = 'myid'
- args = [name, '--type', self.object_type_name,
- '--target-tenant', 'tenant_id',
- '--action', 'access_as_external']
- position_names = ['object_id', 'object_type',
- 'target_tenant', 'action']
- position_values = [name, self.object_type_val, 'tenant_id',
- 'access_as_external']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_update_rbac_policy(self):
- # rbac-update --target-tenant .
- resource = 'rbac_policy'
- cmd = rbac.UpdateRBACPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--target-tenant', 'tenant_id'],
- {'target_tenant': 'tenant_id', })
-
- def test_delete_rbac_policy(self):
- # rbac-delete my-id.
- resource = 'rbac_policy'
- cmd = rbac.DeleteRBACPolicy(test_cli20.MyApp(sys.stdout), None)
- my_id = 'myid1'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
-
- def test_list_rbac_policies(self):
- # rbac-list.
- resources = "rbac_policies"
- cmd = rbac.ListRBACPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_rbac_policies_pagination(self):
- # rbac-list with pagination.
- resources = "rbac_policies"
- cmd = rbac.ListRBACPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_rbac_policies_sort(self):
- # sorted list:
- # rbac-list --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = "rbac_policies"
- cmd = rbac.ListRBACPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_rbac_policies_limit(self):
- # size (1000) limited list: rbac-list -P.
- resources = "rbac_policies"
- cmd = rbac.ListRBACPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_rbac_policy(self):
- # rbac-show test_id.
- resource = 'rbac_policy'
- cmd = rbac.ShowRBACPolicy(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
diff --git a/neutronclient/tests/unit/test_cli20_router.py b/neutronclient/tests/unit/test_cli20_router.py
deleted file mode 100644
index ba267f77e..000000000
--- a/neutronclient/tests/unit/test_cli20_router.py
+++ /dev/null
@@ -1,434 +0,0 @@
-# Copyright 2012 VMware, Inc
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0 import router
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20RouterJSON(test_cli20.CLITestV20Base):
- def test_create_router(self):
- # Create router: router1.
- resource = 'router'
- cmd = router.CreateRouter(test_cli20.MyApp(sys.stdout), None)
- name = 'router1'
- myid = 'myid'
- args = [name, '--description', 'rooter']
- position_names = ['name', ]
- position_values = [name, ]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- description='rooter')
-
- def test_create_router_flavor(self):
- resource = 'router'
- cmd = router.CreateRouter(test_cli20.MyApp(sys.stdout), None)
- name = 'router1'
- myid = 'myid'
- flavor = 'router-flavor'
- args = [name, '--flavor', flavor]
- position_names = ['name', ]
- position_values = [name, flavor]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- flavor_id='router-flavor')
-
- def test_create_router_tenant(self):
- # Create router: --tenant_id tenantid myname.
- resource = 'router'
- cmd = router.CreateRouter(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- args = ['--tenant_id', 'tenantid', name]
- position_names = ['name', ]
- position_values = [name, ]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_router_admin_state(self):
- # Create router: --admin_state_down myname.
- resource = 'router'
- cmd = router.CreateRouter(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- args = ['--admin_state_down', name, ]
- position_names = ['name', ]
- position_values = [name, ]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- admin_state_up=False)
-
- def _create_router_distributed_or_ha(self, distributed=None, ha=None):
- # Create router: --distributed distributed --ha ha myname.
- resource = 'router'
- cmd = router.CreateRouter(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- args = []
- if distributed is not None:
- args += ['--distributed', str(distributed)]
- if ha is not None:
- args += ['--ha', str(ha)]
- args.append(name)
- position_names = ['name', ]
- position_values = [name, ]
- expected = {}
- if distributed is not None:
- expected['distributed'] = str(distributed)
- if ha is not None:
- expected['ha'] = str(ha)
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- **expected)
-
- def test_create_router_distributed_True(self):
- # Create router: --distributed=True.
- self._create_router_distributed_or_ha(distributed='True')
-
- def test_create_router_ha_with_True(self):
- self._create_router_distributed_or_ha(ha='True')
-
- def test_create_router_ha_with_true(self):
- self._create_router_distributed_or_ha(ha='true')
-
- def test_create_router_ha_with_False(self):
- self._create_router_distributed_or_ha(ha='False')
-
- def test_create_router_ha_with_false(self):
- self._create_router_distributed_or_ha(ha='false')
-
- def test_create_router_distributed_False(self):
- # Create router: --distributed=False.
- self._create_router_distributed_or_ha(distributed='False')
-
- def test_create_router_distributed_true(self):
- # Create router: --distributed=true.
- self._create_router_distributed_or_ha(distributed='true')
-
- def test_create_router_distributed_false(self):
- # Create router: --distributed=false.
- self._create_router_distributed_or_ha(distributed='false')
-
- def test_create_router_with_az_hint(self):
- # Create router: --availability-zone-hint zone1
- # --availability-zone-hint zone2.
- resource = 'router'
- cmd = router.CreateRouter(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- args = ['--availability-zone-hint', 'zone1',
- '--availability-zone-hint', 'zone2', name]
- position_names = ['availability_zone_hints', 'name']
- position_values = [['zone1', 'zone2'], name]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_list_routers_detail(self):
- # list routers: -D.
- resources = "routers"
- cmd = router.ListRouter(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_routers_pagination(self):
- resources = "routers"
- cmd = router.ListRouter(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_routers_sort(self):
- # list routers:
- # --sort-key name --sort-key id --sort-key asc --sort-key desc
- resources = "routers"
- cmd = router.ListRouter(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_routers_limit(self):
- # list routers: -P.
- resources = "routers"
- cmd = router.ListRouter(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_update_router_exception(self):
- # Update router: myid.
- resource = 'router'
- cmd = router.UpdateRouter(test_cli20.MyApp(sys.stdout), None)
- self.assertRaises(exceptions.CommandError, self._test_update_resource,
- resource, cmd, 'myid', ['myid'], {})
-
- def test_update_router(self):
- # Update router: myid --name myname --tags a b.
- resource = 'router'
- cmd = router.UpdateRouter(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'myname',
- '--description', ':D'],
- {'name': 'myname', 'description': ':D'})
-
- def test_update_router_admin_state(self):
- # Update router: myid --admin-state-up .
- resource = 'router'
- cmd = router.UpdateRouter(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--admin-state-up', 'True'],
- {'admin_state_up': 'True'}
- )
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--admin-state-up', 'true'],
- {'admin_state_up': 'true'}
- )
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--admin-state-up', 'False'],
- {'admin_state_up': 'False'}
- )
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--admin-state-up', 'false'],
- {'admin_state_up': 'false'}
- )
-
- def test_update_router_distributed(self):
- # Update router: myid --distributed .
- resource = 'router'
- cmd = router.UpdateRouter(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--distributed', 'True'],
- {'distributed': 'True'}
- )
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--distributed', 'true'],
- {'distributed': 'true'}
- )
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--distributed', 'False'],
- {'distributed': 'False'}
- )
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--distributed', 'false'],
- {'distributed': 'false'}
- )
-
- def test_update_router_no_routes(self):
- # Update router: myid --no-routes
- resource = 'router'
- cmd = router.UpdateRouter(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--no-routes'],
- {'routes': None})
-
- def test_update_router_add_route(self):
- # Update router: myid --route destination=10.0.3.0/24,nexthop=10.0.0.10
- resource = 'router'
- cmd = router.UpdateRouter(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid,
- '--route',
- 'destination=10.0.3.0/24,nexthop=10.0.0.10']
- routes = [{'destination': '10.0.3.0/24',
- 'nexthop': '10.0.0.10'}]
- updatefields = {'routes': routes}
- self._test_update_resource(resource, cmd, myid, args, updatefields)
-
- def test_update_router_add_routes(self):
- # Update router: myid --route destination=10.0.3.0/24,nexthop=10.0.0.10
- # --route destination=fd7a:1d63:2063::/64,
- # nexthop=fd7a:1d63:2063:0:f816:3eff:fe0e:a697
- resource = 'router'
- cmd = router.UpdateRouter(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid,
- '--route',
- 'destination=10.0.3.0/24,nexthop=10.0.0.10',
- '--route',
- 'destination=fd7a:1d63:2063::/64,'
- 'nexthop=fd7a:1d63:2063:0:f816:3eff:fe0e:a697']
- routes = [{'destination': '10.0.3.0/24',
- 'nexthop': '10.0.0.10'},
- {'destination': 'fd7a:1d63:2063::/64',
- 'nexthop': 'fd7a:1d63:2063:0:f816:3eff:fe0e:a697'}]
- updatefields = {'routes': routes}
- self._test_update_resource(resource, cmd, myid, args, updatefields)
-
- def test_update_router_no_routes_with_add_route(self):
- # Update router: --no-routes with --route
- resource = 'router'
- cmd = router.UpdateRouter(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid,
- '--no-routes',
- '--route',
- 'destination=10.0.3.0/24,nexthop=10.0.0.10']
- exception = self.assertRaises(SystemExit,
- self._test_update_resource,
- resource, cmd, myid, args, None)
- self.assertEqual(2, exception.code)
-
- def test_delete_router(self):
- # Delete router: myid.
- resource = 'router'
- cmd = router.DeleteRouter(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
-
- def test_show_router(self):
- # Show router: myid.
- resource = 'router'
- cmd = router.ShowRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args,
- ['id', 'name'])
-
- def _test_add_remove_interface(self, action, mode, cmd, args):
- resource = 'router'
- subcmd = '%s_router_interface' % action
- if mode == 'port':
- body = {'port_id': 'portid'}
- else:
- body = {'subnet_id': 'subnetid'}
- if action == 'add':
- retval = {'subnet_id': 'subnetid', 'port_id': 'portid'}
- retval = self.client.serialize(retval)
- expected_code = 200
- else:
- retval = None
- expected_code = 204
- self._test_update_resource_action(resource, cmd, 'myid',
- subcmd, args,
- body, expected_code, retval)
-
- def test_add_interface_compat(self):
- # Add interface to router: myid subnetid.
- cmd = router.AddInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'subnetid']
- self._test_add_remove_interface('add', 'subnet', cmd, args)
-
- def test_add_interface_by_subnet(self):
- # Add interface to router: myid subnet=subnetid.
- cmd = router.AddInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'subnet=subnetid']
- self._test_add_remove_interface('add', 'subnet', cmd, args)
-
- def test_add_interface_by_port(self):
- # Add interface to router: myid port=portid.
- cmd = router.AddInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'port=portid']
- self._test_add_remove_interface('add', 'port', cmd, args)
-
- def test_del_interface_compat(self):
- # Delete interface from router: myid subnetid.
- cmd = router.RemoveInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'subnetid']
- self._test_add_remove_interface('remove', 'subnet', cmd, args)
-
- def test_del_interface_by_subnet(self):
- # Delete interface from router: myid subnet=subnetid.
- cmd = router.RemoveInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'subnet=subnetid']
- self._test_add_remove_interface('remove', 'subnet', cmd, args)
-
- def test_del_interface_by_port(self):
- # Delete interface from router: myid port=portid.
- cmd = router.RemoveInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'port=portid']
- self._test_add_remove_interface('remove', 'port', cmd, args)
-
- def test_set_gateway(self):
- # Set external gateway for router: myid externalid.
- resource = 'router'
- cmd = router.SetGatewayRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'externalid']
- self._test_update_resource(resource, cmd, 'myid',
- args,
- {"external_gateway_info":
- {"network_id": "externalid"}}
- )
-
- def test_set_gateway_enable_snat(self):
- # enable external gateway for router: myid externalid.
- resource = 'router'
- cmd = router.SetGatewayRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'externalid', '--enable-snat']
- self._test_update_resource(resource, cmd, 'myid',
- args,
- {"external_gateway_info":
- {"network_id": "externalid",
- "enable_snat": True}}
- )
-
- def test_set_gateway_disable_snat(self):
- # set external gateway for router: myid externalid.
- resource = 'router'
- cmd = router.SetGatewayRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'externalid', '--disable-snat']
- self._test_update_resource(resource, cmd, 'myid',
- args,
- {"external_gateway_info":
- {"network_id": "externalid",
- "enable_snat": False}}
- )
-
- def test_set_gateway_external_ip(self):
- # set external gateway for router: myid externalid --fixed-ip ...
- resource = 'router'
- cmd = router.SetGatewayRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'externalid', '--fixed-ip', 'ip_address=10.0.0.2']
- self._test_update_resource(resource, cmd, 'myid',
- args,
- {"external_gateway_info":
- {"network_id": "externalid",
- "external_fixed_ips": [
- {"ip_address": "10.0.0.2"}]}}
- )
-
- def test_set_gateway_external_subnet(self):
- # set external gateway for router: myid externalid --fixed-ip ...
- resource = 'router'
- cmd = router.SetGatewayRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'externalid', '--fixed-ip', 'subnet_id=mysubnet']
- self._test_update_resource(resource, cmd, 'myid',
- args,
- {"external_gateway_info":
- {"network_id": "externalid",
- "external_fixed_ips": [
- {"subnet_id": "mysubnet"}]}}
- )
-
- def test_set_gateway_external_ip_and_subnet(self):
- # set external gateway for router: myid externalid --fixed-ip ...
- resource = 'router'
- cmd = router.SetGatewayRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['myid', 'externalid', '--fixed-ip',
- 'ip_address=10.0.0.2,subnet_id=mysubnet']
- self._test_update_resource(resource, cmd, 'myid',
- args,
- {"external_gateway_info":
- {"network_id": "externalid",
- "external_fixed_ips": [
- {"subnet_id": "mysubnet",
- "ip_address": "10.0.0.2"}]}}
- )
-
- def test_remove_gateway(self):
- # Remove external gateway from router: externalid.
- resource = 'router'
- cmd = router.RemoveGatewayRouter(test_cli20.MyApp(sys.stdout), None)
- args = ['externalid']
- self._test_update_resource(resource, cmd, 'externalid',
- args, {"external_gateway_info": {}}
- )
diff --git a/neutronclient/tests/unit/test_cli20_securitygroup.py b/neutronclient/tests/unit/test_cli20_securitygroup.py
deleted file mode 100644
index 95a578f63..000000000
--- a/neutronclient/tests/unit/test_cli20_securitygroup.py
+++ /dev/null
@@ -1,657 +0,0 @@
-# Copyright 2012 Red Hat
-# All Rights Reserved.
-#
-# 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 sys
-from unittest import mock
-import urllib.parse as urlparse
-
-from oslo_utils import uuidutils
-
-from neutronclient.common import exceptions
-from neutronclient.common import utils
-from neutronclient.neutron.v2_0 import securitygroup
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['security_group', 'security_group_rule']
-
- def test_create_security_group(self):
- # Create security group: webservers.
- resource = 'security_group'
- cmd = securitygroup.CreateSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- name = 'webservers'
- myid = 'myid'
- args = [name, ]
- position_names = ['name']
- position_values = [name]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_security_group_tenant(self):
- # Create security group: webservers.
- resource = 'security_group'
- cmd = securitygroup.CreateSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- name = 'webservers'
- description = 'my webservers'
- myid = 'myid'
- args = ['--tenant_id', 'tenant_id', '--description', description, name]
- position_names = ['name', 'description']
- position_values = [name, description]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenant_id')
-
- def test_create_security_group_with_description(self):
- # Create security group: webservers.
- resource = 'security_group'
- cmd = securitygroup.CreateSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- name = 'webservers'
- description = 'my webservers'
- myid = 'myid'
- args = [name, '--description', description]
- position_names = ['name', 'description']
- position_values = [name, description]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_list_security_groups(self):
- resources = "security_groups"
- cmd = securitygroup.ListSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_security_groups_pagination(self):
- resources = "security_groups"
- cmd = securitygroup.ListSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_security_groups_sort(self):
- resources = "security_groups"
- cmd = securitygroup.ListSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_security_groups_limit(self):
- resources = "security_groups"
- cmd = securitygroup.ListSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_security_group_id(self):
- resource = 'security_group'
- cmd = securitygroup.ShowSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id'])
-
- def test_show_security_group_id_name(self):
- resource = 'security_group'
- cmd = securitygroup.ShowSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_delete_security_group(self):
- # Delete security group: myid.
- resource = 'security_group'
- cmd = securitygroup.DeleteSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
-
- def test_update_security_group(self):
- # Update security group: myid --name myname --description desc.
- resource = 'security_group'
- cmd = securitygroup.UpdateSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'myname',
- '--description', 'mydescription'],
- {'name': 'myname',
- 'description': 'mydescription'}
- )
-
- def test_update_security_group_with_unicode(self):
- resource = 'security_group'
- cmd = securitygroup.UpdateSecurityGroup(
- test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', u'\u7f51\u7edc',
- '--description', u'\u7f51\u7edc'],
- {'name': u'\u7f51\u7edc',
- 'description': u'\u7f51\u7edc'}
- )
-
- def test_create_security_group_rule_full(self):
- # Create security group rule.
- resource = 'security_group_rule'
- cmd = securitygroup.CreateSecurityGroupRule(
- test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- direction = 'ingress'
- ethertype = 'IPv4'
- protocol = 'tcp'
- port_range_min = '22'
- port_range_max = '22'
- remote_ip_prefix = '10.0.0.0/24'
- security_group_id = '1'
- remote_group_id = '1'
- args = ['--remote_ip_prefix', remote_ip_prefix, '--direction',
- direction, '--ethertype', ethertype, '--protocol', protocol,
- '--port_range_min', port_range_min, '--port_range_max',
- port_range_max, '--remote_group_id', remote_group_id,
- security_group_id, '--description', 'PCI policy 1421912']
- position_names = ['remote_ip_prefix', 'direction', 'ethertype',
- 'protocol', 'port_range_min', 'port_range_max',
- 'remote_group_id', 'security_group_id']
- position_values = [remote_ip_prefix, direction, ethertype, protocol,
- port_range_min, port_range_max, remote_group_id,
- security_group_id]
- self._test_create_resource(resource, cmd, None, myid, args,
- position_names, position_values,
- description='PCI policy 1421912')
-
- def test_create_security_group_rule_with_integer_protocol_value(self):
- resource = 'security_group_rule'
- cmd = securitygroup.CreateSecurityGroupRule(
- test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- direction = 'ingress'
- ethertype = 'IPv4'
- protocol = '2'
- port_range_min = '22'
- port_range_max = '22'
- remote_ip_prefix = '10.0.0.0/24'
- security_group_id = '1'
- remote_group_id = '1'
- args = ['--remote_ip_prefix', remote_ip_prefix, '--direction',
- direction, '--ethertype', ethertype, '--protocol', protocol,
- '--port_range_min', port_range_min, '--port_range_max',
- port_range_max, '--remote_group_id', remote_group_id,
- security_group_id]
- position_names = ['remote_ip_prefix', 'direction', 'ethertype',
- 'protocol', 'port_range_min', 'port_range_max',
- 'remote_group_id', 'security_group_id']
- position_values = [remote_ip_prefix, direction, ethertype, protocol,
- port_range_min, port_range_max, remote_group_id,
- security_group_id]
- self._test_create_resource(resource, cmd, None, myid, args,
- position_names, position_values)
-
- def test_delete_security_group_rule(self):
- # Delete security group rule: myid.
- resource = 'security_group_rule'
- cmd = securitygroup.DeleteSecurityGroupRule(
- test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
-
- @mock.patch.object(securitygroup.ListSecurityGroupRule, "extend_list")
- def test_list_security_group_rules(self, mock_extend_list):
- resources = "security_group_rules"
- cmd = securitygroup.ListSecurityGroupRule(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
-
- def _build_test_data(self, data, excess=0):
- # Length of a query filter on security group rule id
- # in these testcases, id='secgroupid%02d' (with len(id)=12)
- sec_group_id_filter_len = 12
-
- response = []
- replace_rules = {'security_group_id': 'security_group',
- 'remote_group_id': 'remote_group'}
-
- search_opts = {'fields': ['id', 'name']}
- sec_group_ids = set()
- for rule in data:
- for key in replace_rules:
- if rule.get(key):
- sec_group_ids.add(rule[key])
- response.append({'id': rule[key], 'name': 'default'})
- sec_group_ids = list(sec_group_ids)
-
- result = []
-
- sec_group_count = len(sec_group_ids)
- max_size = ((sec_group_id_filter_len * sec_group_count) - excess)
- chunk_size = max_size // sec_group_id_filter_len
-
- for i in range(0, sec_group_count, chunk_size):
- search_opts['id'] = sec_group_ids[i: i + chunk_size]
- params = utils.safe_encode_dict(search_opts)
- resp_str = self.client.serialize({'security_groups': response})
-
- result.append({
- 'filter': urlparse.urlencode(params, doseq=1),
- 'response': (test_cli20.MyResp(200), resp_str),
- })
-
- return result
-
- def test_extend_list(self):
- data = [{'name': 'default',
- 'remote_group_id': 'remgroupid%02d' % i}
- for i in range(10)]
- data.append({'name': 'default', 'remote_group_id': None})
- resources = "security_groups"
-
- cmd = securitygroup.ListSecurityGroupRule(
- test_cli20.MyApp(sys.stdout), None)
-
- path = getattr(self.client, resources + '_path')
- responses = self._build_test_data(data)
- known_args, _vs = cmd.get_parser(
- 'list' + resources).parse_known_args()
- resp = responses[0]['response']
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- cmd.extend_list(data, known_args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(test_cli20.end_url(
- path, responses[0]['filter']), self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
-
- def test_extend_list_exceed_max_uri_len(self):
- data = [{'name': 'default',
- 'security_group_id': 'secgroupid%02d' % i,
- 'remote_group_id': 'remgroupid%02d' % i}
- for i in range(10)]
- data.append({'name': 'default',
- 'security_group_id': 'secgroupid10',
- 'remote_group_id': None})
- resources = "security_groups"
-
- cmd = securitygroup.ListSecurityGroupRule(
- test_cli20.MyApp(sys.stdout), None)
- path = getattr(self.client, resources + '_path')
- responses = self._build_test_data(data, excess=1)
-
- known_args, _vs = cmd.get_parser(
- 'list' + resources).parse_known_args()
- mock_request_side_effects = []
- mock_request_calls = []
- mock_check_uri_side_effects = [exceptions.RequestURITooLong(excess=1)]
- mock_check_uri_calls = [mock.call(mock.ANY)]
- for item in responses:
- mock_request_side_effects.append(item['response'])
- mock_request_calls.append(mock.call(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, item['filter']), self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN})))
- mock_check_uri_side_effects.append(None)
- mock_check_uri_calls.append(mock.call(mock.ANY))
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient,
- "request") as mock_request, \
- mock.patch.object(self.client.httpclient,
- "_check_uri_length") as mock_check_uri:
- mock_request.side_effect = mock_request_side_effects
- mock_check_uri.side_effect = mock_check_uri_side_effects
- cmd.extend_list(data, known_args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_has_calls(mock_request_calls)
- mock_check_uri.assert_has_calls(mock_check_uri_calls)
- self.assertEqual(len(mock_request_calls), mock_request.call_count)
- self.assertEqual(len(mock_check_uri_calls), mock_check_uri.call_count)
-
- @mock.patch.object(securitygroup.ListSecurityGroupRule, "extend_list")
- def test_list_security_group_rules_pagination(self, mock_extend_list):
- resources = "security_group_rules"
- cmd = securitygroup.ListSecurityGroupRule(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
-
- @mock.patch.object(securitygroup.ListSecurityGroupRule, "extend_list")
- def test_list_security_group_rules_sort(self, mock_extend_list):
- resources = "security_group_rules"
- cmd = securitygroup.ListSecurityGroupRule(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
-
- @mock.patch.object(securitygroup.ListSecurityGroupRule, "extend_list")
- def test_list_security_group_rules_limit(self, mock_extend_list):
- resources = "security_group_rules"
- cmd = securitygroup.ListSecurityGroupRule(
- test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
-
- def test_show_security_group_rule(self):
- resource = 'security_group_rule'
- cmd = securitygroup.ShowSecurityGroupRule(
- test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id'])
-
- def _test_list_security_group_rules_extend(self, api_data, expected,
- args=(), conv=True,
- query_fields=None):
- def setup_list_stub(resources, data, query, mock_calls, mock_returns):
- reses = {resources: data}
- resstr = self.client.serialize(reses)
- resp = (test_cli20.MyResp(200), resstr)
- path = getattr(self.client, resources + '_path')
- mock_calls.append(mock.call(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, query),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN})))
- mock_returns.append(resp)
-
- cmd = securitygroup.ListSecurityGroupRule(
- test_cli20.MyApp(sys.stdout), None)
- query = ''
- if query_fields:
- query = '&'.join(['fields=' + f for f in query_fields])
- mock_request_calls = []
- mock_request_returns = []
- setup_list_stub('security_group_rules', api_data, query,
- mock_request_calls, mock_request_returns)
- if conv:
- sec_ids = set()
- for n in api_data:
- sec_ids.add(n['security_group_id'])
- if n.get('remote_group_id'):
- sec_ids.add(n['remote_group_id'])
- filters = ''
- for id in sec_ids:
- filters = filters + "&id=%s" % id
- setup_list_stub('security_groups',
- [{'id': 'myid1', 'name': 'group1'},
- {'id': 'myid2', 'name': 'group2'},
- {'id': 'myid3', 'name': 'group3'}],
- 'fields=id&fields=name' + filters,
- mock_request_calls,
- mock_request_returns)
-
- cmd_parser = cmd.get_parser('list_security_group_rules')
- parsed_args = cmd_parser.parse_args(args)
-
- with mock.patch.object(cmd, "get_client",
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient,
- "request") as mock_request:
- mock_request.side_effect = mock_request_returns
- result = cmd.take_action(parsed_args)
-
- self.assert_mock_multiple_calls_with_same_arguments(
- mock_get_client, mock.call(), None)
- mock_request.assert_has_calls(mock_request_calls)
- self.assertEqual(len(mock_request_calls), mock_request.call_count)
- self.assertEqual(expected['cols'], result[0])
- # Check data
- _result = [x for x in result[1]]
- self.assertEqual(len(expected['data']), len(_result))
- for res, exp in zip(_result, expected['data']):
- self.assertEqual(len(exp), len(res))
- self.assertEqual(exp, res)
-
- def _test_list_security_group_rules_extend_sg_name(
- self, expected_mode=None, args=(), conv=True, query_field=False):
- if query_field:
- field_filters = ['id', 'security_group_id',
- 'remote_ip_prefix', 'remote_group_id']
- else:
- field_filters = None
-
- data = [self._prepare_rule(rule_id='ruleid1', sg_id='myid1',
- remote_group_id='myid1',
- filters=field_filters),
- self._prepare_rule(rule_id='ruleid2', sg_id='myid2',
- remote_group_id='myid3',
- filters=field_filters),
- self._prepare_rule(rule_id='ruleid3', sg_id='myid2',
- remote_group_id='myid2',
- filters=field_filters),
- ]
-
- if expected_mode == 'noconv':
- expected = {'cols': ['id', 'security_group_id', 'remote_group_id'],
- 'data': [('ruleid1', 'myid1', 'myid1'),
- ('ruleid2', 'myid2', 'myid3'),
- ('ruleid3', 'myid2', 'myid2')]}
- elif expected_mode == 'remote_group_id':
- expected = {'cols': ['id', 'security_group', 'remote_group'],
- 'data': [('ruleid1', 'group1', 'group1'),
- ('ruleid2', 'group2', 'group3'),
- ('ruleid3', 'group2', 'group2')]}
- else:
- expected = {'cols': ['id', 'security_group', 'remote'],
- 'data': [('ruleid1', 'group1', 'group1 (group)'),
- ('ruleid2', 'group2', 'group3 (group)'),
- ('ruleid3', 'group2', 'group2 (group)')]}
-
- self._test_list_security_group_rules_extend(
- data, expected, args=args, conv=conv, query_fields=field_filters)
-
- def test_list_security_group_rules_extend_remote_sg_name(self):
- args = '-c id -c security_group -c remote'.split()
- self._test_list_security_group_rules_extend_sg_name(args=args)
-
- def test_list_security_group_rules_extend_sg_name_noconv(self):
- args = '--no-nameconv -c id -c security_group_id -c remote_group_id'
- args = args.split()
- self._test_list_security_group_rules_extend_sg_name(
- expected_mode='noconv', args=args, conv=False)
-
- def test_list_security_group_rules_extend_sg_name_with_columns(self):
- args = '-c id -c security_group_id -c remote_group_id'.split()
- self._test_list_security_group_rules_extend_sg_name(
- expected_mode='remote_group_id', args=args)
-
- def test_list_security_group_rules_extend_sg_name_with_columns_no_id(self):
- args = '-c id -c security_group -c remote_group'.split()
- self._test_list_security_group_rules_extend_sg_name(
- expected_mode='remote_group_id', args=args)
-
- def test_list_security_group_rules_extend_sg_name_with_fields(self):
- # NOTE: remote_ip_prefix is required to show "remote" column
- args = ('-F id -F security_group_id '
- '-F remote_ip_prefix -F remote_group_id').split()
- self._test_list_security_group_rules_extend_sg_name(
- args=args, query_field=True)
-
- def test_list_security_group_rules_extend_sg_name_with_fields_no_id(self):
- # NOTE: remote_ip_prefix is required to show "remote" column
- args = ('-F id -F security_group '
- '-F remote_ip_prefix -F remote_group').split()
- self._test_list_security_group_rules_extend_sg_name(args=args,
- query_field=True)
-
- def test_list_security_group_rules_extend_remote(self):
- args = '-c id -c security_group -c remote'.split()
-
- data = [self._prepare_rule(rule_id='ruleid1', sg_id='myid1',
- remote_ip_prefix='172.16.18.0/24'),
- self._prepare_rule(rule_id='ruleid2', sg_id='myid2',
- remote_ip_prefix='172.16.20.0/24'),
- self._prepare_rule(rule_id='ruleid3', sg_id='myid2',
- remote_group_id='myid3')]
- expected = {'cols': ['id', 'security_group', 'remote'],
- 'data': [('ruleid1', 'group1', '172.16.18.0/24 (CIDR)'),
- ('ruleid2', 'group2', '172.16.20.0/24 (CIDR)'),
- ('ruleid3', 'group2', 'group3 (group)')]}
- self._test_list_security_group_rules_extend(data, expected, args)
-
- def test_list_security_group_rules_extend_proto_port(self):
- data = [self._prepare_rule(rule_id='ruleid1', sg_id='myid1',
- protocol='tcp',
- port_range_min=22, port_range_max=22),
- self._prepare_rule(rule_id='ruleid2', sg_id='myid2',
- direction='egress', ethertype='IPv6',
- protocol='udp',
- port_range_min=80, port_range_max=81),
- self._prepare_rule(rule_id='ruleid3', sg_id='myid2',
- protocol='icmp',
- remote_ip_prefix='10.2.0.0/16')]
- expected = {
- 'cols': ['id', 'security_group', 'direction', 'ethertype',
- 'port/protocol', 'remote'],
- 'data': [
- ('ruleid1', 'group1', 'ingress', 'IPv4', '22/tcp', 'any'),
- ('ruleid2', 'group2', 'egress', 'IPv6', '80-81/udp', 'any'),
- ('ruleid3', 'group2', 'ingress', 'IPv4', 'icmp',
- '10.2.0.0/16 (CIDR)')
- ]}
- self._test_list_security_group_rules_extend(data, expected)
-
- def _prepare_rule(self, rule_id=None, sg_id=None, tenant_id=None,
- direction=None, ethertype=None,
- protocol=None, port_range_min=None, port_range_max=None,
- remote_ip_prefix=None, remote_group_id=None,
- filters=None):
- rule = {'id': rule_id or uuidutils.generate_uuid(),
- 'tenant_id': tenant_id or uuidutils.generate_uuid(),
- 'security_group_id': sg_id or uuidutils.generate_uuid(),
- 'direction': direction or 'ingress',
- 'ethertype': ethertype or 'IPv4',
- 'protocol': protocol,
- 'port_range_min': port_range_min,
- 'port_range_max': port_range_max,
- 'remote_ip_prefix': remote_ip_prefix,
- 'remote_group_id': remote_group_id}
- if filters:
- return dict([(k, v) for k, v in rule.items() if k in filters])
- else:
- return rule
-
- def test__get_remote_both_unspecified(self):
- sg_rule = self._prepare_rule(remote_ip_prefix=None,
- remote_group_id=None)
- self.assertIsNone(securitygroup._get_remote(sg_rule))
-
- def test__get_remote_remote_ip_prefix_specified(self):
- sg_rule = self._prepare_rule(remote_ip_prefix='172.16.18.0/24')
- self.assertEqual('172.16.18.0/24 (CIDR)',
- securitygroup._get_remote(sg_rule))
-
- def test__get_remote_remote_group_specified(self):
- sg_rule = self._prepare_rule(remote_group_id='sg_id1')
- self.assertEqual('sg_id1 (group)', securitygroup._get_remote(sg_rule))
-
- def test__get_protocol_port_all_none(self):
- sg_rule = self._prepare_rule()
- self.assertIsNone(securitygroup._get_protocol_port(sg_rule))
-
- def test__get_protocol_port_tcp_all_port(self):
- sg_rule = self._prepare_rule(protocol='tcp')
- self.assertEqual('tcp', securitygroup._get_protocol_port(sg_rule))
-
- def test__get_protocol_port_tcp_one_port(self):
- sg_rule = self._prepare_rule(protocol='tcp',
- port_range_min=22, port_range_max=22)
- self.assertEqual('22/tcp', securitygroup._get_protocol_port(sg_rule))
-
- def test__get_protocol_port_tcp_port_range(self):
- sg_rule = self._prepare_rule(protocol='tcp',
- port_range_min=5000, port_range_max=5010)
- self.assertEqual('5000-5010/tcp',
- securitygroup._get_protocol_port(sg_rule))
-
- def test__get_protocol_port_udp_all_port(self):
- sg_rule = self._prepare_rule(protocol='udp')
- self.assertEqual('udp', securitygroup._get_protocol_port(sg_rule))
-
- def test__get_protocol_port_udp_one_port(self):
- sg_rule = self._prepare_rule(protocol='udp',
- port_range_min=22, port_range_max=22)
- self.assertEqual('22/udp', securitygroup._get_protocol_port(sg_rule))
-
- def test__get_protocol_port_udp_port_range(self):
- sg_rule = self._prepare_rule(protocol='udp',
- port_range_min=5000, port_range_max=5010)
- self.assertEqual('5000-5010/udp',
- securitygroup._get_protocol_port(sg_rule))
-
- def test__get_protocol_port_icmp_all(self):
- sg_rule = self._prepare_rule(protocol='icmp')
- self.assertEqual('icmp', securitygroup._get_protocol_port(sg_rule))
-
- def test_get_ethertype_for_protocol_icmpv6(self):
- self.assertEqual('IPv6',
- securitygroup.generate_default_ethertype('icmpv6'))
-
- def test_get_ethertype_for_protocol_icmp(self):
- self.assertEqual('IPv4',
- securitygroup.generate_default_ethertype('icmp'))
-
- def test__get_protocol_port_udp_code_type(self):
- sg_rule = self._prepare_rule(protocol='icmp',
- port_range_min=1, port_range_max=8)
- self.assertEqual('icmp (type:1, code:8)',
- securitygroup._get_protocol_port(sg_rule))
-
- def test__format_sg_rules(self):
- rules = [self._prepare_rule(),
- self._prepare_rule(protocol='tcp', port_range_min=80,
- port_range_max=80),
- self._prepare_rule(remote_ip_prefix='192.168.1.0/24'),
- self._prepare_rule(remote_group_id='group1'),
- self._prepare_rule(protocol='tcp',
- remote_ip_prefix='10.1.1.0/24'),
- self._prepare_rule(direction='egress'),
- self._prepare_rule(direction='egress', ethertype='IPv6'),
- ]
- sg = {'security_group_rules': rules}
- expected_data = ['ingress, IPv4',
- 'ingress, IPv4, 80/tcp',
- 'ingress, IPv4, remote_ip_prefix: 192.168.1.0/24',
- 'ingress, IPv4, remote_group_id: group1',
- 'ingress, IPv4, tcp, remote_ip_prefix: 10.1.1.0/24',
- 'egress, IPv4',
- 'egress, IPv6',
- ]
- expected = '\n'.join(sorted(expected_data))
- self.assertEqual(expected, securitygroup._format_sg_rules(sg))
diff --git a/neutronclient/tests/unit/test_cli20_servicetype.py b/neutronclient/tests/unit/test_cli20_servicetype.py
deleted file mode 100644
index ec9a663fa..000000000
--- a/neutronclient/tests/unit/test_cli20_servicetype.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright 2013 Mirantis Inc.
-# All Rights Reserved
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0 import servicetype
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20ServiceProvidersJSON(test_cli20.CLITestV20Base):
- id_field = "name"
-
- def setUp(self):
- super(CLITestV20ServiceProvidersJSON, self).setUp(
- plurals={'tags': 'tag'}
- )
-
- def test_list_service_providers(self):
- resources = "service_providers"
- cmd = servicetype.ListServiceProvider(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_service_providers_pagination(self):
- resources = "service_providers"
- cmd = servicetype.ListServiceProvider(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_service_providers_sort(self):
- resources = "service_providers"
- cmd = servicetype.ListServiceProvider(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd,
- sort_key=["name"],
- sort_dir=["asc", "desc"])
-
- def test_list_service_providers_limit(self):
- resources = "service_providers"
- cmd = servicetype.ListServiceProvider(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, page_size=1000)
diff --git a/neutronclient/tests/unit/test_cli20_subnet.py b/neutronclient/tests/unit/test_cli20_subnet.py
deleted file mode 100644
index 97c2faff0..000000000
--- a/neutronclient/tests/unit/test_cli20_subnet.py
+++ /dev/null
@@ -1,687 +0,0 @@
-# Copyright 2012 OpenStack Foundation.
-# All Rights Reserved
-#
-# 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 sys
-from unittest import mock
-
-
-from neutronclient.common import exceptions
-from neutronclient.neutron import v2_0 as neutronV20
-from neutronclient.neutron.v2_0 import subnet
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20SubnetJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['subnet']
-
- def setUp(self):
- super(CLITestV20SubnetJSON, self).setUp(plurals={'tags': 'tag'})
-
- def test_create_subnet(self):
- # Create subnet: --gateway gateway netid cidr.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = '10.10.10.0/24'
- gateway = 'gatewayvalue'
- args = ['--gateway', gateway, netid, cidr, '--description', 'cave']
- position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
- position_values = [4, netid, cidr, gateway]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- description='cave')
-
- def test_create_subnet_network_cidr_seperated(self):
- # For positional value, network_id and cidr can be separated.
- # Create subnet: --gateway gateway netid cidr.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = '10.10.10.0/24'
- gateway = 'gatewayvalue'
- args = [netid, '--gateway', gateway, cidr]
- position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
- position_values = [4, netid, cidr, gateway]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_subnet_with_no_gateway(self):
- # Create subnet: --no-gateway netid cidr.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'cidrvalue'
- args = ['--no-gateway', netid, cidr]
- position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
- position_values = [4, netid, cidr, None]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_subnet_with_segment(self):
- # Create subnet: --segment segment netid cidr.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = '10.10.10.0/24'
- segment = 'segment'
- args = ['--segment', segment, netid, cidr,
- '--description', 'cave']
- position_names = ['ip_version', 'network_id', 'cidr', 'segment_id']
- position_values = [4, netid, cidr, segment]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- description='cave')
-
- def test_create_subnet_with_bad_gateway_option(self):
- # Create sbunet: --no-gateway netid cidr.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'cidrvalue'
- gateway = 'gatewayvalue'
- args = ['--gateway', gateway, '--no-gateway', netid, cidr]
- position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
- position_values = [4, netid, cidr, None]
- self.assertRaises(
- SystemExit, self._test_create_resource,
- resource, cmd, name, myid, args, position_names, position_values)
-
- def _test_create_resource_and_catch_command_error(self, should_fail,
- *args):
- if should_fail:
- params = {'no_api_call': True,
- 'expected_exception': exceptions.CommandError}
- else:
- params = {}
- self._test_create_resource(*args, **params)
-
- def test_create_subnet_with_enable_and_disable_dhcp(self):
- # Create subnet: --enable-dhcp and --disable-dhcp.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'cidrvalue'
- position_names = ['ip_version', 'network_id', 'cidr', 'enable_dhcp']
- # enable_dhcp value is appended later inside the loop
- position_values = [4, netid, cidr]
- for enable_dhcp_arg, should_fail in (
- ('--enable-dhcp=False', False),
- ('--enable-dhcp=True', True),
- ('--enable-dhcp', True)
- ):
- tested_args = [enable_dhcp_arg, '--disable-dhcp']
- args = tested_args + [netid, cidr]
- pos_values = position_values + [should_fail]
- self._test_create_resource_and_catch_command_error(
- should_fail,
- resource, cmd, name, myid, args, position_names, pos_values)
-
- def test_create_subnet_with_multiple_enable_dhcp(self):
- # Create subnet with multiple --enable-dhcp arguments passed.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'cidrvalue'
- position_names = ['ip_version', 'network_id', 'cidr', 'enable_dhcp']
- # enable_dhcp value is appended later inside the loop
- position_values = [4, netid, cidr]
-
- _ = 'UNUSED_MARKER'
- for tested_args, should_fail, pos_value in (
- (['--enable-dhcp', '--enable-dhcp=True'], False, True),
- (['--enable-dhcp', '--enable-dhcp=False'], True, _),
- (['--enable-dhcp=False', '--enable-dhcp'], True, _),
- (['--enable-dhcp=True', '--enable-dhcp=False'], True, _),
- (['--enable-dhcp=False', '--enable-dhcp=True'], True, _)
- ):
- args = tested_args + [netid, cidr]
- pos_values = position_values + [pos_value]
- self._test_create_resource_and_catch_command_error(
- should_fail,
- resource, cmd, name, myid, args, position_names, pos_values)
-
- def test_create_subnet_tenant(self):
- # Create subnet: --tenant_id tenantid netid cidr.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid', netid, cidr]
- position_names = ['ip_version', 'network_id', 'cidr']
- position_values = [4, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_tags(self):
- # Create subnet: netid cidr --tags a b.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = [netid, cidr, '--tags', 'a', 'b']
- position_names = ['ip_version', 'network_id', 'cidr']
- position_values = [4, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tags=['a', 'b'])
-
- def test_create_subnet_allocation_pool(self):
- # Create subnet: --tenant_id tenantid netid cidr.
- # The is --allocation_pool start=1.1.1.10,end=1.1.1.20
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--allocation_pool', 'start=1.1.1.10,end=1.1.1.20',
- netid, cidr]
- position_names = ['ip_version', 'allocation_pools', 'network_id',
- 'cidr']
- pool = [{'start': '1.1.1.10', 'end': '1.1.1.20'}]
- position_values = [4, pool, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_allocation_pools(self):
- # Create subnet: --tenant-id tenantid netid cidr.
- # The are --allocation_pool start=1.1.1.10,end=1.1.1.20 and
- # --allocation_pool start=1.1.1.30,end=1.1.1.40
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--allocation_pool', 'start=1.1.1.10,end=1.1.1.20',
- '--allocation_pool', 'start=1.1.1.30,end=1.1.1.40',
- netid, cidr]
- position_names = ['ip_version', 'allocation_pools', 'network_id',
- 'cidr']
- pools = [{'start': '1.1.1.10', 'end': '1.1.1.20'},
- {'start': '1.1.1.30', 'end': '1.1.1.40'}]
- position_values = [4, pools, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_host_route(self):
- # Create subnet: --tenant_id tenantid netid cidr.
- # The is
- # --host-route destination=172.16.1.0/24,nexthop=1.1.1.20
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--host-route', 'destination=172.16.1.0/24,nexthop=1.1.1.20',
- netid, cidr]
- position_names = ['ip_version', 'host_routes', 'network_id',
- 'cidr']
- route = [{'destination': '172.16.1.0/24', 'nexthop': '1.1.1.20'}]
- position_values = [4, route, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_host_routes(self):
- # Create subnet: --tenant-id tenantid netid cidr.
- # The are
- # --host-route destination=172.16.1.0/24,nexthop=1.1.1.20 and
- # --host-route destination=172.17.7.0/24,nexthop=1.1.1.40
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--host-route', 'destination=172.16.1.0/24,nexthop=1.1.1.20',
- '--host-route', 'destination=172.17.7.0/24,nexthop=1.1.1.40',
- netid, cidr]
- position_names = ['ip_version', 'host_routes', 'network_id',
- 'cidr']
- routes = [{'destination': '172.16.1.0/24', 'nexthop': '1.1.1.20'},
- {'destination': '172.17.7.0/24', 'nexthop': '1.1.1.40'}]
- position_values = [4, routes, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_dns_nameservers(self):
- # Create subnet: --tenant-id tenantid netid cidr.
- # The are
- # --dns-nameserver 1.1.1.20 and --dns-nameserver 1.1.1.40
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--dns-nameserver', '1.1.1.20',
- '--dns-nameserver', '1.1.1.40',
- netid, cidr]
- position_names = ['ip_version', 'dns_nameservers', 'network_id',
- 'cidr']
- nameservers = ['1.1.1.20', '1.1.1.40']
- position_values = [4, nameservers, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_with_use_default_subnetpool(self):
- # Create subnet: --tenant-id tenantid --use-default-subnetpool \
- # netid cidr.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--use-default-subnetpool',
- netid, cidr]
- position_names = ['ip_version', 'use_default_subnetpool', 'network_id',
- 'cidr']
- position_values = [4, True, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_with_disable_dhcp(self):
- # Create subnet: --tenant-id tenantid --disable-dhcp netid cidr.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--disable-dhcp',
- netid, cidr]
- position_names = ['ip_version', 'enable_dhcp', 'network_id',
- 'cidr']
- position_values = [4, False, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_merge_single_plurar(self):
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--allocation-pool', 'start=1.1.1.10,end=1.1.1.20',
- netid, cidr,
- '--allocation-pools', 'list=true', 'type=dict',
- 'start=1.1.1.30,end=1.1.1.40']
- position_names = ['ip_version', 'allocation_pools', 'network_id',
- 'cidr']
- pools = [{'start': '1.1.1.10', 'end': '1.1.1.20'},
- {'start': '1.1.1.30', 'end': '1.1.1.40'}]
- position_values = [4, pools, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_merge_plurar(self):
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- netid, cidr,
- '--allocation-pools', 'list=true', 'type=dict',
- 'start=1.1.1.30,end=1.1.1.40']
- position_names = ['ip_version', 'allocation_pools', 'network_id',
- 'cidr']
- pools = [{'start': '1.1.1.30', 'end': '1.1.1.40'}]
- position_values = [4, pools, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_merge_single_single(self):
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--allocation-pool', 'start=1.1.1.10,end=1.1.1.20',
- netid, cidr,
- '--allocation-pool',
- 'start=1.1.1.30,end=1.1.1.40']
- position_names = ['ip_version', 'allocation_pools', 'network_id',
- 'cidr']
- pools = [{'start': '1.1.1.10', 'end': '1.1.1.20'},
- {'start': '1.1.1.30', 'end': '1.1.1.40'}]
- position_values = [4, pools, netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_max_v4_cidr(self):
- # Create subnet: --gateway gateway netid cidr.
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = '192.168.0.1/32'
- gateway = 'gatewayvalue'
- args = ['--gateway', gateway, netid, cidr]
- position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
- position_values = [4, netid, cidr, gateway]
- with mock.patch.object(cmd.log, 'warning') as mock_warning:
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
- mock_warning.assert_called_once_with(mock.ANY,
- {'ip': 4, 'cidr': '/32'})
-
- def test_create_subnet_with_ipv6_ra_mode(self):
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--ip-version', '6',
- '--ipv6-ra-mode', 'dhcpv6-stateful',
- netid, cidr]
- position_names = ['ip_version', 'ipv6_ra_mode',
- 'network_id', 'cidr']
- position_values = [6, 'dhcpv6-stateful', netid, cidr]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_with_ipv6_address_mode(self):
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--ip-version', '6',
- '--ipv6-address-mode', 'dhcpv6-stateful',
- netid, cidr]
- position_names = ['ip_version', 'ipv6_address_mode',
- 'network_id', 'cidr']
- position_values = [6, 'dhcpv6-stateful', netid, cidr]
-
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_with_ipv6_modes(self):
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--ip-version', '6',
- '--ipv6-address-mode', 'slaac',
- '--ipv6-ra-mode', 'slaac',
- netid, cidr]
- position_names = ['ip_version', 'ipv6_address_mode',
- 'ipv6_ra_mode', 'network_id', 'cidr']
- position_values = [6, 'slaac', 'slaac', netid, cidr]
-
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- tenant_id='tenantid')
-
- def test_create_subnet_with_ipv6_ra_mode_ipv4(self):
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--ip-version', '4',
- '--ipv6-ra-mode', 'slaac',
- netid, cidr]
- position_names = ['ip_version', 'ipv6_ra_mode',
- 'network_id', 'cidr']
- position_values = [4, None, netid, cidr]
- self._test_create_resource(
- resource, cmd, name, myid, args, position_names,
- position_values, tenant_id='tenantid',
- no_api_call=True, expected_exception=exceptions.CommandError)
-
- def test_create_subnet_with_ipv6_address_mode_ipv4(self):
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'prefixvalue'
- args = ['--tenant_id', 'tenantid',
- '--ip-version', '4',
- '--ipv6-address-mode', 'slaac',
- netid, cidr]
- position_names = ['ip_version', 'ipv6_address_mode',
- 'network_id', 'cidr']
- position_values = [4, None, netid, cidr]
- self._test_create_resource(
- resource, cmd, name, myid, args, position_names,
- position_values, tenant_id='tenantid',
- no_api_call=True, expected_exception=exceptions.CommandError)
-
- @mock.patch.object(neutronV20, 'find_resource_by_name_or_id')
- def test_create_subnet_with_subnetpool_ipv6_and_ip_ver_ignored(
- self, mock_find_resource):
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--tenant_id', 'tenantid',
- '--ip-version', '4',
- '--subnetpool', 'subnetpool_id',
- netid]
- position_names = ['ip_version', 'network_id', 'subnetpool_id']
- position_values = [6, netid, 'subnetpool_id']
- mock_find_resource.return_value = {
- 'id': 'subnetpool_id', 'ip_version': 6}
- self._test_create_resource(
- resource, cmd, name, myid, args, position_names,
- position_values, tenant_id='tenantid')
- mock_find_resource.assert_called_once_with(
- self.client, 'subnetpool', 'subnetpool_id')
-
- @mock.patch.object(neutronV20, 'find_resource_by_name_or_id')
- def test_create_subnet_with_subnetpool_ipv4_with_cidr_wildcard(
- self, mock_find_resource):
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- cidr = 'cidrwildcard'
- args = ['--tenant_id', 'tenantid',
- '--ip-version', '4',
- '--ipv6-address-mode', 'slaac',
- '--subnetpool', 'subnetpool_id',
- netid, cidr]
- position_names = ['ip_version', 'ipv6_address_mode',
- 'network_id', 'subnetpool_id', 'cidr']
- position_values = [4, None, netid, 'subnetpool_id', cidr]
- mock_find_resource.return_value = {'id': 'subnetpool_id',
- 'ip_version': 4}
- self._test_create_resource(
- resource, cmd, name, myid, args, position_names,
- position_values, tenant_id='tenantid',
- no_api_call=True, expected_exception=exceptions.CommandError)
- mock_find_resource.assert_called_once_with(
- self.client, 'subnetpool', 'subnetpool_id')
-
- @mock.patch.object(neutronV20, 'find_resource_by_name_or_id')
- def test_create_subnet_with_subnetpool_ipv4_with_prefixlen(
- self, mock_find_resource):
- resource = 'subnet'
- cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- netid = 'netid'
- args = ['--tenant_id', 'tenantid',
- '--ip-version', '4',
- '--ipv6-address-mode', 'slaac',
- '--subnetpool', 'subnetpool_id',
- '--prefixlen', '31',
- netid]
- position_names = ['ip_version', 'ipv6_address_mode',
- 'network_id', 'subnetpool_id']
- position_values = [4, None, netid, 'subnetpool_id']
- mock_find_resource.return_value = {'id': 'subnetpool_id',
- 'ip_version': 4}
- self._test_create_resource(
- resource, cmd, name, myid, args, position_names,
- position_values, tenant_id='tenantid',
- no_api_call=True, expected_exception=exceptions.CommandError)
- mock_find_resource.assert_called_once_with(
- self.client, 'subnetpool', 'subnetpool_id')
-
- def test_list_subnets_detail(self):
- # List subnets: -D.
- resources = "subnets"
- cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_subnets_tags(self):
- # List subnets: -- --tags a b.
- resources = "subnets"
- cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, tags=['a', 'b'])
-
- def test_list_subnets_detail_tags(self):
- # List subnets: -D -- --tags a b.
- resources = "subnets"
- cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, detail=True, tags=['a', 'b'])
-
- def test_list_subnets_fields(self):
- # List subnets: --fields a --fields b -- --fields c d.
- resources = "subnets"
- cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- fields_1=['a', 'b'], fields_2=['c', 'd'])
-
- def test_list_subnets_pagination(self):
- resources = "subnets"
- cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_subnets_sort(self):
- # List subnets: --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = "subnets"
- cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_subnets_limit(self):
- # List subnets: -P.
- resources = "subnets"
- cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_update_subnet(self):
- # Update subnet: myid --name myname --tags a b.
- resource = 'subnet'
- cmd = subnet.UpdateSubnet(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'myname',
- '--description', 'cavern',
- '--tags', 'a', 'b'],
- {'name': 'myname', 'tags': ['a', 'b'],
- 'description': 'cavern'})
-
- def test_update_subnet_allocation_pools(self):
- # Update subnet: myid --name myname --tags a b.
- resource = 'subnet'
- cmd = subnet.UpdateSubnet(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--allocation-pool',
- 'start=1.2.0.2,end=1.2.0.127'],
- {'allocation_pools': [{'start': '1.2.0.2',
- 'end': '1.2.0.127'}]}
- )
-
- def test_update_subnet_enable_disable_dhcp(self):
- # Update sbunet: --enable-dhcp and --disable-dhcp.
- resource = 'subnet'
- cmd = subnet.UpdateSubnet(test_cli20.MyApp(sys.stdout), None)
- self.assertRaises(exceptions.CommandError,
- self._test_update_resource,
- resource, cmd, 'myid',
- ['myid', '--name', 'myname', '--enable-dhcp',
- '--disable-dhcp'], {'name': 'myname', })
-
- def test_show_subnet(self):
- # Show subnet: --fields id --fields name myid.
- resource = 'subnet'
- cmd = subnet.ShowSubnet(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_delete_subnet(self):
- # Delete subnet: subnetid.
- resource = 'subnet'
- cmd = subnet.DeleteSubnet(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
diff --git a/neutronclient/tests/unit/test_cli20_subnetpool.py b/neutronclient/tests/unit/test_cli20_subnetpool.py
deleted file mode 100644
index fb201683a..000000000
--- a/neutronclient/tests/unit/test_cli20_subnetpool.py
+++ /dev/null
@@ -1,208 +0,0 @@
-# Copyright 2015 OpenStack Foundation.
-# All Rights Reserved
-#
-# 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 sys
-from unittest import mock
-
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0 import subnetpool
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20SubnetPoolJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['subnetpool']
-
- def setUp(self):
- super(CLITestV20SubnetPoolJSON, self).setUp(plurals={'tags': 'tag'})
-
- def test_create_subnetpool_with_options(self):
- # Create subnetpool: myname.
- resource = 'subnetpool'
- cmd = subnetpool.CreateSubnetPool(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- min_prefixlen = 30
- prefix1 = '10.11.12.0/24'
- prefix2 = '12.11.13.0/24'
- args = [name, '--min-prefixlen', str(min_prefixlen),
- '--pool-prefix', prefix1, '--pool-prefix', prefix2,
- '--shared', '--description', 'public pool',
- '--tenant-id', 'tenantid']
- position_names = ['name', 'min_prefixlen', 'prefixes', 'shared',
- 'tenant_id']
- position_values = [name, min_prefixlen, [prefix1, prefix2], True,
- 'tenantid']
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values,
- description='public pool')
-
- def test_create_subnetpool_only_with_required_options(self):
- # Create subnetpool: myname.
- resource = 'subnetpool'
- cmd = subnetpool.CreateSubnetPool(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- min_prefixlen = 30
- prefix1 = '10.11.12.0/24'
- prefix2 = '12.11.13.0/24'
- args = [name, '--min-prefixlen', str(min_prefixlen),
- '--pool-prefix', prefix1, '--pool-prefix', prefix2]
- position_names = ['name', 'min_prefixlen', 'prefixes']
- position_values = [name, min_prefixlen, [prefix1, prefix2]]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_subnetpool_with_is_default(self, default='false'):
- # Create subnetpool: myname.
- resource = 'subnetpool'
- cmd = subnetpool.CreateSubnetPool(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- min_prefixlen = 30
- prefix1 = '10.11.12.0/24'
- prefix2 = '12.11.13.0/24'
- args = [name, '--min-prefixlen', str(min_prefixlen),
- '--pool-prefix', prefix1, '--pool-prefix', prefix2,
- '--is-default', default]
- position_names = ['name', 'min_prefixlen', 'prefixes', 'is_default']
- position_values = [name, min_prefixlen, [prefix1, prefix2], default]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_subnetpool_default(self):
- self.test_create_subnetpool_with_is_default(default='true')
-
- def test_create_subnetpool_with_unicode(self):
- # Create subnetpool: u'\u7f51\u7edc'.
- resource = 'subnetpool'
- cmd = subnetpool.CreateSubnetPool(test_cli20.MyApp(sys.stdout), None)
- name = u'\u7f51\u7edc'
- myid = 'myid'
- min_prefixlen = 30
- prefixes = '10.11.12.0/24'
- args = [name, '--min-prefixlen', str(min_prefixlen),
- '--pool-prefix', prefixes]
- position_names = ['name', 'min_prefixlen', 'prefixes']
- position_values = [name, min_prefixlen, [prefixes]]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_subnetpool_with_addrscope(self):
- # Create subnetpool: myname in addrscope: foo-address-scope
- resource = 'subnetpool'
- cmd = subnetpool.CreateSubnetPool(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- min_prefixlen = 30
- prefix1 = '11.11.11.0/24'
- prefix2 = '12.12.12.0/24'
- address_scope = 'foo-address-scope'
- args = [name, '--min-prefixlen', str(min_prefixlen),
- '--pool-prefix', prefix1, '--pool-prefix', prefix2,
- '--address-scope', address_scope]
- position_names = ['name', 'min_prefixlen', 'prefixes',
- 'address_scope_id']
- position_values = [name, min_prefixlen, [prefix1, prefix2],
- address_scope]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_create_subnetpool_no_poolprefix(self):
- # Should raise an error because --pool-prefix is required
- resource = 'subnetpool'
- cmd = subnetpool.CreateSubnetPool(test_cli20.MyApp(sys.stdout), None)
- name = 'myname'
- myid = 'myid'
- args = [name]
- position_names = ['name']
- position_values = [name]
- self.assertRaises(SystemExit, self._test_create_resource, resource,
- cmd, name, myid, args, position_names,
- position_values)
-
- @mock.patch.object(subnetpool.ListSubnetPool, "extend_list")
- def test_list_subnetpool_pagination(self, mock_extend_list):
- cmd = subnetpool.ListSubnetPool(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination("subnetpools", cmd)
- mock_extend_list.assert_called_once_with(test_cli20.IsA(list),
- mock.ANY)
-
- def test_list_subnetpools_sort(self):
- # List subnetpools:
- # --sort-key name --sort-key id --sort-key asc --sort-key desc
- resources = "subnetpools"
- cmd = subnetpool.ListSubnetPool(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_subnetpools_limit(self):
- # List subnetpools: -P.
- resources = "subnetpools"
- cmd = subnetpool.ListSubnetPool(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_update_subnetpool_exception(self):
- # Update subnetpool: myid.
- resource = 'subnetpool'
- cmd = subnetpool.UpdateSubnetPool(test_cli20.MyApp(sys.stdout), None)
- self.assertRaises(exceptions.CommandError, self._test_update_resource,
- resource, cmd, 'myid', ['myid'], {})
-
- def test_update_subnetpool(self):
- # Update subnetpool: myid --name myname.
- resource = 'subnetpool'
- cmd = subnetpool.UpdateSubnetPool(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'myname',
- '--description', ':)'],
- {'name': 'myname', 'description': ':)'})
-
- def test_update_subnetpool_with_address_scope(self):
- # Update subnetpool: myid --address-scope newscope.
- resource = 'subnetpool'
- cmd = subnetpool.UpdateSubnetPool(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--address-scope', 'newscope'],
- {'address_scope_id': 'newscope'}
- )
-
- def test_update_subnetpool_with_no_address_scope(self):
- # Update subnetpool: myid --no-address-scope.
- resource = 'subnetpool'
- cmd = subnetpool.UpdateSubnetPool(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--no-address-scope'],
- {'address_scope_id': None}
- )
-
- def test_show_subnetpool(self):
- # Show subnetpool: --fields id --fields name myid.
- resource = 'subnetpool'
- cmd = subnetpool.ShowSubnetPool(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args,
- ['id', 'name'])
-
- def test_delete_subnetpool(self):
- # Delete subnetpool: subnetpoolid.
- resource = 'subnetpool'
- cmd = subnetpool.DeleteSubnetPool(test_cli20.MyApp(sys.stdout), None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
diff --git a/neutronclient/tests/unit/test_cli20_tag.py b/neutronclient/tests/unit/test_cli20_tag.py
deleted file mode 100644
index 2e23c9dc5..000000000
--- a/neutronclient/tests/unit/test_cli20_tag.py
+++ /dev/null
@@ -1,131 +0,0 @@
-# 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 sys
-from unittest import mock
-
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0 import network
-from neutronclient.neutron.v2_0 import tag
-from neutronclient import shell
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20Tag(test_cli20.CLITestV20Base):
- def _test_tag_operation(self, cmd, path, method, args, prog_name,
- body=None):
- with mock.patch.object(cmd, 'get_client',
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, 'request',
- return_value=(test_cli20.MyResp(204), None)
- ) as mock_request:
- if body:
- body = test_cli20.MyComparator(body, self.client)
- cmd_parser = cmd.get_parser(prog_name)
- shell.run_command(cmd, cmd_parser, args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(test_cli20.end_url(path), self.client),
- method, body=body,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
-
- def _test_tags_query(self, cmd, resources, args, query):
- path = getattr(self.client, resources + "_path")
- res = {resources: [{'id': 'myid'}]}
- resstr = self.client.serialize(res)
- with mock.patch.object(cmd, 'get_client',
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, 'request',
- return_value=(test_cli20.MyResp(200), resstr)
- ) as mock_request:
- cmd_parser = cmd.get_parser("list_networks")
- shell.run_command(cmd, cmd_parser, args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(test_cli20.end_url(path, query),
- self.client),
- 'GET', body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
-
- _str = self.fake_stdout.make_string()
- self.assertIn('myid', _str)
-
- def _make_tag_path(self, resource, resource_id, tag):
- path = getattr(self.client, "tag_path")
- resource_plural = self.client.get_resource_plural(resource)
- return path % (resource_plural, resource_id, tag)
-
- def _make_tags_path(self, resource, resource_id):
- path = getattr(self.client, "tags_path")
- resource_plural = self.client.get_resource_plural(resource)
- return path % (resource_plural, resource_id)
-
- def test_add_tag(self):
- cmd = tag.AddTag(test_cli20.MyApp(sys.stdout), None)
- path = self._make_tag_path('network', 'myid', 'red')
- args = ['--resource-type', 'network', '--resource', 'myid',
- '--tag', 'red']
- self._test_tag_operation(cmd, path, 'PUT', args, "tag-add")
-
- def test_add_tag_empty_tag(self):
- cmd = tag.AddTag(test_cli20.MyApp(sys.stdout), None)
- path = self._make_tag_path('network', 'myid', '')
- args = ['--resource-type', 'network', '--resource', 'myid',
- '--tag', '']
- self.assertRaises(exceptions.CommandError, self._test_tag_operation,
- cmd, path, 'PUT', args, "tag-add")
-
- def test_replace_tag(self):
- cmd = tag.ReplaceTag(test_cli20.MyApp(sys.stdout), None)
- path = self._make_tags_path('network', 'myid')
- args = ['--resource-type', 'network', '--resource', 'myid',
- '--tag', 'red', '--tag', 'blue']
- body = {'tags': ['red', 'blue']}
- self._test_tag_operation(cmd, path, 'PUT', args, "tag-replace",
- body=body)
-
- def test_remove_tag(self):
- cmd = tag.RemoveTag(test_cli20.MyApp(sys.stdout), None)
- path = self._make_tag_path('network', 'myid', 'red')
- args = ['--resource-type', 'network', '--resource', 'myid',
- '--tag', 'red']
- self._test_tag_operation(cmd, path, 'DELETE', args, "tag-remove")
-
- def test_remove_tag_all(self):
- cmd = tag.RemoveTag(test_cli20.MyApp(sys.stdout), None)
- path = self._make_tags_path('network', 'myid')
- args = ['--resource-type', 'network', '--resource', 'myid',
- '--all']
- self._test_tag_operation(cmd, path, 'DELETE', args, "tag-remove")
-
- def test_no_tag_nor_all(self):
- cmd = tag.RemoveTag(test_cli20.MyApp(sys.stdout), None)
- path = self._make_tags_path('network', 'myid')
- args = ['--resource-type', 'network', '--resource', 'myid']
- self.assertRaises(exceptions.CommandError, self._test_tag_operation,
- cmd, path, 'DELETE', args, "tag-remove")
-
- def test_tags_query(self):
- # This test examines that '-' in the tag related filters
- # is not converted to '_'.
- resources = 'networks'
- cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
- with mock.patch.object(network.ListNetwork, 'extend_list'):
- args = ['--not-tags', 'red,blue', '--tags-any', 'green',
- '--not-tags-any', 'black']
- query = "not-tags=red,blue&tags-any=green¬-tags-any=black"
- self._test_tags_query(cmd, resources, args, query)
diff --git a/neutronclient/tests/unit/test_client_extension.py b/neutronclient/tests/unit/test_client_extension.py
deleted file mode 100644
index 871e7a6cb..000000000
--- a/neutronclient/tests/unit/test_client_extension.py
+++ /dev/null
@@ -1,221 +0,0 @@
-# Copyright 2015 Rackspace Hosting Inc.
-# All Rights Reserved
-#
-# 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 inspect
-import sys
-from unittest import mock
-
-
-from neutronclient.common import extension
-from neutronclient.neutron.v2_0.contrib import _fox_sockets as fox_sockets
-from neutronclient import shell
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20ExtensionJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['fox_socket']
-
- def setUp(self):
- # need to mock before super because extensions loaded on instantiation
- self._mock_extension_loading()
- super(CLITestV20ExtensionJSON, self).setUp(plurals={'tags': 'tag'})
-
- def _mock_extension_loading(self):
- ext_pkg = 'neutronclient.common.extension'
- contrib = mock.patch(ext_pkg + '._discover_via_entry_points').start()
- contrib.return_value = [("_fox_sockets", fox_sockets)]
- return contrib
-
- def test_ext_cmd_loaded(self):
- neutron_shell = shell.NeutronShell('2.0')
- ext_cmd = {'fox-sockets-list': fox_sockets.FoxInSocketsList,
- 'fox-sockets-create': fox_sockets.FoxInSocketsCreate,
- 'fox-sockets-update': fox_sockets.FoxInSocketsUpdate,
- 'fox-sockets-delete': fox_sockets.FoxInSocketsDelete,
- 'fox-sockets-show': fox_sockets.FoxInSocketsShow}
- for cmd_name, cmd_class in ext_cmd.items():
- found = neutron_shell.command_manager.find_command([cmd_name])
- self.assertEqual(cmd_class, found[0])
-
- def test_ext_cmd_help_doc_with_extension_name(self):
- neutron_shell = shell.NeutronShell('2.0')
- ext_cmd = {'fox-sockets-list': fox_sockets.FoxInSocketsList,
- 'fox-sockets-create': fox_sockets.FoxInSocketsCreate,
- 'fox-sockets-update': fox_sockets.FoxInSocketsUpdate,
- 'fox-sockets-delete': fox_sockets.FoxInSocketsDelete,
- 'fox-sockets-show': fox_sockets.FoxInSocketsShow}
- for cmd_name, cmd_class in ext_cmd.items():
- found = neutron_shell.command_manager.find_command([cmd_name])
- found_factory = found[0]
- self.assertEqual(cmd_class, found_factory)
- self.assertTrue(found_factory.__doc__.startswith("[_fox_sockets]"))
-
- def test_delete_fox_socket(self):
- # Delete fox socket: myid.
- resource = 'fox_socket'
- cmd = fox_sockets.FoxInSocketsDelete(test_cli20.MyApp(sys.stdout),
- None)
- myid = 'myid'
- args = [myid]
- self._test_delete_resource(resource, cmd, myid, args)
-
- def test_update_fox_socket(self):
- # Update fox_socket: myid --name myname.
- resource = 'fox_socket'
- cmd = fox_sockets.FoxInSocketsUpdate(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'myname'],
- {'name': 'myname'})
-
- def test_create_fox_socket(self):
- # Create fox_socket: myname.
- resource = 'fox_socket'
- cmd = fox_sockets.FoxInSocketsCreate(test_cli20.MyApp(sys.stdout),
- None)
- name = 'myname'
- myid = 'myid'
- args = [name, ]
- position_names = ['name', ]
- position_values = [name, ]
- self._test_create_resource(resource, cmd, name, myid, args,
- position_names, position_values)
-
- def test_list_fox_sockets(self):
- # List fox_sockets.
- resources = 'fox_sockets'
- cmd = fox_sockets.FoxInSocketsList(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_fox_pagination(self):
- resources = 'fox_sockets'
- cmd = fox_sockets.FoxInSocketsList(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_show_fox_socket(self):
- # Show fox_socket: --fields id --fields name myid.
- resource = 'fox_socket'
- cmd = fox_sockets.FoxInSocketsShow(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
-
-class CLITestV20ExtensionJSONAlternatePlurals(test_cli20.CLITestV20Base):
- class IPAddress(extension.NeutronClientExtension):
- resource = 'ip_address'
- resource_plural = '%ses' % resource
- object_path = '/%s' % resource_plural
- resource_path = '/%s/%%s' % resource_plural
- versions = ['2.0']
-
- class IPAddressesList(extension.ClientExtensionList, IPAddress):
- shell_command = 'ip-address-list'
-
- def setUp(self):
- # need to mock before super because extensions loaded on instantiation
- self._mock_extension_loading()
- super(CLITestV20ExtensionJSONAlternatePlurals, self).setUp()
-
- def _mock_extension_loading(self):
- ext_pkg = 'neutronclient.common.extension'
- contrib = mock.patch(ext_pkg + '._discover_via_entry_points').start()
- ip_address = mock.Mock()
- ip_address.IPAddress = self.IPAddress
- ip_address.IPAddressesList = self.IPAddressesList
- contrib.return_value = [("ip_address", ip_address)]
- return contrib
-
- def test_ext_cmd_loaded(self):
- neutron_shell = shell.NeutronShell('2.0')
- ext_cmd = {'ip-address-list': self.IPAddressesList}
- for cmd_name, cmd_class in ext_cmd.items():
- found = neutron_shell.command_manager.find_command([cmd_name])
- self.assertEqual(cmd_class, found[0])
-
- def test_list_ip_addresses(self):
- # List ip_addresses.
- resources = 'ip_addresses'
- cmd = self.IPAddressesList(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
-
-class CLITestV20ExtensionJSONChildResource(test_cli20.CLITestV20Base):
- class Child(extension.NeutronClientExtension):
- parent_resource = 'parents'
- child_resource = 'child'
- resource = '%s_%s' % (parent_resource, child_resource)
- resource_plural = '%sren' % resource
- child_resource_plural = '%ren' % child_resource
- object_path = '/%s/%%s/%s' % (parent_resource, child_resource_plural)
- resource_path = '/%s/%%s/%s/%%s' % (parent_resource,
- child_resource_plural)
- versions = ['2.0']
-
- class ChildrenList(extension.ClientExtensionList, Child):
- shell_command = 'parent-child-list'
-
- class ChildShow(extension.ClientExtensionShow, Child):
- shell_command = 'parent-child-show'
-
- class ChildUpdate(extension.ClientExtensionUpdate, Child):
- shell_command = 'parent-child-update'
-
- class ChildDelete(extension.ClientExtensionDelete, Child):
- shell_command = 'parent-child-delete'
-
- class ChildCreate(extension.ClientExtensionCreate, Child):
- shell_command = 'parent-child-create'
-
- def setUp(self):
- # need to mock before super because extensions loaded on instantiation
- self._mock_extension_loading()
- super(CLITestV20ExtensionJSONChildResource, self).setUp()
-
- def _mock_extension_loading(self):
- ext_pkg = 'neutronclient.common.extension'
- contrib = mock.patch(ext_pkg + '._discover_via_entry_points').start()
- child = mock.Mock()
- child.Child = self.Child
- child.ChildrenList = self.ChildrenList
- child.ChildShow = self.ChildShow
- child.ChildUpdate = self.ChildUpdate
- child.ChildDelete = self.ChildDelete
- child.ChildCreate = self.ChildCreate
- contrib.return_value = [("child", child)]
- return contrib
-
- def test_ext_cmd_loaded(self):
- neutron_shell = shell.NeutronShell('2.0')
- ext_cmd = {'parent-child-list': self.ChildrenList,
- 'parent-child-show': self.ChildShow,
- 'parent-child-update': self.ChildUpdate,
- 'parent-child-delete': self.ChildDelete,
- 'parent-child-create': self.ChildCreate}
- for cmd_name, cmd_class in ext_cmd.items():
- found = neutron_shell.command_manager.find_command([cmd_name])
- self.assertEqual(cmd_class, found[0])
-
- def test_client_methods_have_parent_id_arg(self):
- methods = (self.client.list_parents_children,
- self.client.show_parents_child,
- self.client.update_parents_child,
- self.client.delete_parents_child,
- self.client.create_parents_child)
- for method in methods:
- argspec = inspect.getfullargspec(method)
- self.assertIn("parent_id", argspec.args)
diff --git a/neutronclient/tests/unit/test_name_or_id.py b/neutronclient/tests/unit/test_name_or_id.py
deleted file mode 100644
index a6a7b9246..000000000
--- a/neutronclient/tests/unit/test_name_or_id.py
+++ /dev/null
@@ -1,244 +0,0 @@
-# Copyright 2012 OpenStack Foundation.
-# All Rights Reserved
-#
-# 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.
-#
-
-from unittest import mock
-
-from oslo_utils import uuidutils
-import testtools
-
-from neutronclient.common import exceptions
-from neutronclient.neutron import v2_0 as neutronV20
-from neutronclient.tests.unit import test_cli20
-from neutronclient.v2_0 import client
-
-
-class CLITestNameorID(testtools.TestCase):
-
- def setUp(self):
- """Prepare the test environment."""
- super(CLITestNameorID, self).setUp()
- self.endurl = test_cli20.ENDURL
- self.client = client.Client(token=test_cli20.TOKEN,
- endpoint_url=self.endurl)
-
- def test_get_id_from_id(self):
- _id = uuidutils.generate_uuid()
- reses = {'networks': [{'id': _id, }, ], }
- resstr = self.client.serialize(reses)
- resp = (test_cli20.MyResp(200), resstr)
- path = getattr(self.client, "networks_path")
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- returned_id = neutronV20.find_resourceid_by_name_or_id(
- self.client, 'network', _id)
-
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, "fields=id&id=" + _id),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- self.assertEqual(_id, returned_id)
-
- def test_get_id_from_id_then_name_empty(self):
- _id = uuidutils.generate_uuid()
- reses = {'networks': [{'id': _id, }, ], }
- resstr = self.client.serialize(reses)
- resstr1 = self.client.serialize({'networks': []})
- path = getattr(self.client, "networks_path")
- with mock.patch.object(self.client.httpclient,
- "request") as mock_request:
- mock_request.side_effect = [(test_cli20.MyResp(200), resstr1),
- (test_cli20.MyResp(200), resstr)]
- returned_id = neutronV20.find_resourceid_by_name_or_id(
- self.client, 'network', _id)
-
- self.assertEqual(2, mock_request.call_count)
- mock_request.assert_has_calls([
- mock.call(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, "fields=id&id=" + _id),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN})),
- mock.call(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, "fields=id&name=" + _id),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))])
- self.assertEqual(_id, returned_id)
-
- def test_get_id_from_name(self):
- name = 'myname'
- _id = uuidutils.generate_uuid()
- reses = {'networks': [{'id': _id, }, ], }
- resstr = self.client.serialize(reses)
- resp = (test_cli20.MyResp(200), resstr)
- path = getattr(self.client, "networks_path")
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- returned_id = neutronV20.find_resourceid_by_name_or_id(
- self.client, 'network', name)
-
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, "fields=id&name=" + name),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- self.assertEqual(_id, returned_id)
-
- def test_get_id_from_name_multiple(self):
- name = 'myname'
- reses = {'networks': [{'id': uuidutils.generate_uuid()},
- {'id': uuidutils.generate_uuid()}]}
- resstr = self.client.serialize(reses)
- resp = (test_cli20.MyResp(200), resstr)
- path = getattr(self.client, "networks_path")
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- exception = self.assertRaises(
- exceptions.NeutronClientNoUniqueMatch,
- neutronV20.find_resourceid_by_name_or_id,
- self.client, 'network', name)
-
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, "fields=id&name=" + name),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- self.assertIn('Multiple', exception.message)
-
- def test_get_id_from_name_notfound(self):
- name = 'myname'
- reses = {'networks': []}
- resstr = self.client.serialize(reses)
- resp = (test_cli20.MyResp(200), resstr)
- path = getattr(self.client, "networks_path")
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- exception = self.assertRaises(
- exceptions.NotFound,
- neutronV20.find_resourceid_by_name_or_id,
- self.client, 'network', name)
-
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, "fields=id&name=" + name),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- self.assertIn('Unable to find', exception.message)
- self.assertEqual(404, exception.status_code)
-
- def test_get_id_from_name_multiple_with_project(self):
- name = 'web_server'
- project = uuidutils.generate_uuid()
- expect_id = uuidutils.generate_uuid()
- reses = {'security_groups':
- [{'id': expect_id, 'tenant_id': project}]}
- resstr = self.client.serialize(reses)
- resp = (test_cli20.MyResp(200), resstr)
- path = getattr(self.client, "security_groups_path")
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- observed_id = neutronV20.find_resourceid_by_name_or_id(
- self.client, 'security_group', name, project)
-
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, "fields=id&name=%s&tenant_id=%s" %
- (name, project)), self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- self.assertEqual(expect_id, observed_id)
-
- def test_get_id_from_name_multiple_with_project_not_found(self):
- name = 'web_server'
- project = uuidutils.generate_uuid()
- resstr_notfound = self.client.serialize({'security_groups': []})
- resp = (test_cli20.MyResp(200), resstr_notfound)
- path = getattr(self.client, "security_groups_path")
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- exc = self.assertRaises(exceptions.NotFound,
- neutronV20.find_resourceid_by_name_or_id,
- self.client, 'security_group', name,
- project)
-
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, "fields=id&name=%s&tenant_id=%s" %
- (name, project)), self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- self.assertIn('Unable to find', exc.message)
- self.assertEqual(404, exc.status_code)
-
- def _test_get_resource_by_id(self, id_only=False):
- _id = uuidutils.generate_uuid()
- net = {'id': _id, 'name': 'test'}
- reses = {'networks': [net], }
- resstr = self.client.serialize(reses)
- resp = (test_cli20.MyResp(200), resstr)
- path = getattr(self.client, "networks_path")
- if id_only:
- query_params = "fields=id&id=%s" % _id
- else:
- query_params = "id=%s" % _id
- with mock.patch.object(self.client.httpclient, "request",
- return_value=resp) as mock_request:
- if id_only:
- returned_id = neutronV20.find_resourceid_by_id(
- self.client, 'network', _id)
- self.assertEqual(_id, returned_id)
- else:
- result = neutronV20.find_resource_by_id(
- self.client, 'network', _id)
- self.assertEqual(net, result)
-
- mock_request.assert_called_once_with(
- test_cli20.MyUrlComparator(
- test_cli20.end_url(path, query_params),
- self.client),
- 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
-
- def test_get_resource_by_id(self):
- self._test_get_resource_by_id(id_only=False)
-
- def test_get_resourceid_by_id(self):
- self._test_get_resource_by_id(id_only=True)
diff --git a/neutronclient/tests/unit/test_quota.py b/neutronclient/tests/unit/test_quota.py
deleted file mode 100644
index 747621de9..000000000
--- a/neutronclient/tests/unit/test_quota.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# Copyright (C) 2013 Yahoo! Inc.
-# All Rights Reserved.
-#
-# 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 sys
-from unittest import mock
-
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0 import quota as test_quota
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20Quota(test_cli20.CLITestV20Base):
- def test_show_quota(self):
- resource = 'quota'
- cmd = test_quota.ShowQuota(
- test_cli20.MyApp(sys.stdout), None)
- args = ['--tenant-id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args)
-
- def test_update_quota(self):
- resource = 'quota'
- cmd = test_quota.UpdateQuota(
- test_cli20.MyApp(sys.stdout), None)
- args = ['--tenant-id', self.test_id, '--network', 'test']
- self.assertRaises(
- exceptions.CommandError, self._test_update_resource,
- resource, cmd, self.test_id, args=args,
- extrafields={'network': 'new'})
-
- def test_delete_quota_get_parser(self):
- cmd = test_cli20.MyApp(sys.stdout)
- test_quota.DeleteQuota(cmd, None).get_parser(cmd)
-
- def test_show_quota_positional(self):
- resource = 'quota'
- cmd = test_quota.ShowQuota(
- test_cli20.MyApp(sys.stdout), None)
- args = [self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args)
-
- def test_update_quota_positional(self):
- resource = 'quota'
- cmd = test_quota.UpdateQuota(
- test_cli20.MyApp(sys.stdout), None)
- args = [self.test_id, '--network', 'test']
- self.assertRaises(
- exceptions.CommandError, self._test_update_resource,
- resource, cmd, self.test_id, args=args,
- extrafields={'network': 'new'})
-
- def test_show_quota_default(self):
- resource = 'quota'
- cmd = test_quota.ShowQuotaDefault(
- test_cli20.MyApp(sys.stdout), None)
- args = ['--tenant-id', self.test_id]
- expected_res = {'quota': {'port': 50, 'network': 10, 'subnet': 10}}
- resstr = self.client.serialize(expected_res)
- path = getattr(self.client, "quota_default_path")
- return_tup = (test_cli20.MyResp(200), resstr)
- with mock.patch.object(cmd, 'get_client',
- return_value=self.client) as mock_get_client, \
- mock.patch.object(self.client.httpclient, 'request',
- return_value=return_tup) as mock_request:
- cmd_parser = cmd.get_parser("test_" + resource)
- parsed_args = cmd_parser.parse_args(args)
- cmd.run(parsed_args)
-
- mock_get_client.assert_called_once_with()
- mock_request.assert_called_once_with(
- test_cli20.end_url(path % self.test_id), 'GET',
- body=None,
- headers=test_cli20.ContainsKeyValue(
- {'X-Auth-Token': test_cli20.TOKEN}))
- _str = self.fake_stdout.make_string()
- self.assertIn('network', _str)
- self.assertIn('subnet', _str)
- self.assertIn('port', _str)
- self.assertNotIn('subnetpool', _str)
-
- def test_update_quota_noargs(self):
- resource = 'quota'
- cmd = test_quota.UpdateQuota(test_cli20.MyApp(sys.stdout), None)
- args = [self.test_id]
- self.assertRaises(exceptions.CommandError, self._test_update_resource,
- resource, cmd, self.test_id, args=args,
- extrafields=None)
diff --git a/neutronclient/tests/unit/test_shell.py b/neutronclient/tests/unit/test_shell.py
deleted file mode 100644
index 04e814066..000000000
--- a/neutronclient/tests/unit/test_shell.py
+++ /dev/null
@@ -1,366 +0,0 @@
-# Copyright (C) 2013 Yahoo! Inc.
-# All Rights Reserved.
-#
-# 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 argparse
-from io import StringIO
-import logging
-import os
-import re
-import sys
-from unittest import mock
-
-import fixtures
-from keystoneauth1 import session
-import testtools
-from testtools import matchers
-
-from neutronclient.common import clientmanager
-from neutronclient.neutron.v2_0 import network
-from neutronclient import shell as openstack_shell
-
-
-DEFAULT_USERNAME = 'username'
-DEFAULT_PASSWORD = 'password'
-DEFAULT_TENANT_ID = 'tenant_id'
-DEFAULT_TENANT_NAME = 'tenant_name'
-DEFAULT_AUTH_URL = 'http://127.0.0.1:5000/v2.0/'
-DEFAULT_TOKEN = '3bcc3d3a03f44e3d8377f9247b0ad155'
-DEFAULT_URL = 'http://quantum.example.org:9696/'
-DEFAULT_REGION = 'regionOne'
-DEFAULT_ENDPOINT_TYPE = 'public'
-DEFAULT_API_VERSION = '2.0'
-DEFAULT_SERVICE_TYPE = 'network'
-DEFAULT_SERVICE_NAME = 'neutron'
-DEFAULT_RETRIES = 3
-DEFAULT_TIMEOUT = 3.0
-
-
-class ShellTest(testtools.TestCase):
-
- FAKE_ENV = {
- 'OS_USERNAME': DEFAULT_USERNAME,
- 'OS_PASSWORD': DEFAULT_PASSWORD,
- 'OS_TENANT_ID': DEFAULT_TENANT_ID,
- 'OS_TENANT_NAME': DEFAULT_TENANT_NAME,
- 'OS_AUTH_URL': DEFAULT_AUTH_URL,
- 'OS_REGION_NAME': None,
- 'HTTP_PROXY': None,
- 'http_proxy': None,
- }
-
- # Patch os.environ to avoid required auth info.
- def setUp(self):
- super(ShellTest, self).setUp()
- for var in self.FAKE_ENV:
- self.useFixture(
- fixtures.EnvironmentVariable(
- var, self.FAKE_ENV[var]))
-
- def shell(self, argstr, check=False, expected_val=0):
- # expected_val is the expected return value after executing
- # the command in NeutronShell
- orig = (sys.stdout, sys.stderr)
- clean_env = {}
- _old_env, os.environ = os.environ, clean_env.copy()
- try:
- sys.stdout = StringIO()
- sys.stderr = StringIO()
- _shell = openstack_shell.NeutronShell('2.0')
- _shell.run(argstr.split())
- except SystemExit:
- exc_type, exc_value, exc_traceback = sys.exc_info()
- self.assertEqual(expected_val, exc_value.code)
- finally:
- stdout = sys.stdout.getvalue()
- stderr = sys.stderr.getvalue()
- sys.stdout.close()
- sys.stderr.close()
- sys.stdout, sys.stderr = orig
- os.environ = _old_env
- return stdout, stderr
-
- def test_run_unknown_command(self):
- self.useFixture(fixtures.FakeLogger(level=logging.DEBUG))
- stdout, stderr = self.shell('fake', check=True)
- self.assertFalse(stdout)
- self.assertIn("Unknown command ['fake']", stderr.strip())
-
- def test_help(self):
- required = 'usage:'
- help_text, stderr = self.shell('help')
- self.assertThat(
- help_text,
- matchers.MatchesRegex(required))
-
- def test_bash_completion(self):
- required = '.*os_user_domain_id.*'
- bash_completion, stderr = self.shell('bash-completion')
- self.assertThat(
- bash_completion,
- matchers.MatchesRegex(required))
-
- def test_help_on_subcommand(self):
- required = [
- '.*?^usage: .* quota-list']
- stdout, stderr = self.shell('help quota-list')
- for r in required:
- self.assertThat(
- stdout,
- matchers.MatchesRegex(r, re.DOTALL | re.MULTILINE))
-
- def test_help_command(self):
- required = 'usage:'
- help_text, stderr = self.shell('help network-create')
- self.assertThat(
- help_text,
- matchers.MatchesRegex(required))
-
- def test_bash_completion_in_outputs_of_help_command(self):
- help_text, stderr = self.shell('help')
- completion_cmd = "bash-completion"
- completion_help_str = ("Prints all of the commands and options "
- "for bash-completion.")
- self.assertIn(completion_cmd, help_text)
- self.assertIn(completion_help_str, help_text)
-
- def test_bash_completion_command(self):
- # just check we have some output
- required = [
- '.*--tenant_id',
- '.*help',
- '.*--dns-nameserver']
- help_text, stderr = self.shell('neutron bash-completion')
- for r in required:
- self.assertThat(help_text,
- matchers.MatchesRegex(r, re.DOTALL | re.MULTILINE))
-
- def test_build_option_parser(self):
- neutron_shell = openstack_shell.NeutronShell('2.0')
- result = neutron_shell.build_option_parser('descr', '2.0')
- self.assertIsInstance(result, argparse.ArgumentParser)
-
- @mock.patch.object(openstack_shell.NeutronShell, 'run')
- def test_main_with_unicode(self, fake_shell):
- unicode_text = u'\u7f51\u7edc'
- argv = ['net-list', unicode_text, unicode_text]
- fake_shell.return_value = 0
- ret = openstack_shell.main(argv=argv)
- fake_shell.assert_called_once_with([u'net-list', unicode_text,
- unicode_text])
- self.assertEqual(0, ret)
-
- def test_endpoint_option(self):
- shell = openstack_shell.NeutronShell('2.0')
- parser = shell.build_option_parser('descr', '2.0')
-
- # Neither $OS_ENDPOINT_TYPE nor --os-endpoint-type
- namespace = parser.parse_args([])
- self.assertEqual('public', namespace.os_endpoint_type)
-
- # --endpoint-type but not $OS_ENDPOINT_TYPE
- namespace = parser.parse_args(['--os-endpoint-type=admin'])
- self.assertEqual('admin', namespace.os_endpoint_type)
-
- def test_endpoint_environment_variable(self):
- fixture = fixtures.EnvironmentVariable("OS_ENDPOINT_TYPE",
- "public")
- self.useFixture(fixture)
-
- shell = openstack_shell.NeutronShell('2.0')
- parser = shell.build_option_parser('descr', '2.0')
-
- # $OS_ENDPOINT_TYPE but not --endpoint-type
- namespace = parser.parse_args([])
- self.assertEqual("public", namespace.os_endpoint_type)
-
- # --endpoint-type and $OS_ENDPOINT_TYPE
- namespace = parser.parse_args(['--endpoint-type=admin'])
- self.assertEqual('admin', namespace.endpoint_type)
-
- def test_timeout_option(self):
- shell = openstack_shell.NeutronShell('2.0')
- parser = shell.build_option_parser('descr', '2.0')
-
- # Neither $OS_ENDPOINT_TYPE nor --endpoint-type
- namespace = parser.parse_args([])
- self.assertIsNone(namespace.http_timeout)
-
- # --endpoint-type but not $OS_ENDPOINT_TYPE
- namespace = parser.parse_args(['--http-timeout=50'])
- self.assertEqual(50, namespace.http_timeout)
-
- def test_timeout_environment_variable(self):
- fixture = fixtures.EnvironmentVariable("OS_NETWORK_TIMEOUT",
- "50")
- self.useFixture(fixture)
-
- shell = openstack_shell.NeutronShell('2.0')
- parser = shell.build_option_parser('descr', '2.0')
-
- namespace = parser.parse_args([])
- self.assertEqual(50, namespace.http_timeout)
-
- def test_run_incomplete_command(self):
- self.useFixture(fixtures.FakeLogger(level=logging.DEBUG))
- cmd = (
- '--os-username test --os-password test --os-project-id test '
- '--os-auth-strategy keystone --os-auth-url '
- '%s port-create' %
- DEFAULT_AUTH_URL)
- stdout, stderr = self.shell(cmd, check=True, expected_val=2)
- search_str = "Try 'neutron help port-create' for more information"
- self.assertTrue(any(search_str in string for string
- in stderr.split('\n')))
-
- def _test_authenticate_user(self, expect_verify, expect_insecure,
- **options):
- base_options = {'os_cloud': None,
- 'http_timeout': DEFAULT_TIMEOUT,
- 'region_name': DEFAULT_REGION,
- 'network_service_name': DEFAULT_SERVICE_NAME,
- 'neutron_service_type': DEFAULT_SERVICE_TYPE}
-
- options.update(base_options)
- if options.get('os_token'):
- options.update({'auth_type': 'token'})
- options.update({'os_token': 'token', 'os_url': 'url'})
- else:
- options.update({'os_token': None, 'os_url': None})
-
- with mock.patch.object(openstack_shell.NeutronShell,
- 'run_subcommand'), \
- mock.patch.object(session, 'Session') as session_mock, \
- mock.patch.object(clientmanager, 'ClientManager') as cmgr_mock:
-
- shell = openstack_shell.NeutronShell(DEFAULT_API_VERSION)
- shell.options = mock.Mock(spec=options.keys())
- for k, v in options.items():
- setattr(shell.options, k, v)
- shell.options.os_endpoint_type = DEFAULT_ENDPOINT_TYPE
- shell.options.retries = DEFAULT_RETRIES
-
- if not (options.get('os_token') and options.get('os_url')):
- auth = mock.ANY
- auth_session = mock.sentinel.session
- session_mock.return_value = auth_session
- else:
- auth = None
- auth_session = None
-
- shell.authenticate_user()
-
- if not (options.get('os_token') and options.get('os_url')):
- session_mock.assert_called_once_with(
- auth=mock.ANY, verify=expect_verify,
- cert=options.get('cert'),
- timeout=DEFAULT_TIMEOUT)
- else:
- self.assertFalse(session_mock.called)
-
- cmgr_mock.assert_called_once_with(
- retries=DEFAULT_RETRIES,
- raise_errors=False,
- session=auth_session,
- url=options.get('os_url'),
- token=options.get('os_token'),
- region_name=DEFAULT_REGION,
- api_version=DEFAULT_API_VERSION,
- service_type=DEFAULT_SERVICE_TYPE,
- service_name=DEFAULT_SERVICE_NAME,
- endpoint_type=DEFAULT_ENDPOINT_TYPE,
- auth=auth,
- insecure=expect_insecure,
- log_credentials=True)
-
- def test_authenticate_secure_with_cacert_with_cert(self):
- self._test_authenticate_user(
- insecure=False, cacert='cacert', cert='cert',
- expect_verify='cacert', expect_insecure=False)
-
- def test_authenticate_secure_with_cacert_with_cert_with_token(self):
- self._test_authenticate_user(
- os_token='token',
- insecure=False, cacert='cacert', cert='cert',
- expect_verify='cacert', expect_insecure=False)
-
- def test_authenticate_insecure_with_cacert_with_cert(self):
- self._test_authenticate_user(
- insecure=True, cacert='cacert', cert='cert',
- expect_verify=False, expect_insecure=True)
-
- def test_authenticate_insecure_with_cacert_with_cert_with_token(self):
- self._test_authenticate_user(
- os_token='token',
- insecure=True, cacert='cacert', cert='cert',
- expect_verify=False, expect_insecure=True)
-
- def test_authenticate_secure_without_cacert_with_cert(self):
- self._test_authenticate_user(
- insecure=False, cert='cert',
- expect_verify=True, expect_insecure=False)
-
- def test_authenticate_secure_without_cacert_with_cert_with_token(self):
- self._test_authenticate_user(
- os_token='token',
- insecure=False, cert='cert',
- expect_verify=True, expect_insecure=False)
-
- def test_authenticate_insecure_without_cacert_with_cert(self):
- self._test_authenticate_user(
- insecure=True, cert='cert',
- expect_verify=False, expect_insecure=True)
-
- def test_authenticate_insecure_without_cacert_with_cert_with_token(self):
- self._test_authenticate_user(
- os_token='token',
- insecure=True, cert='cert',
- expect_verify=False, expect_insecure=True)
-
- def test_authenticate_secure_with_cacert_without_cert(self):
- self._test_authenticate_user(
- insecure=False, cacert='cacert',
- expect_verify='cacert', expect_insecure=False)
-
- def test_authenticate_secure_with_cacert_without_cert_with_token(self):
- self._test_authenticate_user(
- os_token='token',
- insecure=False, cacert='cacert',
- expect_verify='cacert', expect_insecure=False)
-
- def test_authenticate_insecure_with_cacert_without_cert(self):
- self._test_authenticate_user(
- insecure=True, cacert='cacert',
- expect_verify=False, expect_insecure=True)
-
- def test_authenticate_insecure_with_cacert_without_cert_with_token(self):
- self._test_authenticate_user(
- os_token='token',
- insecure=True, cacert='cacert',
- expect_verify=False, expect_insecure=True)
-
- def test_commands_dict_populated(self):
- # neutron.shell.COMMANDS is populated once NeutronShell is initialized.
- # To check COMMANDS during NeutronShell initialization,
- # reset COMMANDS to some dummy value before calling NeutronShell().
- self.useFixture(fixtures.MockPatchObject(openstack_shell,
- 'COMMANDS', None))
- openstack_shell.NeutronShell('2.0')
- self.assertLessEqual(
- {'net-create': network.CreateNetwork,
- 'net-delete': network.DeleteNetwork,
- 'net-list': network.ListNetwork,
- 'net-show': network.ShowNetwork,
- 'net-update': network.UpdateNetwork}.items(),
- openstack_shell.COMMANDS['2.0'].items())
diff --git a/neutronclient/tests/unit/vpn/__init__.py b/neutronclient/tests/unit/vpn/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/neutronclient/tests/unit/vpn/test_cli20_endpoint_group.py b/neutronclient/tests/unit/vpn/test_cli20_endpoint_group.py
deleted file mode 100644
index f43da906b..000000000
--- a/neutronclient/tests/unit/vpn/test_cli20_endpoint_group.py
+++ /dev/null
@@ -1,145 +0,0 @@
-# (c) Copyright 2015 Cisco Systems, Inc.
-# All Rights Reserved.
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.vpn import endpoint_group
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20VpnEndpointGroupJSON(test_cli20.CLITestV20Base):
-
- def setUp(self):
- super(CLITestV20VpnEndpointGroupJSON, self).setUp()
- self.register_non_admin_status_resource('endpoint_group')
-
- def test_create_endpoint_group_with_cidrs(self):
- # vpn-endpoint-group-create with CIDR endpoints."""
- resource = 'endpoint_group'
- cmd = endpoint_group.CreateEndpointGroup(test_cli20.MyApp(sys.stdout),
- None)
- tenant_id = 'mytenant-id'
- my_id = 'my-id'
- name = 'my-endpoint-group'
- description = 'my endpoint group'
- endpoint_type = 'cidr'
- endpoints = ['10.0.0.0/24', '20.0.0.0/24']
-
- args = ['--name', name,
- '--description', description,
- '--tenant-id', tenant_id,
- '--type', endpoint_type,
- '--value', '10.0.0.0/24',
- '--value', '20.0.0.0/24']
-
- position_names = ['name', 'description', 'tenant_id',
- 'type', 'endpoints']
-
- position_values = [name, description, tenant_id,
- endpoint_type, endpoints]
-
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_create_endpoint_group_with_subnets(self):
- # vpn-endpoint-group-create with subnet endpoints."""
- resource = 'endpoint_group'
- cmd = endpoint_group.CreateEndpointGroup(test_cli20.MyApp(sys.stdout),
- None)
- tenant_id = 'mytenant-id'
- my_id = 'my-id'
- endpoint_type = 'subnet'
- subnet = 'subnet-id'
- endpoints = [subnet]
-
- args = ['--type', endpoint_type,
- '--value', subnet,
- '--tenant-id', tenant_id]
-
- position_names = ['type', 'endpoints', 'tenant_id']
-
- position_values = [endpoint_type, endpoints, tenant_id]
-
- self._test_create_resource(resource, cmd, None, my_id, args,
- position_names, position_values)
-
- def test_list_endpoint_group(self):
- # vpn-endpoint-group-list.
- resources = "endpoint_groups"
- cmd = endpoint_group.ListEndpointGroup(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_endpoint_group_pagination(self):
- # vpn-endpoint-group-list.
- resources = "endpoint_groups"
- cmd = endpoint_group.ListEndpointGroup(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_endpoint_group_sort(self):
- # vpn-endpoint-group-list --sort-key name --sort-key id
- # --sort-key asc --sort-key desc
- resources = "endpoint_groups"
- cmd = endpoint_group.ListEndpointGroup(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_endpoint_group_limit(self):
- # vpn-endpoint-group-list -P.
- resources = "endpoint_groups"
- cmd = endpoint_group.ListEndpointGroup(test_cli20.MyApp(sys.stdout),
- None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_endpoint_group_id(self):
- # vpn-endpoint-group-show test_id.
- resource = 'endpoint_group'
- cmd = endpoint_group.ShowEndpointGroup(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_show_endpoint_group_id_name(self):
- # vpn-endpoint-group-show.
- resource = 'endpoint_group'
- cmd = endpoint_group.ShowEndpointGroup(test_cli20.MyApp(sys.stdout),
- None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_update_endpoint_group(self):
- # vpn-endpoint-group-update myid --name newname --description newdesc.
- resource = 'endpoint_group'
- cmd = endpoint_group.UpdateEndpointGroup(test_cli20.MyApp(sys.stdout),
- None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'newname',
- '--description', 'newdesc'],
- {'name': 'newname',
- 'description': 'newdesc'})
-
- def test_delete_endpoint_group(self):
- # vpn-endpoint-group-delete my-id.
- resource = 'endpoint_group'
- cmd = endpoint_group.DeleteEndpointGroup(test_cli20.MyApp(sys.stdout),
- None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
diff --git a/neutronclient/tests/unit/vpn/test_cli20_ikepolicy.py b/neutronclient/tests/unit/vpn/test_cli20_ikepolicy.py
deleted file mode 100644
index 33e326cab..000000000
--- a/neutronclient/tests/unit/vpn/test_cli20_ikepolicy.py
+++ /dev/null
@@ -1,241 +0,0 @@
-# (c) Copyright 2013 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved.
-#
-# 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 sys
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0.vpn import ikepolicy
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20VpnIkePolicyJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['ikepolicy']
-
- def _test_create_ikepolicy_all_params(self, auth='sha1',
- expected_exc=None):
- # vpn-ikepolicy-create all params.
- resource = 'ikepolicy'
- cmd = ikepolicy.CreateIKEPolicy(test_cli20.MyApp(sys.stdout), None)
- name = 'ikepolicy1'
- description = 'my-ike-policy'
- auth_algorithm = auth
- encryption_algorithm = 'aes-256'
- ike_version = 'v1'
- phase1_negotiation_mode = 'main'
- pfs = 'group5'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- lifetime = 'units=seconds,value=20000'
-
- args = [name,
- '--description', description,
- '--tenant-id', tenant_id,
- '--auth-algorithm', auth_algorithm,
- '--encryption-algorithm', encryption_algorithm,
- '--ike-version', ike_version,
- '--phase1-negotiation-mode', phase1_negotiation_mode,
- '--lifetime', lifetime,
- '--pfs', pfs]
-
- position_names = ['name', 'description',
- 'auth_algorithm', 'encryption_algorithm',
- 'phase1_negotiation_mode',
- 'ike_version', 'pfs',
- 'tenant_id']
-
- position_values = [name, description,
- auth_algorithm, encryption_algorithm,
- phase1_negotiation_mode, ike_version, pfs,
- tenant_id]
- extra_body = {
- 'lifetime': {
- 'units': 'seconds',
- 'value': 20000,
- },
- }
-
- if not expected_exc:
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- extra_body=extra_body)
- else:
- self.assertRaises(
- expected_exc,
- self._test_create_resource,
- resource, cmd, name, my_id, args,
- position_names, position_values,
- extra_body=extra_body)
-
- def test_create_ikepolicy_all_params(self):
- self._test_create_ikepolicy_all_params()
-
- def test_create_ikepolicy_auth_sha256(self):
- self._test_create_ikepolicy_all_params(auth='sha256')
-
- def test_create_ikepolicy_auth_sha384(self):
- self._test_create_ikepolicy_all_params(auth='sha384')
-
- def test_create_ikepolicy_auth_sha512(self):
- self._test_create_ikepolicy_all_params(auth='sha512')
-
- def test_create_ikepolicy_invalid_auth(self):
- self._test_create_ikepolicy_all_params(auth='invalid',
- expected_exc=SystemExit)
-
- def test_create_ikepolicy_with_limited_params(self):
- # vpn-ikepolicy-create with limited params.
- resource = 'ikepolicy'
- cmd = ikepolicy.CreateIKEPolicy(test_cli20.MyApp(sys.stdout), None)
- name = 'ikepolicy1'
- auth_algorithm = 'sha1'
- encryption_algorithm = 'aes-128'
- ike_version = 'v1'
- phase1_negotiation_mode = 'main'
- pfs = 'group5'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
-
- args = [name,
- '--tenant-id', tenant_id]
-
- position_names = ['name',
- 'auth_algorithm', 'encryption_algorithm',
- 'phase1_negotiation_mode',
- 'ike_version', 'pfs',
- 'tenant_id']
-
- position_values = [name,
- auth_algorithm, encryption_algorithm,
- phase1_negotiation_mode,
- ike_version, pfs,
- tenant_id]
-
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def _test_lifetime_values(self, lifetime, expected_exc=None):
- resource = 'ikepolicy'
- cmd = ikepolicy.CreateIKEPolicy(test_cli20.MyApp(sys.stdout), None)
- name = 'ikepolicy1'
- description = 'my-ike-policy'
- auth_algorithm = 'sha1'
- encryption_algorithm = 'aes-256'
- ike_version = 'v1'
- phase1_negotiation_mode = 'main'
- pfs = 'group5'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
-
- args = [name,
- '--description', description,
- '--tenant-id', tenant_id,
- '--auth-algorithm', auth_algorithm,
- '--encryption-algorithm', encryption_algorithm,
- '--ike-version', ike_version,
- '--phase1-negotiation-mode', phase1_negotiation_mode,
- '--lifetime', lifetime,
- '--pfs', pfs]
-
- position_names = ['name', 'description',
- 'auth_algorithm', 'encryption_algorithm',
- 'phase1_negotiation_mode',
- 'ike_version', 'pfs',
- 'tenant_id']
-
- position_values = [name, description,
- auth_algorithm, encryption_algorithm,
- phase1_negotiation_mode, ike_version, pfs,
- tenant_id]
- if not expected_exc:
- expected_exc = exceptions.CommandError
- self.assertRaises(
- expected_exc,
- self._test_create_resource,
- resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_create_ikepolicy_with_invalid_lifetime_keys(self):
- lifetime = 'uts=seconds,val=20000'
- self._test_lifetime_values(lifetime, expected_exc=SystemExit)
-
- def test_create_ikepolicy_with_invalid_lifetime_value(self):
- lifetime = 'units=seconds,value=-1'
- self._test_lifetime_values(lifetime)
-
- def test_list_ikepolicy(self):
- # vpn-ikepolicy-list.
- resources = "ikepolicies"
- cmd = ikepolicy.ListIKEPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_ikepolicy_pagination(self):
- # vpn-ikepolicy-list.
- resources = "ikepolicies"
- cmd = ikepolicy.ListIKEPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_ikepolicy_sort(self):
- # vpn-ikepolicy-list --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = "ikepolicies"
- cmd = ikepolicy.ListIKEPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_ikepolicy_limit(self):
- # vpn-ikepolicy-list -P.
- resources = "ikepolicies"
- cmd = ikepolicy.ListIKEPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_ikepolicy_id(self):
- # vpn-ikepolicy-show ikepolicy_id.
- resource = 'ikepolicy'
- cmd = ikepolicy.ShowIKEPolicy(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_show_ikepolicy_id_name(self):
- # vpn-ikepolicy-show.
- resource = 'ikepolicy'
- cmd = ikepolicy.ShowIKEPolicy(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_update_ikepolicy(self):
- # vpn-ikepolicy-update myid --name newname --tags a b.
- resource = 'ikepolicy'
- cmd = ikepolicy.UpdateIKEPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'newname'],
- {'name': 'newname', })
- # vpn-ikepolicy-update myid --pfs group2 --ike-version v2.
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--pfs', 'group2',
- '--ike-version', 'v2'],
- {'pfs': 'group2',
- 'ike_version': 'v2'})
-
- def test_delete_ikepolicy(self):
- # vpn-ikepolicy-delete my-id.
- resource = 'ikepolicy'
- cmd = ikepolicy.DeleteIKEPolicy(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
diff --git a/neutronclient/tests/unit/vpn/test_cli20_ipsec_site_connection.py b/neutronclient/tests/unit/vpn/test_cli20_ipsec_site_connection.py
deleted file mode 100644
index cbab15cb8..000000000
--- a/neutronclient/tests/unit/vpn/test_cli20_ipsec_site_connection.py
+++ /dev/null
@@ -1,342 +0,0 @@
-# (c) Copyright 2013 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved.
-#
-# 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 sys
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0.vpn import ipsec_site_connection
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20IPsecSiteConnectionJSON(test_cli20.CLITestV20Base):
-
- # TODO(pcm): Remove, once peer-cidr is deprecated completely
- def test_create_ipsec_site_connection_all_params_using_peer_cidrs(self):
- # ipsecsite-connection-create all params using peer CIDRs.
- resource = 'ipsec_site_connection'
- cmd = ipsec_site_connection.CreateIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- tenant_id = 'mytenant_id'
- name = 'connection1'
- my_id = 'my_id'
- peer_address = '192.168.2.10'
- peer_id = '192.168.2.10'
- psk = 'abcd'
- mtu = '1500'
- initiator = 'bi-directional'
- vpnservice_id = 'vpnservice_id'
- ikepolicy_id = 'ikepolicy_id'
- ipsecpolicy_id = 'ipsecpolicy_id'
- peer_cidrs = ['192.168.3.0/24', '192.168.2.0/24']
- admin_state = True
- description = 'my-vpn-connection'
- dpd = 'action=restart,interval=30,timeout=120'
-
- args = ['--tenant-id', tenant_id,
- '--peer-address', peer_address, '--peer-id', peer_id,
- '--psk', psk, '--initiator', initiator,
- '--vpnservice-id', vpnservice_id,
- '--ikepolicy-id', ikepolicy_id, '--name', name,
- '--ipsecpolicy-id', ipsecpolicy_id, '--mtu', mtu,
- '--description', description,
- '--peer-cidr', '192.168.3.0/24',
- '--peer-cidr', '192.168.2.0/24',
- '--dpd', dpd]
-
- position_names = ['name', 'tenant_id', 'admin_state_up',
- 'peer_address', 'peer_id', 'peer_cidrs',
- 'psk', 'mtu', 'initiator', 'description',
- 'vpnservice_id', 'ikepolicy_id',
- 'ipsecpolicy_id']
-
- position_values = [name, tenant_id, admin_state, peer_address,
- peer_id, peer_cidrs, psk, mtu,
- initiator, description,
- vpnservice_id, ikepolicy_id, ipsecpolicy_id]
- extra_body = {
- 'dpd': {
- 'action': 'restart',
- 'interval': 30,
- 'timeout': 120,
- },
- }
-
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- extra_body=extra_body)
-
- def test_create_ipsec_site_conn_all_params(self):
- # ipsecsite-connection-create all params using endpoint groups.
- resource = 'ipsec_site_connection'
- cmd = ipsec_site_connection.CreateIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- tenant_id = 'mytenant_id'
- name = 'connection1'
- my_id = 'my_id'
- peer_address = '192.168.2.10'
- peer_id = '192.168.2.10'
- psk = 'abcd'
- mtu = '1500'
- initiator = 'bi-directional'
- vpnservice_id = 'vpnservice_id'
- ikepolicy_id = 'ikepolicy_id'
- ipsecpolicy_id = 'ipsecpolicy_id'
- local_ep_group = 'local-epg'
- peer_ep_group = 'peer-epg'
- admin_state = True
- description = 'my-vpn-connection'
- dpd = 'action=restart,interval=30,timeout=120'
-
- args = ['--tenant-id', tenant_id,
- '--peer-address', peer_address, '--peer-id', peer_id,
- '--psk', psk, '--initiator', initiator,
- '--vpnservice-id', vpnservice_id,
- '--ikepolicy-id', ikepolicy_id, '--name', name,
- '--ipsecpolicy-id', ipsecpolicy_id, '--mtu', mtu,
- '--description', description,
- '--local-ep-group', local_ep_group,
- '--peer-ep-group', peer_ep_group,
- '--dpd', dpd]
-
- position_names = ['name', 'tenant_id', 'admin_state_up',
- 'peer_address', 'peer_id', 'psk', 'mtu',
- 'local_ep_group_id', 'peer_ep_group_id',
- 'initiator', 'description',
- 'vpnservice_id', 'ikepolicy_id',
- 'ipsecpolicy_id']
-
- position_values = [name, tenant_id, admin_state, peer_address,
- peer_id, psk, mtu, local_ep_group,
- peer_ep_group, initiator, description,
- vpnservice_id, ikepolicy_id, ipsecpolicy_id]
- extra_body = {
- 'dpd': {
- 'action': 'restart',
- 'interval': 30,
- 'timeout': 120,
- },
- }
-
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- extra_body=extra_body)
-
- def test_create_ipsec_site_connection_with_limited_params(self):
- # ipsecsite-connection-create with limited params.
- resource = 'ipsec_site_connection'
- cmd = ipsec_site_connection.CreateIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- tenant_id = 'mytenant_id'
- my_id = 'my_id'
- peer_address = '192.168.2.10'
- peer_id = '192.168.2.10'
- psk = 'abcd'
- mtu = '1500'
- initiator = 'bi-directional'
- vpnservice_id = 'vpnservice_id'
- ikepolicy_id = 'ikepolicy_id'
- ipsecpolicy_id = 'ipsecpolicy_id'
- local_ep_group = 'local-epg'
- peer_ep_group = 'peer-epg'
- admin_state = True
-
- args = ['--tenant-id', tenant_id,
- '--peer-address', peer_address,
- '--peer-id', peer_id,
- '--psk', psk,
- '--vpnservice-id', vpnservice_id,
- '--ikepolicy-id', ikepolicy_id,
- '--ipsecpolicy-id', ipsecpolicy_id,
- '--local-ep-group', local_ep_group,
- '--peer-ep-group', peer_ep_group]
-
- position_names = ['tenant_id', 'admin_state_up',
- 'peer_address', 'peer_id',
- 'local_ep_group_id', 'peer_ep_group_id',
- 'psk', 'mtu', 'initiator',
- 'vpnservice_id', 'ikepolicy_id',
- 'ipsecpolicy_id']
-
- position_values = [tenant_id, admin_state, peer_address, peer_id,
- local_ep_group, peer_ep_group, psk, mtu, initiator,
- vpnservice_id, ikepolicy_id, ipsecpolicy_id]
-
- self._test_create_resource(resource, cmd, None, my_id, args,
- position_names, position_values)
-
- def _test_create_failure(self, additional_args=None, expected_exc=None):
- # Helper to test failure of IPSec site-to-site creation failure.
- resource = 'ipsec_site_connection'
- cmd = ipsec_site_connection.CreateIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- tenant_id = 'mytenant_id'
- my_id = 'my_id'
- peer_address = '192.168.2.10'
- peer_id = '192.168.2.10'
- psk = 'abcd'
- mtu = '1500'
- initiator = 'bi-directional'
- vpnservice_id = 'vpnservice_id'
- ikepolicy_id = 'ikepolicy_id'
- ipsecpolicy_id = 'ipsecpolicy_id'
- admin_state = True
-
- args = ['--tenant-id', tenant_id,
- '--peer-address', peer_address,
- '--peer-id', peer_id,
- '--psk', psk,
- '--vpnservice-id', vpnservice_id,
- '--ikepolicy-id', ikepolicy_id,
- '--ipsecpolicy-id', ipsecpolicy_id]
- if additional_args is not None:
- args += additional_args
- position_names = ['tenant_id', 'admin_state_up', 'peer_address',
- 'peer_id', 'psk', 'mtu', 'initiator',
- 'local_ep_group_id', 'peer_ep_group_id',
- 'vpnservice_id', 'ikepolicy_id', 'ipsecpolicy_id']
-
- position_values = [tenant_id, admin_state, peer_address, peer_id, psk,
- mtu, initiator, None, None, vpnservice_id,
- ikepolicy_id, ipsecpolicy_id]
- if not expected_exc:
- expected_exc = exceptions.CommandError
- self.assertRaises(expected_exc,
- self._test_create_resource,
- resource, cmd, None, my_id, args,
- position_names, position_values)
-
- def test_fail_create_with_invalid_mtu(self):
- # ipsecsite-connection-create with invalid dpd values.
- bad_mtu = ['--mtu', '67']
- self._test_create_failure(bad_mtu)
-
- def test_fail_create_with_invalid_dpd_keys(self):
- bad_dpd_key = ['--dpd', 'act=restart,interval=30,time=120']
- self._test_create_failure(bad_dpd_key, SystemExit)
-
- def test_fail_create_with_invalid_dpd_values(self):
- bad_dpd_values = ['--dpd', 'action=hold,interval=30,timeout=-1']
- self._test_create_failure(bad_dpd_values)
-
- def test_fail_create_missing_endpoint_groups_or_cidr(self):
- # Must provide either endpoint groups or peer cidrs.
- self._test_create_failure()
-
- def test_fail_create_missing_peer_endpoint_group(self):
- # Fails if dont have both endpoint groups - missing peer.
- self._test_create_failure(['--local-ep-group', 'local-epg'])
-
- def test_fail_create_missing_local_endpoint_group(self):
- # Fails if dont have both endpoint groups - missing local.
- self._test_create_failure(['--peer-ep-group', 'peer-epg'])
-
- def test_fail_create_when_both_endpoints_and_peer_cidr(self):
- # Cannot intermix endpoint groups and peer CIDRs for create.
- additional_args = ['--local-ep-group', 'local-epg',
- '--peer-ep-group', 'peer-epg',
- '--peer-cidr', '10.2.0.0/24']
- self._test_create_failure(additional_args)
-
- def test_list_ipsec_site_connection(self):
- # ipsecsite-connection-list.
- resources = "ipsec_site_connections"
- cmd = ipsec_site_connection.ListIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- self._test_list_resources(resources, cmd, True)
-
- def test_list_ipsec_site_connection_pagination(self):
- # ipsecsite-connection-list.
- resources = "ipsec_site_connections"
- cmd = ipsec_site_connection.ListIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_ipsec_site_connection_sort(self):
- # ipsecsite-connection-list.
- # --sort-key name --sort-key id --sort-key asc --sort-key desc
- resources = "ipsec_site_connections"
- cmd = ipsec_site_connection.ListIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_ipsec_site_connection_limit(self):
- # ipsecsite-connection-list -P.
- resources = "ipsec_site_connections"
- cmd = ipsec_site_connection.ListIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_delete_ipsec_site_connection(self):
- # ipsecsite-connection-delete my-id.
- resource = 'ipsec_site_connection'
- cmd = ipsec_site_connection.DeleteIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
-
- def test_update_ipsec_site_connection(self):
- # ipsecsite-connection-update myid --name Branch-new --tags a b.
- resource = 'ipsec_site_connection'
- cmd = ipsec_site_connection.UpdateIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'Branch-new',
- '--tags', 'a', 'b'],
- {'name': 'Branch-new',
- 'tags': ['a', 'b'], })
- # ipsecsite-connection-update myid --mtu 69 --initiator response-only
- # --peer-id '192.168.2.11' --peer-ep-group 'update-grp'
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--mtu', '69',
- '--initiator', 'response-only',
- '--peer-id', '192.168.2.11',
- '--peer-ep-group', 'update-grp'],
- {'mtu': '69',
- 'initiator': 'response-only',
- 'peer_id': '192.168.2.11',
- 'peer_ep_group_id': 'update-grp', },)
-
- def test_show_ipsec_site_connection_id(self):
- # ipsecsite-connection-show test_id."""
- resource = 'ipsec_site_connection'
- cmd = ipsec_site_connection.ShowIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_show_ipsec_site_connection_id_name(self):
- # ipsecsite-connection-show."""
- resource = 'ipsec_site_connection'
- cmd = ipsec_site_connection.ShowIPsecSiteConnection(
- test_cli20.MyApp(sys.stdout), None
- )
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
diff --git a/neutronclient/tests/unit/vpn/test_cli20_ipsecpolicy.py b/neutronclient/tests/unit/vpn/test_cli20_ipsecpolicy.py
deleted file mode 100644
index 8c7df4a6f..000000000
--- a/neutronclient/tests/unit/vpn/test_cli20_ipsecpolicy.py
+++ /dev/null
@@ -1,249 +0,0 @@
-# (c) Copyright 2013 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved.
-#
-# 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 sys
-
-from neutronclient.common import exceptions
-from neutronclient.neutron.v2_0.vpn import ipsecpolicy
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20VpnIpsecPolicyJSON(test_cli20.CLITestV20Base):
-
- non_admin_status_resources = ['ipsecpolicy']
-
- def _test_create_ipsecpolicy_all_params(self, auth='sha1',
- expected_exc=None):
- # vpn-ipsecpolicy-create all params with dashes.
- resource = 'ipsecpolicy'
- cmd = ipsecpolicy.CreateIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- name = 'ipsecpolicy1'
- description = 'first-ipsecpolicy1'
- auth_algorithm = auth
- encryption_algorithm = 'aes-256'
- encapsulation_mode = 'tunnel'
- pfs = 'group5'
- transform_protocol = 'ah'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
- lifetime = 'units=seconds,value=20000'
-
- args = [name,
- '--description', description,
- '--tenant-id', tenant_id,
- '--auth-algorithm', auth_algorithm,
- '--encryption-algorithm', encryption_algorithm,
- '--transform-protocol', transform_protocol,
- '--encapsulation-mode', encapsulation_mode,
- '--lifetime', lifetime,
- '--pfs', pfs]
-
- position_names = ['name', 'auth_algorithm', 'encryption_algorithm',
- 'encapsulation_mode', 'description',
- 'transform_protocol', 'pfs',
- 'tenant_id']
-
- position_values = [name, auth_algorithm, encryption_algorithm,
- encapsulation_mode, description,
- transform_protocol, pfs,
- tenant_id]
- extra_body = {
- 'lifetime': {
- 'units': 'seconds',
- 'value': 20000,
- },
- }
-
- if not expected_exc:
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values,
- extra_body=extra_body)
- else:
- self.assertRaises(
- expected_exc,
- self._test_create_resource,
- resource, cmd, name, my_id, args,
- position_names, position_values,
- extra_body=extra_body)
-
- def test_create_ipsecpolicy_all_params(self):
- self._test_create_ipsecpolicy_all_params()
-
- def test_create_ipsecpolicy_auth_sha256(self):
- self._test_create_ipsecpolicy_all_params(auth='sha256')
-
- def test_create_ipsecpolicy_auth_sha384(self):
- self._test_create_ipsecpolicy_all_params(auth='sha384')
-
- def test_create_ipsecpolicy_auth_sha512(self):
- self._test_create_ipsecpolicy_all_params(auth='sha512')
-
- def test_create_ipsecpolicy_invalid_auth(self):
- self._test_create_ipsecpolicy_all_params(auth='invalid',
- expected_exc=SystemExit)
-
- def test_create_ipsecpolicy_with_limited_params(self):
- # vpn-ipsecpolicy-create with limited params.
- resource = 'ipsecpolicy'
- cmd = ipsecpolicy.CreateIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- name = 'ipsecpolicy1'
- auth_algorithm = 'sha1'
- encryption_algorithm = 'aes-128'
- encapsulation_mode = 'tunnel'
- pfs = 'group5'
- transform_protocol = 'esp'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
-
- args = [name,
- '--tenant-id', tenant_id]
-
- position_names = ['name', 'auth_algorithm', 'encryption_algorithm',
- 'encapsulation_mode',
- 'transform_protocol', 'pfs',
- 'tenant_id']
-
- position_values = [name, auth_algorithm, encryption_algorithm,
- encapsulation_mode,
- transform_protocol, pfs,
- tenant_id]
-
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def _test_lifetime_values(self, lifetime, expected_exc=None):
- resource = 'ipsecpolicy'
- cmd = ipsecpolicy.CreateIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- name = 'ipsecpolicy1'
- description = 'my-ipsec-policy'
- auth_algorithm = 'sha1'
- encryption_algorithm = 'aes-256'
- ike_version = 'v1'
- phase1_negotiation_mode = 'main'
- pfs = 'group5'
- tenant_id = 'my-tenant'
- my_id = 'my-id'
-
- args = [name,
- '--description', description,
- '--tenant-id', tenant_id,
- '--auth-algorithm', auth_algorithm,
- '--encryption-algorithm', encryption_algorithm,
- '--ike-version', ike_version,
- '--phase1-negotiation-mode', phase1_negotiation_mode,
- '--lifetime', lifetime,
- '--pfs', pfs]
-
- position_names = ['name', 'description',
- 'auth_algorithm', 'encryption_algorithm',
- 'phase1_negotiation_mode',
- 'ike_version', 'pfs',
- 'tenant_id']
-
- position_values = [name, description,
- auth_algorithm, encryption_algorithm,
- phase1_negotiation_mode, ike_version, pfs,
- tenant_id]
- if not expected_exc:
- expected_exc = exceptions.CommandError
- self.assertRaises(
- expected_exc,
- self._test_create_resource,
- resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_create_ipsecpolicy_with_invalid_lifetime_keys(self):
- lifetime = 'uts=seconds,val=20000'
- self._test_lifetime_values(lifetime, SystemExit)
-
- def test_create_ipsecpolicy_with_invalid_lifetime_units(self):
- lifetime = 'units=minutes,value=600'
- self._test_lifetime_values(lifetime)
-
- def test_create_ipsecpolicy_with_invalid_lifetime_value(self):
- lifetime = 'units=seconds,value=0'
- self._test_lifetime_values(lifetime)
-
- def test_list_ipsecpolicy(self):
- # vpn-ipsecpolicy-list.
- resources = "ipsecpolicies"
- cmd = ipsecpolicy.ListIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_ipsecpolicy_pagination(self):
- # vpn-ipsecpolicy-list.
- resources = "ipsecpolicies"
- cmd = ipsecpolicy.ListIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_ipsecpolicy_sort(self):
- # vpn-ipsecpolicy-list --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = "ipsecpolicies"
- cmd = ipsecpolicy.ListIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_ipsecpolicy_limit(self):
- # vpn-ipsecpolicy-list -P.
- resources = "ipsecpolicies"
- cmd = ipsecpolicy.ListIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_ipsecpolicy_id(self):
- # vpn-ipsecpolicy-show ipsecpolicy_id.
- resource = 'ipsecpolicy'
- cmd = ipsecpolicy.ShowIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_show_ipsecpolicy_id_name(self):
- # vpn-ipsecpolicy-show.
- resource = 'ipsecpolicy'
- cmd = ipsecpolicy.ShowIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_update_ipsecpolicy_name(self):
- # vpn-ipsecpolicy-update myid --name newname --tags a b.
- resource = 'ipsecpolicy'
- cmd = ipsecpolicy.UpdateIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'newname'],
- {'name': 'newname', })
-
- def test_update_ipsecpolicy_other_params(self):
- # vpn-ipsecpolicy-update myid --transform-protocol esp
- # --pfs group14 --encapsulation-mode transport
- resource = 'ipsecpolicy'
- cmd = ipsecpolicy.UpdateIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--transform-protocol', 'esp',
- '--pfs', 'group14',
- '--encapsulation-mode', 'transport'],
- {'transform_protocol': 'esp',
- 'pfs': 'group14',
- 'encapsulation_mode': 'transport', })
-
- def test_delete_ipsecpolicy(self):
- # vpn-ipsecpolicy-delete my-id.
- resource = 'ipsecpolicy'
- cmd = ipsecpolicy.DeleteIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
diff --git a/neutronclient/tests/unit/vpn/test_cli20_vpnservice.py b/neutronclient/tests/unit/vpn/test_cli20_vpnservice.py
deleted file mode 100644
index 3c4def84d..000000000
--- a/neutronclient/tests/unit/vpn/test_cli20_vpnservice.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# (c) Copyright 2013 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved.
-#
-# 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 sys
-
-from neutronclient.neutron.v2_0.vpn import vpnservice
-from neutronclient.tests.unit import test_cli20
-
-
-class CLITestV20VpnServiceJSON(test_cli20.CLITestV20Base):
-
- def test_create_vpnservice_all_params(self):
- # vpn-service-create all params.
- resource = 'vpnservice'
- cmd = vpnservice.CreateVPNService(test_cli20.MyApp(sys.stdout), None)
- subnet = 'mysubnet-id'
- router = 'myrouter-id'
- tenant_id = 'mytenant-id'
- my_id = 'my-id'
- name = 'myvpnservice'
- description = 'my-vpn-service'
- admin_state = True
-
- args = ['--name', name,
- '--description', description,
- router,
- subnet,
- '--tenant-id', tenant_id]
-
- position_names = ['admin_state_up', 'name', 'description',
- 'subnet_id', 'router_id',
- 'tenant_id']
-
- position_values = [admin_state, name, description,
- subnet, router, tenant_id]
-
- self._test_create_resource(resource, cmd, name, my_id, args,
- position_names, position_values)
-
- def test_create_vpnservice_with_limited_params(self):
- # vpn-service-create with limited params.
- resource = 'vpnservice'
- cmd = vpnservice.CreateVPNService(test_cli20.MyApp(sys.stdout), None)
- subnet = 'mysubnet-id'
- router = 'myrouter-id'
- tenant_id = 'mytenant-id'
- my_id = 'my-id'
- admin_state = True
-
- args = [router,
- subnet,
- '--tenant-id', tenant_id]
-
- position_names = ['admin_state_up',
- 'subnet_id', 'router_id',
- 'tenant_id']
-
- position_values = [admin_state, subnet, router, tenant_id]
-
- self._test_create_resource(resource, cmd, None, my_id, args,
- position_names, position_values)
-
- def test_create_vpnservice_without_subnet(self):
- # vpn-service-create with no subnet provided.
- resource = 'vpnservice'
- cmd = vpnservice.CreateVPNService(test_cli20.MyApp(sys.stdout), None)
- router = 'myrouter-id'
- tenant_id = 'mytenant-id'
- my_id = 'my-id'
- admin_state = True
-
- args = [router,
- '--tenant-id', tenant_id]
-
- position_names = ['admin_state_up',
- 'subnet_id', 'router_id',
- 'tenant_id']
-
- position_values = [admin_state, None, router, tenant_id]
-
- self._test_create_resource(resource, cmd, None, my_id, args,
- position_names, position_values)
-
- def test_list_vpnservice(self):
- # vpn-service-list.
- resources = "vpnservices"
- cmd = vpnservice.ListVPNService(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, True)
-
- def test_list_vpnservice_pagination(self):
- # vpn-service-list.
- resources = "vpnservices"
- cmd = vpnservice.ListVPNService(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources_with_pagination(resources, cmd)
-
- def test_list_vpnservice_sort(self):
- # vpn-service-list --sort-key name --sort-key id --sort-key asc
- # --sort-key desc
- resources = "vpnservices"
- cmd = vpnservice.ListVPNService(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd,
- sort_key=["name", "id"],
- sort_dir=["asc", "desc"])
-
- def test_list_vpnservice_limit(self):
- # vpn-service-list -P.
- resources = "vpnservices"
- cmd = vpnservice.ListVPNService(test_cli20.MyApp(sys.stdout), None)
- self._test_list_resources(resources, cmd, page_size=1000)
-
- def test_show_vpnservice_id(self):
- # vpn-service-show test_id.
- resource = 'vpnservice'
- cmd = vpnservice.ShowVPNService(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
-
- def test_show_vpnservice_id_name(self):
- # vpn-service-show."""
- resource = 'vpnservice'
- cmd = vpnservice.ShowVPNService(test_cli20.MyApp(sys.stdout), None)
- args = ['--fields', 'id', '--fields', 'name', self.test_id]
- self._test_show_resource(resource, cmd, self.test_id,
- args, ['id', 'name'])
-
- def test_update_vpnservice(self):
- # vpn-service-update myid --name newname --tags a b.
- resource = 'vpnservice'
- cmd = vpnservice.UpdateVPNService(test_cli20.MyApp(sys.stdout), None)
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--name', 'newname'],
- {'name': 'newname', })
- # vpn-service-update myid --admin-state-up False
- self._test_update_resource(resource, cmd, 'myid',
- ['myid', '--admin-state-up', 'False'],
- {'admin_state_up': 'False', })
-
- def test_delete_vpnservice(self):
- # vpn-service-delete my-id.
- resource = 'vpnservice'
- cmd = vpnservice.DeleteVPNService(test_cli20.MyApp(sys.stdout), None)
- my_id = 'my-id'
- args = [my_id]
- self._test_delete_resource(resource, cmd, my_id, args)
diff --git a/neutronclient/tests/unit/vpn/test_utils.py b/neutronclient/tests/unit/vpn/test_utils.py
deleted file mode 100644
index c39f7ceb5..000000000
--- a/neutronclient/tests/unit/vpn/test_utils.py
+++ /dev/null
@@ -1,130 +0,0 @@
-# (c) Copyright 2013 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved.
-#
-# 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 testtools
-
-from neutronclient.common import exceptions
-from neutronclient.common import utils
-from neutronclient.neutron.v2_0.vpn import utils as vpn_utils
-
-
-class TestVPNUtils(testtools.TestCase):
-
- def test_validate_lifetime_dictionary_seconds(self):
- input_str = utils.str2dict("units=seconds,value=3600")
- self.assertIsNone(vpn_utils.validate_lifetime_dict(input_str))
-
- def test_validate_dpd_dictionary_action_hold(self):
- input_str = utils.str2dict("action=hold,interval=30,timeout=120")
- self.assertIsNone(vpn_utils.validate_dpd_dict(input_str))
-
- def test_validate_dpd_dictionary_action_restart(self):
- input_str = utils.str2dict("action=restart,interval=30,timeout=120")
- self.assertIsNone(vpn_utils.validate_dpd_dict(input_str))
-
- def test_validate_dpd_dictionary_action_restart_by_peer(self):
- input_str = utils.str2dict(
- "action=restart-by-peer,interval=30,timeout=120"
- )
- self.assertIsNone(vpn_utils.validate_dpd_dict(input_str))
-
- def test_validate_dpd_dictionary_action_clear(self):
- input_str = utils.str2dict('action=clear,interval=30,timeout=120')
- self.assertIsNone(vpn_utils.validate_dpd_dict(input_str))
-
- def test_validate_dpd_dictionary_action_disabled(self):
- input_str = utils.str2dict('action=disabled,interval=30,timeout=120')
- self.assertIsNone(vpn_utils.validate_dpd_dict(input_str))
-
- def test_validate_lifetime_dictionary_invalid_unit_key(self):
- input_str = utils.str2dict('ut=seconds,value=3600')
- self._test_validate_lifetime_negative_test_case(input_str)
-
- def test_validate_lifetime_dictionary_invalid_unit_key_value(self):
- input_str = utils.str2dict('units=seconds,val=3600')
- self._test_validate_lifetime_negative_test_case(input_str)
-
- def test_validate_lifetime_dictionary_unsupported_units(self):
- input_str = utils.str2dict('units=minutes,value=3600')
- self._test_validate_lifetime_negative_test_case(input_str)
-
- def test_validate_lifetime_dictionary_invalid_empty_unit(self):
- input_str = utils.str2dict('units=,value=3600')
- self._test_validate_lifetime_negative_test_case(input_str)
-
- def test_validate_lifetime_dictionary_under_minimum_integer_value(self):
- input_str = utils.str2dict('units=seconds,value=59')
- self._test_validate_lifetime_negative_test_case(input_str)
-
- def test_validate_lifetime_dictionary_negative_integer_value(self):
- input_str = utils.str2dict('units=seconds,value=-1')
- self._test_validate_lifetime_negative_test_case(input_str)
-
- def test_validate_lifetime_dictionary_empty_value(self):
- input_str = utils.str2dict('units=seconds,value=')
- self._test_validate_lifetime_negative_test_case(input_str)
-
- def test_validate_dpd_dictionary_invalid_key_action(self):
- input_str = utils.str2dict('act=hold,interval=30,timeout=120')
- self._test_validate_dpd_negative_test_case(input_str)
-
- def test_validate_dpd_dictionary_invalid_key_interval(self):
- input_str = utils.str2dict('action=hold,int=30,timeout=120')
- self._test_validate_dpd_negative_test_case(input_str)
-
- def test_validate_dpd_dictionary_invalid_key_timeout(self):
- input_str = utils.str2dict('action=hold,interval=30,tiut=120')
- self._test_validate_dpd_negative_test_case(input_str)
-
- def test_validate_dpd_dictionary_unsupported_action(self):
- input_str = utils.str2dict('action=bye-bye,interval=30,timeout=120')
- self._test_validate_dpd_negative_test_case(input_str)
-
- def test_validate_dpd_dictionary_empty_action(self):
- input_str = utils.str2dict('action=,interval=30,timeout=120')
- self._test_validate_dpd_negative_test_case(input_str)
-
- def test_validate_dpd_dictionary_empty_interval(self):
- input_str = utils.str2dict('action=hold,interval=,timeout=120')
- self._test_validate_dpd_negative_test_case(input_str)
-
- def test_validate_dpd_dictionary_negative_interval_value(self):
- input_str = utils.str2dict('action=hold,interval=-1,timeout=120')
- self._test_validate_lifetime_negative_test_case(input_str)
-
- def test_validate_dpd_dictionary_zero_timeout(self):
- input_str = utils.str2dict('action=hold,interval=30,timeout=0')
- self._test_validate_dpd_negative_test_case(input_str)
-
- def test_validate_dpd_dictionary_empty_timeout(self):
- input_str = utils.str2dict('action=hold,interval=30,timeout=')
- self._test_validate_dpd_negative_test_case(input_str)
-
- def test_validate_dpd_dictionary_negative_timeout_value(self):
- input_str = utils.str2dict('action=hold,interval=30,timeout=-1')
- self._test_validate_lifetime_negative_test_case(input_str)
-
- def _test_validate_lifetime_negative_test_case(self, input_str):
- """Generic handler for negative lifetime tests."""
- self.assertRaises(exceptions.CommandError,
- vpn_utils.validate_lifetime_dict,
- (input_str))
-
- def _test_validate_dpd_negative_test_case(self, input_str):
- """Generic handler for negative lifetime tests."""
- self.assertRaises(exceptions.CommandError,
- vpn_utils.validate_lifetime_dict,
- (input_str))
diff --git a/releasenotes/notes/remove-cli-code-53969e9aa927e530.yaml b/releasenotes/notes/remove-cli-code-53969e9aa927e530.yaml
new file mode 100644
index 000000000..92ab5423c
--- /dev/null
+++ b/releasenotes/notes/remove-cli-code-53969e9aa927e530.yaml
@@ -0,0 +1,12 @@
+prelude: >
+ |
+ This new version of ``python-neutronclient`` does not include the
+ command line interface code. The "neutron" script is no longer
+ supported. This project only contains the OpenStack Client bindings
+ that are currently being moved to OpenStack SDK
+ _.
+deprecations:
+ - |
+ This project no longer provides CLI support. All code has been removed.
+ Please use openstack CLI instead. See `openstack CLI command list
+ `_.
diff --git a/setup.cfg b/setup.cfg
index 432ec682f..3bab0a176 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -26,9 +26,6 @@ packages =
neutronclient
[entry_points]
-console_scripts =
- neutron = neutronclient.shell:main
-
openstack.cli.extension =
neutronclient = neutronclient.osc.plugin
@@ -163,287 +160,3 @@ openstack.neutronclient.v2 =
vpn_ipsec_site_connection_show = neutronclient.osc.v2.vpnaas.ipsec_site_connection:ShowIPsecSiteConnection
network_onboard_subnets = neutronclient.osc.v2.subnet_onboard.subnet_onboard:NetworkOnboardSubnets
-
-neutron.cli.v2 =
- bash-completion = neutronclient.shell:BashCompletionCommand
-
- net-list = neutronclient.neutron.v2_0.network:ListNetwork
- net-external-list = neutronclient.neutron.v2_0.network:ListExternalNetwork
- net-show = neutronclient.neutron.v2_0.network:ShowNetwork
- net-create = neutronclient.neutron.v2_0.network:CreateNetwork
- net-delete = neutronclient.neutron.v2_0.network:DeleteNetwork
- net-update = neutronclient.neutron.v2_0.network:UpdateNetwork
-
- subnet-list = neutronclient.neutron.v2_0.subnet:ListSubnet
- subnet-show = neutronclient.neutron.v2_0.subnet:ShowSubnet
- subnet-create = neutronclient.neutron.v2_0.subnet:CreateSubnet
- subnet-delete = neutronclient.neutron.v2_0.subnet:DeleteSubnet
- subnet-update = neutronclient.neutron.v2_0.subnet:UpdateSubnet
-
- subnetpool-list = neutronclient.neutron.v2_0.subnetpool:ListSubnetPool
- subnetpool-show = neutronclient.neutron.v2_0.subnetpool:ShowSubnetPool
- subnetpool-create = neutronclient.neutron.v2_0.subnetpool:CreateSubnetPool
- subnetpool-delete = neutronclient.neutron.v2_0.subnetpool:DeleteSubnetPool
- subnetpool-update = neutronclient.neutron.v2_0.subnetpool:UpdateSubnetPool
-
- port-list = neutronclient.neutron.v2_0.port:ListPort
- port-show = neutronclient.neutron.v2_0.port:ShowPort
- port-create = neutronclient.neutron.v2_0.port:CreatePort
- port-delete = neutronclient.neutron.v2_0.port:DeletePort
- port-update = neutronclient.neutron.v2_0.port:UpdatePort
-
- purge = neutronclient.neutron.v2_0.purge:Purge
-
- quota-list = neutronclient.neutron.v2_0.quota:ListQuota
- quota-show = neutronclient.neutron.v2_0.quota:ShowQuota
- quota-default-show = neutronclient.neutron.v2_0.quota:ShowQuotaDefault
- quota-delete = neutronclient.neutron.v2_0.quota:DeleteQuota
- quota-update = neutronclient.neutron.v2_0.quota:UpdateQuota
-
- ext-list = neutronclient.neutron.v2_0.extension:ListExt
- ext-show = neutronclient.neutron.v2_0.extension:ShowExt
-
- router-list = neutronclient.neutron.v2_0.router:ListRouter
- router-port-list = neutronclient.neutron.v2_0.port:ListRouterPort
- router-show = neutronclient.neutron.v2_0.router:ShowRouter
- router-create = neutronclient.neutron.v2_0.router:CreateRouter
- router-delete = neutronclient.neutron.v2_0.router:DeleteRouter
- router-update = neutronclient.neutron.v2_0.router:UpdateRouter
- router-interface-add = neutronclient.neutron.v2_0.router:AddInterfaceRouter
- router-interface-delete = neutronclient.neutron.v2_0.router:RemoveInterfaceRouter
- router-gateway-set = neutronclient.neutron.v2_0.router:SetGatewayRouter
- router-gateway-clear = neutronclient.neutron.v2_0.router:RemoveGatewayRouter
-
- floatingip-list = neutronclient.neutron.v2_0.floatingip:ListFloatingIP
- floatingip-show = neutronclient.neutron.v2_0.floatingip:ShowFloatingIP
- floatingip-create = neutronclient.neutron.v2_0.floatingip:CreateFloatingIP
- floatingip-delete = neutronclient.neutron.v2_0.floatingip:DeleteFloatingIP
- floatingip-associate = neutronclient.neutron.v2_0.floatingip:AssociateFloatingIP
- floatingip-disassociate = neutronclient.neutron.v2_0.floatingip:DisassociateFloatingIP
-
- security-group-list = neutronclient.neutron.v2_0.securitygroup:ListSecurityGroup
- security-group-show = neutronclient.neutron.v2_0.securitygroup:ShowSecurityGroup
- security-group-create = neutronclient.neutron.v2_0.securitygroup:CreateSecurityGroup
- security-group-delete = neutronclient.neutron.v2_0.securitygroup:DeleteSecurityGroup
- security-group-update = neutronclient.neutron.v2_0.securitygroup:UpdateSecurityGroup
- security-group-rule-list = neutronclient.neutron.v2_0.securitygroup:ListSecurityGroupRule
- security-group-rule-show = neutronclient.neutron.v2_0.securitygroup:ShowSecurityGroupRule
- security-group-rule-create = neutronclient.neutron.v2_0.securitygroup:CreateSecurityGroupRule
- security-group-rule-delete = neutronclient.neutron.v2_0.securitygroup:DeleteSecurityGroupRule
-
- agent-list = neutronclient.neutron.v2_0.agent:ListAgent
- agent-show = neutronclient.neutron.v2_0.agent:ShowAgent
- agent-delete = neutronclient.neutron.v2_0.agent:DeleteAgent
- agent-update = neutronclient.neutron.v2_0.agent:UpdateAgent
-
- dhcp-agent-network-add = neutronclient.neutron.v2_0.agentscheduler:AddNetworkToDhcpAgent
- dhcp-agent-network-remove = neutronclient.neutron.v2_0.agentscheduler:RemoveNetworkFromDhcpAgent
- net-list-on-dhcp-agent = neutronclient.neutron.v2_0.agentscheduler:ListNetworksOnDhcpAgent
- dhcp-agent-list-hosting-net = neutronclient.neutron.v2_0.agentscheduler:ListDhcpAgentsHostingNetwork
-
- l3-agent-router-add = neutronclient.neutron.v2_0.agentscheduler:AddRouterToL3Agent
- l3-agent-router-remove = neutronclient.neutron.v2_0.agentscheduler:RemoveRouterFromL3Agent
- router-list-on-l3-agent = neutronclient.neutron.v2_0.agentscheduler:ListRoutersOnL3Agent
- l3-agent-list-hosting-router = neutronclient.neutron.v2_0.agentscheduler:ListL3AgentsHostingRouter
-
- lb-pool-list-on-agent = neutronclient.neutron.v2_0.agentscheduler:ListPoolsOnLbaasAgent
- lb-agent-hosting-pool = neutronclient.neutron.v2_0.agentscheduler:GetLbaasAgentHostingPool
-
- lbaas-loadbalancer-list-on-agent = neutronclient.neutron.v2_0.agentscheduler:ListLoadBalancersOnLbaasAgent
- lbaas-agent-hosting-loadbalancer = neutronclient.neutron.v2_0.agentscheduler:GetLbaasAgentHostingLoadBalancer
-
- service-provider-list = neutronclient.neutron.v2_0.servicetype:ListServiceProvider
-
- rbac-create = neutronclient.neutron.v2_0.rbac:CreateRBACPolicy
- rbac-update = neutronclient.neutron.v2_0.rbac:UpdateRBACPolicy
- rbac-list = neutronclient.neutron.v2_0.rbac:ListRBACPolicy
- rbac-show = neutronclient.neutron.v2_0.rbac:ShowRBACPolicy
- rbac-delete = neutronclient.neutron.v2_0.rbac:DeleteRBACPolicy
-
- address-scope-list = neutronclient.neutron.v2_0.address_scope:ListAddressScope
- address-scope-show = neutronclient.neutron.v2_0.address_scope:ShowAddressScope
- address-scope-create = neutronclient.neutron.v2_0.address_scope:CreateAddressScope
- address-scope-delete = neutronclient.neutron.v2_0.address_scope:DeleteAddressScope
- address-scope-update = neutronclient.neutron.v2_0.address_scope:UpdateAddressScope
-
- availability-zone-list = neutronclient.neutron.v2_0.availability_zone:ListAvailabilityZone
-
- auto-allocated-topology-show = neutronclient.neutron.v2_0.auto_allocated_topology:ShowAutoAllocatedTopology
- auto-allocated-topology-delete = neutronclient.neutron.v2_0.auto_allocated_topology:DeleteAutoAllocatedTopology
-
- net-ip-availability-list = neutronclient.neutron.v2_0.network_ip_availability:ListIpAvailability
- net-ip-availability-show = neutronclient.neutron.v2_0.network_ip_availability:ShowIpAvailability
-
- tag-add = neutronclient.neutron.v2_0.tag:AddTag
- tag-replace = neutronclient.neutron.v2_0.tag:ReplaceTag
- tag-remove = neutronclient.neutron.v2_0.tag:RemoveTag
-
- qos-policy-list = neutronclient.neutron.v2_0.qos.policy:ListQoSPolicy
- qos-policy-show = neutronclient.neutron.v2_0.qos.policy:ShowQoSPolicy
- qos-policy-create = neutronclient.neutron.v2_0.qos.policy:CreateQoSPolicy
- qos-policy-update = neutronclient.neutron.v2_0.qos.policy:UpdateQoSPolicy
- qos-policy-delete = neutronclient.neutron.v2_0.qos.policy:DeleteQoSPolicy
- qos-bandwidth-limit-rule-create = neutronclient.neutron.v2_0.qos.bandwidth_limit_rule:CreateQoSBandwidthLimitRule
- qos-bandwidth-limit-rule-show = neutronclient.neutron.v2_0.qos.bandwidth_limit_rule:ShowQoSBandwidthLimitRule
- qos-bandwidth-limit-rule-list = neutronclient.neutron.v2_0.qos.bandwidth_limit_rule:ListQoSBandwidthLimitRules
- qos-bandwidth-limit-rule-update = neutronclient.neutron.v2_0.qos.bandwidth_limit_rule:UpdateQoSBandwidthLimitRule
- qos-bandwidth-limit-rule-delete = neutronclient.neutron.v2_0.qos.bandwidth_limit_rule:DeleteQoSBandwidthLimitRule
- qos-dscp-marking-rule-create = neutronclient.neutron.v2_0.qos.dscp_marking_rule:CreateQoSDscpMarkingRule
- qos-dscp-marking-rule-show = neutronclient.neutron.v2_0.qos.dscp_marking_rule:ShowQoSDscpMarkingRule
- qos-dscp-marking-rule-list = neutronclient.neutron.v2_0.qos.dscp_marking_rule:ListQoSDscpMarkingRules
- qos-dscp-marking-rule-update = neutronclient.neutron.v2_0.qos.dscp_marking_rule:UpdateQoSDscpMarkingRule
- qos-dscp-marking-rule-delete = neutronclient.neutron.v2_0.qos.dscp_marking_rule:DeleteQoSDscpMarkingRule
- qos-minimum-bandwidth-rule-create = neutronclient.neutron.v2_0.qos.minimum_bandwidth_rule:CreateQoSMinimumBandwidthRule
- qos-minimum-bandwidth-rule-show = neutronclient.neutron.v2_0.qos.minimum_bandwidth_rule:ShowQoSMinimumBandwidthRule
- qos-minimum-bandwidth-rule-list = neutronclient.neutron.v2_0.qos.minimum_bandwidth_rule:ListQoSMinimumBandwidthRules
- qos-minimum-bandwidth-rule-update = neutronclient.neutron.v2_0.qos.minimum_bandwidth_rule:UpdateQoSMinimumBandwidthRule
- qos-minimum-bandwidth-rule-delete = neutronclient.neutron.v2_0.qos.minimum_bandwidth_rule:DeleteQoSMinimumBandwidthRule
- qos-available-rule-types = neutronclient.neutron.v2_0.qos.rule:ListQoSRuleTypes
-
- flavor-list = neutronclient.neutron.v2_0.flavor.flavor:ListFlavor
- flavor-show = neutronclient.neutron.v2_0.flavor.flavor:ShowFlavor
- flavor-create = neutronclient.neutron.v2_0.flavor.flavor:CreateFlavor
- flavor-delete = neutronclient.neutron.v2_0.flavor.flavor:DeleteFlavor
- flavor-update = neutronclient.neutron.v2_0.flavor.flavor:UpdateFlavor
- flavor-associate = neutronclient.neutron.v2_0.flavor.flavor:AssociateFlavor
- flavor-disassociate = neutronclient.neutron.v2_0.flavor.flavor:DisassociateFlavor
- flavor-profile-list = neutronclient.neutron.v2_0.flavor.flavor_profile:ListFlavorProfile
- flavor-profile-show = neutronclient.neutron.v2_0.flavor.flavor_profile:ShowFlavorProfile
- flavor-profile-create = neutronclient.neutron.v2_0.flavor.flavor_profile:CreateFlavorProfile
- flavor-profile-delete = neutronclient.neutron.v2_0.flavor.flavor_profile:DeleteFlavorProfile
- flavor-profile-update = neutronclient.neutron.v2_0.flavor.flavor_profile:UpdateFlavorProfile
-
- meter-label-create = neutronclient.neutron.v2_0.metering:CreateMeteringLabel
- meter-label-list = neutronclient.neutron.v2_0.metering:ListMeteringLabel
- meter-label-show = neutronclient.neutron.v2_0.metering:ShowMeteringLabel
- meter-label-delete = neutronclient.neutron.v2_0.metering:DeleteMeteringLabel
- meter-label-rule-create = neutronclient.neutron.v2_0.metering:CreateMeteringLabelRule
- meter-label-rule-list = neutronclient.neutron.v2_0.metering:ListMeteringLabelRule
- meter-label-rule-show = neutronclient.neutron.v2_0.metering:ShowMeteringLabelRule
- meter-label-rule-delete = neutronclient.neutron.v2_0.metering:DeleteMeteringLabelRule
-
- firewall-rule-list = neutronclient.neutron.v2_0.fw.firewallrule:ListFirewallRule
- firewall-rule-show = neutronclient.neutron.v2_0.fw.firewallrule:ShowFirewallRule
- firewall-rule-create = neutronclient.neutron.v2_0.fw.firewallrule:CreateFirewallRule
- firewall-rule-update = neutronclient.neutron.v2_0.fw.firewallrule:UpdateFirewallRule
- firewall-rule-delete = neutronclient.neutron.v2_0.fw.firewallrule:DeleteFirewallRule
- firewall-policy-list = neutronclient.neutron.v2_0.fw.firewallpolicy:ListFirewallPolicy
- firewall-policy-show = neutronclient.neutron.v2_0.fw.firewallpolicy:ShowFirewallPolicy
- firewall-policy-create = neutronclient.neutron.v2_0.fw.firewallpolicy:CreateFirewallPolicy
- firewall-policy-update = neutronclient.neutron.v2_0.fw.firewallpolicy:UpdateFirewallPolicy
- firewall-policy-delete = neutronclient.neutron.v2_0.fw.firewallpolicy:DeleteFirewallPolicy
- firewall-policy-insert-rule = neutronclient.neutron.v2_0.fw.firewallpolicy:FirewallPolicyInsertRule
- firewall-policy-remove-rule = neutronclient.neutron.v2_0.fw.firewallpolicy:FirewallPolicyRemoveRule
- firewall-list = neutronclient.neutron.v2_0.fw.firewall:ListFirewall
- firewall-show = neutronclient.neutron.v2_0.fw.firewall:ShowFirewall
- firewall-create = neutronclient.neutron.v2_0.fw.firewall:CreateFirewall
- firewall-update = neutronclient.neutron.v2_0.fw.firewall:UpdateFirewall
- firewall-delete = neutronclient.neutron.v2_0.fw.firewall:DeleteFirewall
-
- bgp-dragent-speaker-add = neutronclient.neutron.v2_0.bgp.dragentscheduler:AddBGPSpeakerToDRAgent
- bgp-dragent-speaker-remove = neutronclient.neutron.v2_0.bgp.dragentscheduler:RemoveBGPSpeakerFromDRAgent
- bgp-speaker-list-on-dragent = neutronclient.neutron.v2_0.bgp.dragentscheduler:ListBGPSpeakersOnDRAgent
- bgp-dragent-list-hosting-speaker = neutronclient.neutron.v2_0.bgp.dragentscheduler:ListDRAgentsHostingBGPSpeaker
- bgp-speaker-list = neutronclient.neutron.v2_0.bgp.speaker:ListSpeakers
- bgp-speaker-advertiseroute-list = neutronclient.neutron.v2_0.bgp.speaker:ListRoutesAdvertisedBySpeaker
- bgp-speaker-show = neutronclient.neutron.v2_0.bgp.speaker:ShowSpeaker
- bgp-speaker-create = neutronclient.neutron.v2_0.bgp.speaker:CreateSpeaker
- bgp-speaker-update = neutronclient.neutron.v2_0.bgp.speaker:UpdateSpeaker
- bgp-speaker-delete = neutronclient.neutron.v2_0.bgp.speaker:DeleteSpeaker
- bgp-speaker-peer-add = neutronclient.neutron.v2_0.bgp.speaker:AddPeerToSpeaker
- bgp-speaker-peer-remove = neutronclient.neutron.v2_0.bgp.speaker:RemovePeerFromSpeaker
- bgp-speaker-network-add = neutronclient.neutron.v2_0.bgp.speaker:AddNetworkToSpeaker
- bgp-speaker-network-remove = neutronclient.neutron.v2_0.bgp.speaker:RemoveNetworkFromSpeaker
- bgp-peer-list = neutronclient.neutron.v2_0.bgp.peer:ListPeers
- bgp-peer-show = neutronclient.neutron.v2_0.bgp.peer:ShowPeer
- bgp-peer-create = neutronclient.neutron.v2_0.bgp.peer:CreatePeer
- bgp-peer-update = neutronclient.neutron.v2_0.bgp.peer:UpdatePeer
- bgp-peer-delete = neutronclient.neutron.v2_0.bgp.peer:DeletePeer
-
- lbaas-loadbalancer-list = neutronclient.neutron.v2_0.lb.v2.loadbalancer:ListLoadBalancer
- lbaas-loadbalancer-show = neutronclient.neutron.v2_0.lb.v2.loadbalancer:ShowLoadBalancer
- lbaas-loadbalancer-create = neutronclient.neutron.v2_0.lb.v2.loadbalancer:CreateLoadBalancer
- lbaas-loadbalancer-update = neutronclient.neutron.v2_0.lb.v2.loadbalancer:UpdateLoadBalancer
- lbaas-loadbalancer-delete = neutronclient.neutron.v2_0.lb.v2.loadbalancer:DeleteLoadBalancer
- lbaas-loadbalancer-stats = neutronclient.neutron.v2_0.lb.v2.loadbalancer:RetrieveLoadBalancerStats
- lbaas-loadbalancer-status = neutronclient.neutron.v2_0.lb.v2.loadbalancer:RetrieveLoadBalancerStatus
- lbaas-listener-list = neutronclient.neutron.v2_0.lb.v2.listener:ListListener
- lbaas-listener-show = neutronclient.neutron.v2_0.lb.v2.listener:ShowListener
- lbaas-listener-create = neutronclient.neutron.v2_0.lb.v2.listener:CreateListener
- lbaas-listener-update = neutronclient.neutron.v2_0.lb.v2.listener:UpdateListener
- lbaas-listener-delete = neutronclient.neutron.v2_0.lb.v2.listener:DeleteListener
- lbaas-l7policy-list = neutronclient.neutron.v2_0.lb.v2.l7policy:ListL7Policy
- lbaas-l7policy-show = neutronclient.neutron.v2_0.lb.v2.l7policy:ShowL7Policy
- lbaas-l7policy-create = neutronclient.neutron.v2_0.lb.v2.l7policy:CreateL7Policy
- lbaas-l7policy-update = neutronclient.neutron.v2_0.lb.v2.l7policy:UpdateL7Policy
- lbaas-l7policy-delete = neutronclient.neutron.v2_0.lb.v2.l7policy:DeleteL7Policy
- lbaas-l7rule-list = neutronclient.neutron.v2_0.lb.v2.l7rule:ListL7Rule
- lbaas-l7rule-show = neutronclient.neutron.v2_0.lb.v2.l7rule:ShowL7Rule
- lbaas-l7rule-create = neutronclient.neutron.v2_0.lb.v2.l7rule:CreateL7Rule
- lbaas-l7rule-update = neutronclient.neutron.v2_0.lb.v2.l7rule:UpdateL7Rule
- lbaas-l7rule-delete = neutronclient.neutron.v2_0.lb.v2.l7rule:DeleteL7Rule
- lbaas-pool-list = neutronclient.neutron.v2_0.lb.v2.pool:ListPool
- lbaas-pool-show = neutronclient.neutron.v2_0.lb.v2.pool:ShowPool
- lbaas-pool-create = neutronclient.neutron.v2_0.lb.v2.pool:CreatePool
- lbaas-pool-update = neutronclient.neutron.v2_0.lb.v2.pool:UpdatePool
- lbaas-pool-delete = neutronclient.neutron.v2_0.lb.v2.pool:DeletePool
- lbaas-healthmonitor-list = neutronclient.neutron.v2_0.lb.v2.healthmonitor:ListHealthMonitor
- lbaas-healthmonitor-show = neutronclient.neutron.v2_0.lb.v2.healthmonitor:ShowHealthMonitor
- lbaas-healthmonitor-create = neutronclient.neutron.v2_0.lb.v2.healthmonitor:CreateHealthMonitor
- lbaas-healthmonitor-update = neutronclient.neutron.v2_0.lb.v2.healthmonitor:UpdateHealthMonitor
- lbaas-healthmonitor-delete = neutronclient.neutron.v2_0.lb.v2.healthmonitor:DeleteHealthMonitor
- lbaas-member-list = neutronclient.neutron.v2_0.lb.v2.member:ListMember
- lbaas-member-show = neutronclient.neutron.v2_0.lb.v2.member:ShowMember
- lbaas-member-create = neutronclient.neutron.v2_0.lb.v2.member:CreateMember
- lbaas-member-update = neutronclient.neutron.v2_0.lb.v2.member:UpdateMember
- lbaas-member-delete = neutronclient.neutron.v2_0.lb.v2.member:DeleteMember
-
- lb-vip-list = neutronclient.neutron.v2_0.lb.vip:ListVip
- lb-vip-show = neutronclient.neutron.v2_0.lb.vip:ShowVip
- lb-vip-create = neutronclient.neutron.v2_0.lb.vip:CreateVip
- lb-vip-update = neutronclient.neutron.v2_0.lb.vip:UpdateVip
- lb-vip-delete = neutronclient.neutron.v2_0.lb.vip:DeleteVip
- lb-pool-list = neutronclient.neutron.v2_0.lb.pool:ListPool
- lb-pool-show = neutronclient.neutron.v2_0.lb.pool:ShowPool
- lb-pool-create = neutronclient.neutron.v2_0.lb.pool:CreatePool
- lb-pool-update = neutronclient.neutron.v2_0.lb.pool:UpdatePool
- lb-pool-delete = neutronclient.neutron.v2_0.lb.pool:DeletePool
- lb-pool-stats = neutronclient.neutron.v2_0.lb.pool:RetrievePoolStats
- lb-member-list = neutronclient.neutron.v2_0.lb.member:ListMember
- lb-member-show = neutronclient.neutron.v2_0.lb.member:ShowMember
- lb-member-create = neutronclient.neutron.v2_0.lb.member:CreateMember
- lb-member-update = neutronclient.neutron.v2_0.lb.member:UpdateMember
- lb-member-delete = neutronclient.neutron.v2_0.lb.member:DeleteMember
- lb-healthmonitor-list = neutronclient.neutron.v2_0.lb.healthmonitor:ListHealthMonitor
- lb-healthmonitor-show = neutronclient.neutron.v2_0.lb.healthmonitor:ShowHealthMonitor
- lb-healthmonitor-create = neutronclient.neutron.v2_0.lb.healthmonitor:CreateHealthMonitor
- lb-healthmonitor-update = neutronclient.neutron.v2_0.lb.healthmonitor:UpdateHealthMonitor
- lb-healthmonitor-delete = neutronclient.neutron.v2_0.lb.healthmonitor:DeleteHealthMonitor
- lb-healthmonitor-associate = neutronclient.neutron.v2_0.lb.healthmonitor:AssociateHealthMonitor
- lb-healthmonitor-disassociate = neutronclient.neutron.v2_0.lb.healthmonitor:DisassociateHealthMonitor
-
- ipsec-site-connection-list = neutronclient.neutron.v2_0.vpn.ipsec_site_connection:ListIPsecSiteConnection
- ipsec-site-connection-show = neutronclient.neutron.v2_0.vpn.ipsec_site_connection:ShowIPsecSiteConnection
- ipsec-site-connection-create = neutronclient.neutron.v2_0.vpn.ipsec_site_connection:CreateIPsecSiteConnection
- ipsec-site-connection-update = neutronclient.neutron.v2_0.vpn.ipsec_site_connection:UpdateIPsecSiteConnection
- ipsec-site-connection-delete = neutronclient.neutron.v2_0.vpn.ipsec_site_connection:DeleteIPsecSiteConnection
- vpn-endpoint-group-list = neutronclient.neutron.v2_0.vpn.endpoint_group:ListEndpointGroup
- vpn-endpoint-group-show = neutronclient.neutron.v2_0.vpn.endpoint_group:ShowEndpointGroup
- vpn-endpoint-group-create = neutronclient.neutron.v2_0.vpn.endpoint_group:CreateEndpointGroup
- vpn-endpoint-group-update = neutronclient.neutron.v2_0.vpn.endpoint_group:UpdateEndpointGroup
- vpn-endpoint-group-delete = neutronclient.neutron.v2_0.vpn.endpoint_group:DeleteEndpointGroup
- vpn-service-list = neutronclient.neutron.v2_0.vpn.vpnservice:ListVPNService
- vpn-service-show = neutronclient.neutron.v2_0.vpn.vpnservice:ShowVPNService
- vpn-service-create = neutronclient.neutron.v2_0.vpn.vpnservice:CreateVPNService
- vpn-service-update = neutronclient.neutron.v2_0.vpn.vpnservice:UpdateVPNService
- vpn-service-delete = neutronclient.neutron.v2_0.vpn.vpnservice:DeleteVPNService
- vpn-ipsecpolicy-list = neutronclient.neutron.v2_0.vpn.ipsecpolicy:ListIPsecPolicy
- vpn-ipsecpolicy-show = neutronclient.neutron.v2_0.vpn.ipsecpolicy:ShowIPsecPolicy
- vpn-ipsecpolicy-create = neutronclient.neutron.v2_0.vpn.ipsecpolicy:CreateIPsecPolicy
- vpn-ipsecpolicy-update = neutronclient.neutron.v2_0.vpn.ipsecpolicy:UpdateIPsecPolicy
- vpn-ipsecpolicy-delete = neutronclient.neutron.v2_0.vpn.ipsecpolicy:DeleteIPsecPolicy
- vpn-ikepolicy-list = neutronclient.neutron.v2_0.vpn.ikepolicy:ListIKEPolicy
- vpn-ikepolicy-show = neutronclient.neutron.v2_0.vpn.ikepolicy:ShowIKEPolicy
- vpn-ikepolicy-create = neutronclient.neutron.v2_0.vpn.ikepolicy:CreateIKEPolicy
- vpn-ikepolicy-update = neutronclient.neutron.v2_0.vpn.ikepolicy:UpdateIKEPolicy
- vpn-ikepolicy-delete = neutronclient.neutron.v2_0.vpn.ikepolicy:DeleteIKEPolicy
diff --git a/tools/neutron.bash_completion b/tools/neutron.bash_completion
deleted file mode 100644
index 15ed41776..000000000
--- a/tools/neutron.bash_completion
+++ /dev/null
@@ -1,27 +0,0 @@
-_neutron_opts="" # lazy init
-_neutron_flags="" # lazy init
-_neutron_opts_exp="" # lazy init
-_neutron()
-{
- local cur prev nbc cflags
- COMPREPLY=()
- cur="${COMP_WORDS[COMP_CWORD]}"
- prev="${COMP_WORDS[COMP_CWORD-1]}"
-
- if [ "x$_neutron_opts" == "x" ] ; then
- nbc="`neutron bash-completion`"
- _neutron_opts="`echo "$nbc" | sed -e "s/--[a-z0-9_-]*//g" -e "s/[ ][ ]*/ /g"`"
- _neutron_flags="`echo " $nbc" | sed -e "s/ [^-][^-][a-z0-9_-]*//g" -e "s/[ ][ ]*/ /g"`"
- _neutron_opts_exp="`echo "$_neutron_opts" | sed -e "s/[ ]/|/g"`"
- fi
-
- if [[ " ${COMP_WORDS[@]} " =~ " "($_neutron_opts_exp)" " && "$prev" != "help" ]] ; then
- COMPLETION_CACHE=~/.neutronclient/*/*-cache
- cflags="$_neutron_flags "$(cat $COMPLETION_CACHE 2> /dev/null | tr '\n' ' ')
- COMPREPLY=($(compgen -W "${cflags}" -- ${cur}))
- else
- COMPREPLY=($(compgen -W "${_neutron_opts}" -- ${cur}))
- fi
- return 0
-}
-complete -F _neutron neutron
diff --git a/tox.ini b/tox.ini
index 06f5829f6..afdf530e2 100644
--- a/tox.ini
+++ b/tox.ini
@@ -33,11 +33,6 @@ distribute = false
[testenv:venv]
commands = {posargs}
-[testenv:functional]
-setenv =
- OS_TEST_PATH = ./neutronclient/tests/functional
- OS_NEUTRONCLIENT_EXEC_DIR = {envdir}/bin
-
[testenv:cover]
setenv =
{[testenv]setenv}