X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgp%2Frib-spi%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fbgp%2Frib%2Fspi%2FAbstractRIBSupportTest.java;h=744a8d6e3d6eb47167b887412741a5bb6af7a8ef;hb=3860d202e14ae693d515cf40f4795fd086a5d75d;hp=c44e012fffe84ead62e08b7359f2ab01b8a397b2;hpb=f55b911d6d34821b19df198828f6d9dcc0a1949f;p=bgpcep.git diff --git a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportTest.java b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportTest.java index c44e012fff..744a8d6e3d 100644 --- a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportTest.java +++ b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportTest.java @@ -5,31 +5,32 @@ * 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.protocol.bgp.rib.spi; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.MockitoAnnotations.initMocks; import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; import org.junit.Before; import org.mockito.Mock; -import org.opendaylight.controller.md.sal.binding.test.AbstractConcurrentDataBrokerTest; -import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTestCustomizer; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; -import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.PathId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.Update; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.Attributes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.AttributesBuilder; +import org.opendaylight.binding.runtime.spi.ModuleInfoBackedContext; +import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext; +import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; +import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTestCustomizer; +import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.PathId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.Update; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.Attributes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.AttributesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes2; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.destination.DestinationType; @@ -49,10 +50,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib. import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes; +import org.opendaylight.yangtools.yang.binding.ChildOf; +import org.opendaylight.yangtools.yang.binding.ChoiceIn; import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.Identifiable; +import org.opendaylight.yangtools.yang.binding.Identifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.util.BindingReflections; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -62,8 +67,11 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -public abstract class AbstractRIBSupportTest extends AbstractConcurrentDataBrokerTest { - protected static final PathId PATH_ID = new PathId(1L); +public abstract class AbstractRIBSupportTest, + S extends ChildOf, + R extends Route & ChildOf & Identifiable, + I extends Identifier> extends AbstractConcurrentDataBrokerTest { + protected static final PathId PATH_ID = new PathId(Uint32.ONE); protected static final Attributes ATTRIBUTES = new AttributesBuilder().build(); private static final InstanceIdentifier RIB = InstanceIdentifier.builder(BgpRib.class) .child(Rib.class, new RibKey(new RibId("rib"))).child(LocRib.class).build(); @@ -74,22 +82,20 @@ public abstract class AbstractRIBSupportTest extends AbstractCo private static final InstanceIdentifier MP_REACH_IID = ATTRIBUTES_IID.augmentation(Attributes1.class) .child(MpReachNlri.class); @Mock - protected DOMDataWriteTransaction tx; + protected DOMDataTreeWriteTransaction tx; protected List> deletedRoutes; protected List, DataObject>> insertedRoutes; - protected BindingNormalizedNodeSerializer mappingService; - private AbstractRIBSupport abstractRIBSupport; + protected AdapterContext adapter; + private AbstractRIBSupport abstractRIBSupport; private ModuleInfoBackedContext moduleInfoBackedContext; - protected final void setUpTestCustomizer(final AbstractRIBSupport ribSupport) throws Exception { + protected final void setUpTestCustomizer(final AbstractRIBSupport ribSupport) throws Exception { this.abstractRIBSupport = ribSupport; - this.moduleInfoBackedContext - .registerModuleInfo(BindingReflections.getModuleInfo(this.abstractRIBSupport.routesContainerClass())); - this.moduleInfoBackedContext - .registerModuleInfo(BindingReflections.getModuleInfo(this.abstractRIBSupport.routesCaseClass())); - this.moduleInfoBackedContext - .registerModuleInfo(BindingReflections.getModuleInfo(this.abstractRIBSupport.routesListClass())); + this.moduleInfoBackedContext.registerModuleInfos(Arrays.asList( + BindingReflections.getModuleInfo(this.abstractRIBSupport.routesContainerClass()), + BindingReflections.getModuleInfo(this.abstractRIBSupport.routesCaseClass()), + BindingReflections.getModuleInfo(this.abstractRIBSupport.routesListClass()))); } @Before @@ -97,7 +103,7 @@ public abstract class AbstractRIBSupportTest extends AbstractCo initMocks(this); doAnswer(invocation -> { final Object[] args = invocation.getArguments(); - AbstractRIBSupportTest.this.insertedRoutes.add(AbstractRIBSupportTest.this.mappingService + AbstractRIBSupportTest.this.insertedRoutes.add(adapter.currentSerializer() .fromNormalizedNode((YangInstanceIdentifier) args[1], (NormalizedNode) args[2])); return args[1]; }).when(this.tx).put(any(LogicalDatastoreType.class), any(YangInstanceIdentifier.class), @@ -105,8 +111,8 @@ public abstract class AbstractRIBSupportTest extends AbstractCo doAnswer(invocation -> { final Object[] args = invocation.getArguments(); - AbstractRIBSupportTest.this.deletedRoutes.add((InstanceIdentifier) - this.mappingService.fromYangInstanceIdentifier((YangInstanceIdentifier) args[1])); + AbstractRIBSupportTest.this.deletedRoutes.add((InstanceIdentifier) + adapter.currentSerializer().fromYangInstanceIdentifier((YangInstanceIdentifier) args[1])); return args[1]; }).when(this.tx).delete(any(LogicalDatastoreType.class), any(YangInstanceIdentifier.class)); this.deletedRoutes = new ArrayList<>(); @@ -117,14 +123,14 @@ public abstract class AbstractRIBSupportTest extends AbstractCo @Override protected final AbstractDataBrokerTestCustomizer createDataBrokerTestCustomizer() { final AbstractDataBrokerTestCustomizer customizer = super.createDataBrokerTestCustomizer(); - this.mappingService = customizer.getBindingToNormalized(); + this.adapter = customizer.getAdapterContext(); return customizer; } protected final ContainerNode createNlriWithDrawnRoute(final DestinationType destUnreach) { final MpUnreachNlri mpReach = new MpUnreachNlriBuilder().setWithdrawnRoutes(new WithdrawnRoutesBuilder() .setDestinationType(destUnreach).build()).build(); - final Map.Entry> result = this.mappingService + final Map.Entry> result = this.adapter.currentSerializer() .toNormalizedNode(MP_UNREACH_IID, mpReach); return (ContainerNode) result.getValue(); } @@ -132,19 +138,37 @@ public abstract class AbstractRIBSupportTest extends AbstractCo protected final ContainerNode createNlriAdvertiseRoute(final DestinationType destReach) { final MpReachNlri mpReach = new MpReachNlriBuilder().setAdvertizedRoutes(new AdvertizedRoutesBuilder() .setDestinationType(destReach).build()).build(); - final Map.Entry> result = this.mappingService + final Map.Entry> result = this.adapter.currentSerializer() .toNormalizedNode(MP_REACH_IID, mpReach); return (ContainerNode) result.getValue(); } protected final ContainerNode createAttributes() { - return (ContainerNode) this.mappingService.toNormalizedNode(ATTRIBUTES_IID, ATTRIBUTES).getValue(); + return (ContainerNode) this.adapter.currentSerializer().toNormalizedNode(ATTRIBUTES_IID, ATTRIBUTES).getValue(); + } + + protected final MapEntryNode createEmptyTable() { + final Tables tables = new TablesBuilder().withKey(getTablesKey()) + .setAttributes(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329 + .rib.tables.AttributesBuilder().build()).build(); + return (MapEntryNode) this.adapter.currentSerializer().toNormalizedNode(tablesIId(), tables).getValue(); } protected final ChoiceNode createRoutes(final Routes routes) { - final Tables tables = new TablesBuilder().setKey(getTablesKey()).setRoutes(routes).build(); - return (ChoiceNode) ((MapEntryNode) this.mappingService.toNormalizedNode(tablesIId(), tables).getValue()) - .getChild(new NodeIdentifier(BindingReflections.findQName(Routes.class))).get(); + final Tables tables = new TablesBuilder().withKey(getTablesKey()).setRoutes(routes).build(); + return (ChoiceNode) ((MapEntryNode) this.adapter.currentSerializer().toNormalizedNode(tablesIId(), tables) + .getValue()).getChild(new NodeIdentifier(BindingReflections.findQName(Routes.class))).get(); + } + + protected final Collection createRoutes(final S routes) { + Preconditions.checkArgument(routes.implementedInterface() + .equals(this.abstractRIBSupport.routesContainerClass())); + final InstanceIdentifier routesIId = routesIId(); + final Map.Entry> normalizedNode = this.adapter.currentSerializer() + .toNormalizedNode(routesIId, routes); + final ContainerNode container = (ContainerNode) normalizedNode.getValue(); + final NodeIdentifier routeNid = new NodeIdentifier(getRouteListQname()); + return ((MapNode) container.getChild(routeNid).get()).getValue(); } private TablesKey getTablesKey() { @@ -155,39 +179,27 @@ public abstract class AbstractRIBSupportTest extends AbstractCo return RIB.child(Tables.class, getTablesKey()); } - private InstanceIdentifier routesIId() { + private InstanceIdentifier routesIId() { final InstanceIdentifier tables = tablesIId(); - return tables.child((Class) this.abstractRIBSupport.routesContainerClass()); + return tables.child(this.abstractRIBSupport.routesCaseClass(), this.abstractRIBSupport.routesContainerClass()); } protected final YangInstanceIdentifier getTablePath() { final InstanceIdentifier tables = tablesIId(); - return this.mappingService.toYangInstanceIdentifier(tables); + return this.adapter.currentSerializer().toYangInstanceIdentifier(tables); } protected final YangInstanceIdentifier getRoutePath() { - final InstanceIdentifier routesIId = routesIId(); - return this.mappingService.toYangInstanceIdentifier(routesIId).node(getRouteListQname()); - } - - @SuppressWarnings("checkstyle:OverloadMethodsDeclarationOrder") - protected final Collection createRoutes(final DataObject routes) { - Preconditions.checkArgument(routes.getImplementedInterface() - .equals(this.abstractRIBSupport.routesContainerClass())); - final InstanceIdentifier routesIId = routesIId(); - final Map.Entry> normalizedNode = this.mappingService - .toNormalizedNode(routesIId, routes); - final ContainerNode container = (ContainerNode) normalizedNode.getValue(); - final NodeIdentifier routeNid = new NodeIdentifier(getRouteListQname()); - return ((MapNode) container.getChild(routeNid).get()).getValue(); + final InstanceIdentifier routesIId = routesIId(); + return this.adapter.currentSerializer().toYangInstanceIdentifier(routesIId).node(getRouteListQname()); } private QName getRouteListQname() { - return QName.create(BindingReflections.findQName(this.abstractRIBSupport.routesContainerClass()), - BindingReflections.findQName(this.abstractRIBSupport.routesListClass()).intern().getLocalName()); + return BindingReflections.findQName(this.abstractRIBSupport.routesListClass()) + .withModule(BindingReflections.getQNameModule(this.abstractRIBSupport.routesCaseClass())); } - protected final NodeIdentifierWithPredicates createRouteNIWP(final DataObject routes) { + protected final NodeIdentifierWithPredicates createRouteNIWP(final S routes) { final Collection map = createRoutes(routes); return Iterables.getOnlyElement(map).getIdentifier(); }