From 135f7decd23e4e22d3f06fd52637c4dccb155dc8 Mon Sep 17 00:00:00 2001 From: Thomas Bachman Date: Thu, 19 Feb 2015 15:39:09 -0500 Subject: [PATCH] Separating renderers into features. This patch separates the renderers into their own bundles, and makes them their own features. This allows per-renderer installation. This is needed in the near-term in order to allow multi-renderer development to progress. The renderers may be combined into a single bundle later, once we've worked out how multiple renderers can coexist completely. Change-Id: If15992174ef98298a75a3dc5c4d47d22f207dccb Signed-off-by: Thomas Bachman --- commons/parent/pom.xml | 2 + distribution-karaf/pom.xml | 3 +- features/pom.xml | 17 +- features/src/main/resources/features.xml | 65 +- groupbasedpolicy/pom.xml | 45 +- pom.xml | 1 + renderers/oc/pom.xml | 173 +++ .../oc_provider/impl/OcProviderModule.java | 0 .../impl/OcProviderModuleFactory.java | 0 .../renderer/oc/L2DomainListener.java | 0 .../renderer/oc/L2DomainManager.java | 0 .../renderer/oc/OcRenderer.java | 0 .../renderer/oc/PolicyManager.java | 0 .../groupbasedpolicy/renderer/oc/Utils.java | 158 +-- .../oc/src/main/yang}/oc-provider-impl.yang | 0 .../oc/src/main/yang}/oc-provider.yang | 0 .../oc => renderers/oc/src/main/yang}/oc.yang | 3 +- .../renderer/oc/TestL2DomainManager.java | 0 .../renderer/oc/TestUtilsStaticMethod.java | 0 renderers/ofoverlay/pom.xml | 166 +++ .../impl/OFOverlayProviderModule.java | 0 .../impl/OFOverlayProviderModuleFactory.java | 0 .../impl/OpenstackEndpointProviderModule.java | 0 ...penstackEndpointProviderModuleFactory.java | 0 .../openstackgbp/OpenstackGbpEndpoint.java | 0 .../renderer/ofoverlay/EndpointListener.java | 0 .../renderer/ofoverlay/EndpointManager.java | 0 .../renderer/ofoverlay/OFOverlayRenderer.java | 0 .../renderer/ofoverlay/PolicyManager.java | 0 .../renderer/ofoverlay/SwitchListener.java | 0 .../renderer/ofoverlay/SwitchManager.java | 0 .../ofoverlay/flow/ActionComparator.java | 0 .../ofoverlay/flow/DestinationMapper.java | 0 .../renderer/ofoverlay/flow/FlowTable.java | 0 .../renderer/ofoverlay/flow/FlowUtils.java | 0 .../renderer/ofoverlay/flow/GroupTable.java | 0 .../renderer/ofoverlay/flow/OfTable.java | 0 .../ofoverlay/flow/PolicyEnforcer.java | 0 .../renderer/ofoverlay/flow/PortSecurity.java | 0 .../renderer/ofoverlay/flow/SourceMapper.java | 0 .../renderer/ofoverlay/sf/Classifier.java | 0 .../ofoverlay/sf/EtherTypeClassifier.java | 0 .../ofoverlay/sf/IpProtoClassifier.java | 0 .../renderer/ofoverlay/sf/L4Classifier.java | 0 .../ofoverlay/sf/SubjectFeatures.java | 0 .../openstackgbp-provider-impl.yang | 0 .../openstackgbp/openstackgbp.yang | 0 .../main/yang}/ofoverlay-provider-impl.yang | 0 .../src/main/yang}/ofoverlay-provider.yang | 0 .../ofoverlay/src/main/yang}/ofoverlay.yang | 0 .../ofoverlay/MockEndpointManager.java | 0 .../renderer/ofoverlay/MockPolicyManager.java | 0 .../renderer/ofoverlay/MockSwitchManager.java | 0 .../ofoverlay/flow/DestinationMapperTest.java | 0 .../ofoverlay/flow/FlowTableTest.java | 0 .../ofoverlay/flow/GroupTableTest.java | 0 .../renderer/ofoverlay/flow/OfTableTest.java | 0 .../ofoverlay/flow/PolicyEnforcerTest.java | 0 .../ofoverlay/flow/PortSecurityTest.java | 0 .../ofoverlay/flow/SourceMapperTest.java | 0 .../resolver/IndexedTenantTest.java | 72 ++ .../resolver/InheritanceUtilsTest.java | 1103 +++++++++++++++++ .../resolver/MatcherUtilsTest.java | 275 ++++ .../resolver/PolicyResolverTest.java | 520 ++++++++ renderers/opflex/pom.xml | 138 +++ .../impl/OpflexProviderModule.java | 0 .../impl/OpflexProviderModuleFactory.java | 0 .../renderer/opflex/EndpointListener.java | 0 .../renderer/opflex/EndpointManager.java | 0 .../renderer/opflex/EprContext.java | 0 .../renderer/opflex/EprOperation.java | 0 .../renderer/opflex/Identity.java | 0 .../renderer/opflex/L2EprOperation.java | 0 .../renderer/opflex/L3EprOperation.java | 0 .../renderer/opflex/MessageUtils.java | 0 .../renderer/opflex/OpflexRenderer.java | 0 .../renderer/opflex/PolicyManager.java | 9 - .../renderer/opflex/lib/OpflexAgent.java | 0 .../opflex/lib/OpflexConnectionService.java | 0 .../renderer/opflex/lib/OpflexRpcServer.java | 0 .../renderer/opflex/lib/Role.java | 0 .../lib/messages/EndpointDeclareRequest.java | 0 .../lib/messages/EndpointDeclareResponse.java | 0 .../opflex/lib/messages/EndpointIdentity.java | 0 .../lib/messages/EndpointResolveRequest.java | 0 .../lib/messages/EndpointResolveResponse.java | 0 .../messages/EndpointUndeclareRequest.java | 0 .../messages/EndpointUndeclareResponse.java | 0 .../messages/EndpointUnresolveRequest.java | 0 .../messages/EndpointUnresolveResponse.java | 0 .../lib/messages/EndpointUpdateRequest.java | 0 .../lib/messages/EndpointUpdateResponse.java | 0 .../opflex/lib/messages/IdentityRequest.java | 0 .../opflex/lib/messages/IdentityResponse.java | 0 .../opflex/lib/messages/ManagedObject.java | 0 .../opflex/lib/messages/OpflexError.java | 0 .../opflex/lib/messages/PolicyIdentity.java | 0 .../lib/messages/PolicyResolveRequest.java | 0 .../lib/messages/PolicyResolveResponse.java | 0 .../lib/messages/PolicyUnresolveRequest.java | 0 .../lib/messages/PolicyUnresolveResponse.java | 0 .../lib/messages/PolicyUpdateRequest.java | 0 .../lib/messages/PolicyUpdateResponse.java | 0 .../lib/messages/StateReportRequest.java | 0 .../lib/messages/StateReportResponse.java | 0 .../renderer/opflex/mit/AgentOvsMit.java | 0 .../renderer/opflex/mit/EnumInfo.java | 0 .../renderer/opflex/mit/MitLib.java | 0 .../renderer/opflex/mit/OpflexMit.java | 0 .../renderer/opflex/mit/PolicyClassInfo.java | 0 .../opflex/mit/PolicyObjectInstance.java | 0 .../opflex/mit/PolicyPropertyInfo.java | 0 .../renderer/opflex/mit/PolicyUri.java | 0 .../src/main/yang}/opflex-provider-impl.yang | 0 .../src/main/yang}/opflex-provider.yang | 0 .../opflex/src/main/yang}/opflex.yang | 0 .../renderer/opflex/EndpointManagerTest.java | 0 .../renderer/opflex/EprContextTest.java | 0 .../renderer/opflex/IdentityTest.java | 0 .../renderer/opflex/L2EprOperationTest.java | 0 .../renderer/opflex/L3EprOperationTest.java | 0 .../renderer/opflex/MessageUtilsTest.java | 0 .../renderer/opflex/PolicyManagerTest.java | 0 .../lib/OpflexConnectionServiceTest.java | 0 .../opflex/lib/OpflexRpcServerTest.java | 0 .../renderer/opflex/lib/RoleTest.java | 0 .../lib/messages/OpflexMessageTest.java | 0 .../renderer/opflex/mit/EnumInfoTest.java | 0 .../renderer/opflex/mit/MitLibTest.java | 0 .../opflex/mit/PolicyClassInfoTest.java | 0 .../opflex/mit/PolicyPropertyInfoTest.java | 0 .../renderer/opflex/mit/PolicyUriTest.java | 0 renderers/pom.xml | 229 ++++ 133 files changed, 2819 insertions(+), 160 deletions(-) create mode 100644 renderers/oc/pom.xml rename {groupbasedpolicy => renderers/oc}/src/main/java/org/opendaylight/controller/config/yang/config/oc_provider/impl/OcProviderModule.java (100%) rename {groupbasedpolicy => renderers/oc}/src/main/java/org/opendaylight/controller/config/yang/config/oc_provider/impl/OcProviderModuleFactory.java (100%) rename {groupbasedpolicy => renderers/oc}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/L2DomainListener.java (100%) rename {groupbasedpolicy => renderers/oc}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/L2DomainManager.java (100%) rename {groupbasedpolicy => renderers/oc}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/OcRenderer.java (100%) rename {groupbasedpolicy => renderers/oc}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/PolicyManager.java (100%) rename {groupbasedpolicy => renderers/oc}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/Utils.java (96%) rename {groupbasedpolicy/src/main/yang/renderer/oc => renderers/oc/src/main/yang}/oc-provider-impl.yang (100%) rename {groupbasedpolicy/src/main/yang/renderer/oc => renderers/oc/src/main/yang}/oc-provider.yang (100%) rename {groupbasedpolicy/src/main/yang/renderer/oc => renderers/oc/src/main/yang}/oc.yang (98%) rename {groupbasedpolicy => renderers/oc}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/oc/TestL2DomainManager.java (100%) rename {groupbasedpolicy => renderers/oc}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/oc/TestUtilsStaticMethod.java (100%) create mode 100644 renderers/ofoverlay/pom.xml rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModule.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModuleFactory.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/controller/config/yang/config/openstack_endpoint_provider/impl/OpenstackEndpointProviderModule.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/controller/config/yang/config/openstack_endpoint_provider/impl/OpenstackEndpointProviderModuleFactory.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/integration/openstackgbp/OpenstackGbpEndpoint.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/EndpointListener.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/EndpointManager.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/OFOverlayRenderer.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/PolicyManager.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SwitchListener.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SwitchManager.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/ActionComparator.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapper.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTable.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowUtils.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTable.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTable.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcer.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurity.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapper.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/Classifier.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/EtherTypeClassifier.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/IpProtoClassifier.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/L4Classifier.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/SubjectFeatures.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/yang/integration/openstackgbp/openstackgbp-provider-impl.yang (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/main/yang/integration/openstackgbp/openstackgbp.yang (100%) rename {groupbasedpolicy/src/main/yang/renderer/ofoverlay => renderers/ofoverlay/src/main/yang}/ofoverlay-provider-impl.yang (100%) rename {groupbasedpolicy/src/main/yang/renderer/ofoverlay => renderers/ofoverlay/src/main/yang}/ofoverlay-provider.yang (100%) rename {groupbasedpolicy/src/main/yang/renderer/ofoverlay => renderers/ofoverlay/src/main/yang}/ofoverlay.yang (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockEndpointManager.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockPolicyManager.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockSwitchManager.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapperTest.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTableTest.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTableTest.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTableTest.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcerTest.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurityTest.java (100%) rename {groupbasedpolicy => renderers/ofoverlay}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapperTest.java (100%) create mode 100644 renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/IndexedTenantTest.java create mode 100644 renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/InheritanceUtilsTest.java create mode 100644 renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/MatcherUtilsTest.java create mode 100644 renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/PolicyResolverTest.java create mode 100644 renderers/opflex/pom.xml rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/controller/config/yang/config/opflex_provider/impl/OpflexProviderModule.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/controller/config/yang/config/opflex_provider/impl/OpflexProviderModuleFactory.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointListener.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointManager.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprContext.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprOperation.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/Identity.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L2EprOperation.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L3EprOperation.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/MessageUtils.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/OpflexRenderer.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManager.java (98%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexAgent.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexConnectionService.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexRpcServer.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/Role.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointDeclareRequest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointDeclareResponse.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointIdentity.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointResolveRequest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointResolveResponse.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUndeclareRequest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUndeclareResponse.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUnresolveRequest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUnresolveResponse.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUpdateRequest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUpdateResponse.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/IdentityRequest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/IdentityResponse.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/ManagedObject.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/OpflexError.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyIdentity.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyResolveRequest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyResolveResponse.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUnresolveRequest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUnresolveResponse.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUpdateRequest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUpdateResponse.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/StateReportRequest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/StateReportResponse.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/AgentOvsMit.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/EnumInfo.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/MitLib.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/OpflexMit.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyClassInfo.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyObjectInstance.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyPropertyInfo.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyUri.java (100%) rename {groupbasedpolicy/src/main/yang/renderer/opflex => renderers/opflex/src/main/yang}/opflex-provider-impl.yang (100%) rename {groupbasedpolicy/src/main/yang/renderer/opflex => renderers/opflex/src/main/yang}/opflex-provider.yang (100%) rename {groupbasedpolicy/src/main/yang/renderer/opflex => renderers/opflex/src/main/yang}/opflex.yang (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointManagerTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprContextTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/IdentityTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L2EprOperationTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L3EprOperationTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/MessageUtilsTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManagerTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexConnectionServiceTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexRpcServerTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/RoleTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/OpflexMessageTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/EnumInfoTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/MitLibTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyClassInfoTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyPropertyInfoTest.java (100%) rename {groupbasedpolicy => renderers/opflex}/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyUriTest.java (100%) create mode 100644 renderers/pom.xml diff --git a/commons/parent/pom.xml b/commons/parent/pom.xml index 82f47fd27..08001eea9 100644 --- a/commons/parent/pom.xml +++ b/commons/parent/pom.xml @@ -18,7 +18,9 @@ 1.7 UTF-8 0.2.0-SNAPSHOT + 1.5.0-SNAPSHOT 0.1.0-SNAPSHOT + 0.1.0-SNAPSHOT 0.6.0-SNAPSHOT etc/opendaylight/karaf 0.2.0-SNAPSHOT diff --git a/distribution-karaf/pom.xml b/distribution-karaf/pom.xml index 07bb3334e..21301f119 100644 --- a/distribution-karaf/pom.xml +++ b/distribution-karaf/pom.xml @@ -175,8 +175,7 @@ standard standard - odl-groupbasedpolicy-ofoverlay - odl-restconf + odl-groupbasedpolicy-base diff --git a/features/pom.xml b/features/pom.xml index c7d142222..c40eb347b 100644 --- a/features/pom.xml +++ b/features/pom.xml @@ -59,6 +59,21 @@ groupbasedpolicy ${project.version} + + org.opendaylight.groupbasedpolicy + oc-renderer + ${project.version} + + + org.opendaylight.groupbasedpolicy + opflex-renderer + ${project.version} + + + org.opendaylight.groupbasedpolicy + ofoverlay-renderer + ${project.version} + org.opendaylight.controller features-base @@ -69,7 +84,7 @@ org.opendaylight.odlparent features-test - 1.5.0-SNAPSHOT + ${odlparent.features-test.version} test diff --git a/features/src/main/resources/features.xml b/features/src/main/resources/features.xml index 5c776df36..43af0689d 100644 --- a/features/src/main/resources/features.xml +++ b/features/src/main/resources/features.xml @@ -10,47 +10,66 @@ + + mvn:org.opendaylight.yangtools/features-yangtools/${yangtools.version}/xml/features mvn:org.opendaylight.controller/features-mdsal/${mdsal.version}/xml/features + + mvn:org.opendaylight.openflowplugin/features-openflowplugin/${openflowplugin.distribution.version}/xml/features mvn:org.opendaylight.openflowplugin/features-openflowplugin-extension/${openflowplugin.distribution.version}/xml/features - mvn:org.opendaylight.controller/features-base/1.5.0-SNAPSHOT/xml/features - mvn:org.opendaylight.controller/features-nsf/0.5.0-SNAPSHOT/xml/features - + + + odl-mdsal-broker odl-yangtools-binding odl-yangtools-models - odl-openflowplugin-flow-services - odl-openflowplugin-nxm-extensions - mvn:org.opendaylight.groupbasedpolicy/groupbasedpolicy/${project.version} mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson.version} mvn:com.fasterxml.jackson.core/jackson-core/${jackson.version} mvn:com.fasterxml.jackson.core/jackson-databind/${jackson.version} - mvn:org.opendaylight.groupbasedpolicy/groupbasedpolicy-ofoverlay-config/${project.version}/xml/config + mvn:org.opendaylight.groupbasedpolicy/groupbasedpolicy/${project.version} - - odl-mdsal-broker - odl-base-all - odl-nsf-all - odl-yangtools-binding - odl-yangtools-models - mvn:org.opendaylight.groupbasedpolicy/groupbasedpolicy/${project.version} - mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson.version} - mvn:com.fasterxml.jackson.core/jackson-core/${jackson.version} - mvn:com.fasterxml.jackson.core/jackson-databind/${jackson.version} - mvn:org.opendaylight.groupbasedpolicy/groupbasedpolicy-oc-config/${project.version}/xml/config - + + + + odl-openflowplugin-flow-services + odl-openflowplugin-nxm-extensions + mvn:org.opendaylight.groupbasedpolicy/ofoverlay-renderer/${project.version} + mvn:org.opendaylight.groupbasedpolicy/groupbasedpolicy-ofoverlay-config/${project.version}/xml/config + + odl-mdsal-broker - mvn:org.opendaylight.groupbasedpolicy/groupbasedpolicy/${project.version} - mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson.version} - mvn:com.fasterxml.jackson.core/jackson-core/${jackson.version} - mvn:com.fasterxml.jackson.core/jackson-databind/${jackson.version} mvn:org.opendaylight.groupbasedpolicy/groupbasedpolicy-openstackendpoint-config/${project.version}/xml/config + + + + odl-mdsal-broker + mvn:org.opendaylight.groupbasedpolicy/oc-renderer/${project.version} + mvn:org.opendaylight.groupbasedpolicy/groupbasedpolicy-oc-config/${project.version}/xml/config + + diff --git a/groupbasedpolicy/pom.xml b/groupbasedpolicy/pom.xml index 179ead266..5b54cda62 100644 --- a/groupbasedpolicy/pom.xml +++ b/groupbasedpolicy/pom.xml @@ -12,25 +12,9 @@ bundle - 0.1.0-SNAPSHOT - - net.juniper.contrail - juniper-contrail-api - 1.2 - - - org.apache.httpcomponents - httpcore - 4.3.2 - - - org.apache.httpcomponents - httpclient - 4.3.2 - ch.qos.logback logback-classic @@ -88,11 +72,6 @@ org.opendaylight.yangtools yang-common - - org.opendaylight.openflowplugin - openflowplugin-extension-nicira - ${openflowplugin-nicira.version} - org.osgi org.osgi.core @@ -118,28 +97,6 @@ 1.9.5 test - - org.powermock - powermock-module-junit4 - 1.5.6 - test - - - org.powermock - powermock-api-mockito - 1.5.6 - test - - - org.opendaylight.sfc - sfc-model - ${sfc.version} - - - org.opendaylight.sfc - sfc-provider - ${sfc.version} - @@ -160,7 +117,7 @@ org.opendaylight.controller.config.yang.config.endpoint_provider, org.opendaylight.groupbasedpolicy.endpoint, org.opendaylight.groupbasedpolicy.resolver, - net.juniper.contrail.api.*;version="1.2" + org.opendaylight.groupbasedpolicy.util, ${project.basedir}/META-INF diff --git a/pom.xml b/pom.xml index e38882dd8..0b4d7ade2 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,7 @@ commons/parent groupbasedpolicy + renderers groupbasedpolicy-ofoverlay-config groupbasedpolicy-oc-config groupbasedpolicy-openstackendpoint-config diff --git a/renderers/oc/pom.xml b/renderers/oc/pom.xml new file mode 100644 index 000000000..127d64007 --- /dev/null +++ b/renderers/oc/pom.xml @@ -0,0 +1,173 @@ + + + 4.0.0 + + org.opendaylight.groupbasedpolicy + groupbasedpolicy-renderers + 0.2.0-SNAPSHOT + ../ + + + oc-renderer + bundle + + + juniper-contrail + https://github.com/Juniper/contrail-maven/raw/master/releases + + + + + 1.2 + + + + + net.juniper.contrail + juniper-contrail-api + ${juniper.opencontrail.version} + + + org.apache.httpcomponents + httpcore + 4.3.2 + + + org.apache.httpcomponents + httpclient + 4.3.2 + + + org.powermock + powermock-module-junit4 + 1.5.6 + test + + + org.powermock + powermock-api-mockito + 1.5.6 + test + + + + + + + + org.apache.felix + maven-bundle-plugin + true + + + + org.apache.http.*;version="4.3.2", + *;resolution:=optional + + httpclient,httpcore,commons-lang,commons-exec;type=!pom;inline=false + + net.juniper.contrail.api.*;version="1.2" + + + ${project.basedir}/META-INF + + + + org.codehaus.mojo + build-helper-maven-plugin + + + + add-source + + generate-sources + + + target/generated-sources/sal + target/generated-sources/config + target/generated-resources/ + + + + + + + org.opendaylight.yangtools + yang-maven-plugin + + + org.opendaylight.controller + yang-jmx-generator-plugin + 0.3.0-SNAPSHOT + + + org.opendaylight.yangtools + maven-sal-api-gen-plugin + ${yangtools.version} + jar + + + + + + generate-sources + + + + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + ${project.build.directory}/generated-sources/config + + urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang + + + + org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl + ${project.build.directory}/generated-sources/sal + + + org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl + ${project.build.directory}/site/models + + + true + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + org.jacoco + jacoco-maven-plugin + + + pre-unit-test + + prepare-agent + + + + post-unit-test + test + + report + + + ${sonar.jacoco.reportPath} + + org/opendaylight/groupbasedpolicy/**/*.class + + + + + + + + + diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/oc_provider/impl/OcProviderModule.java b/renderers/oc/src/main/java/org/opendaylight/controller/config/yang/config/oc_provider/impl/OcProviderModule.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/oc_provider/impl/OcProviderModule.java rename to renderers/oc/src/main/java/org/opendaylight/controller/config/yang/config/oc_provider/impl/OcProviderModule.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/oc_provider/impl/OcProviderModuleFactory.java b/renderers/oc/src/main/java/org/opendaylight/controller/config/yang/config/oc_provider/impl/OcProviderModuleFactory.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/oc_provider/impl/OcProviderModuleFactory.java rename to renderers/oc/src/main/java/org/opendaylight/controller/config/yang/config/oc_provider/impl/OcProviderModuleFactory.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/L2DomainListener.java b/renderers/oc/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/L2DomainListener.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/L2DomainListener.java rename to renderers/oc/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/L2DomainListener.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/L2DomainManager.java b/renderers/oc/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/L2DomainManager.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/L2DomainManager.java rename to renderers/oc/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/L2DomainManager.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/OcRenderer.java b/renderers/oc/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/OcRenderer.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/OcRenderer.java rename to renderers/oc/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/OcRenderer.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/PolicyManager.java b/renderers/oc/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/PolicyManager.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/PolicyManager.java rename to renderers/oc/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/PolicyManager.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/Utils.java b/renderers/oc/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/Utils.java similarity index 96% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/Utils.java rename to renderers/oc/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/Utils.java index 74da664b8..76b8f6d8f 100644 --- a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/Utils.java +++ b/renderers/oc/src/main/java/org/opendaylight/groupbasedpolicy/renderer/oc/Utils.java @@ -1,80 +1,80 @@ -/* - * Copyright (c) 2015 Juniper Networks, Inc. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.oc; - -import java.util.regex.Pattern; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class Utils { - - static final Logger LOGGER = LoggerFactory.getLogger(Utils.class); - - /** - * Invoked to format the UUID if UUID is not in correct format. - * - * @param String - * An instance of UUID string. - * - * @return Correctly formated UUID string. - */ - public static String uuidFormater(String uuid) { - String uuidPattern = null; - String id1 = uuid.substring(0, 8); - String id2 = uuid.substring(8, 12); - String id3 = uuid.substring(12, 16); - String id4 = uuid.substring(16, 20); - String id5 = uuid.substring(20, 32); - uuidPattern = (id1 + "-" + id2 + "-" + id3 + "-" + id4 + "-" + id5); - return uuidPattern; - } - - /** - * Invoked to check the UUID if UUID is not a valid hexa-decimal number. - * - * @param String - * An instance of UUID string. - * - * @return boolean value. - */ - public static boolean isValidHexNumber(String uuid) { - try { - Pattern hex = Pattern.compile("^[0-9a-f]+$"); - uuid = uuid.replaceAll("-", ""); - boolean valid = hex.matcher(uuid).matches(); - if (uuid.length() != 32) { - return false; - } - if (valid) { - return true; - } else { - return false; - } - } catch (NumberFormatException ex) { - LOGGER.error("Exception : " + ex); - return false; - } - } - - /** - * Invoked to format the UUID/Name in correct format. - * - * @param String - * An instance of UUID/Name string. - * - * @return Correctly formated UUID/name string. - */ - - public static String uuidNameFormat(String value){ - String[] pattern = value.split("="); - value = pattern[1].replace("]", ""); - return value; - } +/* + * Copyright (c) 2015 Juniper Networks, Inc. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.oc; + +import java.util.regex.Pattern; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Utils { + + static final Logger LOGGER = LoggerFactory.getLogger(Utils.class); + + /** + * Invoked to format the UUID if UUID is not in correct format. + * + * @param String + * An instance of UUID string. + * + * @return Correctly formated UUID string. + */ + public static String uuidFormater(String uuid) { + String uuidPattern = null; + String id1 = uuid.substring(0, 8); + String id2 = uuid.substring(8, 12); + String id3 = uuid.substring(12, 16); + String id4 = uuid.substring(16, 20); + String id5 = uuid.substring(20, 32); + uuidPattern = (id1 + "-" + id2 + "-" + id3 + "-" + id4 + "-" + id5); + return uuidPattern; + } + + /** + * Invoked to check the UUID if UUID is not a valid hexa-decimal number. + * + * @param String + * An instance of UUID string. + * + * @return boolean value. + */ + public static boolean isValidHexNumber(String uuid) { + try { + Pattern hex = Pattern.compile("^[0-9a-f]+$"); + uuid = uuid.replaceAll("-", ""); + boolean valid = hex.matcher(uuid).matches(); + if (uuid.length() != 32) { + return false; + } + if (valid) { + return true; + } else { + return false; + } + } catch (NumberFormatException ex) { + LOGGER.error("Exception : " + ex); + return false; + } + } + + /** + * Invoked to format the UUID/Name in correct format. + * + * @param String + * An instance of UUID/Name string. + * + * @return Correctly formated UUID/name string. + */ + + public static String uuidNameFormat(String value){ + String[] pattern = value.split("="); + value = pattern[1].replace("]", ""); + return value; + } } \ No newline at end of file diff --git a/groupbasedpolicy/src/main/yang/renderer/oc/oc-provider-impl.yang b/renderers/oc/src/main/yang/oc-provider-impl.yang similarity index 100% rename from groupbasedpolicy/src/main/yang/renderer/oc/oc-provider-impl.yang rename to renderers/oc/src/main/yang/oc-provider-impl.yang diff --git a/groupbasedpolicy/src/main/yang/renderer/oc/oc-provider.yang b/renderers/oc/src/main/yang/oc-provider.yang similarity index 100% rename from groupbasedpolicy/src/main/yang/renderer/oc/oc-provider.yang rename to renderers/oc/src/main/yang/oc-provider.yang diff --git a/groupbasedpolicy/src/main/yang/renderer/oc/oc.yang b/renderers/oc/src/main/yang/oc.yang similarity index 98% rename from groupbasedpolicy/src/main/yang/renderer/oc/oc.yang rename to renderers/oc/src/main/yang/oc.yang index 43a9cd3ef..cb04e4a3a 100644 --- a/groupbasedpolicy/src/main/yang/renderer/oc/oc.yang +++ b/renderers/oc/src/main/yang/oc.yang @@ -16,7 +16,6 @@ module oc { import yang-ext {prefix ext; revision-date "2013-07-09";} - import gbp-common {prefix gbp-common;} import endpoint {prefix endpoint;} description @@ -84,4 +83,4 @@ module oc { ext:augment-identifier "oc-context-input"; uses endpoint-location; } -} \ No newline at end of file +} diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/oc/TestL2DomainManager.java b/renderers/oc/src/test/java/org/opendaylight/groupbasedpolicy/renderer/oc/TestL2DomainManager.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/oc/TestL2DomainManager.java rename to renderers/oc/src/test/java/org/opendaylight/groupbasedpolicy/renderer/oc/TestL2DomainManager.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/oc/TestUtilsStaticMethod.java b/renderers/oc/src/test/java/org/opendaylight/groupbasedpolicy/renderer/oc/TestUtilsStaticMethod.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/oc/TestUtilsStaticMethod.java rename to renderers/oc/src/test/java/org/opendaylight/groupbasedpolicy/renderer/oc/TestUtilsStaticMethod.java diff --git a/renderers/ofoverlay/pom.xml b/renderers/ofoverlay/pom.xml new file mode 100644 index 000000000..9ebfcf4aa --- /dev/null +++ b/renderers/ofoverlay/pom.xml @@ -0,0 +1,166 @@ + + + 4.0.0 + + org.opendaylight.groupbasedpolicy + groupbasedpolicy-renderers + 0.2.0-SNAPSHOT + ../ + + + ofoverlay-renderer + bundle + + + + + + + org.opendaylight.openflowplugin + openflowplugin-extension-nicira + ${openflowplugin-nicira.version} + + + + + + + + maven-resources-plugin + 2.7 + + + copy-resources + + validate + + copy-resources + + + src/test/java/org/opendaylight/groupbasedpolicy/resolver + + + ../../groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/resolver + true + + + + + + + + org.apache.felix + maven-bundle-plugin + true + + + + org.apache.http.*;version="4.3.2", + *;resolution:=optional + + httpclient,httpcore,commons-lang,commons-exec;type=!pom;inline=false + + + + ${project.basedir}/META-INF + + + + org.codehaus.mojo + build-helper-maven-plugin + + + + add-source + + generate-sources + + + target/generated-sources/sal + target/generated-sources/config + target/generated-resources/ + + + + + + + org.opendaylight.yangtools + yang-maven-plugin + + + org.opendaylight.controller + yang-jmx-generator-plugin + 0.3.0-SNAPSHOT + + + org.opendaylight.yangtools + maven-sal-api-gen-plugin + ${yangtools.version} + jar + + + + + + generate-sources + + + + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + ${project.build.directory}/generated-sources/config + + urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang + + + + org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl + ${project.build.directory}/generated-sources/sal + + + org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl + ${project.build.directory}/site/models + + + true + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + org.jacoco + jacoco-maven-plugin + + + pre-unit-test + + prepare-agent + + + + post-unit-test + test + + report + + + ${sonar.jacoco.reportPath} + + org/opendaylight/groupbasedpolicy/**/*.class + + + + + + + + + diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModule.java b/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModule.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModule.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModule.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModuleFactory.java b/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModuleFactory.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModuleFactory.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModuleFactory.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/openstack_endpoint_provider/impl/OpenstackEndpointProviderModule.java b/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/openstack_endpoint_provider/impl/OpenstackEndpointProviderModule.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/openstack_endpoint_provider/impl/OpenstackEndpointProviderModule.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/openstack_endpoint_provider/impl/OpenstackEndpointProviderModule.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/openstack_endpoint_provider/impl/OpenstackEndpointProviderModuleFactory.java b/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/openstack_endpoint_provider/impl/OpenstackEndpointProviderModuleFactory.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/openstack_endpoint_provider/impl/OpenstackEndpointProviderModuleFactory.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/openstack_endpoint_provider/impl/OpenstackEndpointProviderModuleFactory.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/integration/openstackgbp/OpenstackGbpEndpoint.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/integration/openstackgbp/OpenstackGbpEndpoint.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/integration/openstackgbp/OpenstackGbpEndpoint.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/integration/openstackgbp/OpenstackGbpEndpoint.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/EndpointListener.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/EndpointListener.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/EndpointListener.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/EndpointListener.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/EndpointManager.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/EndpointManager.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/EndpointManager.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/EndpointManager.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/OFOverlayRenderer.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/OFOverlayRenderer.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/OFOverlayRenderer.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/OFOverlayRenderer.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/PolicyManager.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/PolicyManager.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/PolicyManager.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/PolicyManager.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SwitchListener.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SwitchListener.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SwitchListener.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SwitchListener.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SwitchManager.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SwitchManager.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SwitchManager.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SwitchManager.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/ActionComparator.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/ActionComparator.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/ActionComparator.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/ActionComparator.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapper.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapper.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapper.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapper.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTable.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTable.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTable.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTable.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowUtils.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowUtils.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowUtils.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowUtils.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTable.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTable.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTable.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTable.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTable.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTable.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTable.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTable.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcer.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcer.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcer.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcer.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurity.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurity.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurity.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurity.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapper.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapper.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapper.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapper.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/Classifier.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/Classifier.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/Classifier.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/Classifier.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/EtherTypeClassifier.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/EtherTypeClassifier.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/EtherTypeClassifier.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/EtherTypeClassifier.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/IpProtoClassifier.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/IpProtoClassifier.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/IpProtoClassifier.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/IpProtoClassifier.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/L4Classifier.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/L4Classifier.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/L4Classifier.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/L4Classifier.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/SubjectFeatures.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/SubjectFeatures.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/SubjectFeatures.java rename to renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/SubjectFeatures.java diff --git a/groupbasedpolicy/src/main/yang/integration/openstackgbp/openstackgbp-provider-impl.yang b/renderers/ofoverlay/src/main/yang/integration/openstackgbp/openstackgbp-provider-impl.yang similarity index 100% rename from groupbasedpolicy/src/main/yang/integration/openstackgbp/openstackgbp-provider-impl.yang rename to renderers/ofoverlay/src/main/yang/integration/openstackgbp/openstackgbp-provider-impl.yang diff --git a/groupbasedpolicy/src/main/yang/integration/openstackgbp/openstackgbp.yang b/renderers/ofoverlay/src/main/yang/integration/openstackgbp/openstackgbp.yang similarity index 100% rename from groupbasedpolicy/src/main/yang/integration/openstackgbp/openstackgbp.yang rename to renderers/ofoverlay/src/main/yang/integration/openstackgbp/openstackgbp.yang diff --git a/groupbasedpolicy/src/main/yang/renderer/ofoverlay/ofoverlay-provider-impl.yang b/renderers/ofoverlay/src/main/yang/ofoverlay-provider-impl.yang similarity index 100% rename from groupbasedpolicy/src/main/yang/renderer/ofoverlay/ofoverlay-provider-impl.yang rename to renderers/ofoverlay/src/main/yang/ofoverlay-provider-impl.yang diff --git a/groupbasedpolicy/src/main/yang/renderer/ofoverlay/ofoverlay-provider.yang b/renderers/ofoverlay/src/main/yang/ofoverlay-provider.yang similarity index 100% rename from groupbasedpolicy/src/main/yang/renderer/ofoverlay/ofoverlay-provider.yang rename to renderers/ofoverlay/src/main/yang/ofoverlay-provider.yang diff --git a/groupbasedpolicy/src/main/yang/renderer/ofoverlay/ofoverlay.yang b/renderers/ofoverlay/src/main/yang/ofoverlay.yang similarity index 100% rename from groupbasedpolicy/src/main/yang/renderer/ofoverlay/ofoverlay.yang rename to renderers/ofoverlay/src/main/yang/ofoverlay.yang diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockEndpointManager.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockEndpointManager.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockEndpointManager.java rename to renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockEndpointManager.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockPolicyManager.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockPolicyManager.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockPolicyManager.java rename to renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockPolicyManager.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockSwitchManager.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockSwitchManager.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockSwitchManager.java rename to renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/MockSwitchManager.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapperTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapperTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapperTest.java rename to renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapperTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTableTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTableTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTableTest.java rename to renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTableTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTableTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTableTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTableTest.java rename to renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTableTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTableTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTableTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTableTest.java rename to renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTableTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcerTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcerTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcerTest.java rename to renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcerTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurityTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurityTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurityTest.java rename to renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurityTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapperTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapperTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapperTest.java rename to renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapperTest.java diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/IndexedTenantTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/IndexedTenantTest.java new file mode 100644 index 000000000..1ffc6f91b --- /dev/null +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/IndexedTenantTest.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.resolver; + +import java.util.Collection; + +import org.junit.Test; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomain; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomainBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Subnet; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubnetBuilder; + +import com.google.common.collect.ImmutableList; + +import static org.junit.Assert.*; + +public class IndexedTenantTest { + + @Test + public void testResolveND() throws Exception { + SubnetId sid = new SubnetId("dd25397d-d829-4c8d-8c01-31f129b8de8f"); + SubnetId sid2 = new SubnetId("c752ba40-40aa-4a47-8138-9b7175b854fa"); + L3ContextId l3id = new L3ContextId("f2311f52-890f-4095-8b85-485ec8b92b3c"); + L2BridgeDomainId bdid= new L2BridgeDomainId("70aeb9ea-4ca1-4fb9-9780-22b04b84a0d6"); + L2FloodDomainId fdid = new L2FloodDomainId("252fbac6-bb6e-4d16-808d-6f56d20e5cca"); + + L3Context l3c = new L3ContextBuilder().setId(l3id).build(); + L2BridgeDomain bd = new L2BridgeDomainBuilder() + .setParent(l3id) + .setId(bdid).build(); + L2FloodDomain fd = new L2FloodDomainBuilder() + .setParent(bdid) + .setId(fdid).build(); + Subnet s = new SubnetBuilder() + .setParent(fdid) + .setId(sid).build(); + Subnet s2 = new SubnetBuilder() + .setParent(bdid) + .setId(sid2).build(); + Tenant t = new TenantBuilder() + .setSubnet(ImmutableList.of(s, s2)) + .setL2BridgeDomain(ImmutableList.of(bd)) + .setL3Context(ImmutableList.of(l3c)) + .setL2FloodDomain(ImmutableList.of(fd)) + .build(); + IndexedTenant it = new IndexedTenant(t); + + assertNotNull(it.getNetworkDomain(sid)); + Collection sns = it.resolveSubnets(sid); + assertTrue(sns.contains(s)); + assertTrue(sns.contains(s2)); + assertEquals(l3id, it.resolveL3Context(sid).getId()); + assertEquals(bdid, it.resolveL2BridgeDomain(sid).getId()); + assertEquals(fdid, it.resolveL2FloodDomain(sid).getId()); + } +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/InheritanceUtilsTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/InheritanceUtilsTest.java new file mode 100644 index 000000000..7f5e5772a --- /dev/null +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/InheritanceUtilsTest.java @@ -0,0 +1,1103 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.resolver; + +import java.util.HashSet; +import java.util.List; + +import org.junit.Test; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityMatcherName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionMatcherName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityMatcherName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementMatcherName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TargetName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.CapabilityBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Label.InclusionRule; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Matcher.MatchType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.QualityBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.RequirementBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.Capability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.CapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.condition.matchers.ConditionMatcher; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.condition.matchers.ConditionMatcherBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.conditions.Condition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.conditions.ConditionBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.Quality; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.QualityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.Requirement; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.RequirementBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcher; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcherBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQuality; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQualityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Clause; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.ClauseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Subject; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.SubjectBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Target; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.TargetBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ConsumerMatchersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ProviderMatchersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcher; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcherBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirementBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcher; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcherBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelectorBuilder; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; + +import static org.junit.Assert.*; + +public class InheritanceUtilsTest { + // ****** + // Labels + // ****** + + Quality q1 = new QualityBuilder() + .setName(new QualityName("q1")) + .build(); + Quality q1Include = new QualityBuilder(q1) + .setInclusionRule(InclusionRule.Include) + .build(); + Quality q1Exclude = new QualityBuilder(q1) + .setInclusionRule(InclusionRule.Exclude) + .build(); + Quality q2 = new QualityBuilder() + .setName(new QualityName("q2")) + .build(); + Quality q2Exclude = new QualityBuilder() + .setName(new QualityName("q2")) + .setInclusionRule(InclusionRule.Exclude) + .build(); + Quality q3 = new QualityBuilder() + .setName(new QualityName("q3")) + .build(); + + Requirement r1 = new RequirementBuilder() + .setName(new RequirementName("r1")) + .build(); + Requirement r2 = new RequirementBuilder() + .setName(new RequirementName("r2")) + .build(); + Requirement r1exclude = new RequirementBuilder() + .setName(new RequirementName("r1")) + .setInclusionRule(InclusionRule.Exclude) + .build(); + Requirement r3 = new RequirementBuilder() + .setName(new RequirementName("r3")) + .build(); + + Capability c1 = new CapabilityBuilder() + .setName(new CapabilityName("c1")) + .build(); + Capability c2 = new CapabilityBuilder() + .setName(new CapabilityName("c2")) + .build(); + Capability c1exclude = new CapabilityBuilder() + .setName(new CapabilityName("c1")) + .setInclusionRule(InclusionRule.Exclude) + .build(); + Capability c3 = new CapabilityBuilder() + .setName(new CapabilityName("c3")) + .build(); + + Condition cond1 = new ConditionBuilder() + .setName(new ConditionName("cond1")) + .build(); + Condition cond2 = new ConditionBuilder() + .setName(new ConditionName("cond2")) + .build(); + Condition cond2exlude = new ConditionBuilder() + .setName(new ConditionName("cond2")) + .setInclusionRule(InclusionRule.Exclude) + .build(); + + // ********* + // Contracts + // ********* + + TargetName q2TargetName = new TargetName("q2"); + Target q2Target = new TargetBuilder() + .setName(q2TargetName) + .setQuality(ImmutableList.of(q2)) + .build(); + + TargetName q1ExcludeTargetName = new TargetName("q1_exclude"); + Target q1ExcludeTarget = new TargetBuilder() + .setName(q1ExcludeTargetName) + .setQuality(ImmutableList.of(q1Exclude, q2)) + .build(); + + TargetName q1IncludeTargetName = new TargetName("q1_include"); + Target q1IncludeTarget = new TargetBuilder() + .setName(q1IncludeTargetName) + .setQuality(ImmutableList.of(q1Include)) + .build(); + + Target q2PlusTarget = new TargetBuilder() + .setName(q2TargetName) + .setQuality(ImmutableList.of(q3)) + .build(); + + SubjectName subject1 = new SubjectName("subject1"); + SubjectName subject2 = new SubjectName("subject2"); + + RequirementMatcher rm_r1 = new RequirementMatcherBuilder() + .setName(new RequirementMatcherName("rm_r1")) + .setMatcherRequirement(ImmutableList.of(new MatcherRequirementBuilder(r1) + .build())) + .build(); + RequirementMatcher rm_r1_plus = new RequirementMatcherBuilder() + .setName(new RequirementMatcherName("rm_r1")) + .setMatchType(MatchType.All) + .setMatcherRequirement(ImmutableList.of(new MatcherRequirementBuilder(r2) + .build())) + .build(); + + CapabilityMatcher capm_c1 = new CapabilityMatcherBuilder() + .setName(new CapabilityMatcherName("capm_c1")) + .setMatcherCapability(ImmutableList.of(new MatcherCapabilityBuilder(c1) + .build())) + .build(); + + ConditionMatcher cm_c1 = new ConditionMatcherBuilder() + .setName(new ConditionMatcherName("cm_c1")) + .setCondition(ImmutableList.of(cond1)) + .build(); + ConditionMatcher cm_c2 = new ConditionMatcherBuilder() + .setName(new ConditionMatcherName("cm_c2")) + .setMatchType(MatchType.All) + .setCondition(ImmutableList.of(cond2)) + .build(); + ConditionMatcher cm_c2_plus = new ConditionMatcherBuilder() + .setName(new ConditionMatcherName("cm_c2")) + .setCondition(ImmutableList.of(cond2exlude)) + .build(); + + ClauseName clauseName1 = new ClauseName("clauseName1"); + Clause clause1 = new ClauseBuilder() + .setName(clauseName1) + .setSubjectRefs(ImmutableList.of(subject1)) + .setProviderMatchers(new ProviderMatchersBuilder() + .setCapabilityMatcher(ImmutableList.of(capm_c1)) + .setConditionMatcher(ImmutableList.of(cm_c1)) + .build()) + .setConsumerMatchers(new ConsumerMatchersBuilder() + .setRequirementMatcher(ImmutableList.of(rm_r1)) + .setConditionMatcher(ImmutableList.of(cm_c2)) + .build()) + .build(); + + Clause clause1plus = new ClauseBuilder() + .setName(clauseName1) + .setSubjectRefs(ImmutableList.of(subject2)) + .setConsumerMatchers(new ConsumerMatchersBuilder() + .setRequirementMatcher(ImmutableList.of(rm_r1_plus)) + .setConditionMatcher(ImmutableList.of(cm_c2_plus)) + .build()) + .build(); + + ActionRef a1 = new ActionRefBuilder() + .setName(new ActionName("a1")) + .build(); + ClassifierRef cr1 = new ClassifierRefBuilder() + .setName(new ClassifierName("cr1")) + .build(); + Rule rule1 = new RuleBuilder() + .setName(new RuleName("r1")) + .setActionRef(ImmutableList.of(a1)) + .setClassifierRef(ImmutableList.of(cr1)) + .build(); + Rule rule2 = new RuleBuilder() + .setName(new RuleName("r2")) + .setOrder(5) + .build(); + Rule rule3 = new RuleBuilder() + .setName(new RuleName("r3")) + .setOrder(7) + .build(); + Rule rule4 = new RuleBuilder() + .setName(new RuleName("r4")) + .setOrder(1) + .build(); + + Subject s1 = new SubjectBuilder() + .setName(new SubjectName("s1")) + .setRule(ImmutableList.of(rule1, rule2)) + .build(); + Subject s1_plus = new SubjectBuilder() + .setName(s1.getName()) + .setRule(ImmutableList.of(rule3, rule4)) + .setOrder(4) + .build(); + Subject s2 = new SubjectBuilder() + .setName(new SubjectName("s2")) + .setOrder(5) + .build(); + + ContractId contractId1 = + new ContractId("e7e6804f-7fcb-46cf-9bc6-abfec0896d95"); + Contract contract1 = new ContractBuilder() + .setId(contractId1) + .setQuality(ImmutableList.of(q1)) + .setTarget(ImmutableList.of(q2Target, + q1IncludeTarget, + q1ExcludeTarget)) + .setClause(ImmutableList.of(clause1)) + .setSubject(ImmutableList.of(s1)) + .build(); + + ContractId contractId2 = + new ContractId("3f56ae44-d1e4-4617-95af-c809dfc50149"); + Contract contract2 = new ContractBuilder() + .setId(contractId2) + .setParent(contractId1) + .setTarget(ImmutableList.of(q2PlusTarget, q1IncludeTarget)) + .setClause(ImmutableList.of(clause1plus)) + .setSubject(ImmutableList.of(s1_plus, s2)) + .build(); + + ContractId cloop2Id = new ContractId("89700928-7316-4216-a853-a7ea3934b8f4"); + Contract cloop1 = new ContractBuilder() + .setId(new ContractId("56bbce36-e60b-473d-92de-bb63b5a6dbb5")) + .setParent(cloop2Id) + .setClause(ImmutableList.of(clause1)) + .setSubject(ImmutableList.of(s1, s2)) + .build(); + Contract cloop2 = new ContractBuilder() + .setId(cloop2Id) + .setParent(cloop1.getId()) + .build(); + ContractId cselfloopid = + new ContractId("63edead2-d6f1-4acf-9f78-831595d194ee"); + Contract cselfloop = new ContractBuilder() + .setId(cselfloopid) + .setParent(cselfloopid) + .build(); + Contract corphan = new ContractBuilder() + .setId(new ContractId("f72c15f3-76ab-4c7e-a817-eb5f6efcb654")) + .setParent(new ContractId("eca4d0d5-8c62-4f46-ad42-71c1f4d3da12")) + .build(); + + // *************** + // Endpoint Groups + // *************** + + SelectorName cnsName1 = new SelectorName("cns1"); + ConsumerNamedSelector cns1 = new ConsumerNamedSelectorBuilder() + .setName(cnsName1) + .setContract(ImmutableList.of(contractId1)) + .setRequirement(ImmutableList.of(r2)) + .build(); + + ConsumerNamedSelector cns1_plus = new ConsumerNamedSelectorBuilder() + .setName(cnsName1) + .setContract(ImmutableList.of(contractId2)) + .setRequirement(ImmutableList.of(r3)) + .build(); + + ProviderNamedSelector pns1 = new ProviderNamedSelectorBuilder() + .setName(cnsName1) + .setContract(ImmutableList.of(contractId1)) + .setCapability(ImmutableList.of(c2)) + .build(); + + ProviderNamedSelector pns1_plus = new ProviderNamedSelectorBuilder() + .setName(cnsName1) + .setContract(ImmutableList.of(contractId2)) + .setCapability(ImmutableList.of(c3)) + .build(); + + QualityMatcher qm_q1_all = new QualityMatcherBuilder() + .setName(new QualityMatcherName("qm_q1_all")) + .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q1) + .build())) + .setMatchType(MatchType.All) + .build(); + QualityMatcher qm_q1_any = new QualityMatcherBuilder() + .setName(new QualityMatcherName("qm_q1_any")) + .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q1) + .build())) + .setMatchType(MatchType.Any) + .build(); + QualityMatcher qm_q2q3_any = new QualityMatcherBuilder() + .setName(new QualityMatcherName("qm_q2q3_any")) + .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q2) + .build(), + new MatcherQualityBuilder(q3) + .build())) + .setMatchType(MatchType.Any) + .build(); + + QualityMatcher qm_q2tq2 = new QualityMatcherBuilder() + .setName(new QualityMatcherName("qm_q2tq2")) + .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q2) + .setTargetNamespace(q2TargetName) + .build())) + .setMatchType(MatchType.Any) + .build(); + QualityMatcher qm_q2q3_plus = new QualityMatcherBuilder() + .setName(new QualityMatcherName("qm_q2q3_any")) + .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q3) + .setTargetNamespace(q2TargetName) + .build(), + new MatcherQualityBuilder(q2Exclude) + .build())) + .setMatchType(MatchType.All) + .build(); + QualityMatcher qm_q1_plus = new QualityMatcherBuilder() + .setName(new QualityMatcherName("qm_q1_any")) + .build(); + + SelectorName ctsName1 = new SelectorName("cts1"); + ConsumerTargetSelector cts1 = new ConsumerTargetSelectorBuilder() + .setName(ctsName1) + .setQualityMatcher(ImmutableList.of(qm_q1_all, qm_q1_any)) + .setRequirement(ImmutableList.of(r2)) + .build(); + SelectorName ctsName2 = new SelectorName("cts2"); + ConsumerTargetSelector cts2 = new ConsumerTargetSelectorBuilder() + .setName(ctsName2) + .setQualityMatcher(ImmutableList.of(qm_q2q3_any)) + .setRequirement(ImmutableList.of(r1exclude, r3)) + .build(); + ConsumerTargetSelector cts1_plus = new ConsumerTargetSelectorBuilder() + .setName(ctsName1) + .setQualityMatcher(ImmutableList.of(qm_q1_plus, + qm_q2q3_any, + qm_q1_plus)) + .setRequirement(ImmutableList.of(r3)) + .build(); + ConsumerTargetSelector cts2_plus = new ConsumerTargetSelectorBuilder() + .setName(ctsName2) + .setQualityMatcher(ImmutableList.of(qm_q2tq2, + qm_q2q3_plus)) + .setRequirement(ImmutableList.of(r3)) + .build(); + + SelectorName ptsName1 = new SelectorName("pts1"); + ProviderTargetSelector pts1 = new ProviderTargetSelectorBuilder() + .setName(ptsName1) + .setQualityMatcher(ImmutableList.of(qm_q1_all, qm_q1_any)) + .setCapability(ImmutableList.of(c2)) + .build(); + SelectorName ptsName2 = new SelectorName("pts2"); + ProviderTargetSelector pts2 = new ProviderTargetSelectorBuilder() + .setName(ptsName2) + .setQualityMatcher(ImmutableList.of(qm_q2q3_any)) + .setCapability(ImmutableList.of(c1exclude, c3)) + .build(); + ProviderTargetSelector pts1_plus = new ProviderTargetSelectorBuilder() + .setName(ptsName1) + .setQualityMatcher(ImmutableList.of(qm_q1_plus, + qm_q2q3_any, + qm_q1_plus)) + .setCapability(ImmutableList.of(c3)) + .build(); + ProviderTargetSelector pts2_plus = new ProviderTargetSelectorBuilder() + .setName(ptsName2) + .setQualityMatcher(ImmutableList.of(qm_q2tq2, + qm_q2q3_plus)) + .setCapability(ImmutableList.of(c3)) + .build(); + + EndpointGroupId egId1 = + new EndpointGroupId("c0e5edfb-02d2-412b-8757-a77b3daeb5d4"); + EndpointGroup eg1 = new EndpointGroupBuilder() + .setId(egId1) + .setRequirement(ImmutableList.of(r1)) + .setCapability(ImmutableList.of(c1)) + .setConsumerTargetSelector(ImmutableList.of(cts1, cts2)) + .setConsumerNamedSelector(ImmutableList.of(cns1)) + .setProviderTargetSelector(ImmutableList.of(pts1, pts2)) + .setProviderNamedSelector(ImmutableList.of(pns1)) + .build(); + EndpointGroupId egId2 = + new EndpointGroupId("60483327-ad76-43dd-b3bf-54ffb73ef4b8"); + EndpointGroup eg2 = new EndpointGroupBuilder() + .setId(egId2) + .setParent(egId1) + .setConsumerTargetSelector(ImmutableList.of(cts1_plus, cts2_plus)) + .setConsumerNamedSelector(ImmutableList.of(cns1_plus)) + .setProviderTargetSelector(ImmutableList.of(pts1_plus, pts2_plus)) + .setProviderNamedSelector(ImmutableList.of(pns1_plus)) + .build(); + + EndpointGroupId egloop2Id = + new EndpointGroupId("cb5be574-9836-4053-8ec4-4b4a43331d65"); + EndpointGroup egloop1 = new EndpointGroupBuilder() + .setId(new EndpointGroupId("a33fdd4d-f58b-4741-a69f-08aecab9af2e")) + .setParent(egloop2Id) + .setConsumerNamedSelector(ImmutableList.of(cns1)) + .setProviderNamedSelector(ImmutableList.of(pns1)) + .setConsumerTargetSelector(ImmutableList.of(cts1)) + .setProviderTargetSelector(ImmutableList.of(pts1)) + .build(); + EndpointGroup egloop2 = new EndpointGroupBuilder() + .setId(egloop2Id) + .setParent(egloop1.getId()) + .build(); + EndpointGroupId egselfloopid = + new EndpointGroupId("996ad104-f852-4d77-96cf-cddde5cebb84"); + EndpointGroup egselfloop = new EndpointGroupBuilder() + .setId(egselfloopid) + .setParent(egselfloopid) + .build(); + EndpointGroup egorphan = new EndpointGroupBuilder() + .setId(new EndpointGroupId("feafeac9-ce1a-4b19-8455-8fcc9a4ff013")) + .setParent(new EndpointGroupId("aa9dfcf1-610c-42f9-8c3a-f67b43196821")) + .build(); + + // ******* + // Tenants + // ******* + + TenantId tenantId1 = new TenantId("0ac5d219-979c-4cca-8f90-83b69bc414ad"); + Tenant tenant1 = new TenantBuilder() + .setId(tenantId1) + .setEndpointGroup(ImmutableList.of(eg1, eg2)) + .setContract(ImmutableList.of(contract1, contract2)) + .build(); + + Tenant malformed = new TenantBuilder() + .setId(new TenantId("b26e6b18-8e74-4062-a7d2-e8437132030d")) + .setContract(ImmutableList.of(cloop1, cloop2, cselfloop, corphan)) + .setEndpointGroup(ImmutableList.of(egloop1, egloop2, egselfloop, egorphan)) + .build(); + + // **************** + // Other test state + // **************** + + public boolean containsQuality(List qualities, + QualityBase quality) { + for (QualityBase q : qualities) { + if (q.getName().equals(quality.getName())) + return true; + } + return false; + } + + @Test + public void testTargetSimple() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + Contract c1 = TenantUtils.findContract(tenant, contractId1); + + // target with a quality directly in the target and one in + // the containing contract + Target result = TenantUtils.findTarget(c1, q2TargetName); + assertEquals(q2TargetName, result.getName()); + List qualities = result.getQuality(); + assertTrue(q1.getName() + " found in q2target", + containsQuality(qualities, q1)); + assertTrue(q2.getName() + " found in q2target", + containsQuality(qualities, q2)); + + // target with a quality directly in the target with explicit "include" + result = TenantUtils.findTarget(c1, q1IncludeTargetName); + qualities = result.getQuality(); + assertTrue(q1.getName() + " found in q1IncludeTargetName", + containsQuality(qualities, q1)); + + // target with a quality from the containing contract but overridden + // in the target + result = TenantUtils.findTarget(c1, q1ExcludeTargetName); + qualities = result.getQuality(); + assertFalse(q1.getName() + " found in q1ExcludeTargetName", + containsQuality(qualities, q1)); + assertTrue(q2.getName() + " found in q1ExcludeTargetName", + containsQuality(qualities, q2)); + } + + @Test + public void testTargetInheritance() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + Contract c2 = TenantUtils.findContract(tenant, contractId2); + + // hits the q2PlusTarget which should include everything in q2Target + // plus q3 + Target result = TenantUtils.findTarget(c2, q2TargetName); + List qualities = result.getQuality(); + assertTrue(q1.getName() + " found in q2target", + containsQuality(qualities, q1)); + assertTrue(q2.getName() + " found in q2target", + containsQuality(qualities, q2)); + assertTrue(q3.getName() + " found in q2target", + containsQuality(qualities, q3)); + + // Simple case of inheriting the behavior from the base but not messing + // it up + result = TenantUtils.findTarget(c2, q1IncludeTargetName); + qualities = result.getQuality(); + assertTrue(q1.getName() + " found in q1IncludeTargetName", + containsQuality(qualities, q1)); + assertFalse(q2.getName() + " found in q1IncludeTargetName", + containsQuality(qualities, q2)); + assertFalse(q3.getName() + " found in q1IncludeTargetName", + containsQuality(qualities, q3)); + + // Inherit a target from the base that isn't found in the child at all + result = TenantUtils.findTarget(c2, q1ExcludeTargetName); + qualities = result.getQuality(); + assertFalse(q1.getName() + " found in q1ExcludeTargetName", + containsQuality(qualities, q1)); + assertTrue(q2.getName() + " found in q1ExcludeTargetName", + containsQuality(qualities, q2)); + assertFalse(q3.getName() + " found in q1ExcludeTargetName", + containsQuality(qualities, q3)); + } + + private boolean containsRequirement(List requirements, + RequirementBase requirement) { + for (RequirementBase r : requirements) { + if (r.getName().equals(requirement.getName())) + return true; + } + return false; + } + + private boolean containsCapability(List capabilities, + CapabilityBase capability) { + for (CapabilityBase r : capabilities) { + if (r.getName().equals(capability.getName())) + return true; + } + return false; + } + + private boolean containsCondition(List conditions, + Condition condition) { + for (Condition r : conditions) { + if (r.getName().equals(condition.getName())) + return true; + } + return false; + } + + @Test + public void testConsumerTargetSelectorSimple() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1); + + // should get r1 from eg1 and r2 from target selector + ConsumerTargetSelector result = + TenantUtils.findCts(egResult1, ctsName1); + assertEquals(ctsName1, result.getName()); + List requirements = result.getRequirement(); + assertTrue(r1.getName() + " found in " + requirements, + containsRequirement(requirements, r1)); + assertTrue(r2.getName() + " found in " + requirements, + containsRequirement(requirements, r2)); + + List matchers = result.getQualityMatcher(); + assertEquals(2, matchers.size()); + for (QualityMatcher m : matchers) { + if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) { + assertTrue(containsQuality(m.getMatcherQuality(), q1)); + assertEquals(MatchType.All, m.getMatchType()); + } else { + assertTrue(containsQuality(m.getMatcherQuality(), q1)); + assertEquals(MatchType.Any, m.getMatchType()); + } + } + + // should get r1 from eg1 but excluded in target selector + // r3 comes from target selector + result = TenantUtils.findCts(egResult1, ctsName2); + assertEquals(ctsName2, result.getName()); + requirements = result.getRequirement(); + assertFalse(r1.getName() + " found in " + requirements, + containsRequirement(requirements, r1)); + assertFalse(r2.getName() + " found in " + requirements, + containsRequirement(requirements, r2)); + assertTrue(r3.getName() + " found in " + requirements, + containsRequirement(requirements, r3)); + + matchers = result.getQualityMatcher(); + assertEquals(1, matchers.size()); + assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q2)); + assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q3)); + assertEquals(MatchType.Any, matchers.get(0).getMatchType()); + } + + @Test + public void testConsumerTargetSelectorInheritance() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2); + + ConsumerTargetSelector result = + TenantUtils.findCts(egResult2, ctsName1); + + List requirements = result.getRequirement(); + assertTrue(r1.getName() + " found in " + requirements, + containsRequirement(requirements, r1)); + assertTrue(r3.getName() + " found in " + requirements, + containsRequirement(requirements, r3)); + + // should have three matchers, + // (1) qm_q1_all inherited from endpoint group 1 + // (2) qm_q1_any inherited from endpoint group 1, but overridden in + // endpoint group 2 with no new semantics + // (3) qm_q2q3_any defined in endpoint group 2 + List matchers = result.getQualityMatcher(); + assertEquals(3, matchers.size()); + for (QualityMatcher m : matchers) { + if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) { + assertEquals(1, m.getMatcherQuality().size()); + assertTrue(containsQuality(m.getMatcherQuality(), q1)); + assertEquals(MatchType.All, m.getMatchType()); + } else if (m.getName().equals(new QualityMatcherName("qm_q1_any"))) { + assertEquals(1, m.getMatcherQuality().size()); + assertTrue(containsQuality(m.getMatcherQuality(), q1)); + assertEquals(MatchType.Any, m.getMatchType()); + } else { + assertTrue(containsQuality(m.getMatcherQuality(), q2)); + assertTrue(containsQuality(m.getMatcherQuality(), q3)); + assertEquals(MatchType.Any, m.getMatchType()); + } + } + + result = TenantUtils.findCts(egResult2, ctsName2); + assertEquals(ctsName2, result.getName()); + requirements = result.getRequirement(); + + // should get r1 from eg1 but excluded in target selector + // r3 comes from target selector + assertFalse(r1.getName() + " found in " + requirements, + containsRequirement(requirements, r1)); + assertFalse(r2.getName() + " found in " + requirements, + containsRequirement(requirements, r2)); + assertTrue(r3.getName() + " found in " + requirements, + containsRequirement(requirements, r3)); + + // Should get 2 matchers: + // (1) qm_q2q2_any inherited from eg1, except that q2 is excluded + // by qm_q2q3_plus and q3 has a target namespace added + // (2) qm_q2tq2_any newly-defined with a target namespace + matchers = result.getQualityMatcher(); + assertEquals(2, matchers.size()); + for (QualityMatcher m : matchers) { + if (m.getName().equals(new QualityMatcherName("qm_q2q3_any"))) { + assertFalse(containsQuality(m.getMatcherQuality(), q1)); + assertFalse(containsQuality(m.getMatcherQuality(), q2)); + assertTrue(containsQuality(m.getMatcherQuality(), q3)); + for (MatcherQuality mq : m.getMatcherQuality()) { + if (mq.getName().equals(q3.getName())) { + assertEquals(q2TargetName, mq.getTargetNamespace()); + } else { + assertNull(mq.getTargetNamespace()); + } + } + assertEquals(MatchType.All, m.getMatchType()); + } else { + assertTrue(containsQuality(m.getMatcherQuality(), q2)); + assertEquals(MatchType.Any, m.getMatchType()); + assertEquals(1, m.getMatcherQuality().size()); + assertEquals(q2TargetName, + m.getMatcherQuality().get(0).getTargetNamespace()); + } + } + } + + @Test + public void testConsumerNamedSelectorSimple() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1); + + // should get r1 from eg1 and r2 from selector + ConsumerNamedSelector result = + TenantUtils.findCns(egResult1, cnsName1); + assertEquals(cnsName1, result.getName()); + List requirements = result.getRequirement(); + assertEquals(2, requirements.size()); + assertTrue(r1.getName() + " found in " + requirements, + containsRequirement(requirements, r1)); + assertTrue(r2.getName() + " found in " + requirements, + containsRequirement(requirements, r2)); + + assertEquals(1, result.getContract().size()); + HashSet cids = new HashSet<>(); + cids.addAll(result.getContract()); + assertEquals(ImmutableSet.of(contractId1), cids); + } + + @Test + public void testConsumerNamedSelectorInheritance() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2); + + // should get r1 from eg1 and r2 from eg1 selector, + // and r3 from eg2 selector + ConsumerNamedSelector result = + TenantUtils.findCns(egResult2, cnsName1); + assertEquals(cnsName1, result.getName()); + List requirements = result.getRequirement(); + assertEquals(3, requirements.size()); + assertTrue(r1.getName() + " found in " + requirements, + containsRequirement(requirements, r1)); + assertTrue(r2.getName() + " found in " + requirements, + containsRequirement(requirements, r2)); + assertTrue(r3.getName() + " found in " + requirements, + containsRequirement(requirements, r3)); + + assertEquals(2, result.getContract().size()); + HashSet cids = new HashSet<>(); + cids.addAll(result.getContract()); + assertEquals(ImmutableSet.of(contractId1, contractId2), cids); + } + + @Test + public void testProviderTargetSelectorSimple() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1); + + // should get c1 from eg1 and c2 from target selector + ProviderTargetSelector result = + TenantUtils.findPts(egResult1, ptsName1); + assertEquals(ptsName1, result.getName()); + List capabilities = result.getCapability(); + assertTrue(c1.getName() + " found in " + capabilities, + containsCapability(capabilities, c1)); + assertTrue(c2.getName() + " found in " + capabilities, + containsCapability(capabilities, c2)); + + List matchers = result.getQualityMatcher(); + assertEquals(2, matchers.size()); + for (QualityMatcher m : matchers) { + if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) { + assertTrue(containsQuality(m.getMatcherQuality(), q1)); + assertEquals(MatchType.All, m.getMatchType()); + } else { + assertTrue(containsQuality(m.getMatcherQuality(), q1)); + assertEquals(MatchType.Any, m.getMatchType()); + } + } + + // should get c1 from eg1 but excluded in target selector + // c3 comes from target selector + result = TenantUtils.findPts(egResult1, ptsName2); + assertEquals(ptsName2, result.getName()); + capabilities = result.getCapability(); + assertFalse(c1.getName() + " found in " + capabilities, + containsCapability(capabilities, c1)); + assertFalse(c2.getName() + " found in " + capabilities, + containsCapability(capabilities, c2)); + assertTrue(c3.getName() + " found in " + capabilities, + containsCapability(capabilities, c3)); + + matchers = result.getQualityMatcher(); + assertEquals(1, matchers.size()); + assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q2)); + assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q3)); + assertEquals(MatchType.Any, matchers.get(0).getMatchType()); + } + + @Test + public void testProviderTargetSelectorInheritance() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2); + + ProviderTargetSelector result = + TenantUtils.findPts(egResult2, ptsName1); + + List capabilities = result.getCapability(); + assertTrue(c1.getName() + " found in " + capabilities, + containsCapability(capabilities, c1)); + assertTrue(c3.getName() + " found in " + capabilities, + containsCapability(capabilities, c3)); + + // should have three matchers, + // (1) qm_q1_all inherited from endpoint group 1 + // (2) qm_q1_any inherited from endpoint group 1, but overridden in + // endpoint group 2 with no new semantics + // (3) qm_q2q3_any defined in endpoint group 2 + List matchers = result.getQualityMatcher(); + assertEquals(3, matchers.size()); + for (QualityMatcher m : matchers) { + if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) { + assertEquals(1, m.getMatcherQuality().size()); + assertTrue(containsQuality(m.getMatcherQuality(), q1)); + assertEquals(MatchType.All, m.getMatchType()); + } else if (m.getName().equals(new QualityMatcherName("qm_q1_any"))) { + assertEquals(1, m.getMatcherQuality().size()); + assertTrue(containsQuality(m.getMatcherQuality(), q1)); + assertEquals(MatchType.Any, m.getMatchType()); + } else { + assertTrue(containsQuality(m.getMatcherQuality(), q2)); + assertTrue(containsQuality(m.getMatcherQuality(), q3)); + assertEquals(MatchType.Any, m.getMatchType()); + } + } + + result = TenantUtils.findPts(egResult2, ptsName2); + assertEquals(ptsName2, result.getName()); + capabilities = result.getCapability(); + + // should get c1 from eg1 but excluded in target selector + // c3 comes from target selector + assertFalse(c1.getName() + " found in " + capabilities, + containsCapability(capabilities, c1)); + assertFalse(c2.getName() + " found in " + capabilities, + containsCapability(capabilities, c2)); + assertTrue(c3.getName() + " found in " + capabilities, + containsCapability(capabilities, c3)); + + // Should get 2 matchers: + // (1) qm_q2q2_any inherited from eg1, except that q2 is excluded + // by qm_q2q3_plus and q3 has a target namespace added + // (2) qm_q2tq2_any newly-defined with a target namespace + matchers = result.getQualityMatcher(); + assertEquals(2, matchers.size()); + for (QualityMatcher m : matchers) { + if (m.getName().equals(new QualityMatcherName("qm_q2q3_any"))) { + assertFalse(containsQuality(m.getMatcherQuality(), q1)); + assertFalse(containsQuality(m.getMatcherQuality(), q2)); + assertTrue(containsQuality(m.getMatcherQuality(), q3)); + for (MatcherQuality mq : m.getMatcherQuality()) { + if (mq.getName().equals(q3.getName())) { + assertEquals(q2TargetName, mq.getTargetNamespace()); + } else { + assertNull(mq.getTargetNamespace()); + } + } + assertEquals(MatchType.All, m.getMatchType()); + } else { + assertTrue(containsQuality(m.getMatcherQuality(), q2)); + assertEquals(MatchType.Any, m.getMatchType()); + assertEquals(1, m.getMatcherQuality().size()); + assertEquals(q2TargetName, + m.getMatcherQuality().get(0).getTargetNamespace()); + } + } + } + + @Test + public void testProviderNamedSelectorSimple() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1); + + // should get c1 from eg1 and c2 from selector + ProviderNamedSelector result = + TenantUtils.findPns(egResult1, cnsName1); + assertEquals(cnsName1, result.getName()); + List capabilities = result.getCapability(); + assertEquals(2, capabilities.size()); + assertTrue(c1.getName() + " found in " + capabilities, + containsCapability(capabilities, c1)); + assertTrue(c2.getName() + " found in " + capabilities, + containsCapability(capabilities, c2)); + + assertEquals(1, result.getContract().size()); + HashSet cids = new HashSet<>(); + cids.addAll(result.getContract()); + assertEquals(ImmutableSet.of(contractId1), cids); + } + + @Test + public void testProviderNamedSelectorInheritance() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2); + + // should get c1 from eg1 and c2 from eg1 selector, + // and c3 from eg2 selector + ProviderNamedSelector result = + TenantUtils.findPns(egResult2, cnsName1); + assertEquals(cnsName1, result.getName()); + List capabilities = result.getCapability(); + assertEquals(3, capabilities.size()); + assertTrue(c1.getName() + " found in " + capabilities, + containsCapability(capabilities, c1)); + assertTrue(c2.getName() + " found in " + capabilities, + containsCapability(capabilities, c2)); + assertTrue(c3.getName() + " found in " + capabilities, + containsCapability(capabilities, c3)); + + assertEquals(2, result.getContract().size()); + HashSet cids = new HashSet<>(); + cids.addAll(result.getContract()); + assertEquals(ImmutableSet.of(contractId1, contractId2), cids); + } + + @Test + public void testClauseSimple() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + Contract cresult1 = TenantUtils.findContract(tenant, contractId1); + + Clause result = TenantUtils.findClause(cresult1, clauseName1); + assertEquals(clauseName1, result.getName()); + + // subject refs: subject1 from clause1 + assertEquals(1, result.getSubjectRefs().size()); + assertEquals(ImmutableSet.of(subject1), + ImmutableSet.copyOf(result.getSubjectRefs())); + + assertNotNull(result.getProviderMatchers()); + List cm = + result.getProviderMatchers().getConditionMatcher(); + assertEquals(1, cm.size()); + assertEquals(1, cm.get(0).getCondition().size()); + assertTrue(containsCondition(cm.get(0).getCondition(), cond1)); + + List capm = + result.getProviderMatchers().getCapabilityMatcher(); + assertEquals(1, capm.size()); + assertEquals(1, capm.get(0).getMatcherCapability().size()); + assertTrue(containsCapability(capm.get(0).getMatcherCapability(), c1)); + + assertNotNull(result.getConsumerMatchers()); + cm = result.getConsumerMatchers().getConditionMatcher(); + assertEquals(1, cm.size()); + assertEquals(1, cm.get(0).getCondition().size()); + assertTrue(containsCondition(cm.get(0).getCondition(), cond2)); + + List pm = + result.getConsumerMatchers().getRequirementMatcher(); + assertEquals(1, pm.size()); + assertEquals(1, pm.get(0).getMatcherRequirement().size()); + assertTrue(containsRequirement(pm.get(0).getMatcherRequirement(), r1)); + + } + + @Test + public void testClauseInheritance() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + Contract cresult2 = TenantUtils.findContract(tenant, contractId2); + + Clause result = TenantUtils.findClause(cresult2, clauseName1); + assertEquals(clauseName1, result.getName()); + + // subject refs: subject1 from clause1, subject2 from clause2 + assertEquals(2, result.getSubjectRefs().size()); + assertEquals(ImmutableSet.of(subject1, subject2), + ImmutableSet.copyOf(result.getSubjectRefs())); + + assertNotNull(result.getProviderMatchers()); + List cm = + result.getProviderMatchers().getConditionMatcher(); + assertEquals(1, cm.size()); + assertEquals(1, cm.get(0).getCondition().size()); + assertTrue(containsCondition(cm.get(0).getCondition(), cond1)); + + List capm = + result.getProviderMatchers().getCapabilityMatcher(); + assertEquals(1, capm.size()); + assertEquals(1, capm.get(0).getMatcherCapability().size()); + assertTrue(containsCapability(capm.get(0).getMatcherCapability(), c1)); + + assertNotNull(result.getConsumerMatchers()); + cm = result.getConsumerMatchers().getConditionMatcher(); + assertEquals(1, cm.size()); + assertEquals(cm_c2.getName(), cm.get(0).getName()); + assertEquals(MatchType.All, cm.get(0).getMatchType()); + assertEquals(0, cm.get(0).getCondition().size()); + + List pm = + result.getConsumerMatchers().getRequirementMatcher(); + assertEquals(1, pm.size()); + assertEquals(2, pm.get(0).getMatcherRequirement().size()); + assertTrue(containsRequirement(pm.get(0).getMatcherRequirement(), r1)); + assertTrue(containsRequirement(pm.get(0).getMatcherRequirement(), r2)); + } + + @Test + public void testSubjectSimple() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + + Contract result = TenantUtils.findContract(tenant, contractId1); + List subjects = result.getSubject(); + assertEquals(1, subjects.size()); + + assertEquals(s1.getName(), subjects.get(0).getName()); + List rules = subjects.get(0).getRule(); + assertEquals(2, rules.size()); + assertEquals(rule2.getName(), rules.get(0).getName()); + assertEquals(rule1.getName(), rules.get(1).getName()); + } + + @Test + public void testSubjectInheritance() throws Exception { + Tenant tenant = InheritanceUtils.resolveTenant(tenant1); + + Contract result = TenantUtils.findContract(tenant, contractId2); + List subjects = result.getSubject(); + assertEquals(2, subjects.size()); + for (Subject s: subjects) { + if (s1.getName().equals(s.getName())) { + assertEquals(Integer.valueOf(4), s.getOrder()); + List rules = s.getRule(); + assertEquals(4, rules.size()); + assertEquals(rule4.getName(), rules.get(0).getName()); + assertEquals(rule3.getName(), rules.get(1).getName()); + assertEquals(rule2.getName(), rules.get(2).getName()); + assertEquals(rule1.getName(), rules.get(3).getName()); + } else if (s2.getName().equals(s.getName())) { + assertEquals(0, s.getRule().size()); + assertEquals(Integer.valueOf(5), s.getOrder()); + } else { + fail("extra subject?"); + } + } + } + + @Test + public void testMalformedPolicy() throws Exception { + Tenant tenant = + InheritanceUtils.resolveTenant(malformed); + Contract c = TenantUtils.findContract(tenant, cloop2Id); + assertEquals(1, c.getClause().size()); + Clause clause = c.getClause().get(0); + assertEquals(1, clause.getConsumerMatchers().getConditionMatcher().size()); + assertEquals(1, clause.getConsumerMatchers().getRequirementMatcher().size()); + assertEquals(1, clause.getProviderMatchers().getConditionMatcher().size()); + assertEquals(1, clause.getProviderMatchers().getCapabilityMatcher().size()); + assertEquals(2, c.getSubject().size()); + + EndpointGroup eg = TenantUtils.findEndpointGroup(tenant, egloop2Id); + assertEquals(1, eg.getConsumerNamedSelector().size()); + assertEquals(1, eg.getConsumerTargetSelector().size()); + assertEquals(1, eg.getProviderNamedSelector().size()); + assertEquals(1, eg.getProviderTargetSelector().size()); + + } +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/MatcherUtilsTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/MatcherUtilsTest.java new file mode 100644 index 000000000..d5953620c --- /dev/null +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/MatcherUtilsTest.java @@ -0,0 +1,275 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.resolver; + +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.resolver.MatcherUtils; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TargetName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Matcher.MatchType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.Capability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.CapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.Quality; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.QualityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.Requirement; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.RequirementBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcher; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcherBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQuality; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQualityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Target; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.TargetBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcher; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcherBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirement; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirementBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcher; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcherBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelectorBuilder; + +import com.google.common.collect.ImmutableList; + +import static org.junit.Assert.*; + +public class MatcherUtilsTest { + + @Test + public void testApplyQualityMatcher() throws Exception { + Quality q1 = new QualityBuilder().setName(new QualityName("q1")).build(); + Quality q2 = new QualityBuilder().setName(new QualityName("q2")).build(); + Quality q3 = new QualityBuilder().setName(new QualityName("q3")).build(); + Quality q4 = new QualityBuilder().setName(new QualityName("q4")).build(); + + Target t1 = new TargetBuilder() + .setName(new TargetName("t1")) + .setQuality(ImmutableList.of(q1, q2)) + .build(); + Target t2 = new TargetBuilder() + .setName(new TargetName("t2")) + .setQuality(ImmutableList.of(q3, q4)) + .build(); + + MatcherQuality mq1 = new MatcherQualityBuilder(q1).build(); + MatcherQuality mq2 = new MatcherQualityBuilder(q2).build(); + MatcherQuality mq1_ns1 = new MatcherQualityBuilder(q1) + .setTargetNamespace(t1.getName()) + .build(); + MatcherQuality mq1_ns2 = new MatcherQualityBuilder(q1) + .setTargetNamespace(t2.getName()) + .build(); + MatcherQuality mq3 = new MatcherQualityBuilder(q3).build(); + + QualityMatcher qm = new QualityMatcherBuilder() + .setMatchType(MatchType.All) + .setMatcherQuality(ImmutableList.of(mq1, mq1_ns1)) + .build(); + + assertTrue(MatcherUtils.applyQualityMatcher(qm, t1)); + assertFalse(MatcherUtils.applyQualityMatcher(qm, t2)); + + qm = new QualityMatcherBuilder() + .setMatcherQuality(ImmutableList.of(mq1_ns2)) + .build(); + + assertFalse(MatcherUtils.applyQualityMatcher(qm, t1)); + assertFalse(MatcherUtils.applyQualityMatcher(qm, t2)); + + qm = new QualityMatcherBuilder() + .setMatchType(MatchType.Any) + .setMatcherQuality(ImmutableList.of(mq1, mq3)) + .build(); + + assertTrue(MatcherUtils.applyQualityMatcher(qm, t1)); + assertTrue(MatcherUtils.applyQualityMatcher(qm, t2)); + + qm = new QualityMatcherBuilder() + .setMatchType(MatchType.Any) + .setMatcherQuality(ImmutableList.of(mq1, mq2)) + .build(); + + assertTrue(MatcherUtils.applyQualityMatcher(qm, t1)); + assertFalse(MatcherUtils.applyQualityMatcher(qm, t2)); + + qm = new QualityMatcherBuilder() + .setMatchType(MatchType.None) + .setMatcherQuality(ImmutableList.of(mq3, mq1_ns2)) + .build(); + + assertTrue(MatcherUtils.applyQualityMatcher(qm, t1)); + assertFalse(MatcherUtils.applyQualityMatcher(qm, t2)); + + qm = new QualityMatcherBuilder().build(); + assertTrue(MatcherUtils.applyQualityMatcher(qm, t1)); + + qm = new QualityMatcherBuilder() + .setMatchType(MatchType.Any) + .build(); + assertFalse(MatcherUtils.applyQualityMatcher(qm, t1)); + } + + @Test + public void testApplyCapMatcher() throws Exception { + Capability q1 = new CapabilityBuilder().setName(new CapabilityName("q1")).build(); + Capability q2 = new CapabilityBuilder().setName(new CapabilityName("q2")).build(); + Capability q3 = new CapabilityBuilder().setName(new CapabilityName("q3")).build(); + Capability q4 = new CapabilityBuilder().setName(new CapabilityName("q4")).build(); + + ProviderTargetSelector t1 = new ProviderTargetSelectorBuilder() + .setName(new SelectorName("t1")) + .setCapability(ImmutableList.of(q1, q2)) + .build(); + ProviderNamedSelector t2 = new ProviderNamedSelectorBuilder() + .setName(new SelectorName("t2")) + .setCapability(ImmutableList.of(q3, q4)) + .build(); + + MatcherCapability mq1 = new MatcherCapabilityBuilder(q1).build(); + MatcherCapability mq2 = new MatcherCapabilityBuilder(q2).build(); + MatcherCapability mq1_ns1 = new MatcherCapabilityBuilder(q1) + .setSelectorNamespace(t1.getName()) + .build(); + MatcherCapability mq1_ns2 = new MatcherCapabilityBuilder(q1) + .setSelectorNamespace(t2.getName()) + .build(); + MatcherCapability mq3 = new MatcherCapabilityBuilder(q3).build(); + + CapabilityMatcher qm = new CapabilityMatcherBuilder() + .setMatchType(MatchType.All) + .setMatcherCapability(ImmutableList.of(mq1, mq1_ns1)) + .build(); + + assertTrue(MatcherUtils.applyCapMatcher(qm, t1)); + assertFalse(MatcherUtils.applyCapMatcher(qm, t2)); + + qm = new CapabilityMatcherBuilder() + .setMatcherCapability(ImmutableList.of(mq1_ns2)) + .build(); + + assertFalse(MatcherUtils.applyCapMatcher(qm, t1)); + assertFalse(MatcherUtils.applyCapMatcher(qm, t2)); + + qm = new CapabilityMatcherBuilder() + .setMatchType(MatchType.Any) + .setMatcherCapability(ImmutableList.of(mq1, mq3)) + .build(); + + assertTrue(MatcherUtils.applyCapMatcher(qm, t1)); + assertTrue(MatcherUtils.applyCapMatcher(qm, t2)); + + qm = new CapabilityMatcherBuilder() + .setMatchType(MatchType.Any) + .setMatcherCapability(ImmutableList.of(mq1, mq2)) + .build(); + + assertTrue(MatcherUtils.applyCapMatcher(qm, t1)); + assertFalse(MatcherUtils.applyCapMatcher(qm, t2)); + + qm = new CapabilityMatcherBuilder() + .setMatchType(MatchType.None) + .setMatcherCapability(ImmutableList.of(mq3, mq1_ns2)) + .build(); + + assertTrue(MatcherUtils.applyCapMatcher(qm, t1)); + assertFalse(MatcherUtils.applyCapMatcher(qm, t2)); + + qm = new CapabilityMatcherBuilder().build(); + assertTrue(MatcherUtils.applyCapMatcher(qm, t1)); + + qm = new CapabilityMatcherBuilder() + .setMatchType(MatchType.Any) + .build(); + assertFalse(MatcherUtils.applyCapMatcher(qm, t1)); + } + + @Test + public void testApplyReqMatcher() throws Exception { + Requirement q1 = new RequirementBuilder().setName(new RequirementName("q1")).build(); + Requirement q2 = new RequirementBuilder().setName(new RequirementName("q2")).build(); + Requirement q3 = new RequirementBuilder().setName(new RequirementName("q3")).build(); + Requirement q4 = new RequirementBuilder().setName(new RequirementName("q4")).build(); + + ConsumerNamedSelector t1 = new ConsumerNamedSelectorBuilder() + .setName(new SelectorName("t1")) + .setRequirement(ImmutableList.of(q1, q2)) + .build(); + ConsumerTargetSelector t2 = new ConsumerTargetSelectorBuilder() + .setName(new SelectorName("t2")) + .setRequirement(ImmutableList.of(q3, q4)) + .build(); + + MatcherRequirement mq1 = new MatcherRequirementBuilder(q1).build(); + MatcherRequirement mq2 = new MatcherRequirementBuilder(q2).build(); + MatcherRequirement mq1_ns1 = new MatcherRequirementBuilder(q1) + .setSelectorNamespace(t1.getName()) + .build(); + MatcherRequirement mq1_ns2 = new MatcherRequirementBuilder(q1) + .setSelectorNamespace(t2.getName()) + .build(); + MatcherRequirement mq3 = new MatcherRequirementBuilder(q3).build(); + + RequirementMatcher qm = new RequirementMatcherBuilder() + .setMatchType(MatchType.All) + .setMatcherRequirement(ImmutableList.of(mq1, mq1_ns1)) + .build(); + + assertTrue(MatcherUtils.applyReqMatcher(qm, t1)); + assertFalse(MatcherUtils.applyReqMatcher(qm, t2)); + + qm = new RequirementMatcherBuilder() + .setMatcherRequirement(ImmutableList.of(mq1_ns2)) + .build(); + + assertFalse(MatcherUtils.applyReqMatcher(qm, t1)); + assertFalse(MatcherUtils.applyReqMatcher(qm, t2)); + + qm = new RequirementMatcherBuilder() + .setMatchType(MatchType.Any) + .setMatcherRequirement(ImmutableList.of(mq1, mq3)) + .build(); + + assertTrue(MatcherUtils.applyReqMatcher(qm, t1)); + assertTrue(MatcherUtils.applyReqMatcher(qm, t2)); + + qm = new RequirementMatcherBuilder() + .setMatchType(MatchType.Any) + .setMatcherRequirement(ImmutableList.of(mq1, mq2)) + .build(); + + assertTrue(MatcherUtils.applyReqMatcher(qm, t1)); + assertFalse(MatcherUtils.applyReqMatcher(qm, t2)); + + qm = new RequirementMatcherBuilder() + .setMatchType(MatchType.None) + .setMatcherRequirement(ImmutableList.of(mq3, mq1_ns2)) + .build(); + + assertTrue(MatcherUtils.applyReqMatcher(qm, t1)); + assertFalse(MatcherUtils.applyReqMatcher(qm, t2)); + + qm = new RequirementMatcherBuilder().build(); + assertTrue(MatcherUtils.applyReqMatcher(qm, t1)); + + qm = new RequirementMatcherBuilder() + .setMatchType(MatchType.Any) + .build(); + assertFalse(MatcherUtils.applyReqMatcher(qm, t1)); + } +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/PolicyResolverTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/PolicyResolverTest.java new file mode 100644 index 000000000..18385c6c2 --- /dev/null +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/resolver/PolicyResolverTest.java @@ -0,0 +1,520 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.resolver; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.resolver.PolicyResolver; +import org.opendaylight.groupbasedpolicy.resolver.ConditionSet; +import org.opendaylight.groupbasedpolicy.resolver.PolicyResolver.ContractMatch; +import org.opendaylight.groupbasedpolicy.resolver.PolicyResolver.TenantContext; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityMatcherName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionMatcherName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityMatcherName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementMatcherName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TargetName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Matcher.MatchType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.Capability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.CapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.condition.matchers.ConditionMatcher; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.condition.matchers.ConditionMatcherBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.conditions.Condition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.conditions.ConditionBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.Quality; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.QualityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.Requirement; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.RequirementBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcher; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcherBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQualityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Clause; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.ClauseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Subject; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.SubjectBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Target; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.TargetBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ConsumerMatchersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ProviderMatchersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcher; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcherBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirementBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcher; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcherBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelectorBuilder; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Table; + +import static org.junit.Assert.*; + +public class PolicyResolverTest { + Quality q1 = new QualityBuilder() + .setName(new QualityName("q1")) + .build(); + Quality q2 = new QualityBuilder() + .setName(new QualityName("q2")) + .build(); + Quality q3 = new QualityBuilder() + .setName(new QualityName("q3")) + .build(); + + Requirement r1 = new RequirementBuilder() + .setName(new RequirementName("r1")) + .build(); + Requirement r3 = new RequirementBuilder() + .setName(new RequirementName("r3")) + .build(); + + Capability cap1 = new CapabilityBuilder() + .setName(new CapabilityName("cap1")) + .build(); + Capability cap3 = new CapabilityBuilder() + .setName(new CapabilityName("cap3")) + .build(); + + Condition cond1 = new ConditionBuilder() + .setName(new ConditionName("cond1")) + .build(); + Condition cond2 = new ConditionBuilder() + .setName(new ConditionName("cond2")) + .build(); + Condition cond3 = new ConditionBuilder() + .setName(new ConditionName("cond3")) + .build(); + + Target t1 = new TargetBuilder() + .setName(new TargetName("t1")) + .setQuality(ImmutableList.of(q1,q2)) + .build(); + Target t2 = new TargetBuilder() + .setName(new TargetName("t1")) + .setQuality(ImmutableList.of(q3)) + .build(); + Target t0 = new TargetBuilder() + .setName(new TargetName("t1")) + .build(); + + Rule rule1 = new RuleBuilder() + .setName(new RuleName("r1")) + .setOrder(Integer.valueOf(5)) + .build(); + Rule rule2 = new RuleBuilder() + .setName(new RuleName("r2")) + .build(); + Rule rule3 = new RuleBuilder() + .setName(new RuleName("r3")) + .build(); + Subject s1 = new SubjectBuilder() + .setName(new SubjectName("s1")) + .setRule(ImmutableList.of(rule1)) + .build(); + Subject s2 = new SubjectBuilder() + .setName(new SubjectName("s1")) + .setRule(ImmutableList.of(rule2)) + .setOrder(Integer.valueOf(3)) + .build(); + Subject s3 = new SubjectBuilder() + .setName(new SubjectName("s3")) + .setRule(ImmutableList.of(rule3)) + .setOrder(Integer.valueOf(3)) + .build(); + + RequirementMatcher rm1 = new RequirementMatcherBuilder() + .setName(new RequirementMatcherName("rm1")) + .setMatcherRequirement(ImmutableList.of(new MatcherRequirementBuilder(r1).build())) + .build(); + CapabilityMatcher capm1 = new CapabilityMatcherBuilder() + .setName(new CapabilityMatcherName("cap1")) + .setMatcherCapability(ImmutableList.of(new MatcherCapabilityBuilder(cap1).build())) + .build(); + ConditionMatcher condm1 = new ConditionMatcherBuilder() + .setName(new ConditionMatcherName("condm1")) + .setCondition(ImmutableList.of(cond1)) + .setMatchType(MatchType.All) + .build(); + ConditionMatcher condm2 = new ConditionMatcherBuilder() + .setName(new ConditionMatcherName("condm2")) + .setCondition(ImmutableList.of(cond1, cond2)) + .setMatchType(MatchType.Any) + .build(); + ConditionMatcher condm3 = new ConditionMatcherBuilder() + .setName(new ConditionMatcherName("condm3")) + .setCondition(ImmutableList.of(cond3)) + .setMatchType(MatchType.None) + .build(); + + Clause clause1 = new ClauseBuilder() + .setName(new ClauseName("clause1")) + .setConsumerMatchers(new ConsumerMatchersBuilder() + .setRequirementMatcher(ImmutableList.of(rm1)) + .setConditionMatcher(ImmutableList.of(condm1, condm2, condm3)) + .build()) + .setProviderMatchers(new ProviderMatchersBuilder() + .setCapabilityMatcher(ImmutableList.of(capm1)) + .build()) + .setSubjectRefs(ImmutableList.of(s1.getName())) + .build(); + Clause clause3 = new ClauseBuilder() + .setName(new ClauseName("clause3")) + .setSubjectRefs(ImmutableList.of(s3.getName(), s2.getName())) + .build(); + Clause clause0 = new ClauseBuilder() + .setName(new ClauseName("clause0")) + .build(); + Clause clause00 = new ClauseBuilder() + .setName(new ClauseName("clause00")) + .setConsumerMatchers(new ConsumerMatchersBuilder().build()) + .setProviderMatchers(new ProviderMatchersBuilder().build()) + .build(); + + Contract contract1 = new ContractBuilder() + .setId(new ContractId("c9eea992-ba51-4e11-b797-986853832ad9")) + .setTarget(ImmutableList.of(t1)) + .setClause(ImmutableList.of(clause1, clause0, clause00)) + .setSubject(ImmutableList.of(s1)) + .build(); + Contract contract2 = new ContractBuilder() + .setId(new ContractId("3a3b67ff-1795-4dc0-a7b2-2c3453872e4e")) + .setTarget(ImmutableList.of(t1, t2)) + .setClause(ImmutableList.of(clause3)) + .setSubject(ImmutableList.of(s2)) + .build(); + Contract contract0 = new ContractBuilder() + .setId(new ContractId("ce467a3c-2c7b-4e9e-a575-7da1fbdf1833")) + .build(); + Contract contract00 = new ContractBuilder() + .setId(new ContractId("79de88e8-b37f-4764-a1a3-7f3b37b15433")) + .setTarget(ImmutableList.of(t0)) + .build(); + + ConsumerNamedSelector cns1 = new ConsumerNamedSelectorBuilder() + .setName(new SelectorName("cns1")) + .setContract(ImmutableList.of(contract1.getId())) + .setRequirement(ImmutableList.of(r1, r3)) + .build(); + ConsumerNamedSelector cns2 = new ConsumerNamedSelectorBuilder() + .setName(new SelectorName("cns2")) + .setContract(ImmutableList.of(contract2.getId())) + .setRequirement(ImmutableList.of(r1, r3)) + .build(); + ProviderNamedSelector pns1 = new ProviderNamedSelectorBuilder() + .setName(new SelectorName("pns1")) + .setContract(ImmutableList.of(contract1.getId(), contract2.getId())) + .setCapability(ImmutableList.of(cap1, cap3)) + .build(); + + QualityMatcher qm1 = new QualityMatcherBuilder() + .setName(new QualityMatcherName("qm1")) + .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q1).build())) + .build(); + QualityMatcher qm3 = new QualityMatcherBuilder() + .setName(new QualityMatcherName("qm3")) + .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q3).build())) + .build(); + ConsumerTargetSelector cts1 = new ConsumerTargetSelectorBuilder() + .setName(new SelectorName("cts1")) + .setQualityMatcher(ImmutableList.of(qm1)) + .build(); + ProviderTargetSelector pts1 = new ProviderTargetSelectorBuilder() + .setName(new SelectorName("pts1")) + .setQualityMatcher(ImmutableList.of(qm3)) + .build(); + + EndpointGroup eg1 = new EndpointGroupBuilder() + .setId(new EndpointGroupId("12802e21-8602-40ec-91d3-a75a296881ab")) + .setConsumerNamedSelector(ImmutableList.of(cns1)) + .build(); + EndpointGroup eg2 = new EndpointGroupBuilder() + .setId(new EndpointGroupId("66bb92ff-6e4c-41f1-8c7d-baa322016ab5")) + .setProviderNamedSelector(ImmutableList.of(pns1)) + .build(); + EndpointGroup eg3 = new EndpointGroupBuilder() + .setId(new EndpointGroupId("0ed93cb5-28ee-46bd-a5a1-41d6aa88dae5")) + .setConsumerNamedSelector(ImmutableList.of(cns1, cns2)) + .build(); + EndpointGroup eg4 = new EndpointGroupBuilder() + .setId(new EndpointGroupId("51eaf011-94a9-4cb1-b12d-149b77c5c016")) + .setConsumerTargetSelector(ImmutableList.of(cts1)) + .build(); + EndpointGroup eg5 = new EndpointGroupBuilder() + .setId(new EndpointGroupId("92344738-ba37-4d69-b9e5-904eebdad585")) + .setProviderTargetSelector(ImmutableList.of(pts1)) + .build(); + EndpointGroup eg0 = new EndpointGroupBuilder() + .setId(new EndpointGroupId("64e03313-d6d8-43cb-ae4d-5a9b0a410c91")) + .build(); + + Tenant tenant1 = new TenantBuilder() + .setId(new TenantId("144b9aec-ef06-44f1-a50c-2fe5be456feb")) + .setContract(ImmutableList.of(contract1, contract2)) + .setEndpointGroup(ImmutableList.of(eg1, eg2)) + .build(); + Tenant tenant2 = new TenantBuilder() + .setId(new TenantId("138a2bc3-d3cb-4588-ad7a-63c9f19ce3e5")) + .setContract(ImmutableList.of(contract1, contract2)) + .setEndpointGroup(ImmutableList.of(eg1, eg2, eg3)) + .build(); + Tenant tenant3 = new TenantBuilder() + .setId(new TenantId("d1feede4-c31f-4232-ace2-93fcd065af1d")) + .setContract(ImmutableList.of(contract1, contract2)) + .setEndpointGroup(ImmutableList.of(eg4, eg5)) + .build(); + Tenant tenant0 = new TenantBuilder().build(); + Tenant tenant00 = new TenantBuilder() + .setContract(ImmutableList.of(contract0, contract00)) + .setEndpointGroup(ImmutableList.of(eg0)) + .build(); + + PolicyResolver resolver; + + @Before + public void setup() throws Exception { + resolver = new PolicyResolver(null, null); + } + + public void verifyMatches(List contrids, + List contrtids, + List matches) { + HashSet v = new HashSet<>(); + for (int i = 0; i < contrids.size(); i++) { + v.add(new ContractMatchKey(contrtids.get(i), contrids.get(i))); + } + assertEquals(contrids.size(), matches.size()); + for (ContractMatch m : matches) { + ContractMatchKey k = + new ContractMatchKey(m.contractTenant.getId(), + m.contract.getId()); + assertTrue(v.contains(k)); + } + } + + @Test + public void testContractSelection() throws Exception { + // named selectors + TenantContext tc = new TenantContext(null); + Collection tCol = Collections.singleton(tc); + + tc.tenant.set(new IndexedTenant(tenant1)); + Table> contractMatches = + resolver.selectContracts(tCol); + assertEquals(1, contractMatches.size()); + List matches = + contractMatches.get(new EgKey(tenant1.getId(), eg1.getId()), + new EgKey(tenant1.getId(), eg2.getId())); + verifyMatches(ImmutableList.of(contract1.getId()), + ImmutableList.of(tenant1.getId()), + matches); + + + tc.tenant.set(new IndexedTenant(tenant2)); + contractMatches = resolver.selectContracts(tCol); + assertEquals(2, contractMatches.size()); + matches = contractMatches.get(new EgKey(tenant2.getId(), eg1.getId()), + new EgKey(tenant2.getId(), eg2.getId())); + verifyMatches(ImmutableList.of(contract1.getId()), + ImmutableList.of(tenant2.getId()), + matches); + + matches = contractMatches.get(new EgKey(tenant2.getId(), eg3.getId()), + new EgKey(tenant2.getId(), eg2.getId())); + verifyMatches(ImmutableList.of(contract2.getId(), contract1.getId()), + ImmutableList.of(tenant2.getId(), tenant2.getId()), + matches); + + // target selectors + tc.tenant.set(new IndexedTenant(tenant3)); + contractMatches = resolver.selectContracts(tCol); + assertEquals(1, contractMatches.size()); + matches = contractMatches.get(new EgKey(tenant3.getId(), eg4.getId()), + new EgKey(tenant3.getId(), eg5.getId())); + verifyMatches(ImmutableList.of(contract2.getId()), + ImmutableList.of(tenant3.getId()), + matches); + + // empty matches + tc.tenant.set(new IndexedTenant(tenant0)); + contractMatches = resolver.selectContracts(tCol); + assertEquals(0, contractMatches.size()); + + tc.tenant.set(new IndexedTenant(tenant00)); + contractMatches = resolver.selectContracts(tCol); + assertEquals(0, contractMatches.size()); + } + + @Test + public void testSubjectSelection() throws Exception { + ConditionSet cs = + new ConditionSet(ImmutableSet.of(cond1.getName()), + ImmutableSet.of(cond3.getName()), + ImmutableSet.of(ImmutableSet.of(cond1.getName(), + cond2.getName()))); + TenantContext tc = new TenantContext(null); + Collection tCol = Collections.singleton(tc); + + tc.tenant.set(new IndexedTenant(tenant1)); + Table> contractMatches = + resolver.selectContracts(tCol); + Map> egConditions = new HashMap<>(); + Table policy = + resolver.selectSubjects(contractMatches, egConditions); + assertEquals(1, policy.size()); + Policy p = policy.get(new EgKey(tenant1.getId(), eg2.getId()), + new EgKey(tenant1.getId(), eg1.getId())); + List rules = p.ruleMap.get(ConditionSet.EMPTY, cs); + assertNotNull(rules); + assertEquals(1, rules.size()); + RuleGroup rg = rules.get(0); + assertEquals(tenant1.getId(), rg.contractTenant.getId()); + assertEquals(contract1.getId(), rg.relatedContract.getId()); + assertEquals(s1.getName(), rg.relatedSubject); + assertEquals(1, rg.rules.size()); + assertEquals(rule1.getName(), rg.rules.get(0).getName()); + + tc.tenant.set(new IndexedTenant(tenant2)); + contractMatches = resolver.selectContracts(tCol); + egConditions = new HashMap<>(); + policy = resolver.selectSubjects(contractMatches, egConditions); + + assertEquals(2, policy.size()); + p = policy.get(new EgKey(tenant2.getId(), eg2.getId()), + new EgKey(tenant2.getId(), eg3.getId())); + rules = p.ruleMap.get(ConditionSet.EMPTY, cs); + assertNotNull(rules); + assertEquals(1, rules.size()); + rg = rules.get(0); + assertEquals(tenant2.getId(), rg.contractTenant.getId()); + assertEquals(contract1.getId(), rg.relatedContract.getId()); + assertEquals(s1.getName(), rg.relatedSubject); + assertEquals(1, rg.rules.size()); + assertEquals(rule1.getName(), rg.rules.get(0).getName()); + + rules = p.ruleMap.get(ConditionSet.EMPTY, ConditionSet.EMPTY); + assertNotNull(rules); + assertEquals(1, rules.size()); + rg = rules.get(0); + assertEquals(tenant2.getId(), rg.contractTenant.getId()); + assertEquals(contract2.getId(), rg.relatedContract.getId()); + assertEquals(s2.getName(), rg.relatedSubject); + assertEquals(1, rg.rules.size()); + assertEquals(rule2.getName(), rg.rules.get(0).getName()); + + p = policy.get(new EgKey(tenant2.getId(), eg2.getId()), + new EgKey(tenant2.getId(), eg1.getId())); + rules = p.ruleMap.get(ConditionSet.EMPTY, cs); + assertNotNull(rules); + assertEquals(1, rules.size()); + rg = rules.get(0); + assertEquals(tenant2.getId(), rg.contractTenant.getId()); + assertEquals(contract1.getId(), rg.relatedContract.getId()); + assertEquals(s1.getName(), rg.relatedSubject); + assertEquals(1, rg.rules.size()); + assertEquals(rule1.getName(), rg.rules.get(0).getName()); + + tc.tenant.set(new IndexedTenant(tenant3)); + contractMatches = resolver.selectContracts(tCol); + egConditions = new HashMap<>(); + policy = resolver.selectSubjects(contractMatches, egConditions); + + assertEquals(1, policy.size()); + p = policy.get(new EgKey(tenant3.getId(), eg5.getId()), + new EgKey(tenant3.getId(), eg4.getId())); + rules = p.ruleMap.get(ConditionSet.EMPTY, ConditionSet.EMPTY); + assertNotNull(rules); + assertEquals(1, rules.size()); + rg = rules.get(0); + assertEquals(tenant3.getId(), rg.contractTenant.getId()); + assertEquals(contract2.getId(), rg.relatedContract.getId()); + assertEquals(s2.getName(), rg.relatedSubject); + assertEquals(1, rg.rules.size()); + assertEquals(rule2.getName(), rg.rules.get(0).getName()); + } + + private static class ContractMatchKey { + TenantId tenant; + ContractId contract; + public ContractMatchKey(TenantId tenant, ContractId contract) { + super(); + this.tenant = tenant; + this.contract = contract; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((contract == null) ? 0 : contract.hashCode()); + result = prime * result + + ((tenant == null) ? 0 : tenant.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ContractMatchKey other = (ContractMatchKey) obj; + if (contract == null) { + if (other.contract != null) + return false; + } else if (!contract.equals(other.contract)) + return false; + if (tenant == null) { + if (other.tenant != null) + return false; + } else if (!tenant.equals(other.tenant)) + return false; + return true; + } + @Override + public String toString() { + return "ContractMatchKey [tenant=" + tenant + ", contract=" + + contract + "]"; + } + } + +} diff --git a/renderers/opflex/pom.xml b/renderers/opflex/pom.xml new file mode 100644 index 000000000..16824a3f0 --- /dev/null +++ b/renderers/opflex/pom.xml @@ -0,0 +1,138 @@ + + + 4.0.0 + + org.opendaylight.groupbasedpolicy + groupbasedpolicy-renderers + 0.2.0-SNAPSHOT + ../ + + + opflex-renderer + bundle + + + + + + + + + + + + org.apache.felix + maven-bundle-plugin + true + + + + org.apache.http.*;version="4.3.2", + *;resolution:=optional + + httpclient,httpcore,commons-lang,commons-exec;type=!pom;inline=false + + + + ${project.basedir}/META-INF + + + + org.codehaus.mojo + build-helper-maven-plugin + + + + add-source + + generate-sources + + + target/generated-sources/sal + target/generated-sources/config + target/generated-resources/ + + + + + + + org.opendaylight.yangtools + yang-maven-plugin + + + org.opendaylight.controller + yang-jmx-generator-plugin + 0.3.0-SNAPSHOT + + + org.opendaylight.yangtools + maven-sal-api-gen-plugin + ${yangtools.version} + jar + + + + + + generate-sources + + + + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + ${project.build.directory}/generated-sources/config + + urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang + + + + org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl + ${project.build.directory}/generated-sources/sal + + + org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl + ${project.build.directory}/site/models + + + true + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + org.jacoco + jacoco-maven-plugin + + + pre-unit-test + + prepare-agent + + + + post-unit-test + test + + report + + + ${sonar.jacoco.reportPath} + + org/opendaylight/groupbasedpolicy/**/*.class + + + + + + + + + diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/opflex_provider/impl/OpflexProviderModule.java b/renderers/opflex/src/main/java/org/opendaylight/controller/config/yang/config/opflex_provider/impl/OpflexProviderModule.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/opflex_provider/impl/OpflexProviderModule.java rename to renderers/opflex/src/main/java/org/opendaylight/controller/config/yang/config/opflex_provider/impl/OpflexProviderModule.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/opflex_provider/impl/OpflexProviderModuleFactory.java b/renderers/opflex/src/main/java/org/opendaylight/controller/config/yang/config/opflex_provider/impl/OpflexProviderModuleFactory.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/opflex_provider/impl/OpflexProviderModuleFactory.java rename to renderers/opflex/src/main/java/org/opendaylight/controller/config/yang/config/opflex_provider/impl/OpflexProviderModuleFactory.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointListener.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointListener.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointListener.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointListener.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointManager.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointManager.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointManager.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointManager.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprContext.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprContext.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprContext.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprContext.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprOperation.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprOperation.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprOperation.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprOperation.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/Identity.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/Identity.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/Identity.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/Identity.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L2EprOperation.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L2EprOperation.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L2EprOperation.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L2EprOperation.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L3EprOperation.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L3EprOperation.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L3EprOperation.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L3EprOperation.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/MessageUtils.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/MessageUtils.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/MessageUtils.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/MessageUtils.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/OpflexRenderer.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/OpflexRenderer.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/OpflexRenderer.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/OpflexRenderer.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManager.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManager.java similarity index 98% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManager.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManager.java index b4a1849bc..b300c34f1 100644 --- a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManager.java +++ b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManager.java @@ -47,7 +47,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayConfig.LearningMode; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -128,14 +127,6 @@ public class PolicyManager sendPolicyUpdates(updatedConsumers); } - /** - * Set the learning mode to the specified value - * @param learningMode the learning mode to set - */ - public void setLearningMode(LearningMode learningMode) { - // No-op for now - } - // ************** // Implementation // ************** diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexAgent.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexAgent.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexAgent.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexAgent.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexConnectionService.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexConnectionService.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexConnectionService.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexConnectionService.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexRpcServer.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexRpcServer.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexRpcServer.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexRpcServer.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/Role.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/Role.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/Role.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/Role.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointDeclareRequest.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointDeclareRequest.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointDeclareRequest.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointDeclareRequest.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointDeclareResponse.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointDeclareResponse.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointDeclareResponse.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointDeclareResponse.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointIdentity.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointIdentity.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointIdentity.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointIdentity.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointResolveRequest.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointResolveRequest.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointResolveRequest.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointResolveRequest.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointResolveResponse.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointResolveResponse.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointResolveResponse.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointResolveResponse.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUndeclareRequest.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUndeclareRequest.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUndeclareRequest.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUndeclareRequest.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUndeclareResponse.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUndeclareResponse.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUndeclareResponse.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUndeclareResponse.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUnresolveRequest.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUnresolveRequest.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUnresolveRequest.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUnresolveRequest.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUnresolveResponse.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUnresolveResponse.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUnresolveResponse.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUnresolveResponse.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUpdateRequest.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUpdateRequest.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUpdateRequest.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUpdateRequest.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUpdateResponse.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUpdateResponse.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUpdateResponse.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/EndpointUpdateResponse.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/IdentityRequest.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/IdentityRequest.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/IdentityRequest.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/IdentityRequest.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/IdentityResponse.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/IdentityResponse.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/IdentityResponse.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/IdentityResponse.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/ManagedObject.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/ManagedObject.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/ManagedObject.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/ManagedObject.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/OpflexError.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/OpflexError.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/OpflexError.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/OpflexError.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyIdentity.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyIdentity.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyIdentity.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyIdentity.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyResolveRequest.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyResolveRequest.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyResolveRequest.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyResolveRequest.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyResolveResponse.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyResolveResponse.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyResolveResponse.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyResolveResponse.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUnresolveRequest.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUnresolveRequest.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUnresolveRequest.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUnresolveRequest.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUnresolveResponse.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUnresolveResponse.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUnresolveResponse.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUnresolveResponse.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUpdateRequest.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUpdateRequest.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUpdateRequest.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUpdateRequest.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUpdateResponse.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUpdateResponse.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUpdateResponse.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/PolicyUpdateResponse.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/StateReportRequest.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/StateReportRequest.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/StateReportRequest.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/StateReportRequest.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/StateReportResponse.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/StateReportResponse.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/StateReportResponse.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/StateReportResponse.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/AgentOvsMit.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/AgentOvsMit.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/AgentOvsMit.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/AgentOvsMit.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/EnumInfo.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/EnumInfo.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/EnumInfo.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/EnumInfo.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/MitLib.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/MitLib.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/MitLib.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/MitLib.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/OpflexMit.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/OpflexMit.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/OpflexMit.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/OpflexMit.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyClassInfo.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyClassInfo.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyClassInfo.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyClassInfo.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyObjectInstance.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyObjectInstance.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyObjectInstance.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyObjectInstance.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyPropertyInfo.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyPropertyInfo.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyPropertyInfo.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyPropertyInfo.java diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyUri.java b/renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyUri.java similarity index 100% rename from groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyUri.java rename to renderers/opflex/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyUri.java diff --git a/groupbasedpolicy/src/main/yang/renderer/opflex/opflex-provider-impl.yang b/renderers/opflex/src/main/yang/opflex-provider-impl.yang similarity index 100% rename from groupbasedpolicy/src/main/yang/renderer/opflex/opflex-provider-impl.yang rename to renderers/opflex/src/main/yang/opflex-provider-impl.yang diff --git a/groupbasedpolicy/src/main/yang/renderer/opflex/opflex-provider.yang b/renderers/opflex/src/main/yang/opflex-provider.yang similarity index 100% rename from groupbasedpolicy/src/main/yang/renderer/opflex/opflex-provider.yang rename to renderers/opflex/src/main/yang/opflex-provider.yang diff --git a/groupbasedpolicy/src/main/yang/renderer/opflex/opflex.yang b/renderers/opflex/src/main/yang/opflex.yang similarity index 100% rename from groupbasedpolicy/src/main/yang/renderer/opflex/opflex.yang rename to renderers/opflex/src/main/yang/opflex.yang diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointManagerTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointManagerTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointManagerTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EndpointManagerTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprContextTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprContextTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprContextTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/EprContextTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/IdentityTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/IdentityTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/IdentityTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/IdentityTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L2EprOperationTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L2EprOperationTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L2EprOperationTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L2EprOperationTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L3EprOperationTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L3EprOperationTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L3EprOperationTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/L3EprOperationTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/MessageUtilsTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/MessageUtilsTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/MessageUtilsTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/MessageUtilsTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManagerTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManagerTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManagerTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/PolicyManagerTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexConnectionServiceTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexConnectionServiceTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexConnectionServiceTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexConnectionServiceTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexRpcServerTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexRpcServerTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexRpcServerTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/OpflexRpcServerTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/RoleTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/RoleTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/RoleTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/RoleTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/OpflexMessageTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/OpflexMessageTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/OpflexMessageTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/lib/messages/OpflexMessageTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/EnumInfoTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/EnumInfoTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/EnumInfoTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/EnumInfoTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/MitLibTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/MitLibTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/MitLibTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/MitLibTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyClassInfoTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyClassInfoTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyClassInfoTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyClassInfoTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyPropertyInfoTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyPropertyInfoTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyPropertyInfoTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyPropertyInfoTest.java diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyUriTest.java b/renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyUriTest.java similarity index 100% rename from groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyUriTest.java rename to renderers/opflex/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/mit/PolicyUriTest.java diff --git a/renderers/pom.xml b/renderers/pom.xml new file mode 100644 index 000000000..f3f90ce3a --- /dev/null +++ b/renderers/pom.xml @@ -0,0 +1,229 @@ + + + 4.0.0 + + org.opendaylight.groupbasedpolicy + groupbasedpolicy.project + 0.2.0-SNAPSHOT + ../ + + + groupbasedpolicy-renderers + 0.2.0-SNAPSHOT + pom + + + oc + opflex + ofoverlay + + + + + org.opendaylight.groupbasedpolicy + groupbasedpolicy + ${project.version} + + + ch.qos.logback + logback-classic + + + ch.qos.logback + logback-core + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.core + jackson-annotations + + + com.google.guava + guava + + + io.netty + netty-all + 4.0.10.Final + + + org.opendaylight.controller + config-api + + + org.opendaylight.controller + sal-binding-api + + + org.opendaylight.controller + sal-binding-config + + + org.opendaylight.controller + sal-common-util + + + org.opendaylight.controller.model + model-inventory + + + org.opendaylight.yangtools + yang-binding + + + org.opendaylight.yangtools + yang-common + + + org.osgi + org.osgi.core + + + commons-lang + commons-lang + 2.6 + + + org.apache.commons + commons-exec + 1.1 + + + junit + junit + test + + + org.mockito + mockito-all + 1.9.5 + test + + + + + + + + org.apache.felix + maven-bundle-plugin + true + + + + org.apache.http.*;version="4.3.2", + *;resolution:=optional + + httpclient,httpcore,commons-lang,commons-exec;type=!pom;inline=false + + + + ${project.basedir}/META-INF + + + + org.codehaus.mojo + build-helper-maven-plugin + + + + add-source + + generate-sources + + + target/generated-sources/sal + target/generated-sources/config + target/generated-resources/ + + + + + + + org.opendaylight.yangtools + yang-maven-plugin + + + org.opendaylight.controller + yang-jmx-generator-plugin + 0.3.0-SNAPSHOT + + + org.opendaylight.yangtools + maven-sal-api-gen-plugin + ${yangtools.version} + jar + + + + + + generate-sources + + + + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + ${project.build.directory}/generated-sources/config + + urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang + + + + org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl + ${project.build.directory}/generated-sources/sal + + + org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl + ${project.build.directory}/site/models + + + true + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + org.jacoco + jacoco-maven-plugin + + + pre-unit-test + + prepare-agent + + + + post-unit-test + test + + report + + + ${sonar.jacoco.reportPath} + + org/opendaylight/groupbasedpolicy/**/*.class + + + + + + + + + -- 2.36.6