Fix Bug 1785 Openstack VIM connector failed Unittests 12/11812/3
authoraticig <gulsum.atici@canonical.com>
Thu, 31 Mar 2022 19:03:33 +0000 (22:03 +0300)
committeraticig <gulsum.atici@canonical.com>
Fri, 22 Apr 2022 17:28:21 +0000 (20:28 +0300)
This patch fixes bug 1785 the Openstack VIM connector failed Unittests.
Openstack VIM unittests and coverage are also enabled in tox.ini.

Change-Id: I136a53a6f59c48a1681cfe3c87dbe9aada253a98
Signed-off-by: aticig <gulsum.atici@canonical.com>
RO-VIM-openstack/osm_rovim_openstack/tests/test_vimconn_openstack.py
devops-stages/stage-test.sh
releasenotes/notes/fix_bug_1785-a26aa7c96f98813d.yaml [new file with mode: 0644]
requirements-test.txt
requirements.txt
tox.ini

index c5f7038..0999124 100644 (file)
@@ -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):
index 9d76107..fd61198 100755 (executable)
@@ -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_1785-a26aa7c96f98813d.yaml b/releasenotes/notes/fix_bug_1785-a26aa7c96f98813d.yaml
new file mode 100644 (file)
index 0000000..5b23827
--- /dev/null
@@ -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 1785 the Openstack VIM connector failed Unittests. Openstack VIM
+    unittests are also enabled in tox.ini.
+
index f461166..9aafc4b 100644 (file)
 #######################################################################################
 -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
index 2d6abdf..dd6155e 100644 (file)
@@ -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 5c00a95..ca1afaf 100644 (file)
--- 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*'