ddda27b5948c931cdd25870ec3e386c90a35a886
[bgpcep.git] / bmp / bmp-spi / src / test / java / org / opendaylight / protocol / bmp / spi / parser / AbstractBmpPerPeerMessageParserTest.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.protocol.bmp.spi.parser;
10
11 import static org.junit.Assert.assertArrayEquals;
12 import static org.junit.Assert.assertEquals;
13
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.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.concepts.Builder;
37 import org.opendaylight.yangtools.yang.binding.Notification;
38
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,
45         //Distinguisher
46         (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x05, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x03,
47          //IPV6 //2001::01
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,
50         //AS 168
51         (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xA8,
52         //Peer BGP ID 1.1.1.2
53         (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x02,
54         0, 0, 0, 0, 0, 0, 0, 0
55     };
56
57     @Before
58     public void setUp() {
59         this.ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
60         final MessageRegistry msgRegistry = this.ctx.getMessageRegistry();
61         this.parser = new AbstractBmpPerPeerMessageParser<Builder<?>>(msgRegistry) {
62             @Override
63             public Notification parseMessageBody(final ByteBuf bytes) {
64                 return null;
65             }
66
67             @Override
68             public int getBmpMessageType() {
69                 return 0;
70             }
71         };
72     }
73
74     @Test
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,
79             //IPV4 192.168.1.1
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,
82             //AS 168
83             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xA8,
84             //Peer BGP ID 1.1.1.1
85             (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01,
86             // Timestamp
87             (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04, (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04,
88         };
89
90         final PeerHeader perHeader = AbstractBmpPerPeerMessageParser
91                 .parsePerPeerHeader(Unpooled.wrappedBuffer(msgBytes));
92
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());
103
104         final ByteBuf aggregator = Unpooled.buffer();
105         this.parser.serializePerPeerHeader(perHeader, aggregator);
106         assertArrayEquals(msgBytes, ByteArray.getAllBytes(aggregator));
107     }
108
109     @Test
110     public void testPerPeerHeaderIpv6() {
111
112         final PeerHeader perHeader = AbstractBmpPerPeerMessageParser
113                 .parsePerPeerHeader(Unpooled.wrappedBuffer(this.ipv6MsgWithDistinguishergBytes));
114
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));
126
127         assertEquals(phBuilder.build(), perHeader);
128
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));
134     }
135
136     @Test
137     public void testBgpMessageRegistry() {
138         final MessageRegistry msgRegistry = this.ctx.getMessageRegistry();
139         assertEquals(msgRegistry, this.parser.getBgpMessageRegistry());
140     }
141
142     @Test
143     public void testSerializeMessageBody() {
144         final PeerHeader perHeader = AbstractBmpPerPeerMessageParser
145                 .parsePerPeerHeader(Unpooled.wrappedBuffer(this.ipv6MsgWithDistinguishergBytes));
146
147         final PeerUpNotification peerNotif = new PeerUpNotificationBuilder().setPeerHeader(perHeader).build();
148
149         final ByteBuf aggregator = Unpooled.buffer();
150         this.parser.serializeMessageBody(peerNotif, aggregator);
151         assertArrayEquals(this.ipv6MsgWithDistinguishergBytes, ByteArray.getAllBytes(aggregator));
152     }
153 }