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
9 package org.opendaylight.protocol.bmp.spi.parser;
11 import static org.junit.Assert.assertArrayEquals;
12 import static org.junit.Assert.assertEquals;
14 import io.netty.buffer.ByteBuf;
15 import io.netty.buffer.Unpooled;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
19 import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
20 import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext;
21 import org.opendaylight.protocol.util.ByteArray;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Timestamp;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.RdTwoOctetAs;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.RouteDistinguisher;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.AdjRibInType;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.Peer.PeerDistinguisher;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.PeerType;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.PeerUpNotification;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.PeerUpNotificationBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.peer.header.PeerHeader;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.peer.header.PeerHeaderBuilder;
36 import org.opendaylight.yangtools.concepts.Builder;
37 import org.opendaylight.yangtools.yang.binding.Notification;
39 public class AbstractBmpPerPeerMessageParserTest {
40 private static final String RD = "5:3";
41 private BGPExtensionProviderContext ctx;
42 private AbstractBmpPerPeerMessageParser<?> parser;
43 private final byte[] ipv6MsgWithDistinguishergBytes = {
44 (byte) 0x01, (byte) 0xc0,
46 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x05, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x03,
48 (byte) 0x20, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
49 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
51 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xA8,
53 (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x02,
54 0, 0, 0, 0, 0, 0, 0, 0
59 this.ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
60 final MessageRegistry msgRegistry = this.ctx.getMessageRegistry();
61 this.parser = new AbstractBmpPerPeerMessageParser<Builder<?>>(msgRegistry) {
63 public Notification parseMessageBody(final ByteBuf bytes) {
68 public int getBmpMessageType() {
75 public void testPerPeerHeader() {
76 final byte[] msgBytes = {
77 (byte) 0x00, (byte) 0x40, (byte) 0x00, (byte) 0x00,
78 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
80 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
81 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xC0, (byte) 0xA8, (byte) 0x01, (byte) 0x01,
83 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xA8,
85 (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01,
87 (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04, (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04,
90 final PeerHeader perHeader = AbstractBmpPerPeerMessageParser
91 .parsePerPeerHeader(Unpooled.wrappedBuffer(msgBytes));
93 final PeerHeaderBuilder phBuilder = new PeerHeaderBuilder();
94 phBuilder.setType(PeerType.forValue(0));
95 phBuilder.setAdjRibInType(AdjRibInType.forValue(1));
96 phBuilder.setIpv4(true);
97 phBuilder.setAddress(new IpAddress(new Ipv4Address("192.168.1.1")));
98 phBuilder.setAs(new AsNumber(168L));
99 phBuilder.setBgpId(new Ipv4Address("1.1.1.1"));
100 phBuilder.setTimestampSec(new Timestamp(16909060L));
101 phBuilder.setTimestampMicro(new Timestamp(16909060L));
102 assertEquals(perHeader, phBuilder.build());
104 final ByteBuf aggregator = Unpooled.buffer();
105 this.parser.serializePerPeerHeader(perHeader, aggregator);
106 assertArrayEquals(msgBytes, ByteArray.getAllBytes(aggregator));
110 public void testPerPeerHeaderIpv6() {
112 final PeerHeader perHeader = AbstractBmpPerPeerMessageParser
113 .parsePerPeerHeader(Unpooled.wrappedBuffer(this.ipv6MsgWithDistinguishergBytes));
115 final PeerHeaderBuilder phBuilder = new PeerHeaderBuilder();
116 phBuilder.setType(PeerType.L3vpn);
117 phBuilder.setPeerDistinguisher(new PeerDistinguisher(
118 new RouteDistinguisher(new RdTwoOctetAs("0:" + RD))));
119 phBuilder.setAdjRibInType(AdjRibInType.forValue(1));
120 phBuilder.setIpv4(false);
121 phBuilder.setAddress(new IpAddress(new Ipv6Address("2001::1")));
122 phBuilder.setAs(new AsNumber(168L));
123 phBuilder.setBgpId(new Ipv4Address("1.1.1.2"));
124 phBuilder.setTimestampSec(new Timestamp(0L));
125 phBuilder.setTimestampMicro(new Timestamp(0L));
127 assertEquals(phBuilder.build(), perHeader);
129 final ByteBuf aggregator = Unpooled.buffer();
130 phBuilder.setTimestampSec(null);
131 phBuilder.setTimestampMicro(null);
132 this.parser.serializePerPeerHeader(phBuilder.build(), aggregator);
133 assertArrayEquals(this.ipv6MsgWithDistinguishergBytes, ByteArray.getAllBytes(aggregator));
137 public void testBgpMessageRegistry() {
138 final MessageRegistry msgRegistry = this.ctx.getMessageRegistry();
139 assertEquals(msgRegistry, this.parser.getBgpMessageRegistry());
143 public void testSerializeMessageBody() {
144 final PeerHeader perHeader = AbstractBmpPerPeerMessageParser
145 .parsePerPeerHeader(Unpooled.wrappedBuffer(this.ipv6MsgWithDistinguishergBytes));
147 final PeerUpNotification peerNotif = new PeerUpNotificationBuilder().setPeerHeader(perHeader).build();
149 final ByteBuf aggregator = Unpooled.buffer();
150 this.parser.serializeMessageBody(peerNotif, aggregator);
151 assertArrayEquals(this.ipv6MsgWithDistinguishergBytes, ByteArray.getAllBytes(aggregator));