Tempest: Renamed folder based on the need.
Change-Id: I804c3fd1e0c9cbeb454677e7951072ad74391fec
This commit is contained in:
parent
710325cee5
commit
90ccb18762
4
.gitreview
Normal file
4
.gitreview
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[gerrit]
|
||||||
|
host=review.openstack.org
|
||||||
|
port=29418
|
||||||
|
project=openstack/vmware-nsx-tempest-plugin.git
|
12
.testr.conf
Normal file
12
.testr.conf
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
|
||||||
|
OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
|
||||||
|
OS_LOG_CAPTURE=${OS_LOG_CAPTURE:-1} \
|
||||||
|
OS_DEBUG=${OS_DEBUG:-1} \
|
||||||
|
OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-500} \
|
||||||
|
OS_TEST_LOCK_PATH=${OS_TEST_LOCK_PATH:-${TMPDIR:-'/tmp'}} \
|
||||||
|
${PYTHON:-python} -m subunit.run discover -t ${OS_TOP_LEVEL:-./} ${OS_TEST_PATH:-./vmware_nsx_tempest} $LISTOPT $IDOPTION
|
||||||
|
|
||||||
|
test_id_option=--load-list $IDFILE
|
||||||
|
test_list_option=--list
|
||||||
|
group_regex=([^\.]*\.)*
|
88
README.rst
88
README.rst
@ -1,19 +1,93 @@
|
|||||||
|
Welcome!
|
||||||
|
========
|
||||||
|
|
||||||
===============================
|
===============================
|
||||||
vmware-nsx-tempest-plugin
|
vmware-nsx-tempest-plugin
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
Tempest plugin vmware-nsx-tempest-plugin
|
Tempest plugin vmware-nsx-tempest-plugin
|
||||||
|
|
||||||
Please fill here a long description which must be at least 3 lines wrapped on
|
|
||||||
80 cols, so that distribution package maintainers can use it in their packages.
|
This repo hosts vmware-nsx's functional api and scenario tests.
|
||||||
Note that this is a hard requirement.
|
|
||||||
|
vmware-nsx is Vmware plugin for neutron. This repo is tempest plugin to
|
||||||
|
test vmware-nsx at function level. All vmware-nsx-tempest-plugin tests
|
||||||
|
are in "master" branch. Some of the tests are designed based on N-S traffic.
|
||||||
|
Intstall thsi repo on external VM to run entire test suite.
|
||||||
|
|
||||||
* Free software: Apache license
|
* Free software: Apache license
|
||||||
* Documentation: http://docs.openstack.org/developer/vmware-nsx-tempest-plugin
|
* Launchpad: https://launchpad.net/vmware-nsx-tempest-plugin
|
||||||
* Source: http://git.openstack.org/cgit/openstack/vmware-nsx-tempest-plugin
|
* Source: http://git.openstack.org/cgit/openstack/vmware-nsx-tempest-plugin
|
||||||
* Bugs: http://bugs.launchpad.net/vmware-nsx-tempest-plugin
|
* Bugs: http://bugs.launchpad.net/vmware-nsx-tempest-plugin
|
||||||
|
|
||||||
Features
|
Features:
|
||||||
--------
|
=========
|
||||||
|
|
||||||
* TODO
|
* API tests
|
||||||
|
* Scenario tests
|
||||||
|
|
||||||
|
Overview:
|
||||||
|
=========
|
||||||
|
|
||||||
|
Installation:
|
||||||
|
=============
|
||||||
|
|
||||||
|
#. On your own development folder, for example /opt/stack/,
|
||||||
|
install your own tempest development env at /opt/stack/tempest/::
|
||||||
|
|
||||||
|
$ cd /opt/stack
|
||||||
|
$ git clone https://github.com/openstack/tempest
|
||||||
|
|
||||||
|
#. Install virtualenv with the following command::
|
||||||
|
|
||||||
|
$ cd /opt/stack/tempest
|
||||||
|
$ ./run_tempest.sh -u not_exist_tests
|
||||||
|
|
||||||
|
#. Install vmware-nsx-tempest-plugin master branch at /opt/stack::
|
||||||
|
|
||||||
|
$ cd /opt/stack
|
||||||
|
$ git clone https://github.com/openstack/vmware-nsx-tempest-plugin.git
|
||||||
|
|
||||||
|
#. Install vmware-nsx-tempest-plugin in your tempest development environment::
|
||||||
|
|
||||||
|
$ cd /opt/stack
|
||||||
|
$ sudo pip install -e vmware-nsx-tempest-plugin
|
||||||
|
|
||||||
|
Run command::
|
||||||
|
|
||||||
|
$ pip show vmware-nsx-tempest-plugin
|
||||||
|
|
||||||
|
You should observe the following statements::
|
||||||
|
|
||||||
|
Location: /opt/stack/vmware-nsx-tempest-plugin
|
||||||
|
|
||||||
|
#. Validate installed vmware_nsx_tempest successfully do::
|
||||||
|
|
||||||
|
$ cd /opt/stack/vmware-nsx-tempest-plugin
|
||||||
|
$ ostestr -l vmware_nsx_tempest
|
||||||
|
$ ostestr vmware_nsx_tempest.tests.nsxv3.scenario.test_mdproxy.TestMDProxy.test_mdproxy_ping
|
||||||
|
$ python -m testtools.run vmware_nsx_tempest.tests.nsxv3.scenario.test_mdproxy.TestMDProxy.test_mdproxy_ping
|
||||||
|
|
||||||
|
Your installation failed, if no tests are shown.
|
||||||
|
|
||||||
|
Execution:
|
||||||
|
==========
|
||||||
|
|
||||||
|
vmware-nsx-tempest tests are tempest tests, you need to
|
||||||
|
run from tempest directory. For example, to run only l2-gateway tests::
|
||||||
|
|
||||||
|
$ cd /opt/stack/tempest
|
||||||
|
$ ostestr vmware_nsx_tempest.*test_l2_gateway
|
||||||
|
$ ostestr vmware_nsx_tempest.tests.nsxv.api.test_l2_gateway_connection.L2GatewayConnectionTest.test_csuld_single_device_interface_vlan
|
||||||
|
|
||||||
|
TechNote on vmware-nsx-tempest-plugin:
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
vmware-nsx-tempest-plugin is a plugin to tempest, not neutron, nor vmware-nsx.
|
||||||
|
It is defined by tempest.test_plugins.
|
||||||
|
|
||||||
|
Modules within vmware-nsx-tempest can not see resources defined
|
||||||
|
by vmware-nsx. Commands like following will not work, unless
|
||||||
|
vmware-nsx is installed in your tempest environment::
|
||||||
|
|
||||||
|
import vmware_nsx.shell.admin.plugins.common.utils as admin_utils
|
||||||
|
@ -3,3 +3,4 @@
|
|||||||
# process, which may cause wedges in the gate later.
|
# process, which may cause wedges in the gate later.
|
||||||
|
|
||||||
pbr>=2.0 # Apache-2.0
|
pbr>=2.0 # Apache-2.0
|
||||||
|
neutron-lib>=1.9.0 # Apache-2.0
|
||||||
|
16
setup.cfg
16
setup.cfg
@ -21,7 +21,7 @@ classifier =
|
|||||||
|
|
||||||
[files]
|
[files]
|
||||||
packages =
|
packages =
|
||||||
vmware-nsx-tempest-plugin
|
vmware_nsx_tempest
|
||||||
|
|
||||||
[build_sphinx]
|
[build_sphinx]
|
||||||
all-files = 1
|
all-files = 1
|
||||||
@ -33,19 +33,19 @@ build-dir = doc/build
|
|||||||
upload-dir = doc/build/html
|
upload-dir = doc/build/html
|
||||||
|
|
||||||
[compile_catalog]
|
[compile_catalog]
|
||||||
directory = vmware-nsx-tempest-plugin/locale
|
directory = vmware_nsx_tempest/locale
|
||||||
domain = vmware-nsx-tempest-plugin
|
domain = vmware_nsx_tempest
|
||||||
|
|
||||||
[update_catalog]
|
[update_catalog]
|
||||||
domain = vmware-nsx-tempest-plugin
|
domain = vmware_nsx_tempest
|
||||||
output_dir = vmware-nsx-tempest-plugin/locale
|
output_dir = vmware_nsx_tempest/locale
|
||||||
input_file = vmware-nsx-tempest-plugin/locale/vmware-nsx-tempest-plugin.pot
|
input_file = vmware_nsx_tempest/locale/vmware_nsx_tempest.pot
|
||||||
|
|
||||||
[extract_messages]
|
[extract_messages]
|
||||||
keywords = _ gettext ngettext l_ lazy_gettext
|
keywords = _ gettext ngettext l_ lazy_gettext
|
||||||
mapping_file = babel.cfg
|
mapping_file = babel.cfg
|
||||||
output_file = vmware-nsx-tempest-plugin/locale/vmware-nsx-tempest-plugin.pot
|
output_file = vmware_nsx_tempest/locale/vmware_nsx_tempest.pot
|
||||||
|
|
||||||
[entry_points]
|
[entry_points]
|
||||||
tempest.test_plugins =
|
tempest.test_plugins =
|
||||||
vmware-nsx-tempest-plugin = vmware-nsx-tempest-plugin.plugin:VMwareNsxTempestPlugin
|
vmware-nsx-tempest-plugin = vmware_nsx_tempest.plugin:VmwareNsxTempestPlugin
|
||||||
|
@ -13,3 +13,4 @@ testtools>=1.4.0 # MIT
|
|||||||
openstackdocstheme>=1.11.0 # Apache-2.0
|
openstackdocstheme>=1.11.0 # Apache-2.0
|
||||||
# releasenotes
|
# releasenotes
|
||||||
reno>=1.8.0 # Apache-2.0
|
reno>=1.8.0 # Apache-2.0
|
||||||
|
tempest>=16.1.0 # Apache-2.0
|
||||||
|
7
tools/pretty_tox.sh
Normal file
7
tools/pretty_tox.sh
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
TESTRARGS=$1
|
||||||
|
|
||||||
|
exec 3>&1
|
||||||
|
status=$(exec 4>&1 >&3; ( python setup.py testr --slowest --testr-args="--subunit $TESTRARGS"; echo $? >&4 ) | subunit-trace -f) && exit $status
|
||||||
|
|
28
tox.ini
28
tox.ini
@ -1,6 +1,6 @@
|
|||||||
[tox]
|
[tox]
|
||||||
minversion = 2.0
|
minversion = 2.0
|
||||||
envlist = py34,py27,pypy,pep8
|
envlist = py35,py27,pep8,docs
|
||||||
skipsdist = True
|
skipsdist = True
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
@ -10,11 +10,30 @@ setenv =
|
|||||||
VIRTUAL_ENV={envdir}
|
VIRTUAL_ENV={envdir}
|
||||||
PYTHONWARNINGS=default::DeprecationWarning
|
PYTHONWARNINGS=default::DeprecationWarning
|
||||||
deps = -r{toxinidir}/test-requirements.txt
|
deps = -r{toxinidir}/test-requirements.txt
|
||||||
commands = python setup.py test --slowest --testr-args='{posargs}'
|
-r{toxinidir}/requirements.txt
|
||||||
|
whitelist_externals = sh
|
||||||
|
rm
|
||||||
|
find
|
||||||
|
commands =
|
||||||
|
find . -type f -name "*.pyc" -delete
|
||||||
|
sh tools/pretty_tox.sh '{posargs}'
|
||||||
|
passenv = http_proxy
|
||||||
|
HTTP_PROXY
|
||||||
|
https_proxy
|
||||||
|
HTTPS_PROXY
|
||||||
|
no_proxy
|
||||||
|
NO_PROXY
|
||||||
|
OS_DEBUG
|
||||||
|
OS_LOG_CAPTURE
|
||||||
|
OS_STDERR_CAPTURE
|
||||||
|
OS_STDOUT_CAPTURE
|
||||||
|
|
||||||
[testenv:pep8]
|
[testenv:pep8]
|
||||||
commands = flake8 {posargs}
|
commands = flake8 {posargs}
|
||||||
|
|
||||||
|
[testenv:py27]
|
||||||
|
setenv = OS_FAIL_ON_MISSING_DEPS=1
|
||||||
|
|
||||||
[testenv:venv]
|
[testenv:venv]
|
||||||
commands = {posargs}
|
commands = {posargs}
|
||||||
|
|
||||||
@ -35,6 +54,7 @@ commands = oslo_debug_helper {posargs}
|
|||||||
# E123, E125 skipped as they are invalid PEP-8.
|
# E123, E125 skipped as they are invalid PEP-8.
|
||||||
|
|
||||||
show-source = True
|
show-source = True
|
||||||
ignore = E123,E125
|
ignore = E125,E126,E128,E129,E265,H305,H307,H404,H405,H904,N530,N531
|
||||||
builtins = _
|
builtins = _
|
||||||
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build
|
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,.ropeproject
|
||||||
|
import-order-style = pep8
|
||||||
|
@ -1,92 +0,0 @@
|
|||||||
Welcome!
|
|
||||||
========
|
|
||||||
vmware_nsx_tempest is a plugin module to openstack tempest project.
|
|
||||||
|
|
||||||
If you are not familiar with tempest, please refer to::
|
|
||||||
|
|
||||||
https://docs.openstack.org/developer/tempest
|
|
||||||
|
|
||||||
It is implemented with tempest external plugin.
|
|
||||||
The official design sepcification is at::
|
|
||||||
|
|
||||||
https://review.openstack.org/#/c/184992/
|
|
||||||
|
|
||||||
Overview
|
|
||||||
========
|
|
||||||
|
|
||||||
vmware_nsx_tempest hosts vmware_nsx's functional api and scenario tests.
|
|
||||||
|
|
||||||
All vmware_nsx_tempest tests are in "master" branch. For this reason,
|
|
||||||
it is recommended to have your own developer version of vmware-nsx repo
|
|
||||||
installed outside the devstack folder, /opt/stack/.
|
|
||||||
|
|
||||||
For example at /opt/devtest folder. In doing so, you can install
|
|
||||||
editable vmware-nsx repo under tempest VENV environemnt.
|
|
||||||
|
|
||||||
Installation:
|
|
||||||
-------------
|
|
||||||
|
|
||||||
#. On your own development folder, for example /opt/devtest/,
|
|
||||||
install your own tempest development env at /opt/devtest/os-tempest/::
|
|
||||||
|
|
||||||
$ cd /opt/devtest
|
|
||||||
$ git clone https://github.com/openstack/tempest os-tempest
|
|
||||||
|
|
||||||
#. Install virtualenv with the following command::
|
|
||||||
|
|
||||||
$ cd /opt/devtest/os-tempest
|
|
||||||
$ ./run_tempest.sh -u not_exist_tests
|
|
||||||
|
|
||||||
#. Install vmware-nsx master branch at /opt/devtest/vmware-nsx::
|
|
||||||
|
|
||||||
$ cd /opt/devtest
|
|
||||||
$ git clone https://github.com/openstack/vmware-nsx
|
|
||||||
|
|
||||||
#. Install vmware_nsx_tempest in your tempest development environment::
|
|
||||||
|
|
||||||
$ cd /opt/devtest/os-tempest
|
|
||||||
$ source .venv/bin/activate
|
|
||||||
$ pip install -e /opt/devtest/vmware-nsx/
|
|
||||||
|
|
||||||
Run command::
|
|
||||||
|
|
||||||
$ pip show vmware-nsx
|
|
||||||
|
|
||||||
You should observe the following statements::
|
|
||||||
|
|
||||||
Location: /opt/devtest/vmware-nsx
|
|
||||||
|
|
||||||
and under section of Entry-points::
|
|
||||||
|
|
||||||
[tempest.test_plugins]
|
|
||||||
vmware-nsx-tempest-plugin = vmware_nsx_tempest.plugin:VMwareNsxTempestPlugin
|
|
||||||
|
|
||||||
#. Validate installed vmware_nsx_tempest successfully do::
|
|
||||||
|
|
||||||
$ cd /opt/devtest/os-tempest
|
|
||||||
$ tools/with_venv.sh testr list-tests vmware_nsx_tempest.*l2_gateway
|
|
||||||
|
|
||||||
Your installation failed, if no tests are shown.
|
|
||||||
|
|
||||||
Execution:
|
|
||||||
----------
|
|
||||||
|
|
||||||
vmware_nsx_tempest tests are tempest tests, you need to
|
|
||||||
run from tempest directory. For example, to run only l2-gateway tests::
|
|
||||||
|
|
||||||
$ cd /opt/devtest/os-tempest
|
|
||||||
$ ./run_tempest.sh -t vmware_nsx_tempest.*test_l2_gateway
|
|
||||||
$ ./run_tempest.sh -d vmware_nsx_tempest.tests.nsxv.api.test_l2_gateway_connection.L2GatewayConnectionTest.test_csuld_single_device_interface_vlan
|
|
||||||
|
|
||||||
TechNote on vmware_nsx_tempest:
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
vmware_nsx_tempest is a plugin to tempest, not neutron, nor vmware_nsx.
|
|
||||||
|
|
||||||
It is defined by tempest.test_plugins.
|
|
||||||
|
|
||||||
Modules within vmware_nsx_tempest can not see resources defined
|
|
||||||
by vmware_nsx. Commands like following are not acceptable, unless
|
|
||||||
vmware_nsx is installed in your tempest environment::
|
|
||||||
|
|
||||||
import vmware_nsx.shell.admin.plugins.common.utils as admin_utils
|
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
import oslo_i18n
|
import oslo_i18n
|
||||||
|
|
||||||
DOMAIN = "vmware-nsx-tempest"
|
DOMAIN = "vmware_nsx_tempest"
|
||||||
|
|
||||||
_translators = oslo_i18n.TranslatorFactory(domain=DOMAIN)
|
_translators = oslo_i18n.TranslatorFactory(domain=DOMAIN)
|
||||||
|
|
@ -110,10 +110,10 @@ NSXvGroup = [
|
|||||||
help="Specific for router_size tests. This value defines"
|
help="Specific for router_size tests. This value defines"
|
||||||
" how long http.request should retry."),
|
" how long http.request should retry."),
|
||||||
cfg.BoolOpt('no_router_type',
|
cfg.BoolOpt('no_router_type',
|
||||||
default=False,
|
default=False,
|
||||||
help="router_type is NSXv extension."
|
help="router_type is NSXv extension."
|
||||||
"Set it to True allow tests to remove this attribute"
|
"Set it to True allow tests to remove this attribute"
|
||||||
" when creating router."),
|
" when creating router."),
|
||||||
cfg.ListOpt('bugs_to_resolve',
|
cfg.ListOpt('bugs_to_resolve',
|
||||||
default=[],
|
default=[],
|
||||||
help="Bugs to be resolved. Define this at tempest.conf and"
|
help="Bugs to be resolved. Define this at tempest.conf and"
|
||||||
@ -129,10 +129,10 @@ NSXvGroup = [
|
|||||||
help="NSX security-policy ID used to create the 2nd"
|
help="NSX security-policy ID used to create the 2nd"
|
||||||
" security-group-policy, and != default_policy_id."),
|
" security-group-policy, and != default_policy_id."),
|
||||||
cfg.BoolOpt('allow_tenant_rules_with_policy',
|
cfg.BoolOpt('allow_tenant_rules_with_policy',
|
||||||
default=False,
|
default=False,
|
||||||
help="Default=False; a tenant cannot create security-group."
|
help="Default=False; a tenant cannot create security-group."
|
||||||
" If True, tenant can create non-policy security-group."
|
" If True, tenant can create non-policy security-group."
|
||||||
" Sync this value with nsx.ini file."),
|
" Sync this value with nsx.ini file."),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -83,7 +83,7 @@ class ApplianceManager(manager.NetworkScenarioTest):
|
|||||||
return self.topology_keypairs[server['key_name']]['private_key']
|
return self.topology_keypairs[server['key_name']]['private_key']
|
||||||
|
|
||||||
def create_topology_router(self, router_name, routers_client=None,
|
def create_topology_router(self, router_name, routers_client=None,
|
||||||
**kwargs):
|
**kwargs):
|
||||||
if not routers_client:
|
if not routers_client:
|
||||||
routers_client = self.routers_client
|
routers_client = self.routers_client
|
||||||
router_name_ = constants.APPLIANCE_NAME_STARTS_WITH + router_name
|
router_name_ = constants.APPLIANCE_NAME_STARTS_WITH + router_name
|
||||||
@ -94,8 +94,9 @@ class ApplianceManager(manager.NetworkScenarioTest):
|
|||||||
self.topology_routers[router_name] = router
|
self.topology_routers[router_name] = router
|
||||||
return router
|
return router
|
||||||
|
|
||||||
def create_topology_network(self, network_name, networks_client=None,
|
def create_topology_network(
|
||||||
tenant_id=None, port_security_enabled=True, **kwargs):
|
self, network_name, networks_client=None,
|
||||||
|
tenant_id=None, port_security_enabled=True, **kwargs):
|
||||||
if not networks_client:
|
if not networks_client:
|
||||||
networks_client = self.networks_client
|
networks_client = self.networks_client
|
||||||
if not tenant_id:
|
if not tenant_id:
|
||||||
@ -128,12 +129,14 @@ class ApplianceManager(manager.NetworkScenarioTest):
|
|||||||
|
|
||||||
def cidr_in_use(cidr, tenant_id):
|
def cidr_in_use(cidr, tenant_id):
|
||||||
"""Check cidr existence
|
"""Check cidr existence
|
||||||
|
|
||||||
:returns: True if subnet with cidr already exist in tenant
|
:returns: True if subnet with cidr already exist in tenant
|
||||||
False else
|
False else
|
||||||
|
|
||||||
"""
|
"""
|
||||||
cidr_in_use = \
|
cidr_in_use = \
|
||||||
self.os_admin.subnets_client.list_subnets(tenant_id=tenant_id,
|
self.os_admin.subnets_client.list_subnets(
|
||||||
cidr=cidr)['subnets']
|
tenant_id=tenant_id, cidr=cidr)['subnets']
|
||||||
return len(cidr_in_use) != 0
|
return len(cidr_in_use) != 0
|
||||||
|
|
||||||
if ip_version == 6:
|
if ip_version == 6:
|
@ -31,8 +31,8 @@ CONF = config.CONF
|
|||||||
class FeatureManager(traffic_manager.TrafficManager):
|
class FeatureManager(traffic_manager.TrafficManager):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_clients(cls):
|
def setup_clients(cls):
|
||||||
"""
|
"""Create various client connections. Such as NSXv3 and L2 Gateway.
|
||||||
Create various client connections. Such as NSXv3 and L2 Gateway.
|
|
||||||
"""
|
"""
|
||||||
super(FeatureManager, cls).setup_clients()
|
super(FeatureManager, cls).setup_clients()
|
||||||
try:
|
try:
|
||||||
@ -66,13 +66,13 @@ class FeatureManager(traffic_manager.TrafficManager):
|
|||||||
# L2Gateway base class. To get basics of L2GW.
|
# L2Gateway base class. To get basics of L2GW.
|
||||||
#
|
#
|
||||||
def create_l2gw(self, l2gw_name, l2gw_param):
|
def create_l2gw(self, l2gw_name, l2gw_param):
|
||||||
"""
|
"""Creates L2GW and returns the response.
|
||||||
Creates L2GW and returns the response.
|
|
||||||
|
|
||||||
:param l2gw_name: name of the L2GW
|
:param l2gw_name: name of the L2GW
|
||||||
:param l2gw_param: L2GW parameters
|
:param l2gw_param: L2GW parameters
|
||||||
|
|
||||||
:return: response of L2GW create API
|
:return: response of L2GW create API
|
||||||
|
|
||||||
"""
|
"""
|
||||||
LOG.info("l2gw name: %(name)s, l2gw_param: %(devices)s ",
|
LOG.info("l2gw name: %(name)s, l2gw_param: %(devices)s ",
|
||||||
{"name": l2gw_name, "devices": l2gw_param})
|
{"name": l2gw_name, "devices": l2gw_param})
|
||||||
@ -96,12 +96,12 @@ class FeatureManager(traffic_manager.TrafficManager):
|
|||||||
return rsp, devices
|
return rsp, devices
|
||||||
|
|
||||||
def delete_l2gw(self, l2gw_id):
|
def delete_l2gw(self, l2gw_id):
|
||||||
"""
|
"""Delete L2gw.
|
||||||
Delete L2gw.
|
|
||||||
|
|
||||||
:param l2gw_id: L2GW id to delete l2gw.
|
:param l2gw_id: L2GW id to delete l2gw.
|
||||||
|
|
||||||
:return: response of the l2gw delete API.
|
:return: response of the l2gw delete API.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
LOG.info("L2GW id: %(id)s to be deleted.", {"id": l2gw_id})
|
LOG.info("L2GW id: %(id)s to be deleted.", {"id": l2gw_id})
|
||||||
rsp = self.l2gw_client.delete_l2_gateway(l2gw_id)
|
rsp = self.l2gw_client.delete_l2_gateway(l2gw_id)
|
||||||
@ -109,24 +109,24 @@ class FeatureManager(traffic_manager.TrafficManager):
|
|||||||
return rsp
|
return rsp
|
||||||
|
|
||||||
def update_l2gw(self, l2gw_id, l2gw_new_name, devices):
|
def update_l2gw(self, l2gw_id, l2gw_new_name, devices):
|
||||||
"""
|
"""Update existing L2GW.
|
||||||
Update existing L2GW.
|
|
||||||
|
|
||||||
:param l2gw_id: L2GW id to update its parameters.
|
:param l2gw_id: L2GW id to update its parameters.
|
||||||
:param l2gw_new_name: name of the L2GW.
|
:param l2gw_new_name: name of the L2GW.
|
||||||
:param devices: L2GW parameters.
|
:param devices: L2GW parameters.
|
||||||
|
|
||||||
:return: Response of the L2GW update API.
|
:return: Response of the L2GW update API.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
rsp = self.l2gw_client.update_l2_gateway(l2gw_id,
|
rsp = self.l2gw_client.update_l2_gateway(l2gw_id,
|
||||||
name=l2gw_new_name, **devices)
|
name=l2gw_new_name, **devices)
|
||||||
return rsp
|
return rsp
|
||||||
|
|
||||||
def nsx_bridge_cluster_info(self):
|
def nsx_bridge_cluster_info(self):
|
||||||
"""
|
"""Collect the device and interface name of the nsx brdige cluster.
|
||||||
Collect the device and interface name of the nsx brdige cluster.
|
|
||||||
|
|
||||||
:return: nsx bridge id and display name.
|
:return: nsx bridge id and display name.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
response = self.nsx_client.get_bridge_cluster_info()
|
response = self.nsx_client.get_bridge_cluster_info()
|
||||||
if len(response) == 0:
|
if len(response) == 0:
|
||||||
@ -134,12 +134,12 @@ class FeatureManager(traffic_manager.TrafficManager):
|
|||||||
return [(x.get("id"), x.get("display_name")) for x in response]
|
return [(x.get("id"), x.get("display_name")) for x in response]
|
||||||
|
|
||||||
def create_l2gw_connection(self, l2gwc_param):
|
def create_l2gw_connection(self, l2gwc_param):
|
||||||
"""
|
"""Creates L2GWC and return the response.
|
||||||
Creates L2GWC and return the response.
|
|
||||||
|
|
||||||
:param l2gwc_param: L2GWC parameters.
|
:param l2gwc_param: L2GWC parameters.
|
||||||
|
|
||||||
:return: response of L2GWC create API.
|
:return: response of L2GWC create API.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
LOG.info("l2gwc param: %(param)s ", {"param": l2gwc_param})
|
LOG.info("l2gwc param: %(param)s ", {"param": l2gwc_param})
|
||||||
l2gwc_request_body = {"l2_gateway_id": l2gwc_param["l2_gateway_id"],
|
l2gwc_request_body = {"l2_gateway_id": l2gwc_param["l2_gateway_id"],
|
||||||
@ -158,12 +158,12 @@ class FeatureManager(traffic_manager.TrafficManager):
|
|||||||
return rsp
|
return rsp
|
||||||
|
|
||||||
def delete_l2gw_connection(self, l2gwc_id):
|
def delete_l2gw_connection(self, l2gwc_id):
|
||||||
"""
|
"""Delete L2GWC and returns the response.
|
||||||
Delete L2GWC and returns the response.
|
|
||||||
|
|
||||||
:param l2gwc_id: L2GWC id to delete L2GWC.
|
:param l2gwc_id: L2GWC id to delete L2GWC.
|
||||||
|
|
||||||
:return: response of the l2gwc delete API.
|
:return: response of the l2gwc delete API.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
LOG.info("L2GW connection id: %(id)s to be deleted",
|
LOG.info("L2GW connection id: %(id)s to be deleted",
|
||||||
{"id": l2gwc_id})
|
{"id": l2gwc_id})
|
@ -17,37 +17,39 @@ from vmware_nsx_tempest.lib import appliance_manager
|
|||||||
|
|
||||||
|
|
||||||
class TrafficManager(appliance_manager.ApplianceManager):
|
class TrafficManager(appliance_manager.ApplianceManager):
|
||||||
def check_server_internal_ips_using_floating_ip(self, floating_ip, server,
|
def check_server_internal_ips_using_floating_ip(
|
||||||
address_list, should_connect=True):
|
self, floating_ip, server, address_list, should_connect=True):
|
||||||
ip_address = floating_ip['floating_ip_address']
|
ip_address = floating_ip['floating_ip_address']
|
||||||
private_key = self.get_server_key(server)
|
private_key = self.get_server_key(server)
|
||||||
ssh_source = self.get_remote_client(ip_address,
|
ssh_source = self.get_remote_client(
|
||||||
private_key=private_key)
|
ip_address, private_key=private_key)
|
||||||
for remote_ip in address_list:
|
for remote_ip in address_list:
|
||||||
self.check_remote_connectivity(ssh_source, remote_ip,
|
self.check_remote_connectivity(ssh_source, remote_ip,
|
||||||
should_succeed=should_connect)
|
should_succeed=should_connect)
|
||||||
|
|
||||||
def check_network_internal_connectivity(self, network, floating_ip, server,
|
def check_network_internal_connectivity(
|
||||||
should_connect=True):
|
self, network, floating_ip, server, should_connect=True):
|
||||||
"""via ssh check VM internal connectivity:
|
"""via ssh check VM internal connectivity:
|
||||||
|
|
||||||
- ping internal gateway and DHCP port, implying in-tenant connectivity
|
- ping internal gateway and DHCP port, implying in-tenant connectivity
|
||||||
pinging both, because L3 and DHCP agents might be on different nodes
|
pinging both, because L3 and DHCP agents might be on different nodes
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# get internal ports' ips:
|
# get internal ports' ips:
|
||||||
# get all network ports in the new network
|
# get all network ports in the new network
|
||||||
internal_ips = self.get_internal_ips(server, network, device="network")
|
internal_ips = self.get_internal_ips(server, network, device="network")
|
||||||
self.check_server_internal_ips_using_floating_ip(floating_ip, server,
|
self.check_server_internal_ips_using_floating_ip(
|
||||||
internal_ips, should_connect)
|
floating_ip, server, internal_ips, should_connect)
|
||||||
|
|
||||||
def check_vm_internal_connectivity(self, network, floating_ip, server,
|
def check_vm_internal_connectivity(
|
||||||
should_connect=True):
|
self, network, floating_ip, server, should_connect=True):
|
||||||
# test internal connectivity to the other VM on the same network
|
# test internal connectivity to the other VM on the same network
|
||||||
compute_ips = self.get_internal_ips(server, network, device="compute")
|
compute_ips = self.get_internal_ips(server, network, device="compute")
|
||||||
self.check_server_internal_ips_using_floating_ip(floating_ip, server,
|
self.check_server_internal_ips_using_floating_ip(
|
||||||
compute_ips, should_connect)
|
floating_ip, server, compute_ips, should_connect)
|
||||||
|
|
||||||
def using_floating_ip_check_server_and_project_network_connectivity(self,
|
def using_floating_ip_check_server_and_project_network_connectivity(
|
||||||
server_details, network=None):
|
self, server_details, network=None):
|
||||||
if not network:
|
if not network:
|
||||||
network = server_details.networks[0]
|
network = server_details.networks[0]
|
||||||
floating_ip = server_details.floating_ip
|
floating_ip = server_details.floating_ip
|
||||||
@ -55,8 +57,9 @@ class TrafficManager(appliance_manager.ApplianceManager):
|
|||||||
self.check_network_internal_connectivity(network, floating_ip, server)
|
self.check_network_internal_connectivity(network, floating_ip, server)
|
||||||
self.check_vm_internal_connectivity(network, floating_ip, server)
|
self.check_vm_internal_connectivity(network, floating_ip, server)
|
||||||
|
|
||||||
def check_cross_network_connectivity(self, network1,
|
def check_cross_network_connectivity(
|
||||||
floating_ip_on_network2, server_on_network2, should_connect=False):
|
self, network1, floating_ip_on_network2, server_on_network2,
|
||||||
|
should_connect=False):
|
||||||
# test internal connectivity to the other VM on the same network
|
# test internal connectivity to the other VM on the same network
|
||||||
remote_ips = self.get_internal_ips(server_on_network2, network1,
|
remote_ips = self.get_internal_ips(server_on_network2, network1,
|
||||||
device="compute")
|
device="compute")
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2015 VMware, Inc.
|
# Copyright 2017 VMware, Inc.
|
||||||
#
|
#
|
||||||
# All Rights Reserved
|
# All Rights Reserved
|
||||||
#
|
#
|
||||||
@ -31,7 +31,7 @@ _opts = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class VMwareNsxTempestPlugin(plugins.TempestPlugin):
|
class VmwareNsxTempestPlugin(plugins.TempestPlugin):
|
||||||
|
|
||||||
"""Our addon configuration is defined at vmware_nsx_tempest/config.py
|
"""Our addon configuration is defined at vmware_nsx_tempest/config.py
|
||||||
|
|
@ -13,11 +13,11 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import base_dvs as base
|
|
||||||
|
|
||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
|
from vmware_nsx_tempest.tests.dvs.api import base_dvs as base
|
||||||
|
|
||||||
|
|
||||||
class AdminNetworksTestJSON(base.BaseDvsAdminNetworkTest):
|
class AdminNetworksTestJSON(base.BaseDvsAdminNetworkTest):
|
||||||
_interface = 'json'
|
_interface = 'json'
|
@ -13,10 +13,11 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import base_dvs as base
|
|
||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
|
from vmware_nsx_tempest.tests.dvs.api import base_dvs as base
|
||||||
|
|
||||||
|
|
||||||
class AdminPortsTestJSON(base.BaseDvsAdminNetworkTest):
|
class AdminPortsTestJSON(base.BaseDvsAdminNetworkTest):
|
||||||
_interface = 'json'
|
_interface = 'json'
|
@ -17,7 +17,7 @@ from oslo_log import log as logging
|
|||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
import test_subnets as SNET
|
from vmware_nsx_tempest.tests.nsxv.api import test_subnets as SNET
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
import base_provider as base
|
|
||||||
import six
|
import six
|
||||||
from tempest import config
|
from tempest import config
|
||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
@ -24,6 +23,7 @@ from tempest.lib import decorators
|
|||||||
from tempest import test
|
from tempest import test
|
||||||
|
|
||||||
from vmware_nsx_tempest.services import nsxv_client
|
from vmware_nsx_tempest.services import nsxv_client
|
||||||
|
from vmware_nsx_tempest.tests.nsxv.api import base_provider as base
|
||||||
|
|
||||||
CONF = config.CONF
|
CONF = config.CONF
|
||||||
|
|
@ -13,7 +13,6 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import base_provider as base
|
|
||||||
from tempest import config
|
from tempest import config
|
||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
from tempest.lib.common.utils import test_utils
|
from tempest.lib.common.utils import test_utils
|
||||||
@ -22,6 +21,8 @@ from tempest.lib import exceptions as ex
|
|||||||
|
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
||||||
|
from vmware_nsx_tempest.tests.nsxv.api import base_provider as base
|
||||||
|
|
||||||
CONF = config.CONF
|
CONF = config.CONF
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
@ -13,7 +13,6 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import base_provider as base
|
|
||||||
from tempest.common import custom_matchers
|
from tempest.common import custom_matchers
|
||||||
from tempest import config
|
from tempest import config
|
||||||
|
|
||||||
@ -24,6 +23,8 @@ from tempest.lib.common.utils import data_utils
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
|
from vmware_nsx_tempest.tests.nsxv.api import base_provider as base
|
||||||
|
|
||||||
CONF = config.CONF
|
CONF = config.CONF
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
@ -16,7 +16,6 @@
|
|||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
import base_provider as base
|
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
import six
|
import six
|
||||||
from tempest import config
|
from tempest import config
|
||||||
@ -24,6 +23,8 @@ from tempest.lib.common.utils import data_utils
|
|||||||
from tempest.lib.common.utils import test_utils
|
from tempest.lib.common.utils import test_utils
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
|
from vmware_nsx_tempest.tests.nsxv.api import base_provider as base
|
||||||
|
|
||||||
CONF = config.CONF
|
CONF = config.CONF
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user