From bab6b4a82d922902eb13e09a96a618e40d9cd025 Mon Sep 17 00:00:00 2001 From: Magesh GV Date: Wed, 18 Mar 2015 17:12:44 +0530 Subject: [PATCH] Update GBP to work with Neutron Master (Post Juno) Change-Id: I0262d4736e1deb990058cd7256a86badc0b9d9fd Closes-bug: 1433530 --- HACKING.rst | 11 ++++ etc/test-policy.json | 41 --------------- gbpservice/network/neutronv2/client.py | 4 +- .../neutron/db/grouppolicy/group_policy_db.py | 10 ++-- .../db/grouppolicy/group_policy_mapping_db.py | 7 ++- .../db/migration/alembic_migrations/env.py | 4 +- .../neutron/db/migration/models/head.py | 3 -- gbpservice/neutron/db/servicechain_db.py | 13 ++--- gbpservice/neutron/extensions/group_policy.py | 7 ++- gbpservice/neutron/extensions/servicechain.py | 6 +-- .../ml2/drivers/grouppolicy/apic/driver.py | 10 ++-- .../ml2/drivers/grouppolicy/nuage/driver.py | 6 ++- .../ml2/drivers/grouppolicy/odl/driver.py | 6 ++- .../neutron/services/grouppolicy/config.py | 2 +- .../drivers/cisco/apic/apic_mapping.py | 24 ++++----- .../grouppolicy/drivers/implicit_policy.py | 7 ++- .../drivers/nuage/common/config.py | 2 +- .../grouppolicy/drivers/nuage/driver.py | 7 +-- .../grouppolicy/drivers/odl/config.py | 2 +- .../grouppolicy/drivers/odl/odl_manager.py | 10 ++-- .../grouppolicy/drivers/odl/odl_mapping.py | 4 +- .../drivers/oneconvergence/nvsd_gbp_api.py | 7 ++- .../drivers/oneconvergence/nvsd_gbp_driver.py | 9 ++-- .../grouppolicy/drivers/resource_mapping.py | 19 ++++--- .../services/grouppolicy/extension_manager.py | 7 +-- .../neutron/services/grouppolicy/plugin.py | 4 +- .../grouppolicy/policy_driver_manager.py | 7 ++- .../neutron/services/servicechain/config.py | 2 +- .../services/servicechain/driver_manager.py | 4 +- .../oneconvergence_servicechain_driver.py | 6 +-- .../drivers/simplechain_driver.py | 7 ++- .../servicechain/servicechain_plugin.py | 5 +- gbpservice/neutron/tests/etc/test-policy.json | 52 +++++++++++++++++++ .../db/grouppolicy/test_group_policy_db.py | 23 ++++---- .../test_group_policy_mapping_db.py | 4 +- .../db/grouppolicy/test_servicechain_db.py | 14 ++--- .../services/grouppolicy/test_apic_mapping.py | 36 +++++++++---- .../grouppolicy/test_extension_driver_api.py | 12 ++--- .../grouppolicy/test_grouppolicy_plugin.py | 5 +- .../grouppolicy/test_implicit_policy.py | 8 ++- .../grouppolicy/test_neutronv2_client.py | 13 ++--- .../grouppolicy/test_nuage_gbp_driver.py | 17 +++--- .../services/grouppolicy/test_odl_manager.py | 5 +- .../services/grouppolicy/test_odl_mapping.py | 8 +-- .../test_oneconvergence_gbp_driver.py | 46 ++++++++-------- .../grouppolicy/test_resource_mapping.py | 18 ++++--- .../servicechain/test_servicechain_plugin.py | 2 +- .../servicechain/test_simple_chain_driver.py | 3 +- .../tests/unit/test_extension_group_policy.py | 8 +-- .../tests/unit/test_extension_servicechain.py | 12 ++--- gbpservice/tests/contrib/gate_hook.sh | 3 +- gbpservice/tests/contrib/post_test_hook.sh | 2 + run_tests.sh | 2 +- test-requirements.txt | 2 +- tox.ini | 8 +-- 55 files changed, 312 insertions(+), 254 deletions(-) delete mode 100644 etc/test-policy.json create mode 100644 gbpservice/neutron/tests/etc/test-policy.json diff --git a/HACKING.rst b/HACKING.rst index b78435fa0..1bf8040dd 100644 --- a/HACKING.rst +++ b/HACKING.rst @@ -2,3 +2,14 @@ Group Based Policy Style Commandments =============================================== Read the OpenStack Style Commandments http://docs.openstack.org/developer/hacking/ + + +Group Based Policy Specific Commandments +-------------------------- + +- [N319] Validate that debug level logs are not translated +- [N320] Validate that LOG messages, except debug ones, have translations +- [N321] Validate that jsonutils module is used instead of json +- [N322] Detect common errors with assert_called_once_with +- [N323] Enforce namespace-less imports for oslo libraries + diff --git a/etc/test-policy.json b/etc/test-policy.json deleted file mode 100644 index 9549a065b..000000000 --- a/etc/test-policy.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "context_is_admin": "role:admin", - "admin_or_owner": "rule:context_is_admin or tenant_id:%(tenant_id)s", - "admin_only": "rule:context_is_admin", - "regular_user": "", - "default": "rule:admin_or_owner", - "gbp_shared": "field:policy_target_groups:shared=True", - - "create_policy_target_group": "", - "get_policy_target_group": "rule:admin_or_owner or rule:gbp_shared", - - "create_l2_policy": "", - "get_l2_policy": "rule:admin_or_owner or rule:gbp_shared", - - "create_l3_policy": "", - "get_l3_policy": "rule:admin_or_owner or rule:gbp_shared", - - "create_policy_classifier": "", - "get_policy_classifier": "rule:admin_or_owner or rule:gbp_shared", - - "create_policy_action": "", - "get_policy_action": "rule:admin_or_owner or rule:gbp_shared", - - "create_policy_rule": "", - "get_policy_rule": "rule:admin_or_owner or rule:gbp_shared", - - "create_policy_rule_set": "", - "get_policy_rule_set": "rule:admin_or_owner or rule:gbp_shared", - - "create_network_service_policy": "", - "get_network_service_policy": "rule:admin_or_owner or rule:gbp_shared", - - "create_external_segment": "", - "get_external_segment": "rule:admin_or_owner or rule:gbp_shared", - - "create_external_policy": "", - "get_external_policy": "rule:admin_or_owner or rule:gbp_shared", - - "create_nat_pool": "", - "get_nat_pool": "rule:admin_or_owner or rule:gbp_shared" -} diff --git a/gbpservice/network/neutronv2/client.py b/gbpservice/network/neutronv2/client.py index bc51634c4..3507c96d5 100644 --- a/gbpservice/network/neutronv2/client.py +++ b/gbpservice/network/neutronv2/client.py @@ -11,10 +11,10 @@ # under the License. # -from neutron.openstack.common import lockutils from neutronclient.common import exceptions as neutron_client_exc from neutronclient.v2_0 import client as clientv20 -from oslo.config import cfg +from oslo_concurrency import lockutils +from oslo_config import cfg neutron_opts = [ diff --git a/gbpservice/neutron/db/grouppolicy/group_policy_db.py b/gbpservice/neutron/db/grouppolicy/group_policy_db.py index 022a15633..f44ee9ad2 100644 --- a/gbpservice/neutron/db/grouppolicy/group_policy_db.py +++ b/gbpservice/neutron/db/grouppolicy/group_policy_db.py @@ -11,20 +11,18 @@ # under the License. import netaddr - -import sqlalchemy as sa -from sqlalchemy import orm -from sqlalchemy.orm import exc - from neutron.api.v2 import attributes as attr from neutron.common import log from neutron import context from neutron.db import common_db_mixin from neutron.db import model_base from neutron.db import models_v2 -from neutron.openstack.common import log as logging from neutron.openstack.common import uuidutils from neutron.plugins.common import constants +from oslo_log import log as logging +import sqlalchemy as sa +from sqlalchemy import orm +from sqlalchemy.orm import exc from gbpservice.neutron.extensions import group_policy as gpolicy from gbpservice.neutron.services.grouppolicy.common import ( diff --git a/gbpservice/neutron/db/grouppolicy/group_policy_mapping_db.py b/gbpservice/neutron/db/grouppolicy/group_policy_mapping_db.py index 7b488d02e..29402dd2c 100644 --- a/gbpservice/neutron/db/grouppolicy/group_policy_mapping_db.py +++ b/gbpservice/neutron/db/grouppolicy/group_policy_mapping_db.py @@ -10,13 +10,12 @@ # License for the specific language governing permissions and limitations # under the License. -import sqlalchemy as sa -from sqlalchemy import orm - from neutron.common import log from neutron.db import model_base -from neutron.openstack.common import log as logging from neutron.openstack.common import uuidutils +from oslo_log import log as logging +import sqlalchemy as sa +from sqlalchemy import orm from gbpservice.neutron.db.grouppolicy import group_policy_db as gpdb diff --git a/gbpservice/neutron/db/migration/alembic_migrations/env.py b/gbpservice/neutron/db/migration/alembic_migrations/env.py index 6ad70a429..3d82306ae 100644 --- a/gbpservice/neutron/db/migration/alembic_migrations/env.py +++ b/gbpservice/neutron/db/migration/alembic_migrations/env.py @@ -14,8 +14,8 @@ from logging import config as logging_config from alembic import context from neutron.db import model_base -from oslo.config import cfg -from oslo.db.sqlalchemy import session +from oslo_config import cfg +from oslo_db.sqlalchemy import session import sqlalchemy as sa from sqlalchemy import event diff --git a/gbpservice/neutron/db/migration/models/head.py b/gbpservice/neutron/db/migration/models/head.py index 4c0c8a827..36ee64642 100644 --- a/gbpservice/neutron/db/migration/models/head.py +++ b/gbpservice/neutron/db/migration/models/head.py @@ -13,9 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. - -from gbpservice.neutron.db.grouppolicy import group_policy_db # noqa -from gbpservice.neutron.db.grouppolicy import group_policy_mapping_db # noqa from neutron.db import model_base diff --git a/gbpservice/neutron/db/servicechain_db.py b/gbpservice/neutron/db/servicechain_db.py index b5524017f..31f4ceae4 100644 --- a/gbpservice/neutron/db/servicechain_db.py +++ b/gbpservice/neutron/db/servicechain_db.py @@ -11,24 +11,25 @@ # under the License. import ast -import sqlalchemy as sa -from sqlalchemy.ext.orderinglist import ordering_list -from sqlalchemy import orm -from sqlalchemy.orm import exc from neutron.common import log from neutron.db import common_db_mixin from neutron.db import model_base from neutron.db import models_v2 from neutron import manager -from neutron.openstack.common import jsonutils -from neutron.openstack.common import log as logging from neutron.openstack.common import uuidutils from neutron.plugins.common import constants as pconst +from oslo_log import log as logging +from oslo_serialization import jsonutils +import sqlalchemy as sa +from sqlalchemy.ext.orderinglist import ordering_list +from sqlalchemy import orm +from sqlalchemy.orm import exc from gbpservice.neutron.extensions import servicechain as schain from gbpservice.neutron.services.servicechain.common import exceptions as s_exc + LOG = logging.getLogger(__name__) MAX_IPV4_SUBNET_PREFIX_LENGTH = 31 MAX_IPV6_SUBNET_PREFIX_LENGTH = 127 diff --git a/gbpservice/neutron/extensions/group_policy.py b/gbpservice/neutron/extensions/group_policy.py index 2feabf84e..5f7f7ade9 100644 --- a/gbpservice/neutron/extensions/group_policy.py +++ b/gbpservice/neutron/extensions/group_policy.py @@ -12,21 +12,21 @@ import abc -import six - from neutron.api import extensions from neutron.api.v2 import attributes as attr from neutron.api.v2 import resource_helper from neutron.common import exceptions as nexc -from neutron.openstack.common import log as logging from neutron.openstack.common import uuidutils from neutron.plugins.common import constants from neutron.services import service_base +from oslo_log import log as logging +import six import gbpservice.neutron.extensions from gbpservice.neutron.services.grouppolicy.common import ( constants as gp_constants) + # The code below is a monkey patch of key Neutron's modules. This is needed for # the GBP service to be loaded correctly. GBP extensions' path is added # to Neutron's so that it's found at extension scanning time. @@ -37,7 +37,6 @@ constants.COMMON_PREFIXES["GROUP_POLICY"] = "/grouppolicy" constants.EXT_TO_SERVICE_MAPPING['gp'] = constants.GROUP_POLICY constants.ALLOWED_SERVICES.append(constants.GROUP_POLICY) - LOG = logging.getLogger(__name__) diff --git a/gbpservice/neutron/extensions/servicechain.py b/gbpservice/neutron/extensions/servicechain.py index 0dd05a45b..a468591e9 100644 --- a/gbpservice/neutron/extensions/servicechain.py +++ b/gbpservice/neutron/extensions/servicechain.py @@ -12,19 +12,19 @@ import abc -import six - from neutron.api import extensions from neutron.api.v2 import attributes as attr from neutron.api.v2 import resource_helper from neutron.common import exceptions as nexc from neutron.common import log -from neutron.openstack.common import log as logging from neutron.plugins.common import constants from neutron.services import service_base +from oslo_log import log as logging +import six import gbpservice.neutron.extensions + # The code below is a monkey patch of key Neutron's modules. This is needed for # the GBP service to be loaded correctly. GBP extensions' path is added # to Neutron's so that it's found at extension scanning time. diff --git a/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/apic/driver.py b/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/apic/driver.py index 122946b3a..04fd43fa8 100644 --- a/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/apic/driver.py +++ b/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/apic/driver.py @@ -14,11 +14,10 @@ # under the License. from neutron.common import constants as n_constants -from neutron.openstack.common import log +from neutron import manager from neutron.plugins.ml2 import driver_api as api +from oslo_log import log -from gbpservice.neutron.services.grouppolicy.drivers.cisco.apic import ( - apic_mapping as amap) LOG = log.getLogger(__name__) @@ -31,8 +30,9 @@ class APICMechanismGBPDriver(api.MechanismDriver): @property def apic_gbp(self): if not self._apic_gbp: - self._apic_gbp = (amap.ApicMappingDriver. - get_initialized_instance()) + self._apic_gbp = manager.NeutronManager.get_service_plugins()[ + 'GROUP_POLICY'].policy_driver_manager.policy_drivers[ + 'apic'].obj return self._apic_gbp def create_port_postcommit(self, context): diff --git a/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/nuage/driver.py b/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/nuage/driver.py index 18c83758c..5f54f008f 100644 --- a/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/nuage/driver.py +++ b/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/nuage/driver.py @@ -14,11 +14,13 @@ from neutron.plugins.ml2 import driver_api as api -from neutron.plugins.nuage.common import constants as nuage_const from gbpservice.neutron.services.grouppolicy.drivers.nuage import driver +NOVA_PORT_OWNER_PREF = 'compute:' + + class NuageMechanismGBPDriver(api.MechanismDriver): def initialize(self): @@ -33,7 +35,7 @@ class NuageMechanismGBPDriver(api.MechanismDriver): def update_port_postcommit(self, context): port = context.current - port_prefix = nuage_const.NOVA_PORT_OWNER_PREF + port_prefix = NOVA_PORT_OWNER_PREF # Check two things prior to proceeding with # talking to backend. # 1) binding has happened successfully. diff --git a/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/odl/driver.py b/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/odl/driver.py index e8bfa8dcc..141ab4985 100644 --- a/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/odl/driver.py +++ b/gbpservice/neutron/plugins/ml2/drivers/grouppolicy/odl/driver.py @@ -10,12 +10,14 @@ # License for the specific language governing permissions and limitations # under the License. -from gbpservice.neutron.services.grouppolicy.drivers.odl import odl_mapping from neutron.common import constants as n_constants from neutron.extensions import portbindings -from neutron.openstack.common import log from neutron.plugins.common import constants from neutron.plugins.ml2 import driver_api as api +from oslo_log import log as log + +from gbpservice.neutron.services.grouppolicy.drivers.odl import odl_mapping + LOG = log.getLogger(__name__) diff --git a/gbpservice/neutron/services/grouppolicy/config.py b/gbpservice/neutron/services/grouppolicy/config.py index 40965dc95..835833461 100644 --- a/gbpservice/neutron/services/grouppolicy/config.py +++ b/gbpservice/neutron/services/grouppolicy/config.py @@ -10,7 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. -from oslo.config import cfg +from oslo_config import cfg group_policy_opts = [ diff --git a/gbpservice/neutron/services/grouppolicy/drivers/cisco/apic/apic_mapping.py b/gbpservice/neutron/services/grouppolicy/drivers/cisco/apic/apic_mapping.py index a156a9bc0..701b76cf2 100644 --- a/gbpservice/neutron/services/grouppolicy/drivers/cisco/apic/apic_mapping.py +++ b/gbpservice/neutron/services/grouppolicy/drivers/cisco/apic/apic_mapping.py @@ -18,12 +18,12 @@ from neutron.common import exceptions as n_exc from neutron.extensions import providernet as pn from neutron.extensions import securitygroup as ext_sg from neutron import manager -from neutron.openstack.common import lockutils -from neutron.openstack.common import log as logging from neutron.plugins.ml2.drivers.cisco.apic import apic_model from neutron.plugins.ml2.drivers.cisco.apic import config from neutron.plugins.ml2 import models -from oslo.config import cfg +from oslo_concurrency import lockutils +from oslo_config import cfg +from oslo_log import log as logging from gbpservice.neutron.db.grouppolicy import group_policy_mapping_db as gpdb from gbpservice.neutron.services.grouppolicy.common import constants as g_const @@ -31,6 +31,7 @@ from gbpservice.neutron.services.grouppolicy.common import exceptions as gpexc from gbpservice.neutron.services.grouppolicy.drivers import ( resource_mapping as api) + LOG = logging.getLogger(__name__) @@ -116,7 +117,6 @@ class ApicMappingDriver(api.ResourceMappingDriver): self.apic_manager = ApicMappingDriver.get_apic_manager() self.name_mapper = self.apic_manager.apic_mapper self._gbp_plugin = None - ApicMappingDriver.me = self @property def gbp_plugin(self): @@ -125,10 +125,6 @@ class ApicMappingDriver(api.ResourceMappingDriver): .get("GROUP_POLICY")) return self._gbp_plugin - @staticmethod - def get_initialized_instance(): - return ApicMappingDriver.me - def get_gbp_details(self, context, **kwargs): port_id = (kwargs.get('port_id') or self._core_plugin._device_to_port_id(kwargs['device'])) @@ -788,11 +784,13 @@ class ApicMappingDriver(api.ResourceMappingDriver): transaction=trs) def _get_active_path_count(self, plugin_context, port_info): - return plugin_context.session.query( - models.PortBinding).filter_by( - host=port_info['host'], - segment=port_info['segmentation_id']).filter( - models.PortBinding.port_id != port_info['port_id']).count() + return (plugin_context.session.query(models.PortBindingLevel). + join(models.NetworkSegment). + filter(models.PortBindingLevel.host == port_info['host']). + filter(models.NetworkSegment.segmentation_id == port_info[ + 'segmentation_id']). + filter(models.PortBindingLevel.port_id != port_info['port_id']). + count()) @lockutils.synchronized('apic-portlock') def _delete_port_path(self, context, atenant_id, ptg, port_info): diff --git a/gbpservice/neutron/services/grouppolicy/drivers/implicit_policy.py b/gbpservice/neutron/services/grouppolicy/drivers/implicit_policy.py index 5db34b2eb..c415387de 100644 --- a/gbpservice/neutron/services/grouppolicy/drivers/implicit_policy.py +++ b/gbpservice/neutron/services/grouppolicy/drivers/implicit_policy.py @@ -10,12 +10,11 @@ # License for the specific language governing permissions and limitations # under the License. -from oslo.config import cfg -import sqlalchemy as sa - from neutron.common import log from neutron.db import model_base -from neutron.openstack.common import log as logging +from oslo_config import cfg +from oslo_log import log as logging +import sqlalchemy as sa from gbpservice.neutron.services.grouppolicy import ( group_policy_driver_api as api) diff --git a/gbpservice/neutron/services/grouppolicy/drivers/nuage/common/config.py b/gbpservice/neutron/services/grouppolicy/drivers/nuage/common/config.py index e1f6eeba9..a139a1b82 100644 --- a/gbpservice/neutron/services/grouppolicy/drivers/nuage/common/config.py +++ b/gbpservice/neutron/services/grouppolicy/drivers/nuage/common/config.py @@ -12,7 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. -from oslo.config import cfg +from oslo_config import cfg restproxy_opts = [ diff --git a/gbpservice/neutron/services/grouppolicy/drivers/nuage/driver.py b/gbpservice/neutron/services/grouppolicy/drivers/nuage/driver.py index 47d59e389..02032a1b2 100644 --- a/gbpservice/neutron/services/grouppolicy/drivers/nuage/driver.py +++ b/gbpservice/neutron/services/grouppolicy/drivers/nuage/driver.py @@ -12,14 +12,15 @@ # License for the specific language governing permissions and limitations # under the License. -from neutron.openstack.common import importutils -from neutron.openstack.common import log as logging -from oslo.config import cfg +from oslo_config import cfg +from oslo_log import log as logging +from oslo_utils import importutils from gbpservice.neutron.services.grouppolicy.drivers import ( resource_mapping as api) from gbpservice.neutron.services.grouppolicy.drivers.nuage.common import config + LOG = logging.getLogger(__name__) diff --git a/gbpservice/neutron/services/grouppolicy/drivers/odl/config.py b/gbpservice/neutron/services/grouppolicy/drivers/odl/config.py index b11cfdfcd..ac77c5faa 100644 --- a/gbpservice/neutron/services/grouppolicy/drivers/odl/config.py +++ b/gbpservice/neutron/services/grouppolicy/drivers/odl/config.py @@ -10,7 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. -from oslo.config import cfg +from oslo_config import cfg od_driver_opts = [ diff --git a/gbpservice/neutron/services/grouppolicy/drivers/odl/odl_manager.py b/gbpservice/neutron/services/grouppolicy/drivers/odl/odl_manager.py index 58e9f9657..a03264ae9 100644 --- a/gbpservice/neutron/services/grouppolicy/drivers/odl/odl_manager.py +++ b/gbpservice/neutron/services/grouppolicy/drivers/odl/odl_manager.py @@ -11,13 +11,15 @@ # under the License. import requests - -from neutron.openstack.common import log as logging -from oslo.config import cfg -from oslo.serialization import jsonutils from requests import auth +from oslo_config import cfg +from oslo_log import log as logging +from oslo_serialization import jsonutils + + LOG = logging.getLogger(__name__) + cfg.CONF.import_opt( 'odl_username', 'gbpservice.neutron.services.grouppolicy.drivers.odl.config', diff --git a/gbpservice/neutron/services/grouppolicy/drivers/odl/odl_mapping.py b/gbpservice/neutron/services/grouppolicy/drivers/odl/odl_mapping.py index b78dd58ff..d974a0f81 100644 --- a/gbpservice/neutron/services/grouppolicy/drivers/odl/odl_mapping.py +++ b/gbpservice/neutron/services/grouppolicy/drivers/odl/odl_mapping.py @@ -13,9 +13,9 @@ import uuid from neutron import manager -from neutron.openstack.common import lockutils # noqa -from neutron.openstack.common import log as logging from neutron.plugins.common import constants +from oslo_concurrency import lockutils # noqa +from oslo_log import log as logging from gbpservice.neutron.db.grouppolicy import group_policy_mapping_db as gpdb from gbpservice.neutron.services.grouppolicy.common import constants as g_const diff --git a/gbpservice/neutron/services/grouppolicy/drivers/oneconvergence/nvsd_gbp_api.py b/gbpservice/neutron/services/grouppolicy/drivers/oneconvergence/nvsd_gbp_api.py index ac5089c45..e60c6a597 100644 --- a/gbpservice/neutron/services/grouppolicy/drivers/oneconvergence/nvsd_gbp_api.py +++ b/gbpservice/neutron/services/grouppolicy/drivers/oneconvergence/nvsd_gbp_api.py @@ -17,13 +17,12 @@ import httplib import requests import urlparse -from oslo.config import cfg +from oslo_config import cfg +from oslo_log import log as logging +from oslo_serialization import jsonutils from gbpservice.neutron.services.grouppolicy.common import exceptions -from neutron.openstack.common import jsonutils -from neutron.openstack.common import log as logging - SERVICE_CONTROLLER_OPTIONS = [ cfg.StrOpt('service_controller_ip', diff --git a/gbpservice/neutron/services/grouppolicy/drivers/oneconvergence/nvsd_gbp_driver.py b/gbpservice/neutron/services/grouppolicy/drivers/oneconvergence/nvsd_gbp_driver.py index eb0202ffe..3a93758da 100644 --- a/gbpservice/neutron/services/grouppolicy/drivers/oneconvergence/nvsd_gbp_driver.py +++ b/gbpservice/neutron/services/grouppolicy/drivers/oneconvergence/nvsd_gbp_driver.py @@ -12,15 +12,16 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron.common import exceptions as n_exc +from neutron.common import log +from oslo_log import log as logging +from oslo_utils import excutils + from gbpservice.neutron.services.grouppolicy.drivers import ( resource_mapping as res_map) from gbpservice.neutron.services.grouppolicy.drivers.oneconvergence import ( nvsd_gbp_api as api) -from neutron.common import exceptions as n_exc -from neutron.common import log -from neutron.openstack.common import excutils -from neutron.openstack.common import log as logging LOG = logging.getLogger(__name__) diff --git a/gbpservice/neutron/services/grouppolicy/drivers/resource_mapping.py b/gbpservice/neutron/services/grouppolicy/drivers/resource_mapping.py index a4f35a51c..ef765ae3b 100644 --- a/gbpservice/neutron/services/grouppolicy/drivers/resource_mapping.py +++ b/gbpservice/neutron/services/grouppolicy/drivers/resource_mapping.py @@ -23,10 +23,10 @@ from neutron.db import models_v2 from neutron.extensions import securitygroup as ext_sg from neutron import manager from neutron.notifiers import nova -from neutron.openstack.common import jsonutils -from neutron.openstack.common import log as logging from neutron.plugins.common import constants as pconst -from oslo.config import cfg +from oslo_config import cfg +from oslo_log import log as logging +from oslo_serialization import jsonutils import sqlalchemy as sa from gbpservice.neutron.db.grouppolicy import group_policy_db as gpdb @@ -1055,14 +1055,17 @@ class ResourceMappingDriver(api.PolicyDriver): for es in es_list: subnet = self._core_plugin.get_subnet(context._plugin_context, es['subnet_id']) + external_fixed_ips = [ + {'subnet_id': es['subnet_id'], + 'ip_address': x} for x in es_dict[es['id']] + ] if es_dict[es['id']] else None + for ip in external_fixed_ips or []: + if not ip['ip_address']: + del ip['ip_address'] interface_info = { 'network_id': subnet['network_id'], 'enable_snat': es['port_address_translation'], - 'external_fixed_ips': [ - {'subnet_id': es['subnet_id'], - 'ip_address': x} for x in es_dict[es['id']]] - if es_dict[es['id']] else - attributes.ATTR_NOT_SPECIFIED} + 'external_fixed_ips': external_fixed_ips} router = self._add_router_gw_interface( context._plugin_context, router_id, interface_info) if not es_dict[es['id']] or not es_dict[es['id']][0]: diff --git a/gbpservice/neutron/services/grouppolicy/extension_manager.py b/gbpservice/neutron/services/grouppolicy/extension_manager.py index e0ff3ba95..8637e3955 100644 --- a/gbpservice/neutron/services/grouppolicy/extension_manager.py +++ b/gbpservice/neutron/services/grouppolicy/extension_manager.py @@ -11,10 +11,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -from neutron.openstack.common import log -from oslo.config import cfg +from oslo_config import cfg +from oslo_log import log import stevedore + LOG = log.getLogger(__name__) @@ -251,4 +252,4 @@ class ExtensionManager(stevedore.named.NamedExtensionManager): def extend_nat_pool_dict(self, session, result): """Call all extension drivers to extend NP dictionary.""" for driver in self.ordered_ext_drivers: - driver.obj.extend_nat_pool_dict(session, result) \ No newline at end of file + driver.obj.extend_nat_pool_dict(session, result) diff --git a/gbpservice/neutron/services/grouppolicy/plugin.py b/gbpservice/neutron/services/grouppolicy/plugin.py index 96436893c..e660e0c18 100644 --- a/gbpservice/neutron/services/grouppolicy/plugin.py +++ b/gbpservice/neutron/services/grouppolicy/plugin.py @@ -14,8 +14,8 @@ import netaddr from neutron.api.v2 import attributes as nattr from neutron.common import log -from neutron.openstack.common import excutils -from neutron.openstack.common import log as logging +from oslo_log import log as logging +from oslo_utils import excutils from gbpservice.neutron.db.grouppolicy import group_policy_db as gpdb from gbpservice.neutron.db.grouppolicy import group_policy_mapping_db diff --git a/gbpservice/neutron/services/grouppolicy/policy_driver_manager.py b/gbpservice/neutron/services/grouppolicy/policy_driver_manager.py index 14b401f6f..34382418d 100644 --- a/gbpservice/neutron/services/grouppolicy/policy_driver_manager.py +++ b/gbpservice/neutron/services/grouppolicy/policy_driver_manager.py @@ -10,11 +10,10 @@ # License for the specific language governing permissions and limitations # under the License. -from neutron.openstack.common import log -from oslo.config import cfg +from oslo_config import cfg +from oslo_log import log import stevedore - from gbpservice.neutron.services.grouppolicy.common import exceptions as gp_exc @@ -376,4 +375,4 @@ class PolicyDriverManager(stevedore.named.NamedExtensionManager): def delete_nat_pool_postcommit(self, context): self._call_on_drivers("delete_nat_pool_postcommit", context, - continue_on_failure=True) \ No newline at end of file + continue_on_failure=True) diff --git a/gbpservice/neutron/services/servicechain/config.py b/gbpservice/neutron/services/servicechain/config.py index 83babadb4..65cb29695 100644 --- a/gbpservice/neutron/services/servicechain/config.py +++ b/gbpservice/neutron/services/servicechain/config.py @@ -10,7 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. -from oslo.config import cfg +from oslo_config import cfg service_chain_opts = [ diff --git a/gbpservice/neutron/services/servicechain/driver_manager.py b/gbpservice/neutron/services/servicechain/driver_manager.py index 7364e5550..3c50343ac 100644 --- a/gbpservice/neutron/services/servicechain/driver_manager.py +++ b/gbpservice/neutron/services/servicechain/driver_manager.py @@ -10,8 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. -from neutron.openstack.common import log -from oslo.config import cfg +from oslo_config import cfg +from oslo_log import log import stevedore from gbpservice.neutron.services.servicechain.common import ( diff --git a/gbpservice/neutron/services/servicechain/drivers/oneconvergence_servicechain_driver.py b/gbpservice/neutron/services/servicechain/drivers/oneconvergence_servicechain_driver.py index f33ed5d28..4aea2c334 100644 --- a/gbpservice/neutron/services/servicechain/drivers/oneconvergence_servicechain_driver.py +++ b/gbpservice/neutron/services/servicechain/drivers/oneconvergence_servicechain_driver.py @@ -18,9 +18,9 @@ from heatclient import client as heat_client from neutron.api.v2 import attributes from neutron.common import log from neutron.db import model_base -from neutron.openstack.common import jsonutils -from neutron.openstack.common import log as logging -from oslo.config import cfg +from oslo_config import cfg +from oslo_log import log as logging +from oslo_serialization import jsonutils import sqlalchemy as sa from gbpservice.neutron.services.grouppolicy.drivers.oneconvergence import ( diff --git a/gbpservice/neutron/services/servicechain/drivers/simplechain_driver.py b/gbpservice/neutron/services/servicechain/drivers/simplechain_driver.py index 0ae41ce60..4f865d31e 100644 --- a/gbpservice/neutron/services/servicechain/drivers/simplechain_driver.py +++ b/gbpservice/neutron/services/servicechain/drivers/simplechain_driver.py @@ -18,13 +18,12 @@ from heatclient import exc as heatException from neutron.common import log from neutron.db import model_base from neutron import manager -from neutron.openstack.common import jsonutils -from neutron.openstack.common import log as logging from neutron.plugins.common import constants as pconst -from oslo.config import cfg +from oslo_config import cfg +from oslo_log import log as logging +from oslo_serialization import jsonutils import sqlalchemy as sa - from gbpservice.neutron.services.servicechain.common import exceptions as exc diff --git a/gbpservice/neutron/services/servicechain/servicechain_plugin.py b/gbpservice/neutron/services/servicechain/servicechain_plugin.py index 14f6f0c33..f9ae1a793 100644 --- a/gbpservice/neutron/services/servicechain/servicechain_plugin.py +++ b/gbpservice/neutron/services/servicechain/servicechain_plugin.py @@ -11,8 +11,8 @@ # under the License. from neutron.common import log -from neutron.openstack.common import excutils -from neutron.openstack.common import log as logging +from oslo_log import log as logging +from oslo_utils import excutils import gbpservice.neutron.db.servicechain_db as servicechain_db from gbpservice.neutron.services.servicechain import ( @@ -20,6 +20,7 @@ from gbpservice.neutron.services.servicechain import ( from gbpservice.neutron.services.servicechain import ( servicechain_context as servicechain_context) + LOG = logging.getLogger(__name__) diff --git a/gbpservice/neutron/tests/etc/test-policy.json b/gbpservice/neutron/tests/etc/test-policy.json new file mode 100644 index 000000000..77181a226 --- /dev/null +++ b/gbpservice/neutron/tests/etc/test-policy.json @@ -0,0 +1,52 @@ +{ + "context_is_admin": "role:admin or user_name:neutron", + "admin_or_owner": "rule:context_is_admin or tenant_id:%(tenant_id)s", + "context_is_advsvc": "role:advsvc", + "admin_only": "rule:context_is_admin", + "regular_user": "", + "default": "rule:admin_or_owner", + "gbp_shared": "field:policy_target_groups:shared=True", + + "create_policy_target_group": "", + "get_policy_target_group": "rule:admin_or_owner or rule:gbp_shared", + + "gbp_l2p_shared": "field:l2_policies:shared=True", + "create_l2_policy": "", + "get_l2_policy": "rule:admin_or_owner or rule:gbp_l2p_shared", + + "gbp_l3p_shared": "field:l3_policies:shared=True", + "create_l3_policy": "", + "get_l3_policy": "rule:admin_or_owner or rule:gbp_l3p_shared", + + "gbp_policy_classifier_shared": "field:policy_classifiers:shared=True", + "create_policy_classifier": "", + "get_policy_classifier": "rule:admin_or_owner or rule:gbp_policy_classifier_shared", + + "gbp_policy_action_shared": "field:policy_actions:shared=True", + "create_policy_action": "", + "get_policy_action": "rule:admin_or_owner or rule:gbp_policy_action_shared", + + "gbp_policy_rule_shared": "field:policy_rules:shared=True", + "create_policy_rule": "", + "get_policy_rule": "rule:admin_or_owner or rule:gbp_policy_rule_shared", + + "gbp_policy_rule_set_shared": "field:policy_rule_sets:shared=True", + "create_policy_rule_set": "", + "get_policy_rule_set": "rule:admin_or_owner or rule:gbp_policy_rule_set_shared", + + "gbp_nsp_shared": "field:network_service_policies:shared=True", + "create_network_service_policy": "", + "get_network_service_policy": "rule:admin_or_owner or rule:gbp_nsp_shared", + + "gbp_external_segment_shared": "field:external_segments:shared=True", + "create_external_segment": "", + "get_external_segment": "rule:admin_or_owner or rule:gbp_external_segment_shared", + + "gbp_external_policy_shared": "field:external_policies:shared=True", + "create_external_policy": "", + "get_external_policy": "rule:admin_or_owner or rule:gbp_external_policy_shared", + + "gbp_nat_pool_shared": "field:nat_pools:shared=True", + "create_nat_pool": "", + "get_nat_pool": "rule:admin_or_owner or rule:gbp_nat_pool_shared" +} diff --git a/gbpservice/neutron/tests/unit/db/grouppolicy/test_group_policy_db.py b/gbpservice/neutron/tests/unit/db/grouppolicy/test_group_policy_db.py index 66b6eafc2..31e1c8704 100644 --- a/gbpservice/neutron/tests/unit/db/grouppolicy/test_group_policy_db.py +++ b/gbpservice/neutron/tests/unit/db/grouppolicy/test_group_policy_db.py @@ -12,26 +12,29 @@ # limitations under the License. import copy +import os import webob.exc from neutron.api import extensions from neutron.api.v2 import attributes as nattr from neutron import context -from neutron.openstack.common import importutils from neutron.openstack.common import uuidutils from neutron.plugins.common import constants -from neutron.tests.unit import test_db_plugin -from neutron.tests.unit import test_extensions -from oslo.config import cfg +from neutron.tests.unit.api import test_extensions +from neutron.tests.unit.db import test_db_base_plugin_v2 +from oslo_config import cfg +from oslo_utils import importutils from gbpservice.neutron.db.grouppolicy import group_policy_db as gpdb -import gbpservice.neutron.extensions from gbpservice.neutron.extensions import group_policy as gpolicy +import gbpservice.neutron.tests from gbpservice.neutron.tests.unit import common as cm JSON_FORMAT = 'json' _uuid = uuidutils.generate_uuid +TESTDIR = os.path.dirname(os.path.abspath(gbpservice.neutron.tests.__file__)) +ETCDIR = os.path.join(TESTDIR, 'etc') class GroupPolicyDBTestBase(object): @@ -170,15 +173,12 @@ DB_GP_PLUGIN_KLASS = (GroupPolicyDBTestPlugin.__module__ + '.' + class GroupPolicyDbTestCase(GroupPolicyDBTestBase, - test_db_plugin.NeutronDbPluginV2TestCase): + test_db_base_plugin_v2.NeutronDbPluginV2TestCase): def setUp(self, core_plugin=None, gp_plugin=None, service_plugins=None, ext_mgr=None): - extensions.append_api_extensions_path( - gbpservice.neutron.extensions.__path__) if not gp_plugin: gp_plugin = DB_GP_PLUGIN_KLASS - self.plugin = importutils.import_object(gp_plugin) if not service_plugins: service_plugins = {'gp_plugin_name': gp_plugin} nattr.PLURALS['nat_pools'] = 'nat_pool' @@ -186,11 +186,12 @@ class GroupPolicyDbTestCase(GroupPolicyDBTestBase, plugin=core_plugin, ext_mgr=ext_mgr, service_plugins=service_plugins ) - + self.plugin = importutils.import_object(gp_plugin) if not ext_mgr: ext_mgr = extensions.PluginAwareExtensionManager.get_instance() self.ext_api = test_extensions.setup_extensions_middleware(ext_mgr) - cfg.CONF.set_override('policy_file', 'test-policy.json') + test_policy_file = ETCDIR + "/test-policy.json" + cfg.CONF.set_override('policy_file', test_policy_file) class TestGroupResources(GroupPolicyDbTestCase): diff --git a/gbpservice/neutron/tests/unit/db/grouppolicy/test_group_policy_mapping_db.py b/gbpservice/neutron/tests/unit/db/grouppolicy/test_group_policy_mapping_db.py index 495b4ff68..3c14ecc38 100644 --- a/gbpservice/neutron/tests/unit/db/grouppolicy/test_group_policy_mapping_db.py +++ b/gbpservice/neutron/tests/unit/db/grouppolicy/test_group_policy_mapping_db.py @@ -14,7 +14,7 @@ import contextlib import webob.exc -from neutron.tests.unit import test_l3_plugin +from neutron.tests.unit.extensions import test_l3 from neutron.tests.unit import testlib_api from gbpservice.neutron.db.grouppolicy import group_policy_mapping_db as gpmdb @@ -37,7 +37,7 @@ SC_PLUGIN_KLASS = ( class GroupPolicyMappingDbTestCase(tgpdb.GroupPolicyDbTestCase, - test_l3_plugin.L3NatTestCaseMixin): + test_l3.L3NatTestCaseMixin): def setUp(self, core_plugin=None, gp_plugin=None, service_plugins=None): testlib_api.SqlTestCase._TABLES_ESTABLISHED = False diff --git a/gbpservice/neutron/tests/unit/db/grouppolicy/test_servicechain_db.py b/gbpservice/neutron/tests/unit/db/grouppolicy/test_servicechain_db.py index 44b5a6c98..2f2b1b34b 100644 --- a/gbpservice/neutron/tests/unit/db/grouppolicy/test_servicechain_db.py +++ b/gbpservice/neutron/tests/unit/db/grouppolicy/test_servicechain_db.py @@ -15,14 +15,13 @@ import webob.exc from neutron.api import extensions from neutron import context -from neutron.openstack.common import importutils from neutron.openstack.common import uuidutils from neutron.plugins.common import constants -from neutron.tests.unit import test_db_plugin -from neutron.tests.unit import test_extensions +from neutron.tests.unit.api import test_extensions +from neutron.tests.unit.db import test_db_base_plugin_v2 +from oslo_utils import importutils from gbpservice.neutron.db import servicechain_db as svcchain_db -import gbpservice.neutron.extensions from gbpservice.neutron.extensions import servicechain as service_chain JSON_FORMAT = 'json' @@ -211,15 +210,12 @@ GP_PLUGIN_KLASS = ( class ServiceChainDbTestCase(ServiceChainDBTestBase, - test_db_plugin.NeutronDbPluginV2TestCase): + test_db_base_plugin_v2.NeutronDbPluginV2TestCase): def setUp(self, core_plugin=None, sc_plugin=None, service_plugins=None, ext_mgr=None): - extensions.append_api_extensions_path( - gbpservice.neutron.extensions.__path__) if not sc_plugin: sc_plugin = DB_GP_PLUGIN_KLASS - self.plugin = importutils.import_object(sc_plugin) if not service_plugins: service_plugins = {'gp_plugin_name': GP_PLUGIN_KLASS, 'sc_plugin_name': sc_plugin} @@ -228,7 +224,7 @@ class ServiceChainDbTestCase(ServiceChainDBTestBase, plugin=core_plugin, ext_mgr=ext_mgr, service_plugins=service_plugins ) - + self.plugin = importutils.import_object(sc_plugin) if not ext_mgr: ext_mgr = extensions.PluginAwareExtensionManager.get_instance() self.ext_api = test_extensions.setup_extensions_middleware(ext_mgr) diff --git a/gbpservice/neutron/tests/unit/services/grouppolicy/test_apic_mapping.py b/gbpservice/neutron/tests/unit/services/grouppolicy/test_apic_mapping.py index a0b64110a..bf4a5fa31 100644 --- a/gbpservice/neutron/tests/unit/services/grouppolicy/test_apic_mapping.py +++ b/gbpservice/neutron/tests/unit/services/grouppolicy/test_apic_mapping.py @@ -20,10 +20,13 @@ import webob.exc from neutron.common import rpc as n_rpc from neutron import context -from neutron.tests.unit.ml2.drivers.cisco.apic import ( - test_cisco_apic_common as mocked) -from neutron.tests.unit.ml2 import test_ml2_plugin -from oslo.config import cfg +from neutron.db import api as db_api +from neutron.db import model_base +from neutron import manager +from neutron.tests.unit.plugins.ml2.drivers.cisco.apic import ( + base as mocked) +from neutron.tests.unit.plugins.ml2 import test_plugin +from oslo_config import cfg sys.modules["apicapi"] = mock.Mock() @@ -31,7 +34,8 @@ from gbpservice.neutron.services.grouppolicy import config from gbpservice.neutron.services.grouppolicy.drivers.cisco.apic import ( apic_mapping as amap) from gbpservice.neutron.tests.unit.services.grouppolicy import ( - test_grouppolicy_plugin as test_plugin) + test_grouppolicy_plugin as test_gp_plugin) + APIC_L2_POLICY = 'l2_policy' APIC_L3_POLICY = 'l3_policy' @@ -41,6 +45,10 @@ APIC_POLICY_RULE = 'policy_rule' APIC_EXTERNAL_RID = '1.0.0.1' +AGENT_TYPE = 'Open vSwitch agent' +AGENT_CONF = {'alive': True, 'binary': 'somebinary', + 'topic': 'sometopic', 'agent_type': AGENT_TYPE} + def echo(context, string): return string @@ -61,7 +69,7 @@ class MockCallRecorder(mock.Mock): class ApicMappingTestCase( - test_plugin.GroupPolicyPluginTestCase, + test_gp_plugin.GroupPolicyPluginTestCase, mocked.ControllerMixin, mocked.ConfigMixin): def setUp(self): @@ -77,9 +85,14 @@ class ApicMappingTestCase( for opt, val in ml2_opts.items(): cfg.CONF.set_override(opt, val, 'ml2') super(ApicMappingTestCase, self).setUp( - core_plugin=test_ml2_plugin.PLUGIN_NAME) - - self.driver = amap.ApicMappingDriver.get_initialized_instance() + core_plugin=test_plugin.PLUGIN_NAME) + engine = db_api.get_engine() + model_base.BASEV2.metadata.create_all(engine) + plugin = manager.NeutronManager.get_plugin() + plugin.remove_networks_from_down_agents = mock.Mock() + plugin.is_agent_down = mock.Mock(return_value=False) + self.driver = manager.NeutronManager.get_service_plugins()[ + 'GROUP_POLICY'].policy_driver_manager.policy_drivers['apic'].obj amap.ApicMappingDriver.get_base_synchronizer = mock.Mock() self.driver.name_mapper = mock.Mock() self.driver.name_mapper.tenant = echo @@ -216,6 +229,11 @@ class TestPolicyTarget(ApicMappingTestCase): self.assertEqual(mgr.ensure_path_deleted_for_port.call_count, 0) def _bind_port_to_host(self, port_id, host): + plugin = manager.NeutronManager.get_plugin() + ctx = context.get_admin_context() + agent = {'host': host} + agent.update(AGENT_CONF) + plugin.create_or_update_agent(ctx, agent) data = {'port': {'binding:host_id': host}} # Create EP with bound port req = self.new_update_request('ports', data, port_id, diff --git a/gbpservice/neutron/tests/unit/services/grouppolicy/test_extension_driver_api.py b/gbpservice/neutron/tests/unit/services/grouppolicy/test_extension_driver_api.py index 497fab73f..91d5873a4 100644 --- a/gbpservice/neutron/tests/unit/services/grouppolicy/test_extension_driver_api.py +++ b/gbpservice/neutron/tests/unit/services/grouppolicy/test_extension_driver_api.py @@ -10,11 +10,11 @@ # License for the specific language governing permissions and limitations # under the License. -import sqlalchemy as sa +import os -from neutron.api import extensions from neutron.api.v2 import attributes from neutron.db import model_base +import sqlalchemy as sa from gbpservice.neutron.services.grouppolicy import ( group_policy_driver_api as api) @@ -35,6 +35,9 @@ class ExtensionDriverTestCase( config.cfg.CONF.set_override('extension_drivers', self._extension_drivers, group='group_policy') + config.cfg.CONF.set_override( + 'api_extensions_path', + os.path.dirname(os.path.abspath(test_ext.__file__))) super(ExtensionDriverTestCase, self).setUp() def test_pt_attr(self): @@ -539,10 +542,7 @@ class TestExtensionDriver(api.ExtensionDriver): _supported_extension_alias = 'test_extension' def initialize(self): - # self.network_extension = 'Test_Network_Extension' - # self.subnet_extension = 'Test_Subnet_Extension' - # self.port_extension = 'Test_Port_Extension' - extensions.append_api_extensions_path(test_ext.__path__) + pass @property def extension_alias(self): diff --git a/gbpservice/neutron/tests/unit/services/grouppolicy/test_grouppolicy_plugin.py b/gbpservice/neutron/tests/unit/services/grouppolicy/test_grouppolicy_plugin.py index ca0735f32..1984a131b 100644 --- a/gbpservice/neutron/tests/unit/services/grouppolicy/test_grouppolicy_plugin.py +++ b/gbpservice/neutron/tests/unit/services/grouppolicy/test_grouppolicy_plugin.py @@ -12,10 +12,9 @@ # limitations under the License. import mock -import webob.exc - from neutron import context -from oslo.config import cfg +from oslo_config import cfg +import webob.exc from gbpservice.neutron.extensions import group_policy as gpolicy from gbpservice.neutron.tests.unit.db.grouppolicy import ( diff --git a/gbpservice/neutron/tests/unit/services/grouppolicy/test_implicit_policy.py b/gbpservice/neutron/tests/unit/services/grouppolicy/test_implicit_policy.py index 61055fc6c..dd8b9d048 100644 --- a/gbpservice/neutron/tests/unit/services/grouppolicy/test_implicit_policy.py +++ b/gbpservice/neutron/tests/unit/services/grouppolicy/test_implicit_policy.py @@ -11,7 +11,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -from oslo.config import cfg +from neutron.db import api as db_api +from neutron.db import model_base +from oslo_config import cfg import webob.exc from gbpservice.neutron.tests.unit.services.grouppolicy import ( @@ -25,6 +27,8 @@ class ImplicitPolicyTestCase( cfg.CONF.set_override('policy_drivers', ['implicit_policy'], group='group_policy') super(ImplicitPolicyTestCase, self).setUp() + engine = db_api.get_engine() + model_base.BASEV2.metadata.create_all(engine) class TestImplicitL2Policy(ImplicitPolicyTestCase): @@ -310,10 +314,10 @@ class TestImplicitExternalSegment(ImplicitPolicyTestCase): def setUp(self): self._default_es_name = 'default' + super(TestImplicitExternalSegment, self).setUp() cfg.CONF.set_override( 'default_external_segment_name', self._default_es_name, group='group_policy_implicit_policy') - super(TestImplicitExternalSegment, self).setUp() def _create_default_es(self, **kwargs): return self.create_external_segment(name=self._default_es_name, diff --git a/gbpservice/neutron/tests/unit/services/grouppolicy/test_neutronv2_client.py b/gbpservice/neutron/tests/unit/services/grouppolicy/test_neutronv2_client.py index bb0d55e32..052392459 100644 --- a/gbpservice/neutron/tests/unit/services/grouppolicy/test_neutronv2_client.py +++ b/gbpservice/neutron/tests/unit/services/grouppolicy/test_neutronv2_client.py @@ -12,15 +12,16 @@ # import contextlib -import mock -import unittest -from gbpservice.network.neutronv2 import client as neutronclient +import mock +from neutron import context +from neutron.tests.unit.db import test_db_base_plugin_v2 from neutronclient.common import exceptions from neutronclient.v2_0 import client -from oslo.config import cfg +from oslo_config import cfg + +from gbpservice.network.neutronv2 import client as neutronclient -from neutron import context CONF = cfg.CONF @@ -31,7 +32,7 @@ CONF = cfg.CONF NEUTRON_CLIENT_EXCEPTION = Exception -class TestNeutronClient(unittest.TestCase): +class TestNeutronClient(test_db_base_plugin_v2.NeutronDbPluginV2TestCase): def setUp(self): super(TestNeutronClient, self).setUp() diff --git a/gbpservice/neutron/tests/unit/services/grouppolicy/test_nuage_gbp_driver.py b/gbpservice/neutron/tests/unit/services/grouppolicy/test_nuage_gbp_driver.py index 49f18b58b..dcb50f638 100644 --- a/gbpservice/neutron/tests/unit/services/grouppolicy/test_nuage_gbp_driver.py +++ b/gbpservice/neutron/tests/unit/services/grouppolicy/test_nuage_gbp_driver.py @@ -13,15 +13,14 @@ # under the License. import mock -from neutron.tests.unit.ml2 import test_ml2_plugin -from neutron.tests.unit.nuage import fake_nuageclient -from oslo.config import cfg +from neutron.tests.unit.plugins.ml2 import test_plugin +from oslo_config import cfg from gbpservice.neutron.services.grouppolicy import config from gbpservice.neutron.services.grouppolicy.drivers.nuage import ( driver as nuage_driver) from gbpservice.neutron.tests.unit.services.grouppolicy import ( - test_grouppolicy_plugin as test_plugin) + test_grouppolicy_plugin as test_gp_plugin) FAKE_GBP_APP = 'ut_gbp_app' FAKE_DEFAULT_ENT = 'default' @@ -34,7 +33,11 @@ FAKE_AUTH_RESOURCE = '/auth' FAKE_ORGANIZATION = 'fake_org' -class FakeNuageGBPClient(fake_nuageclient.FakeNuageClient): +class FakeNuageGBPClient(object): + + def __init__(self, server, base_uri, serverssl, + serverauth, auth_resource, organization): + pass def create_ptg_postcommit(self, context, application): pass @@ -57,7 +60,7 @@ class FakeNuageGBPClient(fake_nuageclient.FakeNuageClient): pass -class NuageGBPDriverTestCase(test_plugin.GroupPolicyPluginTestCase): +class NuageGBPDriverTestCase(test_gp_plugin.GroupPolicyPluginTestCase): def setUp(self): config.cfg.CONF.set_override('policy_drivers', @@ -88,7 +91,7 @@ class NuageGBPDriverTestCase(test_plugin.GroupPolicyPluginTestCase): with mock.patch.object(nuage_driver.NuageGBPDriver, 'nuageclient_init', new=mock_nuageclient_init): super(NuageGBPDriverTestCase, self).setUp( - core_plugin=test_ml2_plugin.PLUGIN_NAME) + core_plugin=test_plugin.PLUGIN_NAME) class TestPolicyTargetGroup(NuageGBPDriverTestCase): diff --git a/gbpservice/neutron/tests/unit/services/grouppolicy/test_odl_manager.py b/gbpservice/neutron/tests/unit/services/grouppolicy/test_odl_manager.py index a4bab9438..4348c67ff 100644 --- a/gbpservice/neutron/tests/unit/services/grouppolicy/test_odl_manager.py +++ b/gbpservice/neutron/tests/unit/services/grouppolicy/test_odl_manager.py @@ -11,13 +11,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -import mock import requests import unittest +import mock +from oslo_serialization import jsonutils + from gbpservice.neutron.services.grouppolicy import config from gbpservice.neutron.services.grouppolicy.drivers.odl import odl_manager -from oslo.serialization import jsonutils HOST = 'fake_host' diff --git a/gbpservice/neutron/tests/unit/services/grouppolicy/test_odl_mapping.py b/gbpservice/neutron/tests/unit/services/grouppolicy/test_odl_mapping.py index 6a436e54b..49c721ff5 100644 --- a/gbpservice/neutron/tests/unit/services/grouppolicy/test_odl_mapping.py +++ b/gbpservice/neutron/tests/unit/services/grouppolicy/test_odl_mapping.py @@ -21,9 +21,9 @@ from gbpservice.neutron.services.grouppolicy.drivers.odl import odl_mapping from gbpservice.neutron.services.grouppolicy.drivers import resource_mapping from gbpservice.neutron.services.grouppolicy import plugin as g_plugin from gbpservice.neutron.tests.unit.services.grouppolicy import ( - test_grouppolicy_plugin as test_plugin) + test_grouppolicy_plugin as test_gp_plugin) from neutron.plugins.ml2 import plugin as ml2_plugin -from neutron.tests.unit.ml2 import test_ml2_plugin +from neutron.tests.unit.plugins.ml2 import test_plugin TENANT_ID = 'aaaabbbbccccaaaabbbbccccaaaabbbb' TENANT_UUID = 'aaaabbbb-cccc-aaaa-bbbb-ccccaaaabbbb' @@ -218,7 +218,7 @@ class FakeGBPPlugin(object): class OdlMappingTestCase( - test_plugin.GroupPolicyPluginTestCase): + test_gp_plugin.GroupPolicyPluginTestCase): """ Base test case for ODL mapping driver testing Set up the common testing environment @@ -229,7 +229,7 @@ class OdlMappingTestCase( ['implicit_policy', 'odl'], group='group_policy') super(OdlMappingTestCase, self).setUp( - core_plugin=test_ml2_plugin.PLUGIN_NAME) + core_plugin=test_plugin.PLUGIN_NAME) self.fake_core_plugin = FakeCorePlugin() self.fake_gbp_plugin = FakeGBPPlugin() diff --git a/gbpservice/neutron/tests/unit/services/grouppolicy/test_oneconvergence_gbp_driver.py b/gbpservice/neutron/tests/unit/services/grouppolicy/test_oneconvergence_gbp_driver.py index d8f09b8c9..0d171579a 100644 --- a/gbpservice/neutron/tests/unit/services/grouppolicy/test_oneconvergence_gbp_driver.py +++ b/gbpservice/neutron/tests/unit/services/grouppolicy/test_oneconvergence_gbp_driver.py @@ -77,14 +77,14 @@ class TestPolicyTarget(OneConvergenceGBPDriverTestCase, ptg_id = ptg['policy_target_group']['id'] # Create policy_target with implicit port. - pt = self.create_policy_target(name="pt1", - policy_target_group_id=ptg_id) - pt_id = pt['policy_target']['id'] - create_ep.assertCalledOnceWith(mock.ANY, pt) - pt = self.update_policy_target(pt_id, name="new_pt") - update_ep.assertCalledOnceWith(mock.ANY, pt) - self.delete_policy_target(pt_id) - delete_ep.assertCalledOnceWith(mock.ANY, pt_id) + pt = self.create_policy_target( + name="pt1", policy_target_group_id=ptg_id)['policy_target'] + create_ep.assert_called_once_with(mock.ANY, pt) + pt = self.update_policy_target( + pt['id'], name="new_pt")['policy_target'] + update_ep.assert_called_once_with(mock.ANY, pt) + self.delete_policy_target(pt['id']) + delete_ep.assert_called_once_with(mock.ANY, pt['id']) class TestPolicyTargetGroup(OneConvergenceGBPDriverTestCase, @@ -115,13 +115,14 @@ class TestPolicyTargetGroup(OneConvergenceGBPDriverTestCase, mock.patch.object(MockNVSDApiClient, 'update_endpointgroup'), mock.patch.object(MockNVSDApiClient, 'delete_endpointgroup') ) as (create_epg, update_epg, delete_epg): - ptg = self.create_policy_target_group(name="ptg1") - ptg_id = ptg['policy_target_group']['id'] - create_epg.assertCalledOnceWith(mock.ANY, ptg) - ptg = self.update_policy_target_group(ptg_id, name="new_ptg") - update_epg.assertCalledOnceWith(mock.ANY, ptg) - self.delete_policy_target_group(ptg_id) - delete_epg.assertCalledOnceWith(mock.ANY, ptg_id) + ptg = self.create_policy_target_group( + name="ptg1")['policy_target_group'] + create_epg.assert_called_once_with(mock.ANY, ptg) + ptg = self.update_policy_target_group( + ptg['id'], name="new_ptg")['policy_target_group'] + update_epg.assert_called_once_with(mock.ANY, ptg) + self.delete_policy_target_group(ptg['id']) + delete_epg.assert_called_once_with(mock.ANY, ptg['id']) class TestPolicyClassifier(OneConvergenceGBPDriverTestCase): @@ -136,13 +137,16 @@ class TestPolicyClassifier(OneConvergenceGBPDriverTestCase): MockNVSDApiClient, 'delete_policy_classifier') ) as (create_classifier, update_classifier, delete_classifier): classifier = self.create_policy_classifier(name="classifier1") - classifier_id = classifier['policy_classifier']['id'] - create_classifier.assertCalledOnceWith(mock.ANY, classifier) + classifier = classifier['policy_classifier'] + classifier.update({"policy_rules": []}) + create_classifier.assert_called_once_with(mock.ANY, classifier) classifier = self.update_policy_classifier( - classifier_id, name="new_classifier") - update_classifier.assertCalledOnceWith(mock.ANY, classifier) - self.delete_policy_classifier(classifier_id) - delete_classifier.assertCalledOnceWith(mock.ANY, classifier_id) + classifier['id'], name="new_classifier")['policy_classifier'] + classifier.update({"policy_rules": []}) + update_classifier.assert_called_once_with(mock.ANY, classifier) + self.delete_policy_classifier(classifier['id']) + delete_classifier.assert_called_once_with( + mock.ANY, classifier['id']) class TestL2Policy(OneConvergenceGBPDriverTestCase, diff --git a/gbpservice/neutron/tests/unit/services/grouppolicy/test_resource_mapping.py b/gbpservice/neutron/tests/unit/services/grouppolicy/test_resource_mapping.py index 28d8dc903..e03b2ab09 100644 --- a/gbpservice/neutron/tests/unit/services/grouppolicy/test_resource_mapping.py +++ b/gbpservice/neutron/tests/unit/services/grouppolicy/test_resource_mapping.py @@ -19,14 +19,16 @@ import mock from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api from neutron.common import constants as cst from neutron import context as nctx +from neutron.db import api as db_api +from neutron.db import model_base from neutron.extensions import external_net as external_net from neutron.extensions import securitygroup as ext_sg from neutron import manager from neutron.notifiers import nova from neutron.openstack.common import uuidutils from neutron.plugins.common import constants as pconst -from neutron.tests.unit import test_extension_security_group -from neutron.tests.unit import test_l3_plugin +from neutron.tests.unit.extensions import test_l3 +from neutron.tests.unit.extensions import test_securitygroup import webob.exc from gbpservice.neutron.db.grouppolicy import group_policy_db as gpdb @@ -44,8 +46,8 @@ SERVICECHAIN_INSTANCES = 'servicechain/servicechain_instances' class NoL3NatSGTestPlugin( - test_l3_plugin.TestNoL3NatPlugin, - test_extension_security_group.SecurityGroupTestPlugin): + test_l3.TestNoL3NatPlugin, + test_securitygroup.SecurityGroupTestPlugin): supported_extension_aliases = ["external-net", "security-group"] @@ -67,6 +69,8 @@ class ResourceMappingTestCase(test_plugin.GroupPolicyPluginTestCase): group='servicechain') config.cfg.CONF.set_override('allow_overlapping_ips', True) super(ResourceMappingTestCase, self).setUp(core_plugin=CORE_PLUGIN) + engine = db_api.get_engine() + model_base.BASEV2.metadata.create_all(engine) res = mock.patch('neutron.db.l3_db.L3_NAT_dbonly_mixin.' '_check_router_needs_rescheduling').start() res.return_value = None @@ -2285,7 +2289,8 @@ class TestPolicyRuleSet(ResourceMappingTestCase): with self.subnet(cidr='192.168.0.0/24', network=net) as sub: self.create_external_segment( shared=True, - tenant_id='admin', name="default", + tenant_id='admin', + name="default", subnet_id=sub['subnet']['id'])['external_segment'] ep = self.create_external_policy( @@ -2331,7 +2336,8 @@ class TestPolicyRuleSet(ResourceMappingTestCase): with self.subnet(cidr='192.168.0.0/24', network=net) as sub: self.create_external_segment( shared=True, - tenant_id='admin', name="default", + tenant_id='admin', + name="default", subnet_id=sub['subnet']['id'])['external_segment'] ep = self.create_external_policy() diff --git a/gbpservice/neutron/tests/unit/services/servicechain/test_servicechain_plugin.py b/gbpservice/neutron/tests/unit/services/servicechain/test_servicechain_plugin.py index 40e3297d3..59c94f00e 100644 --- a/gbpservice/neutron/tests/unit/services/servicechain/test_servicechain_plugin.py +++ b/gbpservice/neutron/tests/unit/services/servicechain/test_servicechain_plugin.py @@ -11,7 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from oslo.config import cfg +from oslo_config import cfg from gbpservice.neutron.tests.unit.db.grouppolicy import ( test_servicechain_db as test_servicechain_db) diff --git a/gbpservice/neutron/tests/unit/services/servicechain/test_simple_chain_driver.py b/gbpservice/neutron/tests/unit/services/servicechain/test_simple_chain_driver.py index 86d1bebba..ef4d68d79 100644 --- a/gbpservice/neutron/tests/unit/services/servicechain/test_simple_chain_driver.py +++ b/gbpservice/neutron/tests/unit/services/servicechain/test_simple_chain_driver.py @@ -12,11 +12,12 @@ # limitations under the License. import contextlib + import heatclient import mock -from neutron.openstack.common import jsonutils from neutron.openstack.common import uuidutils from neutron.plugins.common import constants +from oslo_serialization import jsonutils import webob from gbpservice.neutron.services.servicechain import config diff --git a/gbpservice/neutron/tests/unit/test_extension_group_policy.py b/gbpservice/neutron/tests/unit/test_extension_group_policy.py index 7bacd7a3c..32b440317 100644 --- a/gbpservice/neutron/tests/unit/test_extension_group_policy.py +++ b/gbpservice/neutron/tests/unit/test_extension_group_policy.py @@ -17,15 +17,15 @@ import mock from neutron.openstack.common import uuidutils from neutron.plugins.common import constants from neutron.tests import base -from neutron.tests.unit import test_api_v2 -from neutron.tests.unit import test_api_v2_extension +from neutron.tests.unit.api.v2 import test_base +from neutron.tests.unit.extensions import base as test_extensions_base from webob import exc from gbpservice.neutron.extensions import group_policy as gp from gbpservice.neutron.tests.unit import common as cm _uuid = uuidutils.generate_uuid -_get_path = test_api_v2._get_path +_get_path = test_base._get_path GP_PLUGIN_BASE_NAME = ( gp.GroupPolicyPluginBase.__module__ + '.' + gp.GroupPolicyPluginBase.__name__) @@ -48,7 +48,7 @@ RES_TO_URI = {'external_policy': EP_POLICIES_URI, 'nat_pool': NP_POLICIES_URI} -class GroupPolicyExtensionTestCase(test_api_v2_extension.ExtensionTestCase): +class GroupPolicyExtensionTestCase(test_extensions_base.ExtensionTestCase): fmt = 'json' def setUp(self): diff --git a/gbpservice/neutron/tests/unit/test_extension_servicechain.py b/gbpservice/neutron/tests/unit/test_extension_servicechain.py index 940c98026..3a3ed6e91 100644 --- a/gbpservice/neutron/tests/unit/test_extension_servicechain.py +++ b/gbpservice/neutron/tests/unit/test_extension_servicechain.py @@ -13,17 +13,17 @@ import copy import mock -from webob import exc - from neutron.openstack.common import uuidutils from neutron.plugins.common import constants -from neutron.tests.unit import test_api_v2 -from neutron.tests.unit import test_api_v2_extension +from neutron.tests.unit.api.v2 import test_base +from neutron.tests.unit.extensions import base as test_extensions_base +from webob import exc from gbpservice.neutron.extensions import servicechain + _uuid = uuidutils.generate_uuid -_get_path = test_api_v2._get_path +_get_path = test_base._get_path SERVICE_CHAIN_PLUGIN_BASE_NAME = ( servicechain.ServiceChainPluginBase.__module__ + '.' + servicechain.ServiceChainPluginBase.__name__) @@ -33,7 +33,7 @@ SERVICECHAIN_SPECS_URI = SERVICECHAIN_URI + '/' + 'servicechain_specs' SERVICECHAIN_INSTANCES_URI = SERVICECHAIN_URI + '/' + 'servicechain_instances' -class ServiceChainExtensionTestCase(test_api_v2_extension.ExtensionTestCase): +class ServiceChainExtensionTestCase(test_extensions_base.ExtensionTestCase): fmt = 'json' def setUp(self): diff --git a/gbpservice/tests/contrib/gate_hook.sh b/gbpservice/tests/contrib/gate_hook.sh index 116eb30de..668ff7a66 100644 --- a/gbpservice/tests/contrib/gate_hook.sh +++ b/gbpservice/tests/contrib/gate_hook.sh @@ -6,7 +6,7 @@ TOP_DIR=$BASE/new/devstack cd $TOP_DIR sudo git remote add group-policy http://github.com/group-policy/devstack sudo git fetch group-policy -sudo git checkout -t group-policy/kilo-gate +sudo git checkout -t group-policy/kilo-gbp-openstack-master-gate #sudo cp devstack-vm-gate.sh $BASE/new/devstack-gate/devstack-vm-gate.sh CONTRIB_DIR="$BASE/new/group-based-policy/gbpservice/tests/contrib" @@ -27,7 +27,6 @@ sed -e "s+\$BASE_PATH+$BASE/new/group-based-policy/.tox/dsvm-functional+" \ $FUNC_FILTER | sudo tee /etc/neutron/rootwrap.d/functional.filters > /dev/null # Use devstack functions to install mysql and psql servers -source $TOP_DIR/lib/config source $TOP_DIR/stackrc source $TOP_DIR/lib/database disable_service postgresql diff --git a/gbpservice/tests/contrib/post_test_hook.sh b/gbpservice/tests/contrib/post_test_hook.sh index 6746da5e5..4d5cf940e 100644 --- a/gbpservice/tests/contrib/post_test_hook.sh +++ b/gbpservice/tests/contrib/post_test_hook.sh @@ -37,6 +37,8 @@ $prep_func # Run tests echo "Running group-based-policy dsvm-functional test suite" set +e +# Temporary workaround for subunit not getting installed in tox environment +sudo pip uninstall python-subunit -y sudo -H -u $owner tox -e dsvm-functional testr_exit_code=$? set -e diff --git a/run_tests.sh b/run_tests.sh index 88762ca19..e3b31558d 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -167,7 +167,7 @@ function run_pep8 { } -TESTRTESTS="python -m neutron.openstack.common.lockutils python setup.py testr" +TESTRTESTS="python setup.py testr" if [ $never_venv -eq 0 ] then diff --git a/test-requirements.txt b/test-requirements.txt index 8b04688a9..9dc986d14 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -2,7 +2,7 @@ # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. --e git+https://github.com/openstack/neutron.git@stable/juno#egg=neutron +-e git+https://github.com/openstack/neutron.git#egg=neutron prettytable>=0.7 cliff>=1.7.0 # Apache-2.0 diff --git a/tox.ini b/tox.ini index 7358b6e9e..b3cb1746d 100644 --- a/tox.ini +++ b/tox.ini @@ -13,7 +13,7 @@ install_command = pip install -U {opts} {packages} deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt commands = - python -m neutron.openstack.common.lockutils python setup.py testr --slowest --testr-args='{posargs}' + python setup.py testr --slowest --testr-args='{posargs}' [testenv:hashtest] # This is the same as default environment, but with a random PYTHONHASHSEED. @@ -24,7 +24,7 @@ setenv = VIRTUAL_ENV={envdir} [testenv:functional] setenv = OS_TEST_PATH=./gbpservice/tests/functional commands = - python -m neutron.openstack.common.lockutils python setup.py testr --slowest --testr-args='{posargs}' + python setup.py testr --slowest --testr-args='{posargs}' [testenv:dsvm-functional] setenv = OS_TEST_PATH=./gbpservice/tests/functional @@ -33,7 +33,7 @@ setenv = OS_TEST_PATH=./gbpservice/tests/functional OS_FAIL_ON_MISSING_DEPS=1 sitepackages=True commands = - python -m neutron.openstack.common.lockutils python setup.py testr --slowest --testr-args='{posargs}' + python setup.py testr --slowest --testr-args='{posargs}' [tox:jenkins] sitepackages = True @@ -49,7 +49,7 @@ commands = python ./tools/check_i18n.py ./neutron ./tools/i18n_cfg.py [testenv:cover] commands = - python -m neutron.openstack.common.lockutils python setup.py testr --coverage --testr-args='{posargs}' + python setup.py testr --coverage --testr-args='{posargs}' [testenv:venv] commands = {posargs}