</module>
<module>
<type xmlns:groupbasedpolicy="urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy">
- groupbasedpolicy:base-endpoint-renderer-augmentation-registry-impl
+ groupbasedpolicy:domain-specific-registry-impl
</type>
- <name>base-endpoint-renderer-augmentation-registry</name>
+ <name>domain-specific-registry</name>
<data-broker>
<type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
</service>
<service>
<type xmlns:groupbasedpolicy="urn:opendaylight:params:xml:ns:yang:controller:config:groupbasedpolicy">
- groupbasedpolicy:base-endpoint-renderer-augmentation-registry
+ groupbasedpolicy:domain-specific-registry
</type>
<instance>
- <name>base-endpoint-renderer-augmentation-registry</name>
- <provider>/modules/module[type='base-endpoint-renderer-augmentation-registry-impl'][name='base-endpoint-renderer-augmentation-registry']</provider>
+ <name>domain-specific-registry</name>
+ <provider>/modules/module[type='domain-specific-registry-impl'][name='domain-specific-registry']</provider>
</instance>
</service>
<service>
+++ /dev/null
-/*
- * Copyright (c) 2015 Cisco Systems, 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.controller.config.yang.config.groupbasedpolicy;
-
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.groupbasedpolicy.base_endpoint.BaseEndpointRpcRegistry;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class BaseEndpointRendererAugmentationRegistryImplModule extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.AbstractBaseEndpointRendererAugmentationRegistryImplModule {
-
- private static final Logger LOG = LoggerFactory.getLogger(BaseEndpointRendererAugmentationRegistryImplModule.class);
-
- public BaseEndpointRendererAugmentationRegistryImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
- super(identifier, dependencyResolver);
- }
-
- public BaseEndpointRendererAugmentationRegistryImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.config.groupbasedpolicy.BaseEndpointRendererAugmentationRegistryImplModule oldModule, java.lang.AutoCloseable oldInstance) {
- super(identifier, dependencyResolver, oldModule, oldInstance);
- }
-
- @Override
- public void customValidation() {
- // add custom validation form module attributes here.
- }
-
- @Override
- public java.lang.AutoCloseable createInstance() {
- final DataBroker dataProvider = getDataBrokerDependency();
- final RpcProviderRegistry rpcRegistry = getRpcRegistryDependency();
-
- BaseEndpointRpcRegistry baseEndpointRpcRegistry = new BaseEndpointRpcRegistry(dataProvider, rpcRegistry);
- LOG.info("{} successfully started.", BaseEndpointRendererAugmentationRegistryImplModule.class.getCanonicalName());
- return baseEndpointRpcRegistry;
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Cisco Systems, 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
- */
-
-/*
-* Generated file
-*
-* Generated from: yang module name: groupbasedpolicy-cfg yang module local name: base-endpoint-renderer-augmentation-registry-impl
-* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
-* Generated at: Mon May 09 16:19:05 CEST 2016
-*
-* Do not modify this file unless it is present under src/main directory
-*/
-package org.opendaylight.controller.config.yang.config.groupbasedpolicy;
-public class BaseEndpointRendererAugmentationRegistryImplModuleFactory extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.AbstractBaseEndpointRendererAugmentationRegistryImplModuleFactory {
-
-}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.controller.config.yang.config.groupbasedpolicy;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.groupbasedpolicy.api.DomainSpecificRegistry;
+import org.opendaylight.groupbasedpolicy.api.EndpointAugmentorRegistry;
+import org.opendaylight.groupbasedpolicy.api.NetworkDomainAugmentorRegistry;
+import org.opendaylight.groupbasedpolicy.base_endpoint.BaseEndpointServiceImpl;
+import org.opendaylight.groupbasedpolicy.base_endpoint.EndpointAugmentorRegistryImpl;
+import org.opendaylight.groupbasedpolicy.forwarding.NetworkDomainAugmentorRegistryImpl;
+import org.opendaylight.groupbasedpolicy.renderer.RendererManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DomainSpecificRegistryModule extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.AbstractDomainSpecificRegistryModule {
+
+ private static final Logger LOG = LoggerFactory.getLogger(DomainSpecificRegistryModule.class);
+
+ public DomainSpecificRegistryModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ super(identifier, dependencyResolver);
+ }
+
+ public DomainSpecificRegistryModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.config.groupbasedpolicy.DomainSpecificRegistryModule oldModule, java.lang.AutoCloseable oldInstance) {
+ super(identifier, dependencyResolver, oldModule, oldInstance);
+ }
+
+ @Override
+ public void customValidation() {
+ // add custom validation form module attributes here.
+ }
+
+ @Override
+ public java.lang.AutoCloseable createInstance() {
+ final DataBroker dataProvider = getDataBrokerDependency();
+ final RpcProviderRegistry rpcRegistry = getRpcRegistryDependency();
+ Instance instance = new Instance(dataProvider, rpcRegistry);
+ LOG.info("{} successfully started.", DomainSpecificRegistryModule.class.getCanonicalName());
+ return instance;
+ }
+
+ private static class Instance implements DomainSpecificRegistry, AutoCloseable {
+
+ private final EndpointAugmentorRegistryImpl endpointAugmentorRegistryImpl;
+ private final NetworkDomainAugmentorRegistryImpl netDomainAugmentorRegistryImpl;
+ private final BaseEndpointServiceImpl baseEndpointServiceImpl;
+ private final RendererManager rendererManager;
+
+ Instance(DataBroker dataProvider, RpcProviderRegistry rpcRegistry) {
+ endpointAugmentorRegistryImpl = new EndpointAugmentorRegistryImpl();
+ netDomainAugmentorRegistryImpl = new NetworkDomainAugmentorRegistryImpl();
+ baseEndpointServiceImpl = new BaseEndpointServiceImpl(dataProvider, rpcRegistry, endpointAugmentorRegistryImpl);
+ rendererManager = new RendererManager(dataProvider, netDomainAugmentorRegistryImpl);
+ }
+
+ @Override
+ public void close() throws Exception {
+ baseEndpointServiceImpl.close();
+ rendererManager.close();
+ }
+
+ @Override
+ public EndpointAugmentorRegistry getEndpointAugmentorRegistry() {
+ return endpointAugmentorRegistryImpl;
+ }
+
+ @Override
+ public NetworkDomainAugmentorRegistry getNetworkDomainAugmentorRegistry() {
+ return netDomainAugmentorRegistryImpl;
+ }
+
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.controller.config.yang.config.groupbasedpolicy;
+public class DomainSpecificRegistryModuleFactory extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.AbstractDomainSpecificRegistryModuleFactory {
+
+}
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.groupbasedpolicy.api.PolicyValidatorRegistry;
import org.opendaylight.groupbasedpolicy.location.resolver.LocationResolver;
-import org.opendaylight.groupbasedpolicy.renderer.RendererManager;
import org.opendaylight.groupbasedpolicy.resolver.ForwardingResolver;
import org.opendaylight.groupbasedpolicy.sf.SubjectFeatureDefinitionProvider;
import org.opendaylight.groupbasedpolicy.sf.SupportedActionDefinitionListener;
private final SupportedClassifierDefinitionListener supportedClassifierDefinitionListener;
private final SupportedActionDefinitionListener supportedActionDefinitionListener;
private final LocationResolver locationResolver;
- private final RendererManager rendererManager;
private final ForwardingResolver forwardingResolver;
Instance(DataBroker dataProvider, PolicyValidatorRegistry validatorRegistry) throws TransactionCommitFailedException {
supportedClassifierDefinitionListener = new SupportedClassifierDefinitionListener(dataProvider, validatorRegistry);
supportedActionDefinitionListener = new SupportedActionDefinitionListener(dataProvider);
locationResolver = new LocationResolver(dataProvider);
- rendererManager = new RendererManager(dataProvider);
forwardingResolver = new ForwardingResolver(dataProvider);
}
supportedClassifierDefinitionListener.close();
supportedActionDefinitionListener.close();
locationResolver.close();
- rendererManager.close();
forwardingResolver.close();
}
}
+++ /dev/null
-/*
- * Copyright (c) 2016 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.api;
-
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointReg;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointReg;
-import org.opendaylight.yangtools.yang.binding.Augmentation;
-
-import javax.annotation.Nullable;
-import java.util.Map;
-
-public interface BaseEndpointRendererAugmentation {
-
- /**
- * Creates pair of AddressEndpoint augmentation, specific for renderer and augmentation type
- * (class
- * name).
- *
- * @param input input data for AddressEndpoint creation
- * @return pair of augmentation type and augmentation
- */
- @Nullable
- Map.Entry<Class<? extends Augmentation<AddressEndpoint>>, Augmentation<AddressEndpoint>> buildAddressEndpointAugmentation(
- AddressEndpointReg input);
-
- /**
- * Creates pair of AddressEndpoint augmentation, specific for renderer and augmentation type
- * (class
- * name).
- *
- * @param input input data for AddressEndpoint creation
- * @return pair of augmentation type and augmentation
- */
- @Nullable
- Map.Entry<Class<? extends Augmentation<ContainmentEndpoint>>, Augmentation<ContainmentEndpoint>> buildContainmentEndpointAugmentation(
- ContainmentEndpointReg input);
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 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.api;
-
-public interface BaseEndpointRendererAugmentationRegistry {
-
- /**
- * Registers renderer's endpoints augmentation.
- *
- * @param baseEndpointRendererAugmentation cannot be {@code null}
- * @throws NullPointerException
- */
- void register(BaseEndpointRendererAugmentation baseEndpointRendererAugmentation);
-
- /**
- * Unregisters renderer's endpoints augmentation.
- *
- * @param baseEndpointRendererAugmentation cannot be {@code null}
- * @throws NullPointerException
- */
- void unregister(BaseEndpointRendererAugmentation baseEndpointRendererAugmentation);
-}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.api;
+
+public interface DomainSpecificRegistry {
+
+ EndpointAugmentorRegistry getEndpointAugmentorRegistry();
+
+ NetworkDomainAugmentorRegistry getNetworkDomainAugmentorRegistry();
+
+ // TODO add forwarding validator registry
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.api;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointReg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointReg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.ContainmentEndpointWithLocation;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+
+import javax.annotation.Nullable;
+import java.util.Map;
+
+/**
+ * Provides translation for endpoint augmentation
+ */
+public interface EndpointAugmentor {
+
+ /**
+ * Creates pair of {@link AddressEndpoint} augmentation. Augmentation is domain specific. Result
+ * is used for translation from {@link AddressEndpointReg} to {@link AddressEndpoint}
+ *
+ * @param input {@link AddressEndpointReg} as part of RPC input
+ * {@link BaseEndpointService#registerEndpoint(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput)}
+ * @return translated <i>input</i> to {@link AddressEndpoint}
+ */
+ @Nullable
+ Map.Entry<Class<? extends Augmentation<AddressEndpoint>>, Augmentation<AddressEndpoint>> buildAddressEndpointAugmentation(
+ AddressEndpointReg input);
+
+ /**
+ * Creates pair of {@link ContainmentEndpoint} augmentation. Augmentation is domain specific.
+ * Result is used for translation from {@link ContainmentEndpointReg} to
+ * {@link ContainmentEndpoint}
+ *
+ * @param input {@link ContainmentEndpointReg} as part of RPC input
+ * {@link BaseEndpointService#registerEndpoint(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput)}
+ * @return translated <i>input</i> to {@link ContainmentEndpoint}
+ */
+ @Nullable
+ Map.Entry<Class<? extends Augmentation<ContainmentEndpoint>>, Augmentation<ContainmentEndpoint>> buildContainmentEndpointAugmentation(
+ ContainmentEndpointReg input);
+
+ /**
+ * Creates pair of {@link AddressEndpointWithLocation} augmentation. Augmentation is domain
+ * specific. Result is used for translation from {@link AddressEndpoint} to
+ * {@link AddressEndpointWithLocation}
+ *
+ * @param input {@link AddressEndpoint}
+ * @return translated <i>input</i> to {@link AddressEndpointWithLocation}
+ */
+ @Nullable
+ Map.Entry<Class<? extends Augmentation<AddressEndpointWithLocation>>, Augmentation<AddressEndpointWithLocation>> buildAddressEndpointWithLocationAugmentation(
+ AddressEndpoint input);
+
+ /**
+ * Creates pair of {@link ContainmentEndpointWithLocation} augmentation. Augmentation is domain
+ * specific. Result is used for translation from {@link ContainmentEndpoint} to
+ * {@link ContainmentEndpointWithLocation}
+ *
+ * @param input {@link ContainmentEndpoint}
+ * @return translated <i>input</i> to {@link ContainmentEndpointWithLocation}
+ */
+ @Nullable
+ Map.Entry<Class<? extends Augmentation<ContainmentEndpointWithLocation>>, Augmentation<ContainmentEndpointWithLocation>> buildContainmentEndpointWithLocationAugmentation(
+ ContainmentEndpoint input);
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.api;
+
+public interface EndpointAugmentorRegistry {
+
+ /**
+ * Registers domain specific endpoint augmentor
+ *
+ * @param endpointAugmentor cannot be {@code null}
+ * @throws NullPointerException if <i>endpointAugmentor</i> is {@code null}
+ */
+ void register(EndpointAugmentor endpointAugmentor);
+
+ /**
+ * Unregisters domain specific endpoint augmentor
+ *
+ * @param endpointAugmentor cannot be {@code null}
+ * @throws NullPointerException if <i>endpointAugmentor</i> is {@code null}
+ */
+ void unregister(EndpointAugmentor endpointAugmentor);
+
+}
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Prefix;
import org.opendaylight.yangtools.yang.binding.Augmentation;
+@Deprecated
public interface EpRendererAugmentation {
/**
package org.opendaylight.groupbasedpolicy.api;
+@Deprecated
public interface EpRendererAugmentationRegistry {
/**
--- /dev/null
+/*
+ * Copyright (c) 2016 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.api;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.NetworkDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.renderer.forwarding.by.tenant.RendererNetworkDomain;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+
+/**
+ * Provides translation for forwarding augmentation
+ */
+public interface NetworkDomainAugmentor {
+
+ /**
+ * Creates pair of {@link RendererNetworkDomain} augmentation. Augmentation is domain
+ * specific. Result is used for translation from {@link NetworkDomain} to
+ * {@link RendererNetworkDomain}
+ *
+ * @param input {@link NetworkDomain}
+ * @return translated <i>input</i> to {@link RendererNetworkDomain}
+ */
+ @Nullable
+ Map.Entry<Class<? extends Augmentation<RendererNetworkDomain>>, Augmentation<RendererNetworkDomain>> buildRendererNetworkDomainAugmentation(
+ NetworkDomain input);
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.api;
+
+public interface NetworkDomainAugmentorRegistry {
+
+ /**
+ * Registers domain specific network domain augmentor
+ *
+ * @param netDomainAugmentor cannot be {@code null}
+ * @throws NullPointerException if <i>netDomainAugmentor</i> is {@code null}
+ */
+ void register(NetworkDomainAugmentor netDomainAugmentor);
+
+ /**
+ * Unregisters domain specific network domain augmentor
+ *
+ * @param netDomainAugmentor cannot be {@code null}
+ * @throws NullPointerException if <i>netDomainAugmentor</i> is {@code null}
+ */
+ void unregister(NetworkDomainAugmentor netDomainAugmentor);
+
+}
+++ /dev/null
-/*
- * Copyright (c) 2016 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.base_endpoint;
-
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.groupbasedpolicy.api.BaseEndpointRendererAugmentation;
-import org.opendaylight.groupbasedpolicy.api.BaseEndpointRendererAugmentationRegistry;
-import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
-import org.opendaylight.groupbasedpolicy.util.IidFactory;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpointBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpointKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpointBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.ParentEndpointChoice;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentContainmentEndpointCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentContainmentEndpointCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentEndpointCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentEndpointCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.containment.endpoint._case.ParentContainmentEndpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.containment.endpoint._case.ParentContainmentEndpointBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpointBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointReg;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointRegKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointReg;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointRegKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.AddressEndpointUnreg;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.ContainmentEndpointUnreg;
-import org.opendaylight.yangtools.yang.binding.Augmentation;
-import org.opendaylight.yangtools.yang.common.RpcError;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.Future;
-
-import javax.annotation.Nullable;
-
-public class BaseEndpointRpcRegistry
- implements BaseEndpointService, BaseEndpointRendererAugmentationRegistry, AutoCloseable {
-
- static final ConcurrentMap<String, BaseEndpointRendererAugmentation> registeredRenderers =
- new ConcurrentHashMap<>();
- private static final Logger LOG = LoggerFactory.getLogger(BaseEndpointRpcRegistry.class);
- private final DataBroker dataProvider;
- private final BindingAwareBroker.RpcRegistration<BaseEndpointService> rpcRegistration;
-
- private Function<Void, RpcResult<Void>> futureTrans = new Function<Void, RpcResult<Void>>() {
-
- @Override
- public RpcResult<Void> apply(Void input) {
- return RpcResultBuilder.<Void>success().build();
- }
- };
-
- public BaseEndpointRpcRegistry(DataBroker dataProvider, RpcProviderRegistry rpcRegistry) {
- Preconditions.checkNotNull(dataProvider);
- Preconditions.checkNotNull(rpcRegistry);
-
- this.dataProvider = dataProvider;
- this.rpcRegistration = rpcRegistry.addRpcImplementation(BaseEndpointService.class, this);
- }
-
- /**
- * Registers renderer's endpoints augmentation.
- *
- * @param baseEndpointRendererAugmentation cannot be {@code null}
- * @throws NullPointerException
- */
- @Override
- public void register(BaseEndpointRendererAugmentation baseEndpointRendererAugmentation) {
- if (baseEndpointRendererAugmentation != null) {
- registeredRenderers.putIfAbsent(baseEndpointRendererAugmentation.getClass().getName(),
- baseEndpointRendererAugmentation);
- LOG.info("Registered {}", baseEndpointRendererAugmentation.getClass().getName());
- }
- }
-
- /**
- * Unregisters renderer's endpoints augmentation.
- *
- * @param baseEndpointRendererAugmentation cannot be {@code null}
- * @throws NullPointerException
- */
- @Override
- public void unregister(BaseEndpointRendererAugmentation baseEndpointRendererAugmentation) {
- if (baseEndpointRendererAugmentation == null
- || !registeredRenderers.containsKey(baseEndpointRendererAugmentation.getClass().getName())) {
- return;
- }
- registeredRenderers.remove(baseEndpointRendererAugmentation.getClass().getName());
- LOG.info("Unregistered {}", baseEndpointRendererAugmentation.getClass().getName());
- }
-
- /**
- * Register a new endpoint into the registry. If there is already an existing
- * endpoint with the same keys, they will be overwritten with the new information.
- *
- * @param input Endpoint to register
- */
- @Override
- public Future<RpcResult<Void>> registerEndpoint(RegisterEndpointInput input) {
- long timestamp = System.currentTimeMillis();
-
- WriteTransaction t = dataProvider.newWriteOnlyTransaction();
-
- List<ContainmentEndpointReg> endpoints = input.getContainmentEndpointReg();
- ListenableFuture<RpcResult<Void>> failResult = verifyRegisterEndpointInput(input);
- if (failResult == null) {
- for (ContainmentEndpointReg ce : nullToEmpty(endpoints)) {
- long stamp = (ce.getTimestamp() == null || ce.getTimestamp() == 0) ? timestamp : ce.getTimestamp();
- ContainmentEndpoint endpoint = buildContainmentEndpoint(ce).setTimestamp(stamp).build();
- t.put(LogicalDatastoreType.OPERATIONAL, IidFactory.containmentEndpointIid(endpoint.getKey()), endpoint,
- true);
-
- updateContainmentEndpointRegChilds(t, endpoint);
- }
-
- List<AddressEndpointReg> addressEndpoints = input.getAddressEndpointReg();
- for (AddressEndpointReg ae : nullToEmpty(addressEndpoints)) {
- long stamp = (ae.getTimestamp() == null || ae.getTimestamp() == 0) ? timestamp : ae.getTimestamp();
- AddressEndpoint endpoint = buildAddressEndpoint(ae).setTimestamp(stamp).build();
- t.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(endpoint.getKey()), endpoint,
- true);
-
- updateAddressEndpointRegChilds(t, endpoint);
-
- updateAddressEndpointRegParents(t, endpoint);
- }
- } else {
- return failResult;
- }
-
- ListenableFuture<Void> r = t.submit();
- return Futures.transform(r, futureTrans);
- }
-
- private void updateContainmentEndpointRegChilds(WriteTransaction t, ContainmentEndpoint containmentEndpoint) {
- ReadOnlyTransaction readTransaction = dataProvider.newReadOnlyTransaction();
-
- for (ChildEndpoint child : nullToEmpty(containmentEndpoint.getChildEndpoint())) {
- AddressEndpointKey key = new AddressEndpointKey(child.getAddress(), child.getAddressType(),
- child.getContextId(), child.getContextType());
- Optional<AddressEndpoint> addressEndpointOptional = DataStoreHelper
- .readFromDs(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(key), readTransaction);
-
- if (addressEndpointOptional.isPresent()) {
- ParentEndpointChoice parentEndpointChoice = addressEndpointOptional.get().getParentEndpointChoice();
- List<ParentContainmentEndpoint> parentContainmentEndpoints =
- getParentContainmentEndpoints(parentEndpointChoice);
-
- ParentContainmentEndpoint parentContainmentEndpoint =
- new ParentContainmentEndpointBuilder().setContextId(containmentEndpoint.getContextId())
- .setContextType(containmentEndpoint.getContextType())
- .build();
-
- if (!nullToEmpty(parentContainmentEndpoints).contains(parentContainmentEndpoint)) {
- parentContainmentEndpoints.add(parentContainmentEndpoint);
- AddressEndpoint updatedAddressEndpoint = new AddressEndpointBuilder(addressEndpointOptional.get())
- .setParentEndpointChoice(new ParentContainmentEndpointCaseBuilder()
- .setParentContainmentEndpoint(parentContainmentEndpoints).build())
- .build();
-
- t.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(key), updatedAddressEndpoint);
- }
- }
- }
- }
-
- private ListenableFuture<RpcResult<Void>> verifyRegisterEndpointInput(RegisterEndpointInput input) {
- ListenableFuture<RpcResult<Void>> result;
- List<AddressEndpointReg> addressEndpointRegs = nullToEmpty(input.getAddressEndpointReg());
- List<ContainmentEndpointReg> containmentEndpointRegs = nullToEmpty(input.getContainmentEndpointReg());
-
- for (AddressEndpointReg addressEndpointReg : nullToEmpty(addressEndpointRegs)) {
- result = verifyAddressEndpointChilds(addressEndpointRegs, addressEndpointReg);
- if (result != null) {
- return result;
- }
-
- result = verifyAddressEndpointParents(addressEndpointRegs, addressEndpointReg);
- if (result != null) {
- return result;
- }
- }
-
- result = verifyContainmentEndpointChilds(addressEndpointRegs, containmentEndpointRegs);
- if (result != null) {
- return result;
- }
-
- return null;
- }
-
- private ListenableFuture<RpcResult<Void>> verifyContainmentEndpointChilds(
- List<AddressEndpointReg> addressEndpointRegs, List<ContainmentEndpointReg> containmentEndpointRegs) {
- for (ContainmentEndpointReg containmentEndpointReg : nullToEmpty(containmentEndpointRegs)) {
- for (ChildEndpoint childEndpoint : nullToEmpty(containmentEndpointReg.getChildEndpoint())) {
- AddressEndpointRegKey key = new AddressEndpointRegKey(childEndpoint.getAddress(),
- childEndpoint.getAddressType(), childEndpoint.getContextId(), childEndpoint.getContextType());
- AddressEndpointReg addressEndpointRegChild = findAddressEndpointReg(key, addressEndpointRegs);
- if (addressEndpointRegChild == null) {
- // todo this can be optimized if we move this to
- // updateContainmentEndpointRegChilds and verify child in one step with update.
- Optional<AddressEndpoint> addressEndpointOptional =
- DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(new AddressEndpointKey(key.getAddress(),
- key.getAddressType(), key.getContextId(), key.getContextType())),
- dataProvider.newReadOnlyTransaction());
- if (!addressEndpointOptional.isPresent()) {
- LOG.debug("Child AddressEndpoint {} does not exist in RPC and DS.", childEndpoint);
- return buildFailFeature(
- String.format("Child AddressEndpoint %s does not exist in RPC and DS.", childEndpoint));
- }
- } else {
-
- if (!containmentEndpointReg.getKey().equals(new ContainmentEndpointRegKey(
- addressEndpointRegChild.getContextId(), addressEndpointRegChild.getContextType()))) {
- LOG.debug(
- "Child AddressEndpoint {} in ContainmentEndpoint->ChildEndpoints does not contain a valid ContainmentEndpointRegKey.",
- addressEndpointRegChild);
- return buildFailFeature(String
- .format("AddressEndpoint in ContainmentEndpoint->ChildEndpoints does not contain a valid ContainmentEndpointRegKey."
- + "\nChild element: %s", addressEndpointRegChild));
- }
- }
- }
- }
- return null;
- }
-
- private ListenableFuture<RpcResult<Void>> verifyAddressEndpointParents(List<AddressEndpointReg> addressEndpointRegs,
- AddressEndpointReg addressEndpointReg) {
- ParentEndpointChoice parentEndpointChoice = addressEndpointReg.getParentEndpointChoice();
- List<ParentEndpoint> parentEndpoints;
- parentEndpoints =
- (parentEndpointChoice instanceof ParentEndpointCase) ? ((ParentEndpointCase) parentEndpointChoice)
- .getParentEndpoint() : null;
-
- for (ParentEndpoint parentEndpoint : nullToEmpty(parentEndpoints)) {
- AddressEndpointRegKey key = new AddressEndpointRegKey(parentEndpoint.getAddress(),
- parentEndpoint.getAddressType(), parentEndpoint.getContextId(), parentEndpoint.getContextType());
- AddressEndpointReg addressEndpointRegParent = findAddressEndpointReg(key, addressEndpointRegs);
-
- if (addressEndpointRegParent == null) {
- // todo this can be optimized if we move this to updateAddressEndpointRegParents and
- // verify child in one step with update.
- Optional<AddressEndpoint> addressEndpointOptional =
- DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(new AddressEndpointKey(key.getAddress(),
- key.getAddressType(), key.getContextId(), key.getContextType())),
- dataProvider.newReadOnlyTransaction());
- if (!addressEndpointOptional.isPresent()) {
- LOG.debug("Parent AddressEndpoint {} does not exist in RPC and DS.", parentEndpoint);
- return buildFailFeature(
- String.format("Parent AddressEndpoint %s does not exist in RPC and DS.", parentEndpoint));
- }
- } else {
-
- List<ChildEndpoint> childEndpoints = addressEndpointRegParent.getChildEndpoint();
-
- if (!nullToEmpty(childEndpoints).contains(new ChildEndpointBuilder(addressEndpointReg).build())) {
- LOG.debug("Parent AddressEndpoint {} does not contain a valid child AddressEndpoint.",
- addressEndpointRegParent);
- return buildFailFeature(String.format(
- "Parent AddressEndpoint does not contain a valid child AddressEndpoint."
- + "\nParent AddressEndpoint: %s" + "\nChild AddressEndpoint: %s",
- addressEndpointRegParent, addressEndpointReg));
- }
- }
- }
- return null;
- }
-
- private ListenableFuture<RpcResult<Void>> verifyAddressEndpointChilds(List<AddressEndpointReg> addressEndpointRegs,
- AddressEndpointReg addressEndpointReg) {
- for (ChildEndpoint childEndpoint : nullToEmpty(addressEndpointReg.getChildEndpoint())) {
- AddressEndpointRegKey key = new AddressEndpointRegKey(childEndpoint.getAddress(),
- childEndpoint.getAddressType(), childEndpoint.getContextId(), childEndpoint.getContextType());
- AddressEndpointReg addressEndpointRegChild = findAddressEndpointReg(key, addressEndpointRegs);
- if (addressEndpointRegChild == null) {
- // todo this can be optimized if we move this to updateAddressEndpointRegChilds and
- // verify child in one step with update.
- Optional<AddressEndpoint> addressEndpointOptional =
- DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(new AddressEndpointKey(key.getAddress(),
- key.getAddressType(), key.getContextId(), key.getContextType())),
- dataProvider.newReadOnlyTransaction());
- if (!addressEndpointOptional.isPresent()) {
- LOG.debug("Child AddressEndpoint {} does not exist in RPC and DS.", childEndpoint);
- return buildFailFeature(
- String.format("Child AddressEndpoint %s does not exist in RPC and DS.", childEndpoint));
- }
- } else {
-
- ParentEndpointChoice parentEndpointChoice = addressEndpointRegChild.getParentEndpointChoice();
-
- if (!(parentEndpointChoice instanceof ParentEndpointCase)) {
- LOG.debug("Child AddressEndpoint {} does not contain list of parent elements.", childEndpoint);
- return buildFailFeature(String.format(
- "Child AddressEndpoint does not contain list of parent elements." + "\nChild element: %s",
- childEndpoint));
- }
-
- List<ParentEndpoint> parentEndpoints =
- nullToEmpty(((ParentEndpointCase) parentEndpointChoice).getParentEndpoint());
- if (!parentEndpoints.contains(new ParentEndpointBuilder(addressEndpointReg).build())) {
- LOG.debug("Child AddressEndpoint {} does not contain a valid parent AddressEndpoint.",
- addressEndpointRegChild);
- return buildFailFeature(String.format(
- "Child AddressEndpoint does not contain a valid parent AddressEndpoint."
- + "\nChild element: %s" + "\nparent AddressEndpoint: %s",
- addressEndpointRegChild, addressEndpointReg));
- }
- }
- }
- return null;
- }
-
- private AddressEndpointReg findAddressEndpointReg(AddressEndpointRegKey key, List<AddressEndpointReg> addressEndpointRegs) {
- for (AddressEndpointReg addressEndpointReg : addressEndpointRegs) {
- if (addressEndpointReg.getKey().equals(key)) {
- return addressEndpointReg;
- }
- }
- return null;
- }
-
- private void updateAddressEndpointRegParents(WriteTransaction t, AddressEndpoint endpoint) {
- ParentEndpointCase parentEndpointCase = (ParentEndpointCase) endpoint.getParentEndpointChoice();
- List<ParentEndpoint> parentEndpoints;
- ReadOnlyTransaction readTransaction = dataProvider.newReadOnlyTransaction();
-
- parentEndpoints = getParentEndpoints(parentEndpointCase);
-
- for (ParentEndpoint parent : nullToEmpty(parentEndpoints)) {
- Optional<AddressEndpoint> addressEndpointOptional =
- DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(new AddressEndpointKey(parent.getAddress(),
- parent.getAddressType(), parent.getContextId(), parent.getContextType())),
- readTransaction);
-
- if (addressEndpointOptional.isPresent()) {
-
- List<ChildEndpoint> childEndpoints;
-
- childEndpoints = (addressEndpointOptional.get() == null || addressEndpointOptional.get()
- .getChildEndpoint() == null) ? new ArrayList<>() : addressEndpointOptional.get().getChildEndpoint();
-
- ChildEndpoint childEndpoint = new ChildEndpointBuilder(endpoint).build();
- if (!childEndpoints.contains(childEndpoint)) {
- childEndpoints.add(childEndpoint);
- AddressEndpoint parentAddressEndpoint = new AddressEndpointBuilder(addressEndpointOptional.get())
- .setChildEndpoint(childEndpoints).build();
- t.put(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(parentAddressEndpoint.getKey()), parentAddressEndpoint);
- }
- }
- }
- }
-
- private void updateAddressEndpointRegChilds(WriteTransaction t, AddressEndpoint endpoint) {
- ReadTransaction readTransaction = dataProvider.newReadOnlyTransaction();
-
- for (ChildEndpoint child : nullToEmpty(endpoint.getChildEndpoint())) {
- Optional<AddressEndpoint> addressEndpointOptional =
- DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(new AddressEndpointKey(child.getAddress(),
- child.getAddressType(), child.getContextId(), child.getContextType())),
- readTransaction);
-
- if (addressEndpointOptional.isPresent()) {
- ParentEndpointCase parentEndpointCase =
- (ParentEndpointCase) addressEndpointOptional.get().getParentEndpointChoice();
- List<ParentEndpoint> parentEndpoints;
-
- parentEndpoints = getParentEndpoints(parentEndpointCase);
-
- ParentEndpoint parentEndpoint = new ParentEndpointBuilder(endpoint).build();
- if (!parentEndpoints.contains(parentEndpoint)) {
- parentEndpoints.add(parentEndpoint);
- AddressEndpoint childAddressEndpoint =
- new AddressEndpointBuilder(addressEndpointOptional.get())
- .setParentEndpointChoice(
- new ParentEndpointCaseBuilder().setParentEndpoint(parentEndpoints).build())
- .build();
- t.put(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(childAddressEndpoint.getKey()), childAddressEndpoint);
- }
- }
- }
- }
-
- private ContainmentEndpointBuilder buildContainmentEndpoint(ContainmentEndpointReg input) {
-
- ContainmentEndpointBuilder eb = new ContainmentEndpointBuilder().setChildEndpoint(input.getChildEndpoint())
- .setCondition(input.getCondition())
- .setContextType(input.getContextType())
- .setContextId(input.getContextId())
- .setEndpointGroup(input.getEndpointGroup())
- .setKey(new ContainmentEndpointKey(input.getContextId(), input.getContextType()))
- .setNetworkContainment(input.getNetworkContainment())
- .setTenant(input.getTenant())
- .setTimestamp(input.getTimestamp())
- .setChildEndpoint(input.getChildEndpoint());
-
- for (Map.Entry<String, BaseEndpointRendererAugmentation> entry : registeredRenderers.entrySet()) {
- try {
- Map.Entry<Class<? extends Augmentation<ContainmentEndpoint>>, Augmentation<ContainmentEndpoint>> augmentationEntry =
- entry.getValue().buildContainmentEndpointAugmentation(input);
- if (augmentationEntry != null) {
- eb.addAugmentation(augmentationEntry.getKey(), augmentationEntry.getValue());
- }
- } catch (Exception e) {
- LOG.warn("AddressEndpoint Augmentation error while processing " + entry.getKey() + ". Reason: ", e);
- }
- }
- return eb;
- }
-
- private AddressEndpointBuilder buildAddressEndpoint(AddressEndpointReg ae) {
- AddressEndpointBuilder builder = new AddressEndpointBuilder().setTenant(ae.getTenant())
- .setNetworkContainment(ae.getNetworkContainment())
- .setEndpointGroup(ae.getEndpointGroup())
- .setAddress(ae.getAddress())
- .setAddressType(ae.getAddressType())
- .setChildEndpoint(ae.getChildEndpoint())
- .setCondition(ae.getCondition())
- .setKey(new AddressEndpointKey(ae.getAddress(), ae.getAddressType(), ae.getContextId(),
- ae.getContextType()))
- .setParentEndpointChoice(ae.getParentEndpointChoice())
- .setTimestamp(ae.getTimestamp())
- .setContextId(ae.getContextId())
- .setContextType(ae.getContextType())
- .setTenant(ae.getTenant());
-
- for (Map.Entry<String, BaseEndpointRendererAugmentation> entry : registeredRenderers.entrySet()) {
- try {
- Map.Entry<Class<? extends Augmentation<AddressEndpoint>>, Augmentation<AddressEndpoint>> augmentationEntry =
- entry.getValue().buildAddressEndpointAugmentation(ae);
- if (augmentationEntry != null) {
- builder.addAugmentation(augmentationEntry.getKey(), augmentationEntry.getValue());
- }
- } catch (Exception e) {
- LOG.warn("AddressEndpoint Augmentation error while processing " + entry.getKey() + ". Reason: ", e);
- }
- }
- return builder;
- }
-
- /**
- * Unregister an endpoint or endpoints from the registry.
- *
- * @param input Endpoint/endpoints to unregister
- */
- @Override
- public Future<RpcResult<Void>> unregisterEndpoint(UnregisterEndpointInput input) {
- WriteTransaction t = dataProvider.newWriteOnlyTransaction();
-
- List<AddressEndpointUnreg> addressEndpoints = input.getAddressEndpointUnreg();
- for (AddressEndpointUnreg ae : nullToEmpty(addressEndpoints)) {
- AddressEndpointKey key = new AddressEndpointKey(ae.getAddress(), ae.getAddressType(), ae.getContextId(),
- ae.getContextType());
- t.delete(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(key));
-
- updateAddressEndpointUnregChilds(t, ae);
-
- updateAddressEndpointUnregParents(t, ae);
- }
-
- List<ContainmentEndpointUnreg> endpoints = input.getContainmentEndpointUnreg();
- for (ContainmentEndpointUnreg ce : nullToEmpty(endpoints)) {
- ContainmentEndpointKey key = new ContainmentEndpointKey(ce.getContextId(), ce.getContextType());
- t.delete(LogicalDatastoreType.OPERATIONAL, IidFactory.containmentEndpointIid(key));
-
- updateContainmentEndpointUnregChilds(t, ce);
- }
-
- ListenableFuture<Void> r = t.submit();
- return Futures.transform(r, futureTrans);
- }
-
- private void updateAddressEndpointUnregParents(WriteTransaction t, AddressEndpointUnreg ae) {
- ReadTransaction readTransaction = dataProvider.newReadOnlyTransaction();
-
- Optional<AddressEndpoint> addressEndpointOptional = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(new AddressEndpointKey(ae.getAddress(), ae.getAddressType(),
- ae.getContextId(), ae.getContextType())),
- readTransaction);
-
- if (addressEndpointOptional.isPresent()) {
- ParentEndpointCase parentEndpointCase =
- (ParentEndpointCase) addressEndpointOptional.get().getParentEndpointChoice();
- List<ParentEndpoint> parentEndpoints;
-
- parentEndpoints = getParentEndpoints(parentEndpointCase);
-
- for (ParentEndpoint parentEndpoint : parentEndpoints) {
- Optional<AddressEndpoint> parentAddressEndpointOptional =
- DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(new AddressEndpointKey(parentEndpoint.getAddress(),
- parentEndpoint.getAddressType(), parentEndpoint.getContextId(),
- parentEndpoint.getContextType())),
- readTransaction);
-
- AddressEndpoint parent =
- parentAddressEndpointOptional.isPresent() ? parentAddressEndpointOptional.get() : null;
-
- ChildEndpoint endpointToRemove = new ChildEndpointBuilder(addressEndpointOptional.get()).build();
-
- if (parent != null && nullToEmpty(parent.getChildEndpoint()).contains(endpointToRemove)) {
- parent.getChildEndpoint().remove(endpointToRemove);
- t.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(parent.getKey()), parent);
- }
-
- }
- }
- }
-
- private void updateAddressEndpointUnregChilds(WriteTransaction t, AddressEndpointUnreg ae) {
- ReadTransaction readTransaction = dataProvider.newReadOnlyTransaction();
-
- Optional<AddressEndpoint> addressEndpointOptional = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(new AddressEndpointKey(ae.getAddress(), ae.getAddressType(),
- ae.getContextId(), ae.getContextType())),
- readTransaction);
-
- if (addressEndpointOptional.isPresent()) {
- AddressEndpoint endpoint = addressEndpointOptional.get();
- List<ChildEndpoint> childEndpoints = endpoint.getChildEndpoint();
-
- for (ChildEndpoint childEndpoint : nullToEmpty(childEndpoints)) {
- Optional<AddressEndpoint> childAddressEndpointOptional =
- DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(new AddressEndpointKey(childEndpoint.getAddress(),
- childEndpoint.getAddressType(), childEndpoint.getContextId(),
- childEndpoint.getContextType())),
- readTransaction);
-
- AddressEndpoint child =
- childAddressEndpointOptional.isPresent() ? childAddressEndpointOptional.get() : null;
- ParentEndpointCase parentEndpointCase =
- (child != null) ? (ParentEndpointCase) child.getParentEndpointChoice() : null;
- List<ParentEndpoint> parentEndpoints;
-
- parentEndpoints = getParentEndpoints(parentEndpointCase);
-
- ParentEndpoint endpointToRemove = new ParentEndpointBuilder(endpoint).build();
-
- if (child != null && nullToEmpty(parentEndpoints).contains(endpointToRemove)) {
- parentEndpoints.remove(endpointToRemove);
- AddressEndpoint newChild =
- new AddressEndpointBuilder(child)
- .setParentEndpointChoice(
- new ParentEndpointCaseBuilder().setParentEndpoint(parentEndpoints).build())
- .build();
-
- t.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(newChild.getKey()), newChild);
- }
- }
- }
- }
-
- private void updateContainmentEndpointUnregChilds(WriteTransaction t,
- ContainmentEndpointUnreg containmentEndpointUnreg) {
- ReadOnlyTransaction readTransaction = dataProvider.newReadOnlyTransaction();
-
- ContainmentEndpointKey key = new ContainmentEndpointKey(containmentEndpointUnreg.getContextId(),
- containmentEndpointUnreg.getContextType());
- Optional<ContainmentEndpoint> containmentEndpointOptional = DataStoreHelper
- .readFromDs(LogicalDatastoreType.OPERATIONAL, IidFactory.containmentEndpointIid(key), readTransaction);
-
- if (!containmentEndpointOptional.isPresent()) {
- return;
- }
-
- for (ChildEndpoint child : nullToEmpty(containmentEndpointOptional.get().getChildEndpoint())) {
- AddressEndpointKey aeKey = new AddressEndpointKey(child.getAddress(), child.getAddressType(),
- child.getContextId(), child.getContextType());
- Optional<AddressEndpoint> addressEndpointOptional = DataStoreHelper
- .readFromDs(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(aeKey), readTransaction);
-
- if (addressEndpointOptional.isPresent()) {
- ParentEndpointChoice parentEndpointChoice = addressEndpointOptional.get().getParentEndpointChoice();
- List<ParentContainmentEndpoint> parentContainmentEndpoints;
- parentContainmentEndpoints = getParentContainmentEndpoints(parentEndpointChoice);
-
- ParentContainmentEndpoint parentContainmentEndpoint =
- new ParentContainmentEndpointBuilder().setContextId(containmentEndpointUnreg.getContextId())
- .setContextType(containmentEndpointUnreg.getContextType())
- .build();
- if (nullToEmpty(parentContainmentEndpoints).contains(parentContainmentEndpoint)) {
- t.delete(LogicalDatastoreType.OPERATIONAL,
- IidFactory.parentContainmentEndpointIid(aeKey, parentContainmentEndpoint.getKey()));
- }
- }
- }
- }
-
- private List<ParentContainmentEndpoint> getParentContainmentEndpoints(ParentEndpointChoice parentEndpointChoice) {
- return (parentEndpointChoice instanceof ParentContainmentEndpointCase) ? ((ParentContainmentEndpointCase) parentEndpointChoice)
- .getParentContainmentEndpoint() : new ArrayList<>();
- }
-
- private List<ParentEndpoint> getParentEndpoints(ParentEndpointCase parentEndpointCase) {
- return (parentEndpointCase == null
- || parentEndpointCase.getParentEndpoint() == null) ? new ArrayList<>() : parentEndpointCase
- .getParentEndpoint();
- }
-
- private ListenableFuture<RpcResult<Void>> buildFailFeature(String message) {
- return Futures
- .immediateFuture(RpcResultBuilder.<Void>failed().withError(RpcError.ErrorType.PROTOCOL, message).build());
- }
-
- @Override
- public void close() throws Exception {
- if (rpcRegistration != null) {
- rpcRegistration.close();
- }
- }
-
- private <T> List<T> nullToEmpty(@Nullable List<T> list) {
- return list == null ? Collections.emptyList() : list;
- }
-
-}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.base_endpoint;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Future;
+
+import javax.annotation.Nullable;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.groupbasedpolicy.api.EndpointAugmentor;
+import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
+import org.opendaylight.groupbasedpolicy.util.EndpointUtils;
+import org.opendaylight.groupbasedpolicy.util.IidFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpointKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpointKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.ParentEndpointChoice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.containment.endpoint._case.ParentContainmentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.containment.endpoint._case.ParentContainmentEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.containment.endpoint._case.ParentContainmentEndpointKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpointKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointReg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointReg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.AddressEndpointUnreg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.ContainmentEndpointUnreg;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+public class BaseEndpointServiceImpl implements BaseEndpointService, AutoCloseable {
+
+ private static final Logger LOG = LoggerFactory.getLogger(BaseEndpointServiceImpl.class);
+ private final DataBroker dataProvider;
+ private final BindingAwareBroker.RpcRegistration<BaseEndpointService> rpcRegistration;
+ private final EndpointAugmentorRegistryImpl epAugRegistry;
+
+ private static final Function<Void, RpcResult<Void>> TO_SUCCESS_RPC_RESULT = new Function<Void, RpcResult<Void>>() {
+
+ @Override
+ public RpcResult<Void> apply(Void input) {
+ return RpcResultBuilder.<Void>success().build();
+ }
+ };
+
+ public BaseEndpointServiceImpl(DataBroker dataProvider, RpcProviderRegistry rpcRegistry,
+ EndpointAugmentorRegistryImpl epAugRegistry) {
+ this.epAugRegistry = Preconditions.checkNotNull(epAugRegistry);
+ this.dataProvider = Preconditions.checkNotNull(dataProvider);
+ Preconditions.checkNotNull(rpcRegistry);
+ this.rpcRegistration = rpcRegistry.addRpcImplementation(BaseEndpointService.class, this);
+ }
+
+ /**
+ * Register a new endpoint into the registry. If there is already an existing
+ * endpoint with the same keys, they will be overwritten with the new information.
+ *
+ * @param input Endpoint to register
+ */
+ @Override
+ public Future<RpcResult<Void>> registerEndpoint(RegisterEndpointInput input) {
+ long timestamp = System.currentTimeMillis();
+
+ ReadWriteTransaction t = dataProvider.newReadWriteTransaction();
+
+ ListenableFuture<RpcResult<Void>> failResult =
+ RegisterEndpointInputVerificator.verifyRegisterEndpointInput(input, t);
+ if (failResult != null) {
+ t.cancel();
+ return failResult;
+ }
+
+ List<ContainmentEndpointReg> endpoints = input.getContainmentEndpointReg();
+ for (ContainmentEndpointReg ce : nullToEmpty(endpoints)) {
+ long stamp = (ce.getTimestamp() == null || ce.getTimestamp() == 0) ? timestamp : ce.getTimestamp();
+ ContainmentEndpoint endpoint = buildContainmentEndpoint(ce).setTimestamp(stamp).build();
+ t.put(LogicalDatastoreType.OPERATIONAL, IidFactory.containmentEndpointIid(endpoint.getKey()), endpoint,
+ true);
+ addContainmentEndpointToChilds(t, endpoint);
+ }
+
+ List<AddressEndpointReg> addressEndpoints = input.getAddressEndpointReg();
+ for (AddressEndpointReg ae : nullToEmpty(addressEndpoints)) {
+ long stamp = (ae.getTimestamp() == null || ae.getTimestamp() == 0) ? timestamp : ae.getTimestamp();
+ AddressEndpoint endpoint = buildAddressEndpoint(ae).setTimestamp(stamp).build();
+ t.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(endpoint.getKey()), endpoint, true);
+ addAddressEndpointToChilds(t, endpoint);
+ addAddressEndpointToParents(t, endpoint);
+ }
+
+ return Futures.transform(t.submit(), TO_SUCCESS_RPC_RESULT);
+ }
+
+ private void addContainmentEndpointToChilds(ReadWriteTransaction t, ContainmentEndpoint endpoint) {
+ ParentContainmentEndpoint epAsParent = new ParentContainmentEndpointBuilder(endpoint).build();
+ for (ChildEndpoint child : nullToEmpty(endpoint.getChildEndpoint())) {
+ InstanceIdentifier<AddressEndpoint> childIid =
+ IidFactory.addressEndpointIid(EndpointUtils.createAddressEndointKey(child));
+ Optional<AddressEndpoint> childAddrEpOptional =
+ DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, childIid, t);
+ if (childAddrEpOptional.isPresent()) {
+ KeyedInstanceIdentifier<ParentContainmentEndpoint, ParentContainmentEndpointKey> parentInChildIid =
+ childIid.child(ParentContainmentEndpoint.class, epAsParent.getKey());
+ t.put(LogicalDatastoreType.OPERATIONAL, parentInChildIid, epAsParent, true);
+ }
+ }
+ }
+
+ private void addAddressEndpointToChilds(ReadWriteTransaction t, AddressEndpoint endpoint) {
+ ParentEndpoint epAsParent = new ParentEndpointBuilder(endpoint).build();
+ for (ChildEndpoint child : nullToEmpty(endpoint.getChildEndpoint())) {
+ InstanceIdentifier<AddressEndpoint> childIid =
+ IidFactory.addressEndpointIid(EndpointUtils.createAddressEndointKey(child));
+ Optional<AddressEndpoint> childAddrEpOptional =
+ DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, childIid, t);
+ if (childAddrEpOptional.isPresent()) {
+ KeyedInstanceIdentifier<ParentEndpoint, ParentEndpointKey> parentInChildIid =
+ childIid.child(ParentEndpoint.class, epAsParent.getKey());
+ t.put(LogicalDatastoreType.OPERATIONAL, parentInChildIid, epAsParent, true);
+ }
+ }
+ }
+
+ private void addAddressEndpointToParents(ReadWriteTransaction t, AddressEndpoint endpoint) {
+ ChildEndpoint epAsChild = new ChildEndpointBuilder(endpoint).build();
+ for (ParentEndpoint parent : EndpointUtils.getParentEndpoints(endpoint.getParentEndpointChoice())) {
+ InstanceIdentifier<AddressEndpoint> parentIid =
+ IidFactory.addressEndpointIid(EndpointUtils.createAddressEndpointKey(parent));
+ Optional<AddressEndpoint> parentAddrEpOptional =
+ DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, parentIid, t);
+ if (parentAddrEpOptional.isPresent()) {
+ KeyedInstanceIdentifier<ChildEndpoint, ChildEndpointKey> childInParentIid =
+ parentIid.child(ChildEndpoint.class, epAsChild.getKey());
+ t.put(LogicalDatastoreType.OPERATIONAL, childInParentIid, epAsChild, true);
+ }
+ }
+ for (ParentContainmentEndpoint parent : EndpointUtils.getParentContainmentEndpoints(endpoint.getParentEndpointChoice())) {
+ InstanceIdentifier<ContainmentEndpoint> parentIid = IidFactory
+ .containmentEndpointIid(new ContainmentEndpointKey(parent.getContextId(), parent.getContextType()));
+ Optional<ContainmentEndpoint> parentContEpOptional =
+ DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, parentIid, t);
+ if (parentContEpOptional.isPresent()) {
+ KeyedInstanceIdentifier<ChildEndpoint, ChildEndpointKey> childInParentIid =
+ parentIid.child(ChildEndpoint.class, epAsChild.getKey());
+ t.put(LogicalDatastoreType.OPERATIONAL, childInParentIid, epAsChild, true);
+ }
+ }
+ }
+
+ private ContainmentEndpointBuilder buildContainmentEndpoint(ContainmentEndpointReg input) {
+
+ ContainmentEndpointBuilder eb = new ContainmentEndpointBuilder().setChildEndpoint(input.getChildEndpoint())
+ .setCondition(input.getCondition())
+ .setContextType(input.getContextType())
+ .setContextId(input.getContextId())
+ .setEndpointGroup(input.getEndpointGroup())
+ .setKey(new ContainmentEndpointKey(input.getContextId(), input.getContextType()))
+ .setNetworkContainment(input.getNetworkContainment())
+ .setTenant(input.getTenant())
+ .setTimestamp(input.getTimestamp())
+ .setChildEndpoint(input.getChildEndpoint());
+
+ for (EndpointAugmentor epAugmentor : epAugRegistry.getEndpointAugmentors()) {
+ try {
+ Map.Entry<Class<? extends Augmentation<ContainmentEndpoint>>, Augmentation<ContainmentEndpoint>> augmentationEntry =
+ epAugmentor.buildContainmentEndpointAugmentation(input);
+ if (augmentationEntry != null) {
+ eb.addAugmentation(augmentationEntry.getKey(), augmentationEntry.getValue());
+ }
+ } catch (Exception e) {
+ LOG.warn("AddressEndpoint Augmentation error while {} was processing {}",
+ epAugmentor.getClass().getSimpleName(), input, e);
+ }
+ }
+ return eb;
+ }
+
+ private AddressEndpointBuilder buildAddressEndpoint(AddressEndpointReg ae) {
+ AddressEndpointBuilder builder = new AddressEndpointBuilder().setTenant(ae.getTenant())
+ .setNetworkContainment(ae.getNetworkContainment())
+ .setEndpointGroup(ae.getEndpointGroup())
+ .setAddress(ae.getAddress())
+ .setAddressType(ae.getAddressType())
+ .setChildEndpoint(ae.getChildEndpoint())
+ .setCondition(ae.getCondition())
+ .setKey(new AddressEndpointKey(ae.getAddress(), ae.getAddressType(), ae.getContextId(),
+ ae.getContextType()))
+ .setParentEndpointChoice(ae.getParentEndpointChoice())
+ .setTimestamp(ae.getTimestamp())
+ .setContextId(ae.getContextId())
+ .setContextType(ae.getContextType())
+ .setTenant(ae.getTenant());
+
+ for (EndpointAugmentor epAugmentor : epAugRegistry.getEndpointAugmentors()) {
+ try {
+ Map.Entry<Class<? extends Augmentation<AddressEndpoint>>, Augmentation<AddressEndpoint>> augmentationEntry =
+ epAugmentor.buildAddressEndpointAugmentation(ae);
+ if (augmentationEntry != null) {
+ builder.addAugmentation(augmentationEntry.getKey(), augmentationEntry.getValue());
+ }
+ } catch (Exception e) {
+ LOG.warn("AddressEndpoint Augmentation error while {} was processing {}",
+ epAugmentor.getClass().getSimpleName(), ae, e);
+ }
+ }
+ return builder;
+ }
+
+ /**
+ * Unregister an endpoint or endpoints from the registry.
+ *
+ * @param input Endpoint/endpoints to unregister
+ */
+ @Override
+ public Future<RpcResult<Void>> unregisterEndpoint(UnregisterEndpointInput input) {
+ ReadWriteTransaction t = dataProvider.newReadWriteTransaction();
+
+ List<AddressEndpointUnreg> addrEndpoints = input.getAddressEndpointUnreg();
+ for (AddressEndpointUnreg aeUnreg : nullToEmpty(addrEndpoints)) {
+ AddressEndpointKey key = new AddressEndpointKey(aeUnreg.getAddress(), aeUnreg.getAddressType(),
+ aeUnreg.getContextId(), aeUnreg.getContextType());
+ Optional<AddressEndpoint> aeOptional = DataStoreHelper.removeIfExists(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.addressEndpointIid(key), t);
+ if (aeOptional.isPresent()) {
+ deleteAddressEndpointFromParents(t, aeOptional.get());
+ deleteAddressEndpointFromChilds(t, aeOptional.get());
+ }
+ }
+
+ List<ContainmentEndpointUnreg> contEndpoints = input.getContainmentEndpointUnreg();
+ for (ContainmentEndpointUnreg ceUnreg : nullToEmpty(contEndpoints)) {
+ ContainmentEndpointKey key = new ContainmentEndpointKey(ceUnreg.getContextId(), ceUnreg.getContextType());
+ Optional<ContainmentEndpoint> ceOptional = DataStoreHelper.removeIfExists(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.containmentEndpointIid(key), t);
+ if (ceOptional.isPresent()) {
+ deleteContainmentEndpointFromChilds(t, ceOptional.get());
+ }
+ }
+
+ ListenableFuture<Void> r = t.submit();
+ return Futures.transform(r, TO_SUCCESS_RPC_RESULT);
+ }
+
+ private void deleteAddressEndpointFromParents(ReadWriteTransaction t, AddressEndpoint endpoint) {
+ ParentEndpointChoice parentEndpointChoice = endpoint.getParentEndpointChoice();
+ for (ParentEndpoint parentEndpoint : EndpointUtils.getParentEndpoints(parentEndpointChoice)) {
+ KeyedInstanceIdentifier<ChildEndpoint, ChildEndpointKey> childEp =
+ IidFactory.addressEndpointIid(EndpointUtils.createAddressEndpointKey(parentEndpoint)).child(ChildEndpoint.class,
+ new ChildEndpointKey(endpoint.getAddress(), endpoint.getAddressType(),
+ endpoint.getContextId(), endpoint.getContextType()));
+ DataStoreHelper.removeIfExists(LogicalDatastoreType.OPERATIONAL, childEp, t);
+ }
+ for (ParentContainmentEndpoint parentContEndpoint : EndpointUtils.getParentContainmentEndpoints(parentEndpointChoice)) {
+ KeyedInstanceIdentifier<ChildEndpoint, ChildEndpointKey> childEp = IidFactory
+ .containmentEndpointIid(new ContainmentEndpointKey(parentContEndpoint.getContextId(),
+ parentContEndpoint.getContextType()))
+ .child(ChildEndpoint.class, new ChildEndpointKey(endpoint.getAddress(), endpoint.getAddressType(),
+ endpoint.getContextId(), endpoint.getContextType()));
+ DataStoreHelper.removeIfExists(LogicalDatastoreType.OPERATIONAL, childEp, t);
+ }
+ }
+
+ private void deleteAddressEndpointFromChilds(ReadWriteTransaction t, AddressEndpoint endpoint) {
+ for (ChildEndpoint childEndpoint : nullToEmpty(endpoint.getChildEndpoint())) {
+ KeyedInstanceIdentifier<ParentEndpoint, ParentEndpointKey> parentEp =
+ IidFactory.addressEndpointIid(EndpointUtils.createAddressEndointKey(childEndpoint)).child(ParentEndpoint.class,
+ new ParentEndpointKey(endpoint.getAddress(), endpoint.getAddressType(),
+ endpoint.getContextId(), endpoint.getContextType()));
+ DataStoreHelper.removeIfExists(LogicalDatastoreType.OPERATIONAL, parentEp, t);
+ }
+ }
+
+ private void deleteContainmentEndpointFromChilds(ReadWriteTransaction t, ContainmentEndpoint endpoint) {
+ for (ChildEndpoint child : nullToEmpty(endpoint.getChildEndpoint())) {
+ AddressEndpointKey aeKey = new AddressEndpointKey(child.getAddress(), child.getAddressType(),
+ child.getContextId(), child.getContextType());
+ KeyedInstanceIdentifier<ParentContainmentEndpoint, ParentContainmentEndpointKey> parentEp =
+ IidFactory.addressEndpointIid(aeKey).child(ParentContainmentEndpoint.class,
+ new ParentContainmentEndpointKey(endpoint.getContextId(), endpoint.getContextType()));
+ DataStoreHelper.removeIfExists(LogicalDatastoreType.OPERATIONAL, parentEp, t);
+ }
+ }
+
+ @Override
+ public void close() throws Exception {
+ if (rpcRegistration != null) {
+ rpcRegistration.close();
+ }
+ }
+
+ private <T> List<T> nullToEmpty(@Nullable List<T> list) {
+ return list == null ? Collections.emptyList() : list;
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.base_endpoint;
+
+import java.util.Set;
+
+import org.opendaylight.groupbasedpolicy.api.EndpointAugmentor;
+import org.opendaylight.groupbasedpolicy.api.EndpointAugmentorRegistry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Sets;
+
+public class EndpointAugmentorRegistryImpl implements EndpointAugmentorRegistry {
+
+ private final static Logger LOG = LoggerFactory.getLogger(EndpointAugmentorRegistryImpl.class);
+ private final Set<EndpointAugmentor> epAugmentors = Sets.newConcurrentHashSet();
+
+ @Override
+ public void register(EndpointAugmentor endpointAugmentor) {
+ if (epAugmentors.add(endpointAugmentor)) {
+ LOG.info("Registered EndpointAugmentor - {}", endpointAugmentor.getClass().getSimpleName());
+ }
+ }
+
+ @Override
+ public void unregister(EndpointAugmentor endpointAugmentor) {
+ if (epAugmentors.remove(endpointAugmentor)) {
+ LOG.info("Unegistered EndpointAugmentor - {}", endpointAugmentor.getClass().getSimpleName());
+ }
+ }
+
+ public Set<EndpointAugmentor> getEndpointAugmentors() {
+ return epAugmentors;
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.base_endpoint;
+
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
+import org.opendaylight.groupbasedpolicy.util.EndpointUtils;
+import org.opendaylight.groupbasedpolicy.util.IidFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpointKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.ParentEndpointChoice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.containment.endpoint._case.ParentContainmentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.containment.endpoint._case.ParentContainmentEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointReg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointRegKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointReg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointRegKey;
+import org.opendaylight.yangtools.yang.common.RpcError;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+public class RegisterEndpointInputVerificator {
+
+ private static final Logger LOG = LoggerFactory.getLogger(RegisterEndpointInputVerificator.class);
+
+ public static ListenableFuture<RpcResult<Void>> verifyRegisterEndpointInput(RegisterEndpointInput input,
+ ReadTransaction rTx) {
+ ListenableFuture<RpcResult<Void>> result;
+ List<AddressEndpointReg> addressEndpointRegs = nullToEmpty(input.getAddressEndpointReg());
+ List<ContainmentEndpointReg> containmentEndpointRegs = nullToEmpty(input.getContainmentEndpointReg());
+
+ for (AddressEndpointReg addressEndpointReg : addressEndpointRegs) {
+ result = verifyAddressEndpointChilds(addressEndpointRegs, addressEndpointReg, rTx);
+ if (result != null) {
+ return result;
+ }
+
+ result = verifyAddressEndpointParents(addressEndpointRegs, containmentEndpointRegs, addressEndpointReg,
+ rTx);
+ if (result != null) {
+ return result;
+ }
+ }
+
+ result = verifyContainmentEndpointChilds(addressEndpointRegs, containmentEndpointRegs, rTx);
+ if (result != null) {
+ return result;
+ }
+
+ return null;
+ }
+
+ private static ListenableFuture<RpcResult<Void>> verifyAddressEndpointChilds(
+ List<AddressEndpointReg> addressEndpointRegs, AddressEndpointReg addressEndpointReg, ReadTransaction rTx) {
+ for (ChildEndpoint childEndpoint : nullToEmpty(addressEndpointReg.getChildEndpoint())) {
+ AddressEndpointRegKey key = new AddressEndpointRegKey(childEndpoint.getAddress(),
+ childEndpoint.getAddressType(), childEndpoint.getContextId(), childEndpoint.getContextType());
+ AddressEndpointReg addressEndpointRegChild = findAddressEndpointReg(key, addressEndpointRegs);
+ if (addressEndpointRegChild == null) {
+ Optional<AddressEndpoint> addressEndpointOptional =
+ DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.addressEndpointIid(new AddressEndpointKey(key.getAddress(),
+ key.getAddressType(), key.getContextId(), key.getContextType())),
+ rTx);
+ if (!addressEndpointOptional.isPresent()) {
+ LOG.debug("Child AddressEndpoint {} does not exist in RPC and DS.", childEndpoint.getKey());
+ return buildFailFeature(String.format("Child AddressEndpoint %s does not exist in RPC and DS.",
+ childEndpoint.getKey()));
+ }
+ } else {
+ ParentEndpointChoice parentEndpointChoice = addressEndpointRegChild.getParentEndpointChoice();
+ List<ParentEndpoint> parentEndpoints = EndpointUtils.getParentEndpoints(parentEndpointChoice);
+ if (!parentEndpoints.contains(new ParentEndpointBuilder(addressEndpointReg).build())) {
+ LOG.debug("Child AddressEndpoint {} does not contain a parent AddressEndpoint {}.\nChild: {}",
+ addressEndpointRegChild.getKey(), addressEndpointReg.getKey(), addressEndpointRegChild);
+ return buildFailFeature(String.format(
+ "Child AddressEndpoint does not contain a parent AddressEndpoint."
+ + "\nChild AddressEndpoint: %s" + "\nParent AddressEndpoint: %s",
+ addressEndpointRegChild.getKey(), addressEndpointReg.getKey()));
+ }
+ }
+ }
+ return null;
+ }
+
+ private static ListenableFuture<RpcResult<Void>> verifyAddressEndpointParents(
+ List<AddressEndpointReg> addressEndpointRegs, List<ContainmentEndpointReg> containmentEndpointRegs,
+ AddressEndpointReg addressEndpointReg, ReadTransaction rTx) {
+ ParentEndpointChoice parentEndpointChoice = addressEndpointReg.getParentEndpointChoice();
+ for (ParentEndpoint parentEndpoint : EndpointUtils.getParentEndpoints(parentEndpointChoice)) {
+ AddressEndpointRegKey key = new AddressEndpointRegKey(parentEndpoint.getAddress(),
+ parentEndpoint.getAddressType(), parentEndpoint.getContextId(), parentEndpoint.getContextType());
+ AddressEndpointReg addressEndpointRegParent = findAddressEndpointReg(key, addressEndpointRegs);
+ if (addressEndpointRegParent == null) {
+ Optional<AddressEndpoint> addressEndpointOptional =
+ DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.addressEndpointIid(new AddressEndpointKey(key.getAddress(),
+ key.getAddressType(), key.getContextId(), key.getContextType())),
+ rTx);
+ if (!addressEndpointOptional.isPresent()) {
+ LOG.debug("Parent AddressEndpoint {} does not exist in RPC and DS.", parentEndpoint.getKey());
+ return buildFailFeature(String.format("Parent AddressEndpoint %s does not exist in RPC and DS.",
+ parentEndpoint.getKey()));
+ }
+ } else {
+ List<ChildEndpoint> childEndpoints = addressEndpointRegParent.getChildEndpoint();
+ if (!nullToEmpty(childEndpoints).contains(new ChildEndpointBuilder(addressEndpointReg).build())) {
+ LOG.debug("Parent AddressEndpoint {} does not contain a child AddressEndpoint {}.\nParent: {}",
+ addressEndpointRegParent.getKey(), addressEndpointReg.getKey(), addressEndpointRegParent);
+ return buildFailFeature(String.format(
+ "Parent AddressEndpoint does not contain a child AddressEndpoint."
+ + "\nParent AddressEndpoint: %s" + "\nChild AddressEndpoint: %s",
+ addressEndpointRegParent.getKey(), addressEndpointReg.getKey()));
+ }
+ }
+ }
+ for (ParentContainmentEndpoint parentEndpoint : EndpointUtils
+ .getParentContainmentEndpoints(parentEndpointChoice)) {
+ ContainmentEndpointRegKey key =
+ new ContainmentEndpointRegKey(parentEndpoint.getContextId(), parentEndpoint.getContextType());
+ ContainmentEndpointReg containmentEndpointRegParent =
+ findContainmentEndpointReg(key, containmentEndpointRegs);
+ if (containmentEndpointRegParent == null) {
+ Optional<ContainmentEndpoint> containmentEndpointOptional =
+ DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, IidFactory.containmentEndpointIid(
+ new ContainmentEndpointKey(key.getContextId(), key.getContextType())), rTx);
+ if (!containmentEndpointOptional.isPresent()) {
+ LOG.debug("Parent ContainmentEndpoint {} does not exist in RPC and DS.", parentEndpoint.getKey());
+ return buildFailFeature(String.format("Parent ContainmentEndpoint %s does not exist in RPC and DS.",
+ parentEndpoint.getKey()));
+ }
+ } else {
+ List<ChildEndpoint> childEndpoints = containmentEndpointRegParent.getChildEndpoint();
+ if (!nullToEmpty(childEndpoints).contains(new ChildEndpointBuilder(addressEndpointReg).build())) {
+ LOG.debug("Parent ContainmentEndpoint {} does not contain a child AddressEndpoint {}.\nParent: {}",
+ containmentEndpointRegParent.getKey(), addressEndpointReg.getKey(),
+ containmentEndpointRegParent);
+ return buildFailFeature(String.format(
+ "Parent ContainmentEndpoint does not contain a child AddressEndpoint."
+ + "\nParent ContainmentEndpoint: %s" + "\nChild AddressEndpoint: %s",
+ containmentEndpointRegParent.getKey(), addressEndpointReg.getKey()));
+ }
+ }
+ }
+ return null;
+ }
+
+ private static ListenableFuture<RpcResult<Void>> verifyContainmentEndpointChilds(
+ List<AddressEndpointReg> addressEndpointRegs, List<ContainmentEndpointReg> containmentEndpointRegs,
+ ReadTransaction rTx) {
+ for (ContainmentEndpointReg containmentEndpointReg : nullToEmpty(containmentEndpointRegs)) {
+ for (ChildEndpoint childEndpoint : nullToEmpty(containmentEndpointReg.getChildEndpoint())) {
+ AddressEndpointRegKey key = new AddressEndpointRegKey(childEndpoint.getAddress(),
+ childEndpoint.getAddressType(), childEndpoint.getContextId(), childEndpoint.getContextType());
+ AddressEndpointReg addressEndpointRegChild = findAddressEndpointReg(key, addressEndpointRegs);
+ if (addressEndpointRegChild == null) {
+ Optional<AddressEndpoint> addressEndpointOptional =
+ DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.addressEndpointIid(new AddressEndpointKey(key.getAddress(),
+ key.getAddressType(), key.getContextId(), key.getContextType())),
+ rTx);
+ if (!addressEndpointOptional.isPresent()) {
+ LOG.debug("Child AddressEndpoint {} does not exist in RPC and DS.", childEndpoint.getKey());
+ return buildFailFeature(String.format("Child AddressEndpoint %s does not exist in RPC and DS.",
+ childEndpoint.getKey()));
+ }
+ } else {
+ List<ParentContainmentEndpoint> parentContainmentEndpoints = EndpointUtils
+ .getParentContainmentEndpoints(addressEndpointRegChild.getParentEndpointChoice());
+ if (!parentContainmentEndpoints
+ .contains(new ParentContainmentEndpointBuilder(containmentEndpointReg).build())) {
+ LOG.debug(
+ "Child AddressEndpoint {} does not contain a parent ContainmentEndpoint {}.\nChild: {}",
+ addressEndpointRegChild.getKey(), containmentEndpointReg.getKey(),
+ addressEndpointRegChild);
+ return buildFailFeature(String.format(
+ "Child AddressEndpoint does not contain a parent ContainmentEndpoint."
+ + "\nChild AddressEndpoint: %s" + "\nParent ContainmentEndpoint: %s",
+ addressEndpointRegChild.getKey(), containmentEndpointReg.getKey()));
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ private static AddressEndpointReg findAddressEndpointReg(AddressEndpointRegKey key,
+ List<AddressEndpointReg> addressEndpointRegs) {
+ for (AddressEndpointReg addressEndpointReg : addressEndpointRegs) {
+ if (addressEndpointReg.getKey().equals(key)) {
+ return addressEndpointReg;
+ }
+ }
+ return null;
+ }
+
+ private static ContainmentEndpointReg findContainmentEndpointReg(ContainmentEndpointRegKey key,
+ List<ContainmentEndpointReg> addressEndpointRegs) {
+ for (ContainmentEndpointReg containmentEndpointReg : addressEndpointRegs) {
+ if (containmentEndpointReg.getKey().equals(key)) {
+ return containmentEndpointReg;
+ }
+ }
+ return null;
+ }
+
+ private static ListenableFuture<RpcResult<Void>> buildFailFeature(String message) {
+ return Futures
+ .immediateFuture(RpcResultBuilder.<Void>failed().withError(RpcError.ErrorType.PROTOCOL, message).build());
+ }
+
+ private static <T> List<T> nullToEmpty(@Nullable List<T> list) {
+ return list == null ? Collections.emptyList() : list;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.forwarding;
+
+import java.util.Set;
+
+import org.opendaylight.groupbasedpolicy.api.NetworkDomainAugmentor;
+import org.opendaylight.groupbasedpolicy.api.NetworkDomainAugmentorRegistry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Sets;
+
+public class NetworkDomainAugmentorRegistryImpl implements NetworkDomainAugmentorRegistry {
+
+ private final static Logger LOG = LoggerFactory.getLogger(NetworkDomainAugmentorRegistryImpl.class);
+ private final Set<NetworkDomainAugmentor> augmentors = Sets.newConcurrentHashSet();
+
+ @Override
+ public void register(NetworkDomainAugmentor netDomainAugmentor) {
+ if (augmentors.add(netDomainAugmentor)) {
+ LOG.info("Registered NetworkDomainAugmentor - {}", netDomainAugmentor.getClass().getSimpleName());
+ }
+ }
+
+ @Override
+ public void unregister(NetworkDomainAugmentor netDomainAugmentor) {
+ if (augmentors.remove(netDomainAugmentor)) {
+ LOG.info("Unegistered NetworkDomainAugmentor - {}", netDomainAugmentor.getClass().getSimpleName());
+ }
+ }
+
+ public Set<NetworkDomainAugmentor> getEndpointAugmentors() {
+ return augmentors;
+ }
+
+}
package org.opendaylight.groupbasedpolicy.renderer;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.opendaylight.groupbasedpolicy.api.NetworkDomainAugmentor;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoint.locations.AddressEndpointLocation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoint.locations.ContainmentEndpointLocation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpointKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.Forwarding;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.ForwardingByTenant;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.ForwardingContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.NetworkDomain;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RendererName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.peer.endpoints.PeerEndpointKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.Endpoints;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.EndpointsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.ForwardingContexts;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.ForwardingContextsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererEndpoints;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererEndpointsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererForwarding;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererForwardingBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RuleGroups;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RuleGroupsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.ContainmentEndpointWithLocation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.ContainmentEndpointWithLocationBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.forwarding.contexts.ForwardingContextByTenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.forwarding.contexts.ForwardingContextByTenantBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerExternalEndpointWithPolicy;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerExternalEndpointWithPolicyBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerExternalEndpointWithPolicyKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.RendererForwardingByTenant;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.RendererForwardingByTenantBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.renderer.forwarding.by.tenant.RendererForwardingContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.renderer.forwarding.by.tenant.RendererForwardingContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.renderer.forwarding.by.tenant.RendererNetworkDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.renderer.forwarding.by.tenant.RendererNetworkDomainBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroupBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.resolved.policy.policy.rule.group.with.endpoint.constraints.PolicyRuleGroup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.resolved.policy.policy.rule.group.with.endpoint.constraints.PolicyRuleGroupKey;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import com.google.common.collect.FluentIterable;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableTable;
.build();
}
- // TODO this copies entire Forwarding to ForwardingContexts - it could copy only forwarding used
+ // TODO this copies entire Forwarding to RendererForwarding - it could copy only forwarding used
// in EPs (renderer EPs + peers)
- public ForwardingContexts buildForwardingContexts(Forwarding forwarding) {
- List<ForwardingContextByTenant> forwardingContextByTenant =
- resolveForwardingContextByTenant(forwarding.getForwardingByTenant());
- return new ForwardingContextsBuilder().setForwardingContextByTenant(forwardingContextByTenant).build();
+ public RendererForwarding buildRendererForwarding(Forwarding forwarding, Set<NetworkDomainAugmentor> augmentors) {
+ List<RendererForwardingByTenant> forwardingContextByTenant =
+ resolveForwardingContextByTenant(forwarding.getForwardingByTenant(), augmentors);
+ return new RendererForwardingBuilder().setRendererForwardingByTenant(forwardingContextByTenant).build();
}
- private static List<ForwardingContextByTenant> resolveForwardingContextByTenant(
- List<ForwardingByTenant> forwardingByTenant) {
- List<ForwardingContextByTenant> result = new ArrayList<>();
+ private static List<RendererForwardingByTenant> resolveForwardingContextByTenant(
+ List<ForwardingByTenant> forwardingByTenant, Set<NetworkDomainAugmentor> augmentors) {
+ List<RendererForwardingByTenant> result = new ArrayList<>();
for (ForwardingByTenant fwdByTenant : forwardingByTenant) {
- result.add(new ForwardingContextByTenantBuilder(fwdByTenant).build());
+ result.add(resolveRendererForwardingByTenant(fwdByTenant, augmentors));
}
return result;
}
+ private static RendererForwardingByTenant resolveRendererForwardingByTenant(ForwardingByTenant fwdByTenant,
+ Set<NetworkDomainAugmentor> augmentors) {
+ List<RendererForwardingContext> rendererForwardingContexts =
+ resolveRendererForwardingContexts(fwdByTenant.getForwardingContext());
+ List<RendererNetworkDomain> rendererNetworkDomains =
+ resolveRendererNetworkDomains(fwdByTenant.getNetworkDomain(), augmentors);
+ return new RendererForwardingByTenantBuilder().setTenantId(fwdByTenant.getTenantId())
+ .setRendererForwardingContext(rendererForwardingContexts)
+ .setRendererNetworkDomain(rendererNetworkDomains)
+ .build();
+ }
+
+ private static List<RendererForwardingContext> resolveRendererForwardingContexts(
+ @Nullable List<ForwardingContext> fwdCtx) {
+ if (fwdCtx == null) {
+ return Collections.emptyList();
+ }
+ return FluentIterable.from(fwdCtx).transform(new Function<ForwardingContext, RendererForwardingContext>() {
+
+ @Override
+ public RendererForwardingContext apply(ForwardingContext input) {
+ return new RendererForwardingContextBuilder().setContextId(input.getContextId())
+ .setContextType(input.getContextType())
+ .setName(input.getName())
+ .setParent(input.getParent())
+ .build();
+ }
+ }).toList();
+ }
+
+ private static List<RendererNetworkDomain> resolveRendererNetworkDomains(@Nullable List<NetworkDomain> netDomains,
+ Set<NetworkDomainAugmentor> augmentors) {
+ if (netDomains == null) {
+ return Collections.emptyList();
+ }
+ return FluentIterable.from(netDomains).transform(new Function<NetworkDomain, RendererNetworkDomain>() {
+
+ @Override
+ public RendererNetworkDomain apply(NetworkDomain input) {
+ RendererNetworkDomainBuilder rendererNetworkDomainBuilder =
+ new RendererNetworkDomainBuilder().setNetworkDomainId(input.getNetworkDomainId())
+ .setNetworkDomainType(input.getNetworkDomainType())
+ .setName(input.getName())
+ .setParent(input.getParent());
+ for (NetworkDomainAugmentor augmentor : augmentors) {
+ Entry<Class<? extends Augmentation<RendererNetworkDomain>>, Augmentation<RendererNetworkDomain>> networkDomainAugmentation =
+ augmentor.buildRendererNetworkDomainAugmentation(input);
+ if (networkDomainAugmentation != null) {
+ rendererNetworkDomainBuilder.addAugmentation(networkDomainAugmentation.getKey(),
+ networkDomainAugmentation.getValue());
+ }
+ }
+ return rendererNetworkDomainBuilder.build();
+ }
+ }).toList();
+ }
+
}
import org.opendaylight.groupbasedpolicy.dto.ConsEpgKey;
import org.opendaylight.groupbasedpolicy.dto.EpgKeyDto;
import org.opendaylight.groupbasedpolicy.dto.ProvEpgKey;
+import org.opendaylight.groupbasedpolicy.forwarding.NetworkDomainAugmentorRegistryImpl;
import org.opendaylight.groupbasedpolicy.renderer.listener.EndpointLocationsListener;
import org.opendaylight.groupbasedpolicy.renderer.listener.EndpointsListener;
import org.opendaylight.groupbasedpolicy.renderer.listener.ForwardingListener;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.Configuration;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.ConfigurationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.Status;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.ForwardingContexts;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererEndpoints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererForwarding;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RuleGroups;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.ResolvedPolicies;
private static long version = 0;
private final DataBroker dataProvider;
+ private final NetworkDomainAugmentorRegistryImpl netDomainAugmentorRegistry;
private final Set<RendererName> processingRenderers = new HashSet<>();
private Map<InstanceIdentifier<?>, RendererName> rendererByNode = new HashMap<>();
private ResolvedPolicyInfo policyInfo;
private final ForwardingListener forwardingListener;
private final RenderersListener renderersListener;
- public RendererManager(DataBroker dataProvider) {
+ public RendererManager(DataBroker dataProvider, NetworkDomainAugmentorRegistryImpl netDomainAugmentorRegistry) {
this.dataProvider = checkNotNull(dataProvider);
+ this.netDomainAugmentorRegistry = checkNotNull(netDomainAugmentorRegistry);
endpointsListener = new EndpointsListener(this, dataProvider);
endpointLocationsListener = new EndpointLocationsListener(this, dataProvider);
resolvedPoliciesListener = new ResolvedPoliciesListener(this, dataProvider);
RuleGroups ruleGroups = rendererPolicyBuilder.buildRuluGroups(policyInfo);
configBuilder.setRuleGroups(ruleGroups);
- ForwardingContexts forwardingContexts = rendererPolicyBuilder.buildForwardingContexts(forwarding);
- configBuilder.setForwardingContexts(forwardingContexts);
+ RendererForwarding rendererForwarding = rendererPolicyBuilder.buildRendererForwarding(forwarding,
+ netDomainAugmentorRegistry.getEndpointAugmentors());
+ configBuilder.setRendererForwarding(rendererForwarding);
return Optional.of(configBuilder.build());
}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.util;
+
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.ParentEndpointChoice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentContainmentEndpointCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentEndpointCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.containment.endpoint._case.ParentContainmentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpoint;
+
+public class EndpointUtils {
+
+ public static AddressEndpointKey createAddressEndointKey(ChildEndpoint child) {
+ return new AddressEndpointKey(child.getAddress(), child.getAddressType(), child.getContextId(),
+ child.getContextType());
+ }
+
+ public static AddressEndpointKey createAddressEndpointKey(ParentEndpoint parent) {
+ return new AddressEndpointKey(parent.getAddress(), parent.getAddressType(), parent.getContextId(),
+ parent.getContextType());
+ }
+
+ public static @Nonnull List<ParentContainmentEndpoint> getParentContainmentEndpoints(
+ @Nullable ParentEndpointChoice parentEndpointChoice) {
+ if (parentEndpointChoice instanceof ParentContainmentEndpointCase) {
+ ParentContainmentEndpointCase parentCeCase = (ParentContainmentEndpointCase) parentEndpointChoice;
+ List<ParentContainmentEndpoint> parentContainmentEndpoints = parentCeCase.getParentContainmentEndpoint();
+ if (parentContainmentEndpoints != null) {
+ return parentContainmentEndpoints;
+ }
+ }
+ return Collections.emptyList();
+ }
+
+ public static @Nonnull List<ParentEndpoint> getParentEndpoints(
+ @Nullable ParentEndpointChoice parentEndpointChoice) {
+ if (parentEndpointChoice instanceof ParentEndpointCase) {
+ ParentEndpointCase parentEpCase = (ParentEndpointCase) parentEndpointChoice;
+ List<ParentEndpoint> parentEndpoints = parentEpCase.getParentEndpoint();
+ if (parentEndpoints != null) {
+ return parentEndpoints;
+ }
+ }
+ return Collections.emptyList();
+ }
+
+}
.build();
}
- public static InstanceIdentifier<ParentContainmentEndpoint> parentContainmentEndpointIid(
- AddressEndpointKey addressEndpointKey, ParentContainmentEndpointKey parentContainmentEndpointKey) {
- return InstanceIdentifier
- .builder(
- org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.Endpoints.class)
- .child(AddressEndpoints.class)
- .child(AddressEndpoint.class, addressEndpointKey)
- .child(ParentContainmentEndpoint.class, parentContainmentEndpointKey)
- .build();
- }
-
public static InstanceIdentifier<AddressEndpointLocation> addressEndpointLocationIid(AddressEndpointLocationKey addrEndpointLocationKey) {
return InstanceIdentifier.builder(EndpointLocations.class)
.child(AddressEndpointLocation.class, addrEndpointLocationKey)
config:java-class "org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry";
}
- identity base-endpoint-renderer-augmentation-registry {
+ identity domain-specific-registry {
description
- "base-endpoint-renderer-augmentation-registry service definition";
+ "domain-specific-registry service definition";
base "config:service-type";
- config:java-class "org.opendaylight.groupbasedpolicy.api.BaseEndpointRendererAugmentationRegistry";
+ config:java-class "org.opendaylight.groupbasedpolicy.api.DomainSpecificRegistry";
}
identity policy-validator-registry {
config:java-name-prefix EpRendererAugmentationRegistryImpl;
}
- identity base-endpoint-renderer-augmentation-registry-impl {
+ identity domain-specific-registry-impl {
base "config:module-type";
- config:provided-service base-endpoint-renderer-augmentation-registry;
- config:java-name-prefix BaseEndpointRendererAugmentationRegistryImpl;
+ config:provided-service domain-specific-registry;
+ config:java-name-prefix DomainSpecificRegistry;
}
identity statistics-manager-impl {
}
}
}
- case base-endpoint-renderer-augmentation-registry-impl {
- when "/config:modules/config:module/config:type = 'base-endpoint-renderer-augmentation-registry-impl'";
+ case domain-specific-registry-impl {
+ when "/config:modules/config:module/config:type = 'domain-specific-registry-impl'";
//wires in the data-broker service
container data-broker {
}
container endpoint-locations {
+ config false;
+
list address-endpoint-location {
key "context-type context-id address-type address";
uses address-endpoint-key;
}
}
- grouping forwarding-with-tenant-fields {
- leaf tenant-id {
- type gbp-common:tenant-id;
- description
- "The tenant with which forwarding-context is associated";
- }
-
- list forwarding-context {
- key "context-type context-id";
- uses context-key;
-
- uses forwarding-fields;
- }
-
- list network-domain {
- key "network-domain-type network-domain-id";
- uses network-domain-key;
-
- uses forwarding-fields;
- description "Network domain can be augmented with further information.";
- }
- }
-
container forwarding {
list forwarding-by-tenant {
key tenant-id;
- uses forwarding-with-tenant-fields;
+ leaf tenant-id {
+ type gbp-common:tenant-id;
+ description
+ "The tenant with which forwarding-context is associated";
+ }
+
+ list forwarding-context {
+ key "context-type context-id";
+ uses context-key;
+
+ uses forwarding-fields;
+ }
+
+ list network-domain {
+ key "network-domain-type network-domain-id";
+ uses network-domain-key;
+
+ uses forwarding-fields;
+ description "Network domain can be augmented with further information.";
+ }
}
}
prefix "l2-l3-forwarding";
import forwarding { prefix forwarding; revision-date 2016-04-27; }
+ import renderer { prefix renderer; revision-date 2015-11-03; }
import ietf-inet-types { prefix inet; revision-date 2010-09-24; }
import yang-ext {prefix ext; revision-date 2013-07-09;}
base forwarding:address-type;
}
- grouping subnet-fields {
- leaf ip-prefix {
- description "The IP prefix that defines the subnet";
- type inet:ip-prefix;
- }
- leaf virtual-router-ip {
- description
- "IP address to use for a virtual gateway router
- for the subnet, if desired.";
- type inet:ip-address;
- }
- list gateways {
- description
- "External gateways for subnets we serve,
- includes prefixes for static routing";
- key "gateway";
- leaf gateway {
+ grouping has-subnet {
+ container subnet {
+ when "../forwarding:network-domain-type = 'l2-l3-forwarding:subnet'";
+ leaf ip-prefix {
+ description "The IP prefix that defines the subnet";
+ type inet:ip-prefix;
+ }
+ leaf virtual-router-ip {
+ description
+ "IP address to use for a virtual gateway router
+ for the subnet, if desired.";
type inet:ip-address;
}
- list prefixes {
- key "prefix";
- leaf prefix {
- type inet:ip-prefix;
+ list gateways {
+ description
+ "External gateways for subnets we serve,
+ includes prefixes for static routing";
+ key "gateway";
+ leaf gateway {
+ type inet:ip-address;
+ }
+ list prefixes {
+ key "prefix";
+ leaf prefix {
+ type inet:ip-prefix;
+ }
}
}
}
augment "/forwarding:forwarding/forwarding:forwarding-by-tenant/forwarding:network-domain" {
ext:augment-identifier "subnet-augment-forwarding";
- container subnet {
- when "../forwarding:network-domain-type = 'l2-l3-forwarding:subnet'";
- uses subnet-fields;
- }
+ uses has-subnet;
}
- // TODO add augment to renderer.yang
+ augment "/renderer:renderers/renderer:renderer/renderer:renderer-policy/renderer:configuration/renderer:renderer-forwarding/renderer:renderer-forwarding-by-tenant/renderer:renderer-network-domain" {
+ ext:augment-identifier "subnet-augment-renderer";
+ uses has-subnet;
+ }
}
}
}
- container forwarding-contexts {
- list forwarding-context-by-tenant {
+ container renderer-forwarding {
+ list renderer-forwarding-by-tenant {
min-elements 1;
key tenant-id;
- uses forwarding:forwarding-with-tenant-fields;
+ leaf tenant-id {
+ type gbp-common:tenant-id;
+ description
+ "The tenant with which forwarding is associated";
+ }
+
+ list renderer-forwarding-context {
+ key "context-type context-id";
+ uses forwarding:context-key;
+
+ uses forwarding:forwarding-fields;
+ }
+
+ list renderer-network-domain {
+ key "network-domain-type network-domain-id";
+ uses forwarding:network-domain-key;
+
+ uses forwarding:forwarding-fields;
+ description "Renderer network domain can be augmented with further information.";
+ }
}
}
}
+++ /dev/null
-/*
- * Copyright (c) 2016 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.base_endpoint;
-
-import static org.mockito.Mockito.mock;
-
-import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableList;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.groupbasedpolicy.api.BaseEndpointRendererAugmentation;
-import org.opendaylight.groupbasedpolicy.test.CustomDataBrokerTest;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainmentBuilder;
-import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
-import org.opendaylight.groupbasedpolicy.util.IidFactory;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.Endpoints;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.network.containment.containment.NetworkDomainContainment;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.network.containment.containment.NetworkDomainContainmentBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.AddressEndpoints;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.ContainmentEndpoints;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpointBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpointKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpointBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.ParentEndpointChoice;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentContainmentEndpointCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentEndpointCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentEndpointCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpointBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointRegBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointReg;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointRegBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.AddressEndpointUnregBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.ContainmentEndpointUnreg;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.ContainmentEndpointUnregBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L3Context;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.MacAddressType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.Subnet;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.Future;
-
-import javax.annotation.Nonnull;
-
-public class BaseEndpointRpcRegistryTest extends CustomDataBrokerTest {
-
- private static final String MAC_ADDRESS = "01:23:45:67:89:AB";
- private static final String IP_ADDRESS = "192.168.100.1/24";
- private static final String TENANT = "admin";
- private static final String DOMAIN = "test.domain";
- private static final String CONTEXT_ID = "testContext";
- private static final long timestamp = 1234567890L;
-
- private enum AddressEndpointRegistration {
- CHILD, PARENT, BOTH, NONE
- }
- private enum AddressEndpointType {
- L2, L3, BOTH, NONE
- }
-
- private DataBroker dataProvider;
- private BaseEndpointRendererAugmentation baseEndpointRendererAugmentation;
- private BaseEndpointRpcRegistry baseEndpointRpcRegistry;
- private AddressEndpoint basel2Ep;
- private AddressEndpoint basel3Ep;
- private ContainmentEndpoint baseContainmentEp;
- private ParentEndpoint basel3Parent;
- private ChildEndpoint basel2Child;
-
- @Nonnull
- @Override
- public Collection<Class<?>> getClassesFromModules() {
- return ImmutableList.of(Endpoints.class, AddressEndpoints.class, ContainmentEndpoints.class,
- MacAddressType.class, IpPrefixType.class);
- }
-
- @Before
- public void init() {
- dataProvider = getDataBroker();
- baseEndpointRendererAugmentation = mock(BaseEndpointRendererAugmentation.class);
- RpcProviderRegistry rpcRegistry = mock(RpcProviderRegistry.class);
-
- baseEndpointRpcRegistry = new BaseEndpointRpcRegistry(dataProvider, rpcRegistry);
-
- NetworkDomainContainment
- networkDomainContainment =
- new NetworkDomainContainmentBuilder().setNetworkDomainId(new NetworkDomainId(DOMAIN)).setNetworkDomainType(
- Subnet.class).build();
-
- basel3Parent = new ParentEndpointBuilder().setAddress(IP_ADDRESS)
- .setAddressType(IpPrefixType.class)
- .setContextId(new ContextId(CONTEXT_ID))
- .setContextType(L3Context.class)
- .build();
-
- basel2Child = new ChildEndpointBuilder().setAddress(MAC_ADDRESS)
- .setAddressType(MacAddressType.class)
- .setContextId(new ContextId(CONTEXT_ID))
- .setContextType(L2FloodDomain.class)
- .build();
-
- basel2Ep = new AddressEndpointBuilder().setTimestamp(timestamp)
- .setContextId(new ContextId(CONTEXT_ID))
- .setContextType(L2FloodDomain.class)
- .setTenant(new TenantId(TENANT))
- .setAddress(MAC_ADDRESS)
- .setAddressType(MacAddressType.class)
- .setNetworkContainment(new NetworkContainmentBuilder().setContainment(networkDomainContainment).build())
- .setTimestamp(timestamp)
- .setParentEndpointChoice(
- new ParentEndpointCaseBuilder().setParentEndpoint(Collections.singletonList(basel3Parent)).build())
- .build();
-
- basel3Ep = new AddressEndpointBuilder().setTimestamp(timestamp)
- .setContextId(new ContextId(CONTEXT_ID))
- .setContextType(L3Context.class)
- .setTenant(new TenantId(TENANT))
- .setAddress(IP_ADDRESS)
- .setAddressType(IpPrefixType.class)
- .setNetworkContainment(new NetworkContainmentBuilder().setContainment(networkDomainContainment).build())
- .setTimestamp(timestamp)
- .setChildEndpoint(Collections.singletonList(basel2Child))
- .build();
-
- baseContainmentEp = new ContainmentEndpointBuilder().setTimestamp(timestamp)
- .setContextId(new ContextId(CONTEXT_ID))
- .setContextType(L2FloodDomain.class)
- .setTenant(new TenantId(TENANT))
- .setNetworkContainment(new NetworkContainmentBuilder().setContainment(networkDomainContainment).build())
- .setChildEndpoint(Collections.singletonList(basel2Child))
- .build();
- }
-
- @Test
- public void testConstructor() throws Exception {
- RpcProviderRegistry rpcRegistry = mock(RpcProviderRegistry.class);
- BaseEndpointRpcRegistry registry = new BaseEndpointRpcRegistry(dataProvider, rpcRegistry);
- registry.close();
- }
-
- @Test
- public void testRegister() throws Exception {
- baseEndpointRpcRegistry.register(baseEndpointRendererAugmentation);
- Assert.assertEquals(1, BaseEndpointRpcRegistry.registeredRenderers.size());
-
- baseEndpointRpcRegistry.unregister(baseEndpointRendererAugmentation);
- Assert.assertEquals(0, BaseEndpointRpcRegistry.registeredRenderers.size());
- }
-
- @Test
- public void testRegisterEndpoint() throws Exception {
- RegisterEndpointInput input =
- createRegisterEndpointInputVariablesForTest(AddressEndpointRegistration.BOTH, AddressEndpointType.BOTH, true);
-
- baseEndpointRpcRegistry.registerEndpoint(input);
-
- ReadOnlyTransaction transaction = dataProvider.newReadOnlyTransaction();
-
- AddressEndpointKey key = new AddressEndpointKey(MAC_ADDRESS, MacAddressType.class, new ContextId(CONTEXT_ID),
- L2FloodDomain.class);
- Optional<AddressEndpoint> addressEndpointL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), transaction);
-
- Assert.assertTrue(addressEndpointL2.isPresent());
-
- if (addressEndpointL2.isPresent()) {
- Assert.assertEquals(basel2Ep, addressEndpointL2.get());
- }
-
- key = new AddressEndpointKey(IP_ADDRESS, IpPrefixType.class, new ContextId(CONTEXT_ID), L3Context.class);
-
- Optional<AddressEndpoint> addressEndpointL3 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), transaction);
-
- Assert.assertTrue(addressEndpointL3.isPresent());
-
- if (addressEndpointL3.isPresent()) {
- Assert.assertEquals(basel3Ep, addressEndpointL3.get());
- }
-
- ContainmentEndpointKey containmentEndpointKey =
- new ContainmentEndpointKey(new ContextId(CONTEXT_ID), L2FloodDomain.class);
-
- Optional<ContainmentEndpoint> ContainmentEndpoint = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.containmentEndpointIid(containmentEndpointKey), transaction);
-
- Assert.assertTrue(ContainmentEndpoint.isPresent());
-
- if (ContainmentEndpoint.isPresent()) {
- Assert.assertEquals(baseContainmentEp, ContainmentEndpoint.get());
- }
- }
-
- @Test
- public void testRegisterEndpointWithParentUpdate() throws Exception {
- setupBasicDataStore();
- RegisterEndpointInput input =
- createRegisterEndpointInputVariablesForTest(AddressEndpointRegistration.BOTH, AddressEndpointType.L2, true);
-
- baseEndpointRpcRegistry.registerEndpoint(input);
-
- AddressEndpointKey key = new AddressEndpointKey(MAC_ADDRESS, MacAddressType.class, new ContextId(CONTEXT_ID),
- L2FloodDomain.class);
- Optional<AddressEndpoint> addressEndpointL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(addressEndpointL2.isPresent());
-
- if (addressEndpointL2.isPresent()) {
- ParentEndpointCase parentEndpointCase =
- (ParentEndpointCase) addressEndpointL2.get().getParentEndpointChoice();
- List<ParentEndpoint> parentEndpoints = parentEndpointCase.getParentEndpoint();
- Assert.assertEquals(parentEndpoints.size(), 1);
- }
-
- key = new AddressEndpointKey(IP_ADDRESS, IpPrefixType.class, new ContextId(CONTEXT_ID), L3Context.class);
-
- Optional<AddressEndpoint> addressEndpointL3 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(addressEndpointL3.isPresent());
-
- if (addressEndpointL3.isPresent()) {
- Assert.assertEquals(addressEndpointL3.get().getChildEndpoint().size(), 1);
- }
- }
-
- @Test
- public void testRegisterEndpointWithParentUpdateFail() throws Exception {
- RegisterEndpointInput input = createRegisterEndpointInputVariablesForTest(AddressEndpointRegistration.BOTH,
- AddressEndpointType.L2, true);
-
- Future<RpcResult<Void>> rpcResultFuture = baseEndpointRpcRegistry.registerEndpoint(input);
-
- Assert.assertFalse(rpcResultFuture.get().isSuccessful());
- Assert.assertNotNull(rpcResultFuture.get().getErrors());
- Assert.assertEquals(rpcResultFuture.get().getErrors().size(), 1);
- }
-
- @Test
- public void testRegisterEndpointWithChildUpdate() throws Exception {
- setupBasicDataStore();
- RegisterEndpointInput input =
- createRegisterEndpointInputVariablesForTest(AddressEndpointRegistration.BOTH, AddressEndpointType.L3, true);
-
- baseEndpointRpcRegistry.registerEndpoint(input);
-
- AddressEndpointKey key = new AddressEndpointKey(MAC_ADDRESS, MacAddressType.class, new ContextId(CONTEXT_ID),
- L2FloodDomain.class);
- Optional<AddressEndpoint> addressEndpointL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(addressEndpointL2.isPresent());
-
- if (addressEndpointL2.isPresent()) {
- ParentEndpointCase parentEndpointCase =
- (ParentEndpointCase) addressEndpointL2.get().getParentEndpointChoice();
- List<ParentEndpoint> parentEndpoints = parentEndpointCase.getParentEndpoint();
- Assert.assertEquals(parentEndpoints.size(), 1);
- }
-
- key = new AddressEndpointKey(IP_ADDRESS, IpPrefixType.class, new ContextId(CONTEXT_ID), L3Context.class);
-
- Optional<AddressEndpoint> addressEndpointL3 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(addressEndpointL3.isPresent());
-
- if (addressEndpointL3.isPresent()) {
- Assert.assertEquals(addressEndpointL3.get().getChildEndpoint().size(), 1);
- }
- }
-
- @Test
- public void testRegisterEndpointWithChildUpdateFail() throws Exception {
- RegisterEndpointInput input = createRegisterEndpointInputVariablesForTest(AddressEndpointRegistration.BOTH,
- AddressEndpointType.L3, true);
-
- Future<RpcResult<Void>> rpcResultFuture = baseEndpointRpcRegistry.registerEndpoint(input);
-
- Assert.assertFalse(rpcResultFuture.get().isSuccessful());
- Assert.assertNotNull(rpcResultFuture.get().getErrors());
- Assert.assertEquals(rpcResultFuture.get().getErrors().size(), 1);
- }
-
- private void setupBasicDataStore() throws Exception {
- InstanceIdentifier<Endpoints> id = InstanceIdentifier.builder(Endpoints.class).build();
- dataProvider.newWriteOnlyTransaction().delete(LogicalDatastoreType.OPERATIONAL, id);
-
- RegisterEndpointInput input =
- createRegisterEndpointInputVariablesForTest(AddressEndpointRegistration.NONE, AddressEndpointType.BOTH, true);
-
- baseEndpointRpcRegistry.registerEndpoint(input);
-
- AddressEndpointKey key = new AddressEndpointKey(MAC_ADDRESS, MacAddressType.class, new ContextId(CONTEXT_ID),
- L2FloodDomain.class);
- Optional<AddressEndpoint> addressEndpointL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(addressEndpointL2.isPresent());
-
- if (addressEndpointL2.isPresent()) {
- ParentEndpointCase parentEndpointCase =
- (ParentEndpointCase) addressEndpointL2.get().getParentEndpointChoice();
- Assert.assertEquals(parentEndpointCase.getParentEndpoint().size(), 0);
- }
-
- key = new AddressEndpointKey(IP_ADDRESS, IpPrefixType.class, new ContextId(CONTEXT_ID), L3Context.class);
-
- Optional<AddressEndpoint> addressEndpointL3 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(addressEndpointL3.isPresent());
-
- if (addressEndpointL3.isPresent()) {
- Assert.assertEquals(addressEndpointL3.get().getChildEndpoint().size(), 0);
- }
- }
-
- @Test
- public void testRegisterEndpointParentFail() throws Exception {
- Future<RpcResult<Void>> rpcResultFuture =
- baseEndpointRpcRegistry.registerEndpoint(createRegisterEndpointInputVariablesForTest(
- AddressEndpointRegistration.PARENT, AddressEndpointType.BOTH, true));
-
- RpcResult<Void> rpcResult = rpcResultFuture.get();
-
- Assert.assertFalse(rpcResult.isSuccessful());
- Assert.assertNull(rpcResult.getResult());
- Assert.assertEquals(rpcResult.getErrors().size(), 1);
-
- }
-
- @Test
- public void testRegisterEndpointChildFail() throws Exception {
- Future<RpcResult<Void>> rpcResultFuture =
- baseEndpointRpcRegistry.registerEndpoint(createRegisterEndpointInputVariablesForTest(
- AddressEndpointRegistration.CHILD, AddressEndpointType.BOTH, true));
-
- RpcResult<Void> rpcResult = rpcResultFuture.get();
-
- Assert.assertFalse(rpcResult.isSuccessful());
- Assert.assertNull(rpcResult.getResult());
- Assert.assertEquals(rpcResult.getErrors().size(), 1);
- }
-
- @Test
- public void testUnregisterEndpointWithParent() throws Exception {
- RegisterEndpointInput input =
- createRegisterEndpointInputVariablesForTest(AddressEndpointRegistration.BOTH, AddressEndpointType.BOTH, true);
-
- baseEndpointRpcRegistry.registerEndpoint(input);
-
- AddressEndpointKey key = new AddressEndpointKey(MAC_ADDRESS, MacAddressType.class, new ContextId(CONTEXT_ID),
- L2FloodDomain.class);
- ContainmentEndpointKey cKey = new ContainmentEndpointKey(new ContextId(CONTEXT_ID), L2FloodDomain.class);
-
- Optional<AddressEndpoint> addressEndpointL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(addressEndpointL2.isPresent());
-
- if (addressEndpointL2.isPresent()) {
- Assert.assertEquals(basel2Ep, addressEndpointL2.get());
- }
-
- Optional<ContainmentEndpoint> ContainmentEndpoint = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.containmentEndpointIid(cKey), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(ContainmentEndpoint.isPresent());
-
- if (ContainmentEndpoint.isPresent()) {
- Assert.assertEquals(baseContainmentEp, ContainmentEndpoint.get());
- }
-
- baseEndpointRpcRegistry.unregisterEndpoint(unregisterEndpointInputParent());
- Optional<AddressEndpoint> endpointOptional = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertFalse(endpointOptional.isPresent());
-
- Optional<ContainmentEndpoint> containmentEndpointOptional =
- DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, IidFactory.containmentEndpointIid(cKey),
- dataProvider.newReadOnlyTransaction());
-
- Assert.assertFalse(containmentEndpointOptional.isPresent());
- }
-
- @Test
- public void testUnregisterEndpointWithChild() throws Exception {
- RegisterEndpointInput input =
- createRegisterEndpointInputVariablesForTest(AddressEndpointRegistration.BOTH, AddressEndpointType.BOTH, true);
-
- baseEndpointRpcRegistry.registerEndpoint(input);
-
- AddressEndpointKey key =
- new AddressEndpointKey(IP_ADDRESS, IpPrefixType.class, new ContextId(CONTEXT_ID), L3Context.class);
-
- Optional<AddressEndpoint> addressEndpointL3 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(addressEndpointL3.isPresent());
-
- if (addressEndpointL3.isPresent()) {
- Assert.assertEquals(basel3Ep, addressEndpointL3.get());
- }
-
- baseEndpointRpcRegistry.unregisterEndpoint(unregisterEndpointInputChild());
- Optional<AddressEndpoint> endpointOptional = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertFalse(endpointOptional.isPresent());
-
- }
-
- @Test
- public void testRegisterContainmentEndpointWithChildFail() throws Exception {
- Future<RpcResult<Void>> rpcResultFuture =
- baseEndpointRpcRegistry.registerEndpoint(createRegisterEndpointInputVariablesForTest(
- AddressEndpointRegistration.NONE, AddressEndpointType.NONE, true));
-
- RpcResult<Void> rpcResult = rpcResultFuture.get();
-
- Assert.assertFalse(rpcResult.isSuccessful());
- Assert.assertNull(rpcResult.getResult());
- Assert.assertEquals(rpcResult.getErrors().size(), 1);
- }
-
- @Test
- public void testUnregisterContainmentEndpointWithChild() throws Exception {
- InstanceIdentifier<Endpoints> id = InstanceIdentifier.builder(Endpoints.class).build();
- dataProvider.newWriteOnlyTransaction().delete(LogicalDatastoreType.OPERATIONAL, id);
-
- RegisterEndpointInput input =
- createRegisterEndpointInputVariablesForTest(AddressEndpointRegistration.NONE, AddressEndpointType.L2, false);
-
- baseEndpointRpcRegistry.registerEndpoint(input);
-
- AddressEndpointKey key = new AddressEndpointKey(MAC_ADDRESS, MacAddressType.class, new ContextId(CONTEXT_ID),
- L2FloodDomain.class);
-
- Optional<AddressEndpoint> addressEndpointL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(addressEndpointL2.isPresent());
- if (addressEndpointL2.isPresent()){
- ParentEndpointChoice parentEndpointChoice = addressEndpointL2.get().getParentEndpointChoice();
- if(parentEndpointChoice instanceof ParentContainmentEndpointCase){
- ParentContainmentEndpointCase
- parentEndpointCase = (ParentContainmentEndpointCase) parentEndpointChoice;
- Assert.assertNull(parentEndpointCase.getParentContainmentEndpoint());
- }
- }
-
- ContainmentEndpointReg containmentEndpointReg = new ContainmentEndpointRegBuilder().setTimestamp(baseContainmentEp.getTimestamp())
- .setContextId(baseContainmentEp.getContextId())
- .setContextType(baseContainmentEp.getContextType())
- .setTenant(baseContainmentEp.getTenant())
- .setNetworkContainment(baseContainmentEp.getNetworkContainment())
- .setChildEndpoint(Collections.singletonList(basel2Child))
- .build();
-
- baseEndpointRpcRegistry.registerEndpoint(new RegisterEndpointInputBuilder().setContainmentEndpointReg(Collections.singletonList(containmentEndpointReg)).build());
-
- addressEndpointL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(addressEndpointL2.isPresent());
- if (addressEndpointL2.isPresent()) {
- ParentEndpointChoice parentEndpointChoice = addressEndpointL2.get().getParentEndpointChoice();
- if(parentEndpointChoice instanceof ParentContainmentEndpointCase){
- ParentContainmentEndpointCase
- parentEndpointCase = (ParentContainmentEndpointCase) parentEndpointChoice;
- Assert.assertNotNull(parentEndpointCase.getParentContainmentEndpoint());
- Assert.assertEquals(parentEndpointCase.getParentContainmentEndpoint().size(),1);
- }
- }
-
- ContainmentEndpointUnreg containmentEndpointUnreg = new ContainmentEndpointUnregBuilder()
- .setContextId(baseContainmentEp.getContextId())
- .setContextType(baseContainmentEp.getContextType())
- .build();
-
- baseEndpointRpcRegistry.unregisterEndpoint(new UnregisterEndpointInputBuilder().setContainmentEndpointUnreg(Collections.singletonList(containmentEndpointUnreg)).build());
-
- addressEndpointL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
- IidFactory.addressEndpointIid(key), dataProvider.newReadOnlyTransaction());
-
- Assert.assertTrue(addressEndpointL2.isPresent());
- if (addressEndpointL2.isPresent()) {
- ParentEndpointChoice parentEndpointChoice = addressEndpointL2.get().getParentEndpointChoice();
- if(parentEndpointChoice instanceof ParentContainmentEndpointCase){
- ParentContainmentEndpointCase
- parentEndpointCase = (ParentContainmentEndpointCase) parentEndpointChoice;
- Assert.assertNotNull(parentEndpointCase.getParentContainmentEndpoint());
- Assert.assertEquals(parentEndpointCase.getParentContainmentEndpoint().size(),0);
- }
- }
-
- }
-
- private UnregisterEndpointInput unregisterEndpointInputParent() {
- UnregisterEndpointInputBuilder builder = new UnregisterEndpointInputBuilder();
-
- builder.setAddressEndpointUnreg(new ArrayList<>());
- builder.setContainmentEndpointUnreg(new ArrayList<>());
-
- builder.getAddressEndpointUnreg().add(new AddressEndpointUnregBuilder().setContextId(new ContextId(CONTEXT_ID))
- .setContextType(L2FloodDomain.class)
- .setAddress(MAC_ADDRESS)
- .setAddressType(MacAddressType.class)
- .build());
-
- builder.getContainmentEndpointUnreg().add(new ContainmentEndpointUnregBuilder()
- .setContextId(new ContextId(CONTEXT_ID)).setContextType(L2FloodDomain.class).build());
-
- return builder.build();
- }
-
- private UnregisterEndpointInput unregisterEndpointInputChild() {
- UnregisterEndpointInputBuilder builder = new UnregisterEndpointInputBuilder();
-
- builder.setAddressEndpointUnreg(new ArrayList<>());
- builder.setContainmentEndpointUnreg(new ArrayList<>());
-
- builder.getAddressEndpointUnreg().add(new AddressEndpointUnregBuilder().setContextId(new ContextId(CONTEXT_ID))
- .setContextType(L3Context.class)
- .setAddress(IP_ADDRESS)
- .setAddressType(IpPrefixType.class)
- .build());
-
- return builder.build();
- }
-
- private RegisterEndpointInput createRegisterEndpointInputVariablesForTest(AddressEndpointRegistration registration,
- AddressEndpointType type, boolean containmentEpPresent) throws Exception {
- RegisterEndpointInputBuilder registerEndpointInputBuilder = new RegisterEndpointInputBuilder();
- long timestamp = System.currentTimeMillis();
-
- List<ParentEndpoint> parentEndpoints = new ArrayList<>();
- if (registration == AddressEndpointRegistration.BOTH || registration == AddressEndpointRegistration.PARENT) {
- parentEndpoints.add(basel3Parent);
- }
-
- List<ChildEndpoint> childEndpoints = new ArrayList<>();
- if (registration == AddressEndpointRegistration.BOTH || registration == AddressEndpointRegistration.CHILD) {
- childEndpoints.add(basel2Child);
- }
-
- registerEndpointInputBuilder.setAddressEndpointReg(new ArrayList<>());
- registerEndpointInputBuilder.setContainmentEndpointReg(new ArrayList<>());
-
- if (type == AddressEndpointType.BOTH || type == AddressEndpointType.L2) {
- registerEndpointInputBuilder.getAddressEndpointReg()
- .add(new AddressEndpointRegBuilder().setTimestamp(timestamp)
- .setContextId(basel2Ep.getContextId())
- .setContextType(basel2Ep.getContextType())
- .setTenant(basel2Ep.getTenant())
- .setAddress(basel2Ep.getAddress())
- .setAddressType(basel2Ep.getAddressType())
- .setNetworkContainment(basel2Ep.getNetworkContainment())
- .setTimestamp(basel2Ep.getTimestamp())
- .setParentEndpointChoice(new ParentEndpointCaseBuilder().setParentEndpoint(parentEndpoints).build())
- .build());
- }
-
- if (type == AddressEndpointType.BOTH || type == AddressEndpointType.L3) {
- registerEndpointInputBuilder.getAddressEndpointReg()
- .add(new AddressEndpointRegBuilder().setContextId(basel3Ep.getContextId())
- .setContextType(basel3Ep.getContextType())
- .setTenant(basel3Ep.getTenant())
- .setAddress(basel3Ep.getAddress())
- .setAddressType(basel3Ep.getAddressType())
- .setNetworkContainment(basel3Ep.getNetworkContainment())
- .setTimestamp(basel3Ep.getTimestamp())
- .setChildEndpoint(childEndpoints)
- .build());
- }
-
- if(containmentEpPresent) {
- registerEndpointInputBuilder.getContainmentEndpointReg()
- .add(new ContainmentEndpointRegBuilder().setTimestamp(baseContainmentEp.getTimestamp())
- .setContextId(baseContainmentEp.getContextId())
- .setContextType(baseContainmentEp.getContextType())
- .setTenant(baseContainmentEp.getTenant())
- .setNetworkContainment(baseContainmentEp.getNetworkContainment())
- .setChildEndpoint(Collections.singletonList(basel2Child))
- .build());
- }
-
- return registerEndpointInputBuilder.build();
- }
-}
--- /dev/null
+/*
+ * Copyright (c) 2016 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.base_endpoint;
+
+import static org.mockito.Mockito.mock;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.groupbasedpolicy.test.CustomDataBrokerTest;
+import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
+import org.opendaylight.groupbasedpolicy.util.EndpointUtils;
+import org.opendaylight.groupbasedpolicy.util.IidFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.Endpoints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainmentBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.network.containment.containment.NetworkDomainContainment;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.network.containment.containment.NetworkDomainContainmentBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.AddressEndpoints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.ContainmentEndpoints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentContainmentEndpointCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentEndpointCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.containment.endpoint._case.ParentContainmentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.containment.endpoint._case.ParentContainmentEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointReg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointRegBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointReg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointRegBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.AddressEndpointUnreg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.AddressEndpointUnregBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.ContainmentEndpointUnreg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.ContainmentEndpointUnregBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.MacAddressType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.Subnet;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableList;
+
+public class BaseEndpointServiceImplTest extends CustomDataBrokerTest {
+
+ private static final String MAC_ADDRESS = "01:23:45:67:89:AB";
+ private static final String IP_ADDRESS = "192.168.100.1/24";
+ private static final String TENANT = "admin";
+ private static final String DOMAIN = "test.domain";
+ private static final String CONTEXT_ID = "testContext";
+ private static final long timestamp = 1234567890L;
+ private static final NetworkDomainContainment networkDomainContainment = new NetworkDomainContainmentBuilder()
+ .setNetworkDomainId(new NetworkDomainId(DOMAIN)).setNetworkDomainType(Subnet.class).build();
+ private static final ParentEndpoint BASE_L3_PARENT = new ParentEndpointBuilder().setAddress(IP_ADDRESS)
+ .setAddressType(IpPrefixType.class)
+ .setContextId(new ContextId(CONTEXT_ID))
+ .setContextType(L3Context.class)
+ .build();
+ private static final ChildEndpoint BASE_L2_CHILD = new ChildEndpointBuilder().setAddress(MAC_ADDRESS)
+ .setAddressType(MacAddressType.class)
+ .setContextId(new ContextId(CONTEXT_ID))
+ .setContextType(L2FloodDomain.class)
+ .build();
+ private static final ParentContainmentEndpoint BASE_CONT_PARENT = new ParentContainmentEndpointBuilder()
+ .setContextId(new ContextId(CONTEXT_ID)).setContextType(L2FloodDomain.class).build();
+
+ private DataBroker dataProvider;
+ private BaseEndpointServiceImpl baseEndpointRpcRegistry;
+
+ @Override
+ public Collection<Class<?>> getClassesFromModules() {
+ return ImmutableList.of(Endpoints.class, AddressEndpoints.class, ContainmentEndpoints.class,
+ MacAddressType.class, IpPrefixType.class);
+ }
+
+ @Before
+ public void init() {
+ dataProvider = getDataBroker();
+ RpcProviderRegistry rpcRegistry = mock(RpcProviderRegistry.class);
+
+ baseEndpointRpcRegistry =
+ new BaseEndpointServiceImpl(dataProvider, rpcRegistry, new EndpointAugmentorRegistryImpl());
+ }
+
+ @Test
+ public void testConstructor() throws Exception {
+ RpcProviderRegistry rpcRegistry = mock(RpcProviderRegistry.class);
+ BaseEndpointServiceImpl registry =
+ new BaseEndpointServiceImpl(dataProvider, rpcRegistry, new EndpointAugmentorRegistryImpl());
+ registry.close();
+ }
+
+ @Test
+ public void testRegisterEndpoint() throws Exception {
+ AddressEndpoint l2EpWithL3Parent =
+ createBaseL2EpBuilder()
+ .setParentEndpointChoice(
+ new ParentEndpointCaseBuilder().setParentEndpoint(Arrays.asList(BASE_L3_PARENT)).build())
+ .build();
+ AddressEndpoint l3EpWithL2Child =
+ createBaseL3EpBuilder().setChildEndpoint(Arrays.asList(BASE_L2_CHILD)).build();
+ ContainmentEndpoint contEp = createBaseContEpBuilder().build();
+ RegisterEndpointInputBuilder inputBuilder = new RegisterEndpointInputBuilder();
+ setAddrEpsToBuilder(inputBuilder, l2EpWithL3Parent, l3EpWithL2Child);
+ setContEpsToBuilder(inputBuilder, contEp);
+
+ RpcResult<Void> rpcResult = baseEndpointRpcRegistry.registerEndpoint(inputBuilder.build()).get();
+ Assert.assertTrue(rpcResult.isSuccessful());
+
+ ReadOnlyTransaction rTx = dataProvider.newReadOnlyTransaction();
+ Optional<AddressEndpoint> addressEndpointL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.addressEndpointIid(l2EpWithL3Parent.getKey()), rTx);
+ Assert.assertTrue(addressEndpointL2.isPresent());
+ Assert.assertEquals(l2EpWithL3Parent, addressEndpointL2.get());
+
+ Optional<AddressEndpoint> addressEndpointL3 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.addressEndpointIid(l3EpWithL2Child.getKey()), rTx);
+ Assert.assertTrue(addressEndpointL3.isPresent());
+ Assert.assertEquals(l3EpWithL2Child, addressEndpointL3.get());
+
+ Optional<ContainmentEndpoint> ContainmentEndpoint = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.containmentEndpointIid(contEp.getKey()), rTx);
+ Assert.assertTrue(ContainmentEndpoint.isPresent());
+ Assert.assertEquals(contEp, ContainmentEndpoint.get());
+ }
+
+ @Test
+ public void testRegisterEndpoint_withParentUpdate() throws Exception {
+ WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction();
+ AddressEndpoint baseL3Ep = createBaseL3EpBuilder().build();
+ wTx.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(baseL3Ep.getKey()), baseL3Ep);
+ wTx.submit().get();
+ AddressEndpoint l2EpWithL3Parent =
+ createBaseL2EpBuilder()
+ .setParentEndpointChoice(
+ new ParentEndpointCaseBuilder().setParentEndpoint(Arrays.asList(BASE_L3_PARENT)).build())
+ .build();
+ RegisterEndpointInputBuilder inputBuilder = new RegisterEndpointInputBuilder();
+ setAddrEpsToBuilder(inputBuilder, l2EpWithL3Parent);
+
+ RpcResult<Void> rpcResult = baseEndpointRpcRegistry.registerEndpoint(inputBuilder.build()).get();
+ Assert.assertTrue(rpcResult.isSuccessful());
+
+ ReadOnlyTransaction rTx = dataProvider.newReadOnlyTransaction();
+ Optional<AddressEndpoint> addressEndpointL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.addressEndpointIid(l2EpWithL3Parent.getKey()), rTx);
+ Assert.assertTrue(addressEndpointL2.isPresent());
+ List<ParentEndpoint> parentEndpoints =
+ EndpointUtils.getParentEndpoints(addressEndpointL2.get().getParentEndpointChoice());
+ Assert.assertEquals(1, parentEndpoints.size());
+
+ Optional<AddressEndpoint> addressEndpointL3 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.addressEndpointIid(baseL3Ep.getKey()), rTx);
+ Assert.assertTrue(addressEndpointL3.isPresent());
+ Assert.assertEquals(1, addressEndpointL3.get().getChildEndpoint().size());
+ }
+
+ @Test
+ public void testRegisterEndpoint_withChildUpdate() throws Exception {
+ WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction();
+ AddressEndpoint baseL2Ep = createBaseL2EpBuilder().build();
+ wTx.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(baseL2Ep.getKey()), baseL2Ep);
+ wTx.submit().get();
+ AddressEndpoint l3EpWithL2Child =
+ createBaseL3EpBuilder().setChildEndpoint(Arrays.asList(BASE_L2_CHILD)).build();
+ RegisterEndpointInputBuilder inputBuilder = new RegisterEndpointInputBuilder();
+ setAddrEpsToBuilder(inputBuilder, l3EpWithL2Child);
+
+ RpcResult<Void> rpcResult = baseEndpointRpcRegistry.registerEndpoint(inputBuilder.build()).get();
+ Assert.assertTrue(rpcResult.isSuccessful());
+
+ ReadOnlyTransaction rTx = dataProvider.newReadOnlyTransaction();
+ Optional<AddressEndpoint> addressEndpointL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.addressEndpointIid(baseL2Ep.getKey()), rTx);
+ Assert.assertTrue(addressEndpointL2.isPresent());
+ List<ParentEndpoint> parentEndpoints =
+ EndpointUtils.getParentEndpoints(addressEndpointL2.get().getParentEndpointChoice());
+ Assert.assertEquals(1, parentEndpoints.size());
+
+ Optional<AddressEndpoint> addressEndpointL3 = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.addressEndpointIid(l3EpWithL2Child.getKey()), rTx);
+ Assert.assertTrue(addressEndpointL3.isPresent());
+ Assert.assertEquals(1, addressEndpointL3.get().getChildEndpoint().size());
+ }
+
+ @Test
+ public void testRegisterEndpoint_rpcInput_missing_child() throws Exception {
+ AddressEndpoint l2EpWithL3Parent =
+ createBaseL2EpBuilder()
+ .setParentEndpointChoice(
+ new ParentEndpointCaseBuilder().setParentEndpoint(Arrays.asList(BASE_L3_PARENT)).build())
+ .build();
+ AddressEndpoint l3EpWithL2Child = createBaseL3EpBuilder().setChildEndpoint(Arrays.asList()).build();
+ ContainmentEndpoint contEp = createBaseContEpBuilder().build();
+ RegisterEndpointInputBuilder inputBuilder = new RegisterEndpointInputBuilder();
+ setAddrEpsToBuilder(inputBuilder, l2EpWithL3Parent, l3EpWithL2Child);
+ setContEpsToBuilder(inputBuilder, contEp);
+
+ RpcResult<Void> rpcResult = baseEndpointRpcRegistry.registerEndpoint(inputBuilder.build()).get();
+ Assert.assertFalse(rpcResult.isSuccessful());
+ Assert.assertNotNull(rpcResult.getErrors());
+ Assert.assertEquals(1, rpcResult.getErrors().size());
+ }
+
+ @Test
+ public void testRegisterEndpoint_rpcInput_missingParent() throws Exception {
+ AddressEndpoint l2EpWithL3Parent = createBaseL2EpBuilder().build();
+ AddressEndpoint l3EpWithL2Child =
+ createBaseL3EpBuilder().setChildEndpoint(Arrays.asList(BASE_L2_CHILD)).build();
+ ContainmentEndpoint contEp = createBaseContEpBuilder().build();
+ RegisterEndpointInputBuilder inputBuilder = new RegisterEndpointInputBuilder();
+ setAddrEpsToBuilder(inputBuilder, l2EpWithL3Parent, l3EpWithL2Child);
+ setContEpsToBuilder(inputBuilder, contEp);
+
+ RpcResult<Void> rpcResult = baseEndpointRpcRegistry.registerEndpoint(inputBuilder.build()).get();
+ Assert.assertFalse(rpcResult.isSuccessful());
+ Assert.assertNotNull(rpcResult.getErrors());
+ Assert.assertEquals(1, rpcResult.getErrors().size());
+ }
+
+ @Test
+ public void testUnregisterEndpoint_withParent() throws Exception {
+ WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction();
+ AddressEndpoint l2EpWithL3EpParent =
+ createBaseL2EpBuilder()
+ .setParentEndpointChoice(
+ new ParentEndpointCaseBuilder().setParentEndpoint(Arrays.asList(BASE_L3_PARENT)).build())
+ .build();
+ wTx.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(l2EpWithL3EpParent.getKey()),
+ l2EpWithL3EpParent);
+ AddressEndpoint l3EpWithL2EpChild =
+ createBaseL3EpBuilder().setChildEndpoint(Arrays.asList(BASE_L2_CHILD)).build();
+ wTx.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(l3EpWithL2EpChild.getKey()),
+ l3EpWithL2EpChild);
+ wTx.submit().get();
+
+ UnregisterEndpointInputBuilder inputBuilder = new UnregisterEndpointInputBuilder();
+ setAddrEpsToBuilder(inputBuilder, l2EpWithL3EpParent);
+ RpcResult<Void> rpcResult = baseEndpointRpcRegistry.unregisterEndpoint(inputBuilder.build()).get();
+ Assert.assertTrue(rpcResult.isSuccessful());
+
+ ReadOnlyTransaction rTx = dataProvider.newReadOnlyTransaction();
+ Optional<AddressEndpoint> l2EpWithL3EpParentFromDsOptional = DataStoreHelper.readFromDs(
+ LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(l2EpWithL3EpParent.getKey()), rTx);
+ Assert.assertFalse(l2EpWithL3EpParentFromDsOptional.isPresent());
+
+ Optional<AddressEndpoint> l3EpWithL2EpChildFromDsOptional = DataStoreHelper.readFromDs(
+ LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(l3EpWithL2EpChild.getKey()), rTx);
+ Assert.assertTrue(l3EpWithL2EpChildFromDsOptional.isPresent());
+ Assert.assertEquals(0, l3EpWithL2EpChildFromDsOptional.get().getChildEndpoint().size());
+ }
+
+ @Test
+ public void testUnregisterEndpoint_withChild() throws Exception {
+ WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction();
+ AddressEndpoint l2EpWithL3EpParent =
+ createBaseL2EpBuilder()
+ .setParentEndpointChoice(
+ new ParentEndpointCaseBuilder().setParentEndpoint(Arrays.asList(BASE_L3_PARENT)).build())
+ .build();
+ wTx.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(l2EpWithL3EpParent.getKey()),
+ l2EpWithL3EpParent);
+ AddressEndpoint l3EpWithL2EpChild =
+ createBaseL3EpBuilder().setChildEndpoint(Arrays.asList(BASE_L2_CHILD)).build();
+ wTx.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(l3EpWithL2EpChild.getKey()),
+ l3EpWithL2EpChild);
+ wTx.submit().get();
+
+ UnregisterEndpointInputBuilder inputBuilder = new UnregisterEndpointInputBuilder();
+ setAddrEpsToBuilder(inputBuilder, l3EpWithL2EpChild);
+ RpcResult<Void> rpcResult = baseEndpointRpcRegistry.unregisterEndpoint(inputBuilder.build()).get();
+ Assert.assertTrue(rpcResult.isSuccessful());
+
+ ReadOnlyTransaction rTx = dataProvider.newReadOnlyTransaction();
+ Optional<AddressEndpoint> l3EpWithL2EpChildFromDsOptional = DataStoreHelper.readFromDs(
+ LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(l3EpWithL2EpChild.getKey()), rTx);
+ Assert.assertFalse(l3EpWithL2EpChildFromDsOptional.isPresent());
+
+ Optional<AddressEndpoint> l2EpWithL3EpParentFromDsOptional = DataStoreHelper.readFromDs(
+ LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(l2EpWithL3EpParent.getKey()), rTx);
+ Assert.assertTrue(l2EpWithL3EpParentFromDsOptional.isPresent());
+ Assert.assertEquals(0, EndpointUtils
+ .getParentEndpoints(l2EpWithL3EpParentFromDsOptional.get().getParentEndpointChoice()).size());
+ }
+
+ @Test
+ public void testRegisterEndpoint_containmentEndpointWithChildFail() throws Exception {
+ ContainmentEndpoint contEpWithChild =
+ createBaseContEpBuilder().setChildEndpoint(Arrays.asList(BASE_L2_CHILD)).build();
+ RegisterEndpointInputBuilder inputBuilder = new RegisterEndpointInputBuilder();
+ setContEpsToBuilder(inputBuilder, contEpWithChild);
+ RpcResult<Void> rpcResult = baseEndpointRpcRegistry.registerEndpoint(inputBuilder.build()).get();
+ Assert.assertFalse(rpcResult.isSuccessful());
+ Assert.assertNull(rpcResult.getResult());
+ Assert.assertEquals(1, rpcResult.getErrors().size());
+ }
+
+ @Test
+ public void testUnregisterEndpoint_containmentEndpointWithChild() throws Exception {
+ WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction();
+ ContainmentEndpoint contEpWithL2EpChild =
+ createBaseContEpBuilder().setChildEndpoint(Arrays.asList(BASE_L2_CHILD)).build();
+ wTx.put(LogicalDatastoreType.OPERATIONAL, IidFactory.containmentEndpointIid(contEpWithL2EpChild.getKey()),
+ contEpWithL2EpChild);
+ AddressEndpoint l2EpWithContEpParent =
+ createBaseL2EpBuilder().setParentEndpointChoice(new ParentContainmentEndpointCaseBuilder()
+ .setParentContainmentEndpoint(Arrays.asList(BASE_CONT_PARENT)).build()).build();
+ wTx.put(LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(l2EpWithContEpParent.getKey()),
+ l2EpWithContEpParent);
+ wTx.submit().get();
+
+ UnregisterEndpointInputBuilder inputBuilder = new UnregisterEndpointInputBuilder();
+ setContEpsToBuilder(inputBuilder, contEpWithL2EpChild);
+ RpcResult<Void> rpcResult = baseEndpointRpcRegistry.unregisterEndpoint(inputBuilder.build()).get();
+ Assert.assertTrue(rpcResult.isSuccessful());
+
+ ReadOnlyTransaction rTx = dataProvider.newReadOnlyTransaction();
+ Optional<ContainmentEndpoint> contEpWithL2EpChildFromDsOptional = DataStoreHelper.readFromDs(
+ LogicalDatastoreType.OPERATIONAL, IidFactory.containmentEndpointIid(contEpWithL2EpChild.getKey()), rTx);
+ Assert.assertFalse(contEpWithL2EpChildFromDsOptional.isPresent());
+
+ Optional<AddressEndpoint> l2EpWithContEpParentFromDsOptional = DataStoreHelper.readFromDs(
+ LogicalDatastoreType.OPERATIONAL, IidFactory.addressEndpointIid(l2EpWithContEpParent.getKey()), rTx);
+ Assert.assertTrue(l2EpWithContEpParentFromDsOptional.isPresent());
+ Assert.assertEquals(0, EndpointUtils
+ .getParentEndpoints(l2EpWithContEpParentFromDsOptional.get().getParentEndpointChoice()).size());
+ }
+
+ private void setAddrEpsToBuilder(RegisterEndpointInputBuilder builder, AddressEndpoint... addrEndpoints) {
+ List<AddressEndpointReg> addrEpRegs = new ArrayList<>();
+ for (AddressEndpoint addrEp : addrEndpoints) {
+ addrEpRegs.add(new AddressEndpointRegBuilder().setTimestamp(timestamp)
+ .setContextId(addrEp.getContextId())
+ .setContextType(addrEp.getContextType())
+ .setTenant(addrEp.getTenant())
+ .setAddress(addrEp.getAddress())
+ .setAddressType(addrEp.getAddressType())
+ .setNetworkContainment(addrEp.getNetworkContainment())
+ .setTimestamp(addrEp.getTimestamp())
+ .setParentEndpointChoice(addrEp.getParentEndpointChoice())
+ .setChildEndpoint(addrEp.getChildEndpoint())
+ .build());
+ }
+ builder.setAddressEndpointReg(addrEpRegs);
+ }
+
+ private void setContEpsToBuilder(RegisterEndpointInputBuilder builder, ContainmentEndpoint... contEndpoints) {
+ List<ContainmentEndpointReg> contEpRegs = new ArrayList<>();
+ for (ContainmentEndpoint contEp : contEndpoints) {
+ contEpRegs.add(new ContainmentEndpointRegBuilder().setTimestamp(contEp.getTimestamp())
+ .setContextId(contEp.getContextId())
+ .setContextType(contEp.getContextType())
+ .setTenant(contEp.getTenant())
+ .setNetworkContainment(contEp.getNetworkContainment())
+ .setChildEndpoint(contEp.getChildEndpoint())
+ .build());
+ }
+ builder.setContainmentEndpointReg(contEpRegs);
+ }
+
+ private void setAddrEpsToBuilder(UnregisterEndpointInputBuilder builder, AddressEndpoint... addrEndpoints) {
+ List<AddressEndpointUnreg> addrEpUnregs = new ArrayList<>();
+ for (AddressEndpoint addrEp : addrEndpoints) {
+ addrEpUnregs.add(new AddressEndpointUnregBuilder().setContextId(addrEp.getContextId())
+ .setContextType(addrEp.getContextType())
+ .setAddress(addrEp.getAddress())
+ .setAddressType(addrEp.getAddressType())
+ .build());
+ }
+ builder.setAddressEndpointUnreg(addrEpUnregs);
+ }
+
+ private void setContEpsToBuilder(UnregisterEndpointInputBuilder builder, ContainmentEndpoint... contEndpoints) {
+ List<ContainmentEndpointUnreg> contEpUnregs = new ArrayList<>();
+ for (ContainmentEndpoint contEp : contEndpoints) {
+ contEpUnregs.add(new ContainmentEndpointUnregBuilder().setContextId(contEp.getContextId())
+ .setContextType(contEp.getContextType())
+ .build());
+ }
+ builder.setContainmentEndpointUnreg(contEpUnregs);
+ }
+
+ private AddressEndpointBuilder createBaseL2EpBuilder() {
+ return new AddressEndpointBuilder().setTimestamp(timestamp)
+ .setContextId(new ContextId(CONTEXT_ID))
+ .setContextType(L2FloodDomain.class)
+ .setTenant(new TenantId(TENANT))
+ .setAddress(MAC_ADDRESS)
+ .setAddressType(MacAddressType.class)
+ .setNetworkContainment(new NetworkContainmentBuilder().setContainment(networkDomainContainment).build())
+ .setTimestamp(timestamp);
+ }
+
+ private AddressEndpointBuilder createBaseL3EpBuilder() {
+ return new AddressEndpointBuilder().setTimestamp(timestamp)
+ .setContextId(new ContextId(CONTEXT_ID))
+ .setContextType(L3Context.class)
+ .setTenant(new TenantId(TENANT))
+ .setAddress(IP_ADDRESS)
+ .setAddressType(IpPrefixType.class)
+ .setNetworkContainment(new NetworkContainmentBuilder().setContainment(networkDomainContainment).build())
+ .setTimestamp(timestamp);
+ }
+
+ private ContainmentEndpointBuilder createBaseContEpBuilder() {
+ return new ContainmentEndpointBuilder().setTimestamp(timestamp)
+ .setContextId(new ContextId(CONTEXT_ID))
+ .setContextType(L2FloodDomain.class)
+ .setTenant(new TenantId(TENANT))
+ .setNetworkContainment(new NetworkContainmentBuilder().setContainment(networkDomainContainment).build());
+ }
+}
--- /dev/null
+package org.opendaylight.groupbasedpolicy.base_endpoint;
+
+import static org.mockito.Mockito.mock;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.groupbasedpolicy.api.EndpointAugmentor;
+
+public class EndpointAugmentorRegistryImplTest {
+
+ private EndpointAugmentorRegistryImpl epAugmentorRegistry;
+ private EndpointAugmentor epAugmentor;
+
+ @Before
+ public void init() {
+ epAugmentorRegistry = new EndpointAugmentorRegistryImpl();
+ epAugmentor = mock(EndpointAugmentor.class);
+ }
+
+ @Test
+ public void testRegisterUnregister() throws Exception {
+ epAugmentorRegistry.register(epAugmentor);
+ Assert.assertEquals(1, epAugmentorRegistry.getEndpointAugmentors().size());
+
+ epAugmentorRegistry.unregister(epAugmentor);
+ Assert.assertEquals(0, epAugmentorRegistry.getEndpointAugmentors().size());
+ }
+}
package org.opendaylight.groupbasedpolicy.renderer;
import java.util.Arrays;
+import java.util.Collections;
import org.junit.Assert;
import org.junit.Before;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.groupbasedpolicy.forwarding.NetworkDomainAugmentorRegistryImpl;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.EndpointLocations;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.EndpointLocationsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.EndpointsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ForwardingBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.ForwardingByTenantBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.with.tenant.fields.ForwardingContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.ForwardingContextBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Tenants;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RendererName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.Renderers;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNodeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.Configuration;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.Endpoints;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.ForwardingContexts;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererEndpoints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererForwarding;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RuleGroups;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.ResolvedPolicies;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.ResolvedPoliciesBuilder;
@Mock
private DataBroker dataProvider;
@Mock
+ private NetworkDomainAugmentorRegistryImpl netDomainAugmentorRegistry;
+ @Mock
private WriteTransaction wTx;
@Mock
private CheckedFuture<Void, TransactionCommitFailedException> submitFuture;
public void init() {
Mockito.when(dataProvider.newWriteOnlyTransaction()).thenReturn(wTx);
Mockito.when(wTx.submit()).thenReturn(submitFuture);
- rendererManager = new RendererManager(dataProvider);
+ Mockito.when(netDomainAugmentorRegistry.getEndpointAugmentors()).thenReturn(Collections.emptySet());
+ rendererManager = new RendererManager(dataProvider, netDomainAugmentorRegistry);
RendererManager.resetVersion();
}
Assert.assertNotNull(rendererEndpoints);
Assert.assertEquals(2, rendererEndpoints.getRendererEndpoint().size());
- ForwardingContexts forwardingContexts = configuration.getForwardingContexts();
- Assert.assertNotNull(forwardingContexts);
- Assert.assertEquals(1, forwardingContexts.getForwardingContextByTenant().size());
+ RendererForwarding rendererForwarding = configuration.getRendererForwarding();
+ Assert.assertNotNull(rendererForwarding);
+ Assert.assertEquals(1, rendererForwarding.getRendererForwardingByTenant().size());
Endpoints endpoints = configuration.getEndpoints();
Assert.assertNotNull(endpoints);
Assert.assertNotNull(rendererEndpoints);
Assert.assertEquals(1, rendererEndpoints.getRendererEndpoint().size());
- ForwardingContexts forwardingContexts = configuration.getForwardingContexts();
- Assert.assertNotNull(forwardingContexts);
- Assert.assertEquals(1, forwardingContexts.getForwardingContextByTenant().size());
+ RendererForwarding rendererForwarding = configuration.getRendererForwarding();
+ Assert.assertNotNull(rendererForwarding);
+ Assert.assertEquals(1, rendererForwarding.getRendererForwardingByTenant().size());
Endpoints endpoints = configuration.getEndpoints();
Assert.assertNotNull(endpoints);
Assert.assertNotNull(rendererEndpoints);
Assert.assertEquals(1, rendererEndpoints.getRendererEndpoint().size());
- ForwardingContexts forwardingContexts = configuration.getForwardingContexts();
- Assert.assertNotNull(forwardingContexts);
- Assert.assertEquals(1, forwardingContexts.getForwardingContextByTenant().size());
+ RendererForwarding rendererForwarding = configuration.getRendererForwarding();
+ Assert.assertNotNull(rendererForwarding);
+ Assert.assertEquals(1, rendererForwarding.getRendererForwardingByTenant().size());
Endpoints endpoints = configuration.getEndpoints();
Assert.assertNotNull(endpoints);
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import java.util.Collections;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.groupbasedpolicy.forwarding.NetworkDomainAugmentorRegistryImpl;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.EndpointLocations;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.EndpointLocationsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.Endpoints;
@Mock
private DataBroker dataProvider;
+ @Mock
+ private NetworkDomainAugmentorRegistryImpl netDomainAugmentorRegistry;
private RendererManager rendererManager;
@Before
public void init() {
- rendererManager = new RendererManager(dataProvider);
+ Mockito.when(netDomainAugmentorRegistry.getEndpointAugmentors()).thenReturn(Collections.emptySet());
+ rendererManager = new RendererManager(dataProvider, netDomainAugmentorRegistry);
}
/**