From: aticig Date: Thu, 31 Mar 2022 19:03:33 +0000 (+0300) Subject: Fix Bug 1791 Openstack VIM connector failed Unittests X-Git-Tag: v11.0.3~8 X-Git-Url: https://osm.etsi.org/gitweb/?a=commitdiff_plain;h=72c67141682d0156c0108302eb0d2dcc52cfd808;p=osm%2FRO.git Fix Bug 1791 Openstack VIM connector failed Unittests This patch fixes bug 1791 the Openstack VIM connector failed Unittests. Openstack VIM unittests and coverage are also enabled in tox.ini. Change-Id: I136a53a6f59c48a1681cfe3c87dbe9aada253a98 Signed-off-by: aticig --- diff --git a/NG-RO/osm_ng_ro/ns.py b/NG-RO/osm_ng_ro/ns.py index e8326bf3..472ce795 100644 --- a/NG-RO/osm_ng_ro/ns.py +++ b/NG-RO/osm_ng_ro/ns.py @@ -693,7 +693,9 @@ class Ns(object): return extra_dict - def _process_affinity_group_params(target_affinity_group, vim_info, target_record_id): + def _process_affinity_group_params( + target_affinity_group, vim_info, target_record_id + ): extra_dict = {} affinity_group_data = { @@ -927,13 +929,19 @@ class Ns(object): if target_vdu.get("affinity-or-anti-affinity-group-id"): affinity_group = {} - for affinity_group_id in target_vdu["affinity-or-anti-affinity-group-id"]: + for affinity_group_id in target_vdu[ + "affinity-or-anti-affinity-group-id" + ]: affinity_group_text = ( - ns_preffix + ":affinity-or-anti-affinity-group." + affinity_group_id + ns_preffix + + ":affinity-or-anti-affinity-group." + + affinity_group_id ) extra_dict["depends_on"].append(affinity_group_text) - affinity_group["affinity_group_id"] = "TASK-" + affinity_group_text + affinity_group["affinity_group_id"] = ( + "TASK-" + affinity_group_text + ) affinity_group_list.append(affinity_group) extra_dict["params"] = { @@ -1188,8 +1196,11 @@ class Ns(object): step = "process NS Affinity Groups" _process_items( target_list=indata.get("affinity-or-anti-affinity-group") or [], - existing_list=db_nsr.get("affinity-or-anti-affinity-group") or [], - db_record="nsrs:{}:affinity-or-anti-affinity-group".format(nsr_id), + existing_list=db_nsr.get("affinity-or-anti-affinity-group") + or [], + db_record="nsrs:{}:affinity-or-anti-affinity-group".format( + nsr_id + ), db_update=db_nsr_update, db_path="affinity-or-anti-affinity-group", item="affinity-or-anti-affinity-group", diff --git a/RO-VIM-openstack/osm_rovim_openstack/tests/test_vimconn_openstack.py b/RO-VIM-openstack/osm_rovim_openstack/tests/test_vimconn_openstack.py index c5f7038a..09991244 100644 --- a/RO-VIM-openstack/osm_rovim_openstack/tests/test_vimconn_openstack.py +++ b/RO-VIM-openstack/osm_rovim_openstack/tests/test_vimconn_openstack.py @@ -25,6 +25,7 @@ Run this directly with python2 or python3. """ import copy +import logging import unittest import mock @@ -37,8 +38,13 @@ __date__ = "$23-aug-2017 23:59:59$" class TestSfcOperations(unittest.TestCase): - def setUp(self): - # instantiate dummy VIM connector so we can test it + @mock.patch("logging.getLogger", autospec=True) + def setUp(self, mock_logger): + # Instantiate dummy VIM connector so we can test it + # It throws exception because of dummy parameters, + # We are disabling the logging of exception not to print them to console. + mock_logger = logging.getLogger() + mock_logger.disabled = True self.vimconn = vimconnector( "123", "openstackvim", @@ -210,10 +216,15 @@ class TestSfcOperations(unittest.TestCase): # call the VIM connector if sfc_encap is None: + dict_to_neutron["port_chain"]["chain_parameters"] = {"correlation": "mpls"} if spi is None: - result = self.vimconn.new_sfp(name, classifications, sfs) + result = self.vimconn.new_sfp( + name, classifications, sfs, sfc_encap=False + ) else: - result = self.vimconn.new_sfp(name, classifications, sfs, spi=spi) + result = self.vimconn.new_sfp( + name, classifications, sfs, sfc_encap=False, spi=spi + ) else: if spi is None: result = self.vimconn.new_sfp(name, classifications, sfs, sfc_encap) @@ -360,8 +371,8 @@ class TestSfcOperations(unittest.TestCase): @mock.patch.object(Client, "create_sfc_port_chain") def test_new_sfp_without_sfc_encap(self, create_sfc_port_chain): - self._test_new_sfp(create_sfc_port_chain, False, None) - self._test_new_sfp(create_sfc_port_chain, False, 25) + self._test_new_sfp(create_sfc_port_chain, None, None) + self._test_new_sfp(create_sfc_port_chain, None, 25) @mock.patch.object(Client, "create_sfc_port_chain") def test_new_sfp_default_sfc_encap(self, create_sfc_port_chain): diff --git a/devops-stages/stage-test.sh b/devops-stages/stage-test.sh index 9d761076..fd61198d 100755 --- a/devops-stages/stage-test.sh +++ b/devops-stages/stage-test.sh @@ -12,7 +12,7 @@ # implied. # See the License for the specific language governing permissions and # limitations under the License. - +set -e echo "Launching tox" tox --parallel=auto diff --git a/releasenotes/notes/fix_bug_1791-a26aa7c96f98813d.yaml b/releasenotes/notes/fix_bug_1791-a26aa7c96f98813d.yaml new file mode 100644 index 00000000..79991fb1 --- /dev/null +++ b/releasenotes/notes/fix_bug_1791-a26aa7c96f98813d.yaml @@ -0,0 +1,22 @@ +####################################################################################### +# Copyright ETSI Contributors and Others. +# +# 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. +####################################################################################### +--- +fixes: + - | + This patch fixes bug 1791 the Openstack VIM connector failed Unittests. Openstack VIM + unittests are also enabled in tox.ini. + diff --git a/requirements-test.txt b/requirements-test.txt index f461166d..9aafc4b2 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -16,13 +16,13 @@ ####################################################################################### -e RO-plugin # via -r requirements-test.in -coverage==6.2 +coverage==6.3.2 # via # -r requirements-test.in # nose2 mock==4.0.3 # via -r requirements-test.in -nose2==0.10.0 +nose2==0.11.0 # via -r requirements-test.in six==1.16.0 # via nose2 diff --git a/requirements.txt b/requirements.txt index 2d6abdf6..dd6155e0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -22,21 +22,21 @@ attrs==21.4.0 # via # cmd2 # jsonschema -autopage==0.4.0 +autopage==0.5.0 # via cliff -azure-common==1.1.27 +azure-common==1.1.28 # via # -r RO-VIM-azure/requirements.in # azure-mgmt-compute # azure-mgmt-network # azure-mgmt-resource -azure-core==1.21.1 +azure-core==1.23.1 # via # azure-identity # azure-mgmt-core -azure-identity==1.7.1 +azure-identity==1.9.0 # via -r RO-VIM-azure/requirements.in -azure-mgmt-compute==24.0.0 +azure-mgmt-compute==26.1.0 # via -r RO-VIM-azure/requirements.in azure-mgmt-core==1.3.0 # via @@ -45,13 +45,13 @@ azure-mgmt-core==1.3.0 # azure-mgmt-resource azure-mgmt-network==19.3.0 # via -r RO-VIM-azure/requirements.in -azure-mgmt-resource==20.0.0 +azure-mgmt-resource==21.0.0 # via -r RO-VIM-azure/requirements.in bcrypt==3.2.0 # via paramiko boto==2.49.0 # via -r RO-VIM-aws/requirements.in -cachetools==4.2.4 +cachetools==5.0.0 # via google-auth certifi==2021.10.8 # via @@ -62,20 +62,20 @@ cffi==1.15.0 # bcrypt # cryptography # pynacl -charset-normalizer==2.0.10 +charset-normalizer==2.0.12 # via requests cheroot==8.6.0 # via cherrypy cherrypy==18.1.2 # via -r NG-RO/requirements.in -cliff==3.10.0 +cliff==3.10.1 # via # osc-lib # python-neutronclient # python-openstackclient -cmd2==2.3.3 +cmd2==2.4.1 # via cliff -cryptography==36.0.1 +cryptography==36.0.2 # via # -r NG-RO/requirements.in # adal @@ -87,7 +87,7 @@ cryptography==36.0.1 # pyopenssl cvprac==1.0.7 # via -r RO-SDN-arista_cloudvision/requirements.in -debtcollector==2.3.0 +debtcollector==2.5.0 # via # oslo.config # oslo.context @@ -99,15 +99,15 @@ decorator==5.1.1 # via # dogpile.cache # openstacksdk -dogpile.cache==1.1.4 +dogpile.cache==1.1.5 # via openstacksdk flufl.enum==4.1.1 # via pyvcloud -google-api-core==2.3.2 +google-api-core==2.7.2 # via google-api-python-client -google-api-python-client==2.34.0 +google-api-python-client==2.45.0 # via -r RO-VIM-gcp/requirements.in -google-auth==2.3.3 +google-auth==2.6.6 # via # -r RO-VIM-gcp/requirements.in # google-api-core @@ -117,9 +117,9 @@ google-auth-httplib2==0.1.0 # via google-api-python-client google-cloud==0.34.0 # via -r RO-VIM-gcp/requirements.in -googleapis-common-protos==1.54.0 +googleapis-common-protos==1.56.0 # via google-api-core -httplib2==0.20.2 +httplib2==0.20.4 # via # google-api-python-client # google-auth-httplib2 @@ -127,7 +127,7 @@ humanfriendly==10.0 # via pyvcloud idna==3.3 # via requests -importlib-metadata==4.10.0 +importlib-metadata==4.11.3 # via -r NG-RO/requirements.in iso8601==1.0.2 # via @@ -143,19 +143,19 @@ jaraco.functools==3.5.0 # via # cheroot # tempora -jinja2==3.0.3 +jinja2==3.1.1 # via -r NG-RO/requirements.in -jmespath==0.10.0 +jmespath==1.0.0 # via openstacksdk jsonpatch==1.32 # via # openstacksdk # warlock -jsonpointer==2.2 +jsonpointer==2.3 # via jsonpatch jsonschema==3.2.0 # via warlock -keystoneauth1==4.4.0 +keystoneauth1==4.5.0 # via # openstacksdk # osc-lib @@ -166,16 +166,16 @@ keystoneauth1==4.4.0 # python-novaclient logutils==0.3.5 # via -r NG-RO/requirements.in -lxml==4.7.1 +lxml==4.8.0 # via pyvcloud -markupsafe==2.0.1 +markupsafe==2.1.1 # via jinja2 more-itertools==8.12.0 # via # cheroot # cherrypy # jaraco.functools -msal==1.16.0 +msal==1.17.0 # via # azure-identity # msal-extensions @@ -209,7 +209,7 @@ netifaces==0.11.0 # via # openstacksdk # oslo.utils -oauthlib==3.1.1 +oauthlib==3.2.0 # via requests-oauthlib openstacksdk==0.61.0 # via @@ -222,15 +222,15 @@ os-service-types==1.7.0 # via # keystoneauth1 # openstacksdk -osc-lib==2.4.2 +osc-lib==2.5.0 # via # python-neutronclient # python-openstackclient -oslo.config==8.7.1 +oslo.config==8.8.0 # via # oslo.log # python-keystoneclient -oslo.context==3.4.0 +oslo.context==4.1.0 # via oslo.log oslo.i18n==5.1.0 # via @@ -244,15 +244,15 @@ oslo.i18n==5.1.0 # python-neutronclient # python-novaclient # python-openstackclient -oslo.log==4.6.1 +oslo.log==4.7.0 # via python-neutronclient -oslo.serialization==4.2.0 +oslo.serialization==4.3.0 # via # oslo.log # python-keystoneclient # python-neutronclient # python-novaclient -oslo.utils==4.12.0 +oslo.utils==4.12.2 # via # osc-lib # oslo.log @@ -265,15 +265,14 @@ oslo.utils==4.12.0 # python-openstackclient packaging==21.3 # via oslo.utils -paramiko==2.9.2 +paramiko==2.10.3 # via # -r RO-SDN-dpb/requirements.in # -r RO-VIM-gcp/requirements.in # -r RO-plugin/requirements.in -pbr==5.8.0 +pbr==5.8.1 # via # cliff - # debtcollector # keystoneauth1 # openstacksdk # os-service-types @@ -290,11 +289,11 @@ pbr==5.8.0 # python-novaclient # python-openstackclient # stevedore -portalocker==2.3.2 +portalocker==2.4.0 # via msal-extensions portend==3.1.0 # via cherrypy -prettytable==3.0.0 +prettytable==3.2.0 # via # -r RO-VIM-vmware/requirements.in # cliff @@ -303,7 +302,7 @@ prettytable==3.0.0 # python-novaclient progressbar==2.5 # via -r RO-VIM-vmware/requirements.in -protobuf==3.19.3 +protobuf==3.20.1 # via # google-api-core # googleapis-common-protos @@ -325,9 +324,9 @@ pyjwt[crypto]==2.3.0 # msal pynacl==1.5.0 # via paramiko -pyopenssl==21.0.0 +pyopenssl==22.0.0 # via python-glanceclient -pyparsing==3.0.6 +pyparsing==3.0.8 # via # cliff # httplib2 @@ -335,7 +334,7 @@ pyparsing==3.0.6 # packaging pyperclip==1.8.2 # via cmd2 -pyrsistent==0.18.0 +pyrsistent==0.18.1 # via jsonschema python-cinderclient==7.4.1 # via @@ -345,22 +344,22 @@ python-dateutil==2.8.2 # via # adal # oslo.log -python-glanceclient==3.5.0 +python-glanceclient==3.6.0 # via -r RO-VIM-openstack/requirements.in python-keystoneclient==4.4.0 # via # -r RO-VIM-openstack/requirements.in # python-neutronclient # python-openstackclient -python-neutronclient==7.7.0 +python-neutronclient==7.8.0 # via -r RO-VIM-openstack/requirements.in -python-novaclient==17.6.0 +python-novaclient==17.7.0 # via # -r RO-VIM-openstack/requirements.in # python-openstackclient -python-openstackclient==5.7.0 +python-openstackclient==5.8.0 # via -r RO-VIM-openstack/requirements.in -pytz==2021.3 +pytz==2022.1 # via # oslo.serialization # oslo.utils @@ -416,7 +415,7 @@ requests==2.27.1 # pyvcloud # pyvmomi # requests-oauthlib -requests-oauthlib==1.3.0 +requests-oauthlib==1.3.1 # via msrest requestsexceptions==1.4.0 # via openstacksdk @@ -435,7 +434,6 @@ six==1.16.0 # azure-identity # bcrypt # cheroot - # debtcollector # google-auth # google-auth-httplib2 # isodate @@ -443,7 +441,7 @@ six==1.16.0 # keystoneauth1 # msrestazure # munch - # pyopenssl + # paramiko # python-dateutil # python-keystoneclient # pyvmomi @@ -459,11 +457,13 @@ stevedore==3.5.0 # python-keystoneclient # python-novaclient # python-openstackclient -tempora==5.0.0 +tempora==5.0.1 # via portend +typing-extensions==4.2.0 + # via azure-core uritemplate==4.1.1 # via google-api-python-client -urllib3==1.26.8 +urllib3==1.26.9 # via requests uuid==1.30 # via -r RO-SDN-arista_cloudvision/requirements.in @@ -473,13 +473,13 @@ wcwidth==0.2.5 # via # cmd2 # prettytable -wrapt==1.13.3 +wrapt==1.14.0 # via # debtcollector # python-glanceclient zc.lockfile==2.0 # via cherrypy -zipp==3.7.0 +zipp==3.8.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/tox.ini b/tox.ini index 4e1ca355..78d9d2ee 100644 --- a/tox.ini +++ b/tox.ini @@ -16,7 +16,7 @@ ####################################################################################### [tox] -envlist = black, flake8, safety +envlist = black, flake8, safety, cover [tox:jenkins] toxworkdir = /tmp/.tox @@ -79,55 +79,56 @@ commands = nose2 -C --coverage NG-RO/osm_ng_ro -s NG-RO/osm_ng_ro sh -c 'mv .coverage .coverage_ng_ro' # RO-plugin - nose2 -C --coverage RO-plugin/osm_ro_plugin -s RO-plugin/osm_ro_plugin - sh -c 'mv .coverage .coverage_ro_plugin' + # nose2 -C --coverage RO-plugin/osm_ro_plugin -s RO-plugin/osm_ro_plugin + # sh -c 'mv .coverage .coverage_ro_plugin' # RO-SDN-arista_cloudvision - nose2 -C --coverage RO-SDN-arista_cloudvision/osm_rosdn_arista_cloudvision -s RO-SDN-arista_cloudvision/osm_rosdn_arista_cloudvision - sh -c 'mv .coverage .coverage_rosdn_arista_cloudvision' + # nose2 -C --coverage RO-SDN-arista_cloudvision/osm_rosdn_arista_cloudvision -s RO-SDN-arista_cloudvision/osm_rosdn_arista_cloudvision + # sh -c 'mv .coverage .coverage_rosdn_arista_cloudvision' # RO-SDN-dpb - nose2 -C --coverage RO-SDN-dpb/osm_rosdn_dpb -s RO-SDN-dpb/osm_rosdn_dpb - sh -c 'mv .coverage .coverage_rosdn_dpb' + # nose2 -C --coverage RO-SDN-dpb/osm_rosdn_dpb -s RO-SDN-dpb/osm_rosdn_dpb + # sh -c 'mv .coverage .coverage_rosdn_dpb' # RO-SDN-dynpac - nose2 -C --coverage RO-SDN-dynpac/osm_rosdn_dynpac -s RO-SDN-dynpac/osm_rosdn_dynpac - sh -c 'mv .coverage .coverage_rosdn_dynpac' + # nose2 -C --coverage RO-SDN-dynpac/osm_rosdn_dynpac -s RO-SDN-dynpac/osm_rosdn_dynpac + # sh -c 'mv .coverage .coverage_rosdn_dynpac' # RO-SDN-floodlight_openflow - nose2 -C --coverage RO-SDN-floodlight_openflow/osm_rosdn_floodlightof -s RO-SDN-floodlight_openflow/osm_rosdn_floodlightof - sh -c 'mv .coverage .coverage_rosdn_floodlightof' + # nose2 -C --coverage RO-SDN-floodlight_openflow/osm_rosdn_floodlightof -s RO-SDN-floodlight_openflow/osm_rosdn_floodlightof + # sh -c 'mv .coverage .coverage_rosdn_floodlightof' # RO-SDN-ietfl2vpn - nose2 -C --coverage RO-SDN-ietfl2vpn/osm_rosdn_ietfl2vpn -s RO-SDN-ietfl2vpn/osm_rosdn_ietfl2vpn - sh -c 'mv .coverage .coverage_rosdn_ietfl2vpn' + # nose2 -C --coverage RO-SDN-ietfl2vpn/osm_rosdn_ietfl2vpn -s RO-SDN-ietfl2vpn/osm_rosdn_ietfl2vpn + # sh -c 'mv .coverage .coverage_rosdn_ietfl2vpn' # RO-SDN-juniper_contrail - nose2 -C --coverage RO-SDN-juniper_contrail/osm_rosdn_juniper_contrail -s RO-SDN-juniper_contrail/osm_rosdn_juniper_contrail - sh -c 'mv .coverage .coverage_rosdn_juniper_contrail' + # nose2 -C --coverage RO-SDN-juniper_contrail/osm_rosdn_juniper_contrail -s RO-SDN-juniper_contrail/osm_rosdn_juniper_contrail + # sh -c 'mv .coverage .coverage_rosdn_juniper_contrail' # RO-SDN-odl_openflow - nose2 -C --coverage RO-SDN-odl_openflow/osm_rosdn_odlof -s RO-SDN-odl_openflow/osm_rosdn_odlof - sh -c 'mv .coverage .coverage_rosdn_odlof' + # nose2 -C --coverage RO-SDN-odl_openflow/osm_rosdn_odlof -s RO-SDN-odl_openflow/osm_rosdn_odlof + # sh -c 'mv .coverage .coverage_rosdn_odlof' # RO-SDN-onos_openflow - nose2 -C --coverage RO-SDN-onos_openflow/osm_rosdn_onosof -s RO-SDN-onos_openflow/osm_rosdn_onosof - sh -c 'mv .coverage .coverage_rosdn_onosof' + # nose2 -C --coverage RO-SDN-onos_openflow/osm_rosdn_onosof -s RO-SDN-onos_openflow/osm_rosdn_onosof + # sh -c 'mv .coverage .coverage_rosdn_onosof' # RO-SDN-onos_vpls - nose2 -C --coverage RO-SDN-onos_vpls/osm_rosdn_onos_vpls -s RO-SDN-onos_vpls/osm_rosdn_onos_vpls - sh -c 'mv .coverage .coverage_rosdn_onos_vpls' + # nose2 -C --coverage RO-SDN-onos_vpls/osm_rosdn_onos_vpls -s RO-SDN-onos_vpls/osm_rosdn_onos_vpls + # sh -c 'mv .coverage .coverage_rosdn_onos_vpls' # RO-VIM-aws - nose2 -C --coverage RO-VIM-aws/osm_rovim_aws -s RO-VIM-aws/osm_rovim_aws - sh -c 'mv .coverage .coverage_rovim_aws' + # nose2 -C --coverage RO-VIM-aws/osm_rovim_aws -s RO-VIM-aws/osm_rovim_aws + # sh -c 'mv .coverage .coverage_rovim_aws' # RO-VIM-azure - nose2 -C --coverage RO-VIM-azure/osm_rovim_azure -s RO-VIM-azure/osm_rovim_azure - sh -c 'mv .coverage .coverage_rovim_azure' + # nose2 -C --coverage RO-VIM-azure/osm_rovim_azure -s RO-VIM-azure/osm_rovim_azure + # sh -c 'mv .coverage .coverage_rovim_azure' # RO-VIM-openstack - # nose2 -C --coverage RO-VIM-openstack/osm_rovim_openstack -s RO-VIM-openstack/osm_rovim_openstack - # sh -c 'mv .coverage .coverage_rovim_openstack' + nose2 -C --coverage RO-VIM-openstack/osm_rovim_openstack -s RO-VIM-openstack/osm_rovim_openstack + sh -c 'mv .coverage .coverage_rovim_openstack' # RO-VIM-openvim - nose2 -C --coverage RO-VIM-openvim/osm_rovim_openvim -s RO-VIM-openvim/osm_rovim_openvim - sh -c 'mv .coverage .coverage_rovim_openvim' + # nose2 -C --coverage RO-VIM-openvim/osm_rovim_openvim -s RO-VIM-openvim/osm_rovim_openvim + # sh -c 'mv .coverage .coverage_rovim_openvim' # RO-VIM-vmware # nose2 -C --coverage RO-VIM-vmware/osm_rovim_vmware -s RO-VIM-vmware/osm_rovim_vmware # sh -c 'mv .coverage .coverage_rovim_vmware' # RO-VIM-gcp - nose2 -C --coverage RO-VIM-gcp/osm_rovim_gcp -s RO-VIM-gcp/osm_rovim_gcp - sh -c 'mv .coverage .coverage_rovim_gcp' + # nose2 -C --coverage RO-VIM-gcp/osm_rovim_gcp -s RO-VIM-gcp/osm_rovim_gcp + # sh -c 'mv .coverage .coverage_rovim_gcp' # Combine results and generate reports - coverage combine .coverage_ng_ro .coverage_ro_plugin .coverage_rosdn_arista_cloudvision .coverage_rosdn_dpb .coverage_rosdn_dynpac .coverage_rosdn_floodlightof .coverage_rosdn_ietfl2vpn .coverage_rosdn_juniper_contrail .coverage_rosdn_odlof .coverage_rosdn_onos_vpls .coverage_rosdn_onosof .coverage_rovim_aws .coverage_rovim_azure .coverage_rovim_openvim .coverage_rovim_gcp # .coverage_rovim_openstack .coverage_rovim_vmware + # coverage combine .coverage_ng_ro .coverage_ro_plugin .coverage_rosdn_arista_cloudvision .coverage_rosdn_dpb .coverage_rosdn_dynpac .coverage_rosdn_floodlightof .coverage_rosdn_ietfl2vpn .coverage_rosdn_juniper_contrail .coverage_rosdn_odlof .coverage_rosdn_onos_vpls .coverage_rosdn_onosof .coverage_rovim_aws .coverage_rovim_azure .coverage_rovim_openvim .coverage_rovim_gcp # .coverage_rovim_openstack .coverage_rovim_vmware + coverage combine .coverage_ng_ro .coverage_rovim_openstack coverage report --omit='*tests*' coverage html -d ./cover --omit='*tests*' coverage xml -o coverage.xml --omit='*tests*'