2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.bgp.linkstate;
11 * TODO: Remove, instead use Common Rib Support test
13 public class LinkstateRIBSupportTest {
15 private static final Ipv4Address ipv4 = new Ipv4Address("42.42.42.42");
16 private static final NodeIdentifier ROUTES_NODE_ID = new NodeIdentifier(Routes.QNAME);
17 final LinkstateRIBSupport link = LinkstateRIBSupport.getInstance();
18 final List<MapEntryNode> linkList = new ArrayList<>();
19 private List<YangInstanceIdentifier> routes;
22 private DOMDataWriteTransaction tx;
26 MockitoAnnotations.initMocks(this);
27 routes = new ArrayList<>();
28 Mockito.doAnswer(new Answer<Object>() {
30 public Object answer(final InvocationOnMock invocation) throws Throwable {
31 final Object[] args = invocation.getArguments();
32 LinkstateRIBSupportTest.this.routes.add((YangInstanceIdentifier) args[1]);
35 }).when(this.tx).put(Mockito.any(LogicalDatastoreType.class), Mockito.any(YangInstanceIdentifier.class), Mockito.any(NormalizedNode.class));
37 Mockito.doAnswer(new Answer<Object>() {
39 public Object answer(final InvocationOnMock invocation) throws Throwable {
40 final Object[] args = invocation.getArguments();
41 LinkstateRIBSupportTest.this.routes.remove(args[1]);
44 }).when(this.tx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(YangInstanceIdentifier.class));
48 public void testbuildReach() throws BGPParsingException {
49 final CNextHop hop = new Ipv4NextHopCaseBuilder().setIpv4NextHop(new Ipv4NextHopBuilder().setGlobal(ipv4).build()).build();
50 final MpReachNlri result = link.buildReach(linkList, hop);
51 assertEquals(LinkstateAddressFamily.class, result.getAfi());
52 assertEquals(LinkstateSubsequentAddressFamily.class, result.getSafi());
53 assertEquals(new Ipv4NextHopCaseBuilder().setIpv4NextHop(new Ipv4NextHopBuilder().setGlobal(new Ipv4Address("42.42.42.42")).build()).build(), result.getCNextHop());
57 public void testBuildUnreach() {
58 final MpUnreachNlri result = link.buildUnreach(linkList);
59 assertEquals(LinkstateAddressFamily.class, result.getAfi());
60 assertEquals(LinkstateSubsequentAddressFamily.class, result.getSafi());
64 public void testDestinationRoutes() {
65 final YangInstanceIdentifier yangIdentifier = YangInstanceIdentifier.of(Routes.QNAME);
67 final NodeNlriParser nodeParser = new NodeNlriParser();
68 SimpleNlriTypeRegistry.getInstance().registerNlriTypeSerializer(NodeCase.class, nodeParser);
70 final DataContainerNodeAttrBuilder<NodeIdentifier, UnkeyedListEntryNode> linkstateBI = ImmutableUnkeyedListEntryNodeBuilder.create();
71 linkstateBI.withNodeIdentifier(new NodeIdentifier(CLinkstateDestination.QNAME));
73 final ImmutableLeafNodeBuilder<String> protocolId = new ImmutableLeafNodeBuilder<>();
74 protocolId.withNodeIdentifier(LinkstateNlriParser.PROTOCOL_ID_NID);
75 protocolId.withValue("isis-level2");
76 linkstateBI.addChild(protocolId.build());
78 final ImmutableLeafNodeBuilder<BigInteger> identifier = new ImmutableLeafNodeBuilder<>();
79 identifier.withNodeIdentifier(LinkstateNlriParser.IDENTIFIER_NID);
80 identifier.withValue(BigInteger.ONE);
81 linkstateBI.addChild(identifier.build());
83 final DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> objectType = Builders.choiceBuilder();
84 objectType.withNodeIdentifier(LinkstateNlriParser.OBJECT_TYPE_NID);
86 final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> nodeDescriptors = Builders.containerBuilder();
87 nodeDescriptors.withNodeIdentifier(LinkstateNlriParser.NODE_DESCRIPTORS_NID);
89 final ImmutableLeafNodeBuilder<Long> asNumber = new ImmutableLeafNodeBuilder<>();
90 asNumber.withNodeIdentifier(NodeNlriParser.AS_NUMBER_NID);
91 asNumber.withValue(72L);
92 nodeDescriptors.addChild(asNumber.build());
94 final ImmutableLeafNodeBuilder<Long> areaID = new ImmutableLeafNodeBuilder<>();
95 areaID.withNodeIdentifier(NodeNlriParser.AREA_NID);
96 areaID.withValue(2697513L);
97 nodeDescriptors.addChild(areaID.build());
99 final ImmutableLeafNodeBuilder<Long> domainID = new ImmutableLeafNodeBuilder<>();
100 domainID.withNodeIdentifier(NodeNlriParser.DOMAIN_NID);
101 domainID.withValue(0x28282828L);
102 nodeDescriptors.addChild(domainID.build());
104 final DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> crouterId = Builders.choiceBuilder();
105 crouterId.withNodeIdentifier(new NodeIdentifier(CRouterIdentifier.QNAME));
107 final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> isisNode = Builders.containerBuilder();
108 isisNode.withNodeIdentifier(NodeNlriParser.ISIS_PSEUDONODE_NID);
110 final ImmutableLeafNodeBuilder<byte[]> isoSystemID = new ImmutableLeafNodeBuilder<>();
111 isoSystemID.withNodeIdentifier(NodeNlriParser.ISO_SYSTEM_NID);
112 isoSystemID.withValue(new byte[]{0, 0, 0, 0, 0, (byte) 0x39});
114 final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> isisRouter = Builders.containerBuilder();
115 isisRouter.withNodeIdentifier(NodeNlriParser.ISIS_ROUTER_NID);
116 isisRouter.addChild(isoSystemID.build());
118 isisNode.addChild(isisRouter.build());
119 isisNode.addChild(Builders.leafBuilder().withNodeIdentifier(NodeNlriParser.PSN_NID).withValue((short) 5).build());
120 crouterId.addChild(isisNode.build());
122 nodeDescriptors.addChild(crouterId.build());
123 objectType.addChild(nodeDescriptors.build());
124 linkstateBI.addChild(objectType.build());
126 final UnkeyedListNode routes = ImmutableUnkeyedListNodeBuilder.create()
127 .withNodeIdentifier(new NodeIdentifier(CLinkstateDestination.QNAME))
128 .addChild(linkstateBI.build())
131 final ContainerNode destination = ImmutableContainerNodeBuilder.create().
133 .withNodeIdentifier(new NodeIdentifier(CLinkstateDestination.QNAME))
136 final ContainerNode attributes = ImmutableContainerNodeBuilder.create()
137 .withNodeIdentifier(new NodeIdentifier(Attributes.QNAME))
140 link.putDestinationRoutes(tx, yangIdentifier, destination, attributes, ROUTES_NODE_ID);
142 Assert.assertEquals(1, this.routes.size());
144 link.deleteDestinationRoutes(tx, yangIdentifier, destination, ROUTES_NODE_ID);
146 Assert.assertEquals(0, this.routes.size());