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.IpAddressNoZone;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone;
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.rev180329.RdTwoOctetAs;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.RouteDistinguisher;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev180329.AdjRibInType;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev180329.Peer.PeerDistinguisher;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev180329.PeerType;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev180329.PeerUpNotification;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev180329.PeerUpNotificationBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev180329.peer.header.PeerHeader;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev180329.peer.header.PeerHeaderBuilder;
36 import org.opendaylight.yangtools.yang.binding.Notification;
37 import org.opendaylight.yangtools.yang.common.Uint32;
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<>(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 assertEquals(perHeader, new PeerHeaderBuilder()
94 .setType(PeerType.forValue(0))
95 .setAdjRibInType(AdjRibInType.forValue(1))
97 .setAddress(new IpAddressNoZone(new Ipv4AddressNoZone("192.168.1.1")))
98 .setAs(new AsNumber(Uint32.valueOf(168)))
99 .setBgpId(new Ipv4AddressNoZone("1.1.1.1"))
100 .setTimestampSec(new Timestamp(Uint32.valueOf(16909060)))
101 .setTimestampMicro(new Timestamp(Uint32.valueOf(16909060)))
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 .setType(PeerType.L3vpn)
117 .setPeerDistinguisher(new PeerDistinguisher(
118 new RouteDistinguisher(new RdTwoOctetAs("0:" + RD))))
119 .setAdjRibInType(AdjRibInType.forValue(1))
121 .setAddress(new IpAddressNoZone(new Ipv6AddressNoZone("2001::1")))
122 .setAs(new AsNumber(Uint32.valueOf(168)))
123 .setBgpId(new Ipv4AddressNoZone("1.1.1.2"))
124 .setTimestampSec(new Timestamp(Uint32.ZERO))
125 .setTimestampMicro(new Timestamp(Uint32.ZERO));
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));