by ribSupport.
Change-Id: Ie75c0005484caf749425551779e6e6a413c72f13
Signed-off-by: Claudio D. Gasparini <claudio.gasparini@pantheon.tech>
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
public void testEmptyRoute() {
final Routes empty = new EvpnRoutesCaseBuilder().setEvpnRoutes(
new EvpnRoutesBuilder().setEvpnRoute(Collections.emptyList()).build()).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
public void testEmptyRoute() {
final Routes empty = new FlowspecRoutesCaseBuilder().setFlowspecRoutes(
new FlowspecRoutesBuilder().setFlowspecRoute(Collections.emptyList()).build()).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
public void testEmptyRoute() {
final Routes empty = new FlowspecIpv6RoutesCaseBuilder().setFlowspecIpv6Routes(
new FlowspecIpv6RoutesBuilder().setFlowspecRoute(Collections.emptyList()).build()).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
}
@Test
- public void testEmptyRoute() throws Exception {
+ public void testEmptyRoute() {
final Routes empty = new FlowspecL3vpnIpv4RoutesCaseBuilder().setFlowspecL3vpnIpv4Routes(
new FlowspecL3vpnIpv4RoutesBuilder().setFlowspecL3vpnRoute(Collections.emptyList()).build()).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
public void testEmptyRoute() {
final Routes empty = new FlowspecL3vpnIpv6RoutesCaseBuilder().setFlowspecL3vpnIpv6Routes(
new FlowspecL3vpnIpv6RoutesBuilder().setFlowspecL3vpnRoute(Collections.emptyList()).build()).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
@Test
public void testEmptyRoute() {
final Routes empty = new Ipv4RoutesCaseBuilder().setIpv4Routes(EMPTY_ROUTES).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
@Test
public void testEmptyRoute() {
final Routes empty = new Ipv6RoutesCaseBuilder().setIpv6Routes(EMPTY_ROUTES).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
final Routes empty = new L3vpnMcastRoutesIpv4CaseBuilder()
.setL3vpnMcastRoutesIpv4(new L3vpnMcastRoutesIpv4Builder()
.setL3vpnMcastRoute(Collections.emptyList()).build()).build();
- final ChoiceNode expected = createRoutes(empty);
- Assert.assertEquals(expected, this.ribSupport.emptyRoutes());
+ Assert.assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
final Routes empty = new L3vpnMcastRoutesIpv6CaseBuilder()
.setL3vpnMcastRoutesIpv6(new L3vpnMcastRoutesIpv6Builder()
.setL3vpnMcastRoute(Collections.emptyList()).build()).build();
- final ChoiceNode expected = createRoutes(empty);
- Assert.assertEquals(expected, this.ribSupport.emptyRoutes());
+ Assert.assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
public void testEmptyRoute() {
final Routes empty = new VpnIpv4RoutesCaseBuilder().setVpnIpv4Routes(new VpnIpv4RoutesBuilder()
.setVpnRoute(Collections.emptyList()).build()).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
public void testEmptyRoute() {
final Routes empty = new VpnIpv6RoutesCaseBuilder().setVpnIpv6Routes(new VpnIpv6RoutesBuilder()
.setVpnRoute(Collections.emptyList()).build()).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
public void testEmptyRoute() {
final Routes empty = new LabeledUnicastRoutesCaseBuilder().setLabeledUnicastRoutes(
new LabeledUnicastRoutesBuilder().setLabeledUnicastRoute(Collections.emptyList()).build()).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
public void testEmptyRoute() {
final Routes empty = new LabeledUnicastIpv6RoutesCaseBuilder().setLabeledUnicastIpv6Routes(
new LabeledUnicastIpv6RoutesBuilder().setLabeledUnicastRoute(Collections.emptyList()).build()).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
public void testEmptyRoute() {
final Routes empty = new LinkstateRoutesCaseBuilder().setLinkstateRoutes(
new LinkstateRoutesBuilder().setLinkstateRoute(Collections.emptyList()).build()).build();
- final ChoiceNode emptyRoutes = this.ribSupport.emptyRoutes();
- assertEquals(createRoutes(empty), emptyRoutes);
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
public void testEmptyRoute() {
final Routes empty = new MvpnRoutesIpv4CaseBuilder().setMvpnRoutesIpv4(new MvpnRoutesIpv4Builder()
.setMvpnRoute(Collections.emptyList()).build()).build();
- final ChoiceNode expected = createRoutes(empty);
- assertEquals(expected, this.ribSupport.emptyRoutes());
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
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;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
public void testEmptyRoute() {
final Routes empty = new MvpnRoutesIpv6CaseBuilder().setMvpnRoutesIpv6(new MvpnRoutesIpv6Builder()
.setMvpnRoute(Collections.emptyList()).build()).build();
- final ChoiceNode expected = createRoutes(empty);
- assertEquals(expected, this.ribSupport.emptyRoutes());
+ assertEquals(createEmptyTable(empty), this.ribSupport.emptyTable());
}
@Test
import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import javax.annotation.Nonnull;
import org.opendaylight.protocol.bgp.rib.spi.BGPPeerTracker;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
import org.opendaylight.protocol.bgp.rib.spi.RIBSupport;
-import org.opendaylight.protocol.bgp.rib.spi.RibSupportUtils;
import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRibRoutingPolicy;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpTableType;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
import org.slf4j.Logger;
SchemaContextListener, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(RIBImpl.class);
private static final QName RIB_ID_QNAME = QName.create(Rib.QNAME, "id").intern();
- private static final ContainerNode EMPTY_TABLE_ATTRIBUTES = ImmutableNodes.containerNode(org.opendaylight.yang
- .gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Attributes.QNAME);
private final BGPDispatcher dispatcher;
private final AsNumber localAs;
// create locRibWriter for each table
final DOMDataWriteTransaction tx = this.domChain.newWriteOnlyTransaction();
- final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> table = ImmutableNodes.mapEntryBuilder();
- table.withNodeIdentifier(RibSupportUtils.toYangTablesKey(key));
- table.withChild(EMPTY_TABLE_ATTRIBUTES);
-
- final NodeIdentifierWithPredicates tableKey = RibSupportUtils.toYangTablesKey(key);
- final InstanceIdentifierBuilder tableId = YangInstanceIdentifier
- .builder(this.yangRibId.node(LocRib.QNAME).node(Tables.QNAME));
- tableId.nodeWithKey(tableKey.getNodeType(), tableKey.getKeyValues());
- for (final Entry<QName, Object> e : tableKey.getKeyValues().entrySet()) {
- table.withChild(ImmutableNodes.leafNode(e.getKey(), e.getValue()));
- }
-
final RIBSupport<? extends Routes, ?, ?, ?> ribSupport = this.ribContextRegistry.getRIBSupport(key);
if (ribSupport != null) {
- final ChoiceNode routes = ribSupport.emptyRoutes();
- table.withChild(routes);
+ final MapEntryNode emptyTable = ribSupport.emptyTable();
+ final InstanceIdentifierBuilder tableId = YangInstanceIdentifier
+ .builder(this.yangRibId.node(LocRib.QNAME).node(Tables.QNAME)).node(emptyTable.getIdentifier());
- tx.put(LogicalDatastoreType.OPERATIONAL, tableId.build(), table.build());
+ tx.put(LogicalDatastoreType.OPERATIONAL, tableId.build(), emptyTable);
try {
tx.commit().get();
} catch (final InterruptedException | ExecutionException e1) {
import static java.util.Objects.requireNonNull;
-import com.google.common.base.Verify;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import java.util.Map.Entry;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
import org.opendaylight.protocol.bgp.rib.impl.spi.Codecs;
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.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
class RIBSupportContextImpl extends RIBSupportContext {
-
- private static final ContainerNode EMPTY_TABLE_ATTRIBUTES = ImmutableNodes.containerNode(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Attributes.QNAME);
-
private final RIBSupport<?, ?, ?, ?> ribSupport;
private final Codecs codecs;
@Override
public void createEmptyTableStructure(final DOMDataWriteTransaction tx, final YangInstanceIdentifier tableId) {
- final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> tb = ImmutableNodes.mapEntryBuilder();
- tb.withNodeIdentifier((NodeIdentifierWithPredicates)tableId.getLastPathArgument());
- tb.withChild(EMPTY_TABLE_ATTRIBUTES);
-
- // tableId is keyed, but that fact is not directly visible from YangInstanceIdentifier, see BUG-2796
- final NodeIdentifierWithPredicates tableKey = (NodeIdentifierWithPredicates) tableId.getLastPathArgument();
- for (final Entry<QName, Object> e : tableKey.getKeyValues().entrySet()) {
- tb.withChild(ImmutableNodes.leafNode(e.getKey(), e.getValue()));
- }
-
- final ChoiceNode routes = this.ribSupport.emptyRoutes();
- Verify.verifyNotNull(routes, "Null empty routes in %s", this.ribSupport);
- Verify.verify(Routes.QNAME.equals(routes.getNodeType()),
- "Empty routes have unexpected identifier %s, expected %s", routes.getNodeType(), Routes.QNAME);
-
- tx.put(LogicalDatastoreType.OPERATIONAL, tableId, tb.withChild(routes).build());
+ tx.put(LogicalDatastoreType.OPERATIONAL, tableId, this.ribSupport.emptyTable());
}
@Override
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.primitives.Shorts;
import java.util.ArrayList;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpTableType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalAddPathsConfig;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalAddPathsConfigBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.Rib;
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.types.rev180329.BgpId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv4AddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.UnicastSubsequentAddressFamily;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.osgi.framework.ServiceRegistration;
public class RibImplTest extends AbstractConfig {
final NodeIdentifier nii = new NodeIdentifier(QName.create("", "test").intern());
Mockito.doReturn(nii).when(this.ribSupport).routeAttributesIdentifier();
Mockito.doReturn(ImmutableSet.of()).when(this.ribSupport).cacheableAttributeObjects();
- final ChoiceNode choiceNode = mock(ChoiceNode.class);
- Mockito.doReturn(choiceNode).when(this.ribSupport).emptyRoutes();
- Mockito.doReturn(nii).when(choiceNode).getIdentifier();
- Mockito.doReturn(QName.create("", "test").intern()).when(choiceNode).getNodeType();
+ final MapEntryNode emptyTable = mock(MapEntryNode.class);
+ Mockito.doReturn(emptyTable).when(this.ribSupport).emptyTable();
+ final NodeIdentifierWithPredicates niie = new NodeIdentifierWithPredicates(Rib.QNAME,
+ ImmutableMap.of(QName.create("", "test").intern(), "t"));
+ Mockito.doReturn(niie).when(emptyTable).getIdentifier();
+ Mockito.doReturn(QName.create("", "test").intern()).when(emptyTable).getNodeType();
Mockito.doReturn(this.domTx).when(this.domDataBroker).createTransactionChain(any());
final DOMDataTreeChangeService dOMDataTreeChangeService = mock(DOMDataTreeChangeService.class);
Mockito.doReturn(Collections.singletonMap(DOMDataTreeChangeService.class, dOMDataTreeChangeService))
private final Class<S> containerClass;
private final Class<R> listClass;
private final ApplyRoute putRoute = new PutRoute();
- private final ChoiceNode emptyRoutes;
+ private final MapEntryNode emptyTable;
private final QName routeQname;
private final Class<? extends AddressFamily> afiClass;
private final Class<? extends SubsequentAddressFamily> safiClass;
this.routeQname = BindingReflections.findQName(listClass).withModule(module);
this.routesListIdentifier = new NodeIdentifier(this.routeQname);
this.tk = new TablesKey(afiClass, safiClass);
- //FIXME Use Route Case IId instead of Tables IId.
- this.emptyRoutes = (ChoiceNode) ((MapEntryNode) this.mappingService
+ this.emptyTable = (MapEntryNode) this.mappingService
.toNormalizedNode(TABLES_II, new TablesBuilder().withKey(tk)
- .setRoutes(emptyRoutesCase()).build()).getValue())
- .getChild(new NodeIdentifier(BindingReflections.findQName(Routes.class))).get();
+ .setRoutes(emptyRoutesCase())
+ .setAttributes(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib
+ .rev180329.rib.tables.AttributesBuilder().build()).build()).getValue();
this.afiClass = afiClass;
this.safiClass = safiClass;
this.destinationNid = new NodeIdentifier(destContainerQname);
}
@Override
- public final ChoiceNode emptyRoutes() {
- return this.emptyRoutes;
+ public final MapEntryNode emptyTable() {
+ return this.emptyTable;
}
public final QName routeQName() {
@Override
public final InstanceIdentifier<R> createRouteIdentifier(
final KeyedInstanceIdentifier<Tables, TablesKey> tableIId, final I key) {
+ //FIXME Cache
return tableIId.child(routesCaseClass(), routesContainerClass()).child(routesListClass(), key);
}
return null;
}
- protected YangInstanceIdentifier routesYangInstanceIdentifier(final YangInstanceIdentifier routesTablePaths) {
+ protected final YangInstanceIdentifier routesYangInstanceIdentifier(final YangInstanceIdentifier routesTablePaths) {
return this.routesPath.getUnchecked(routesTablePaths);
}
}
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
R extends Route & ChildOf<? super S> & Identifiable<I>,
I extends Identifier<R>> {
/**
- * Return the table-type-specific empty routes container, as augmented into the
+ * Return the table-type-specific empty table with routes empty container, as augmented into the
* bgp-rib model under /rib/tables/routes choice node. This needs to include all
* the skeleton nodes under which the individual routes will be stored.
*
* @return Protocol-specific case in the routes choice, may not be null.
*/
@Nonnull
- ChoiceNode emptyRoutes();
+ MapEntryNode emptyTable();
/**
* Return the localized identifier of the attributes route member, as expanded
return (ContainerNode) this.mappingService.toNormalizedNode(ATTRIBUTES_IID, ATTRIBUTES).getValue();
}
+ protected final MapEntryNode createEmptyTable(final Routes routes) {
+ 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())
+ .setRoutes(routes).build();
+ return (MapEntryNode) this.mappingService.toNormalizedNode(tablesIId(), tables).getValue();
+ }
+
protected final ChoiceNode createRoutes(final Routes routes) {
final Tables tables = new TablesBuilder().withKey(getTablesKey()).setRoutes(routes).build();
return (ChoiceNode) ((MapEntryNode) this.mappingService.toNormalizedNode(tablesIId(), tables).getValue())
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
-import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
public class RIBSupportTest extends AbstractConcurrentDataBrokerTest {
assertEquals(Ipv4Route.QNAME,this.ribSupportTestImp.routeQName());
}
- @Test
- public void emptyRoutes() {
- final ChoiceNode emptyRoutes = Builders.choiceBuilder().withNodeIdentifier(ROUTES_IDENTIFIER)
- .addChild(Builders.containerBuilder().withNodeIdentifier(IPV4_ROUTES_IDENTIFIER)
- .withChild(ImmutableNodes.mapNodeBuilder(ribSupportTestImp.routeQName())
- .build()).build()).build();
- assertEquals(emptyRoutes,this.ribSupportTestImp.emptyRoutes());
- }
-
@Test
public void routeNid() {
assertEquals(new NodeIdentifier(Ipv4Route.QNAME),this.ribSupportTestImp.routeNid());
import static org.opendaylight.protocol.bmp.impl.app.TablesUtil.BMP_ROUTES_QNAME;
import com.google.common.base.Preconditions;
-import com.google.common.base.Verify;
import java.util.Map;
import javax.annotation.concurrent.NotThreadSafe;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
private static final InstanceIdentifier<MpUnreachNlri> MP_UNREACH_NLRI_II = InstanceIdentifier.create(Update.class)
.child(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path
.attributes.Attributes.class).augmentation(Attributes2.class).child(MpUnreachNlri.class);
- private static final NodeIdentifier ROUTES_NODE_ID = new NodeIdentifier(BMP_ROUTES_QNAME);
+ private static final NodeIdentifier BGP_ROUTES_NODE_ID = new NodeIdentifier(BMP_ROUTES_QNAME);
+ private static final NodeIdentifier ROUTES_NODE_ID = new NodeIdentifier(Routes.QNAME);
private final YangInstanceIdentifier tableId;
private final RIBSupport tableSupport;
for (final Map.Entry<QName, Object> e : tableKey.getKeyValues().entrySet()) {
tb.withChild(ImmutableNodes.leafNode(e.getKey(), e.getValue()));
}
-
- final ChoiceNode routes = this.tableSupport.emptyRoutes();
- Verify.verifyNotNull(routes, "Null empty routes in %s", this.tableSupport);
+ final ChoiceNode routes
+ = (ChoiceNode) this.tableSupport.emptyTable().getChild(ROUTES_NODE_ID).get();
tx.put(LogicalDatastoreType.OPERATIONAL, this.tableId,
tb.withChild(ImmutableChoiceNodeBuilder.create(routes).withNodeIdentifier(
void writeRoutes(final DOMDataWriteTransaction tx, final MpReachNlri nlri, final Attributes attributes) {
final ContainerNode domNlri = serializeReachNlri(nlri);
final ContainerNode routeAttributes = serializeAttributes(attributes);
- this.tableSupport.putRoutes(tx, this.tableId, domNlri, routeAttributes, ROUTES_NODE_ID);
+ this.tableSupport.putRoutes(tx, this.tableId, domNlri, routeAttributes, BGP_ROUTES_NODE_ID);
}
void removeRoutes(final DOMDataWriteTransaction tx, final MpUnreachNlri nlri) {
- this.tableSupport.deleteRoutes(tx, this.tableId, serializeUnreachNlri(nlri), ROUTES_NODE_ID);
+ this.tableSupport.deleteRoutes(tx, this.tableId, serializeUnreachNlri(nlri), BGP_ROUTES_NODE_ID);
}
private ContainerNode serializeUnreachNlri(final MpUnreachNlri nlri) {
public final class TablesUtil {
- public static final QName BMP_TABLES_QNAME = QName.create(BmpMonitor.QNAME.getNamespace(),
- BmpMonitor.QNAME.getRevision(), "tables").intern();
- public static final QName BMP_ATTRIBUTES_QNAME = QName.create(BmpMonitor.QNAME.getNamespace(),
- BmpMonitor.QNAME.getRevision(), "attributes").intern();
- public static final QName BMP_ROUTES_QNAME = QName.create(BmpMonitor.QNAME.getNamespace(),
- BmpMonitor.QNAME.getRevision(), "routes").intern();
- public static final QName BMP_AFI_QNAME = QName.create(BMP_TABLES_QNAME, "afi").intern();
- public static final QName BMP_SAFI_QNAME = QName.create(BMP_TABLES_QNAME, "safi").intern();
+ public static final QName BMP_TABLES_QNAME
+ = QName.create(BmpMonitor.QNAME.getModule(), "tables");
+ public static final QName BMP_ATTRIBUTES_QNAME =
+ QName.create(BmpMonitor.QNAME.getModule(), "attributes");
+ public static final QName BMP_ROUTES_QNAME = QName.create(BmpMonitor.QNAME.getModule(), "routes");
+ public static final QName BMP_AFI_QNAME = QName.create(BMP_TABLES_QNAME.getModule(), "afi");
+ public static final QName BMP_SAFI_QNAME = QName.create(BMP_TABLES_QNAME.getModule(), "safi");
+ private static final String AFI = "afi";
+ private static final String SAFI = "safi";
private TablesUtil() {
throw new UnsupportedOperationException("Utility class");
public static NodeIdentifierWithPredicates toYangTablesKey(final QName nodeName,
final Class<? extends AddressFamily> afi,
final Class<? extends SubsequentAddressFamily> safi) {
- final QName afiQname = QName.create(nodeName, "afi").intern();
- final QName safiQname = QName.create(nodeName, "safi").intern();
+ final QName afiQname = QName.create(nodeName, AFI).intern();
+ final QName safiQname = QName.create(nodeName, SAFI).intern();
final ImmutableMap<QName, Object> keyValues = ImmutableMap.of(
afiQname, BindingReflections.findQName(afi),
safiQname, BindingReflections.findQName(safi));