X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgp%2Fparser-mock%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fbgp%2Fparser%2Fmock%2FBGPMessageParserMockTest.java;h=6bdd9532a608b338481f1a3746c4dfc30d770a31;hb=66b8611ab00a626167bf20556d7cbb5ec00ca124;hp=ab40907714c5d57fe45522d3a820f287fb39dc19;hpb=e839341f0730816c55fec9313929f03b74262276;p=bgpcep.git diff --git a/bgp/parser-mock/src/test/java/org/opendaylight/protocol/bgp/parser/mock/BGPMessageParserMockTest.java b/bgp/parser-mock/src/test/java/org/opendaylight/protocol/bgp/parser/mock/BGPMessageParserMockTest.java index ab40907714..6bdd9532a6 100644 --- a/bgp/parser-mock/src/test/java/org/opendaylight/protocol/bgp/parser/mock/BGPMessageParserMockTest.java +++ b/bgp/parser-mock/src/test/java/org/opendaylight/protocol/bgp/parser/mock/BGPMessageParserMockTest.java @@ -10,199 +10,213 @@ package org.opendaylight.protocol.bgp.parser.mock; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; +import com.google.common.collect.Lists; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.io.ByteArrayOutputStream; -import java.io.IOException; import java.io.InputStream; -import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; - import org.junit.Before; import org.junit.Test; import org.opendaylight.protocol.bgp.parser.BGPDocumentedException; import org.opendaylight.protocol.bgp.parser.BGPParsingException; import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.Open; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.OpenBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.ProtocolVersion; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.Update; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.UpdateBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParametersBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.CParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.AsPathBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.OriginBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.as.path.Segments; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.as.path.SegmentsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.update.PathAttributesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.PathAttributes1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.PathAttributes1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.destination.destination.type.DestinationIpv6Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.c.parameters.CMultiprotocol; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.c.parameters.CMultiprotocolBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.c.parameters.c.multiprotocol.MultiprotocolCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.path.attributes.MpReachNlriBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.path.attributes.mp.reach.nlri.AdvertizedRoutesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpOrigin; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv6AddressFamily; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.MplsLabeledVpnSubsequentAddressFamily; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.as.path.segment.c.segment.CAListBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.as.path.segment.c.segment.c.a.list.AsSequence; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.as.path.segment.c.segment.c.a.list.AsSequenceBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.CNextHop; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.CIpv6NextHopBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.c.ipv6.next.hop.Ipv6NextHopBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.ipv6.prefixes.DestinationIpv6Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.ipv6.prefixes.destination.ipv6.Ipv6PrefixesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationIpv6CaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.Open; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.OpenBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.ProtocolVersion; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.Update; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.UpdateBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.BgpParameters; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.BgpParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.OptionalCapabilities; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.OptionalCapabilitiesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.optional.capabilities.CParameters; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.optional.capabilities.CParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.AttributesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.attributes.AsPathBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.attributes.OriginBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.attributes.as.path.Segments; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.attributes.as.path.SegmentsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes1Builder; +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.multiprotocol.rev180329.CParameters1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.MultiprotocolCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.MpReachNlriBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.mp.reach.nlri.AdvertizedRoutesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.BgpOrigin; +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.Ipv6AddressFamily; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.MplsLabeledVpnSubsequentAddressFamily; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.UnicastSubsequentAddressFamily; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.next.hop.CNextHop; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.next.hop.c.next.hop.Ipv6NextHopCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.next.hop.c.next.hop.ipv6.next.hop._case.Ipv6NextHopBuilder; import org.opendaylight.yangtools.yang.binding.Notification; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint8; public class BGPMessageParserMockTest { - private final byte[][] inputBytes = new byte[11][]; - private final List messages = Lists.newArrayList(); - - @Before - public void init() throws Exception { - // Creating input bytes and update messages - for (int i = 0; i < this.inputBytes.length; i++) { - this.inputBytes[i] = this.fillInputBytes(i); - this.messages.add(this.fillMessages(i)); - } - } - - /** - * Test if mock implementation of parser returns correct message - * - * @throws BGPParsingException - * @throws BGPDocumentedException - * @throws IOException - */ - @Test - public void testGetUpdateMessage() throws BGPParsingException, BGPDocumentedException, IOException { - final Map updateMap = Maps.newHashMap(); - for (int i = 0; i < this.inputBytes.length; i++) { - updateMap.put(this.inputBytes[i], this.messages.get(i)); - } - - final BGPMessageParserMock mockParser = new BGPMessageParserMock(updateMap); - - for (int i = 0; i < this.inputBytes.length; i++) { - assertEquals(this.messages.get(i), mockParser.parseMessage(this.inputBytes[i])); - } - assertNotSame(this.messages.get(3), mockParser.parseMessage(this.inputBytes[8])); - } - - /** - * Test if method throws IllegalArgumentException after finding no BGPUpdateMessage associated with given byte[] key - * - * @throws BGPDocumentedException - * @throws BGPParsingException - * @throws IOException - */ - @Test(expected = IllegalArgumentException.class) - public void testGetUpdateMessageException() throws BGPParsingException, BGPDocumentedException, IOException { - final Map updateMap = Maps.newHashMap(); - for (int i = 0; i < this.inputBytes.length; i++) { - updateMap.put(this.inputBytes[i], this.messages.get(i)); - } - - final BGPMessageParserMock mockParser = new BGPMessageParserMock(updateMap); - mockParser.parseMessage(new byte[] { 7, 4, 6 }); - } - - /** - * Helper method to fill inputBytes variable - * - * @param fileNumber parameter to distinguish between files from which bytes are read - */ - private byte[] fillInputBytes(final int fileNumber) throws Exception { - - final InputStream is = this.getClass().getResourceAsStream("/up" + fileNumber + ".bin"); - final ByteArrayOutputStream bis = new ByteArrayOutputStream(); - final byte[] data = new byte[60]; - int nRead = 0; - - while ((nRead = is.read(data, 0, data.length)) != -1) { - bis.write(data, 0, nRead); - } - bis.flush(); - return bis.toByteArray(); - } - - /** - * Helper method to fill messages variable - * - * @param asn this parameter is passed to ASNumber constructor - */ - private Update fillMessages(final long asn) throws UnknownHostException { - - final UpdateBuilder builder = new UpdateBuilder(); - - final List asnums = Lists.newArrayList(new AsSequenceBuilder().setAs(new AsNumber(asn)).build()); - final List asPath = Lists.newArrayList(); - asPath.add(new SegmentsBuilder().setCSegment(new CAListBuilder().setAsSequence(asnums).build()).build()); - final CNextHop nextHop = new CIpv6NextHopBuilder().setIpv6NextHop( - new Ipv6NextHopBuilder().setGlobal(new Ipv6Address("2001:db8::1")).setLinkLocal(new Ipv6Address("fe80::c001:bff:fe7e:0")).build()).build(); - - final Ipv6Prefix pref1 = new Ipv6Prefix("2001:db8:1:2::/64"); - final Ipv6Prefix pref2 = new Ipv6Prefix("2001:db8:1:1::/64"); - final Ipv6Prefix pref3 = new Ipv6Prefix("2001:db8:1::/64"); - - PathAttributesBuilder paBuilder = new PathAttributesBuilder(); - paBuilder.setOrigin(new OriginBuilder().setValue(BgpOrigin.Igp).build()); - paBuilder.setAsPath(new AsPathBuilder().setSegments(asPath).build()); - - MpReachNlriBuilder mpReachBuilder = new MpReachNlriBuilder(); - mpReachBuilder.setAfi(Ipv6AddressFamily.class); - mpReachBuilder.setSafi(UnicastSubsequentAddressFamily.class); - mpReachBuilder.setCNextHop(nextHop); - mpReachBuilder.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType( - new DestinationIpv6Builder().setIpv6Prefixes(Lists.newArrayList(pref1, pref2, pref3)).build()).build()); - - paBuilder.addAugmentation(PathAttributes1.class, new PathAttributes1Builder().setMpReachNlri(mpReachBuilder.build()).build()); - - builder.setPathAttributes(paBuilder.build()); - - return builder.build(); - } - - @Test - public void testGetOpenMessage() throws BGPParsingException, BGPDocumentedException, IOException { - final Map openMap = Maps.newHashMap(); - - final Set type = Sets.newHashSet(); - type.add(new BgpTableTypeImpl(Ipv4AddressFamily.class, MplsLabeledVpnSubsequentAddressFamily.class)); - - final List params = Lists.newArrayList(); - - final CParameters par = new CMultiprotocolBuilder().setMultiprotocolCapability( - new MultiprotocolCapabilityBuilder().setAfi(Ipv4AddressFamily.class).setSafi(MplsLabeledVpnSubsequentAddressFamily.class).build()).build(); - params.add(new BgpParametersBuilder().setCParameters(par).build()); - - final byte[] input = new byte[] { 5, 8, 13, 21 }; - - openMap.put( - input, - new OpenBuilder().setMyAsNumber(30).setHoldTimer(30).setBgpParameters(params).setVersion(new ProtocolVersion((short) 4)).build()); - - final BGPMessageParserMock mockParser = new BGPMessageParserMock(openMap); - - final Set result = Sets.newHashSet(); - for (final BgpParameters p : ((Open) mockParser.parseMessage(input)).getBgpParameters()) { - final CParameters cp = p.getCParameters(); - final BgpTableType t = new BgpTableTypeImpl(((CMultiprotocol) cp).getMultiprotocolCapability().getAfi(), ((CMultiprotocol) cp).getMultiprotocolCapability().getSafi()); - result.add(t); - } - - assertEquals(type, result); - } + private final byte[][] inputBytes = new byte[11][]; + private final List messages = new ArrayList<>(); + + @Before + public void init() throws Exception { + // Creating input bytes and update messages + for (int i = 0; i < this.inputBytes.length; i++) { + this.inputBytes[i] = this.fillInputBytes(i); + this.messages.add(fillMessages(i)); + } + } + + /** + * Test if mock implementation of parser returns correct message. + */ + @Test + public void testGetUpdateMessage() throws BGPParsingException, BGPDocumentedException { + final Map updateMap = new HashMap<>(); + for (int i = 0; i < this.inputBytes.length; i++) { + updateMap.put(Unpooled.copiedBuffer(this.inputBytes[i]), this.messages.get(i)); + } + final BGPMessageParserMock mockParser = new BGPMessageParserMock(updateMap); + + for (int i = 0; i < this.inputBytes.length; i++) { + assertEquals(this.messages.get(i), + mockParser.parseMessage(Unpooled.copiedBuffer(this.inputBytes[i]), null)); + } + assertNotSame(this.messages.get(3), + mockParser.parseMessage(Unpooled.copiedBuffer(this.inputBytes[8]), null)); + } + + /** + * Test if method throws IllegalArgumentException after finding no BGPUpdateMessage + * associated with given byte[] key. + */ + @Test(expected = IllegalArgumentException.class) + public void testGetUpdateMessageException() throws BGPParsingException, BGPDocumentedException { + final Map updateMap = new HashMap<>(); + for (int i = 0; i < this.inputBytes.length; i++) { + updateMap.put(Unpooled.copiedBuffer(this.inputBytes[i]), this.messages.get(i)); + } + final BGPMessageParserMock mockParser = new BGPMessageParserMock(updateMap); + mockParser.parseMessage(Unpooled.copiedBuffer(new byte[]{7, 4, 6}), null); + } + + /** + * Helper method to fill inputBytes variable. + * + * @param fileNumber parameter to distinguish between files from which bytes are read + */ + private byte[] fillInputBytes(final int fileNumber) throws Exception { + final ByteArrayOutputStream bis = new ByteArrayOutputStream(); + final byte[] data = new byte[60]; + int read; + try (InputStream is = this.getClass().getResourceAsStream("/up" + fileNumber + ".bin")) { + while ((read = is.read(data, 0, data.length)) != -1) { + bis.write(data, 0, read); + } + bis.flush(); + is.close(); + } + return bis.toByteArray(); + } + + /** + * Helper method to fill messages variable. + * + * @param asn this parameter is passed to ASNumber constructor + */ + private static Update fillMessages(final long asn) { + + final UpdateBuilder builder = new UpdateBuilder(); + + final List asPath = new ArrayList<>(); + asPath.add(new SegmentsBuilder().setAsSequence(Lists.newArrayList(new AsNumber(Uint32.valueOf(asn)))).build()); + final CNextHop nextHop = new Ipv6NextHopCaseBuilder().setIpv6NextHop( + new Ipv6NextHopBuilder().setGlobal(new Ipv6AddressNoZone("2001:db8::1")) + .setLinkLocal(new Ipv6AddressNoZone("fe80::c001:bff:fe7e:0")).build()).build(); + + final Ipv6Prefix pref1 = new Ipv6Prefix("2001:db8:1:2::/64"); + final Ipv6Prefix pref2 = new Ipv6Prefix("2001:db8:1:1::/64"); + final Ipv6Prefix pref3 = new Ipv6Prefix("2001:db8:1::/64"); + + final AttributesBuilder paBuilder = new AttributesBuilder(); + paBuilder.setOrigin(new OriginBuilder().setValue(BgpOrigin.Igp).build()); + paBuilder.setAsPath(new AsPathBuilder().setSegments(asPath).build()); + + final MpReachNlriBuilder mpReachBuilder = new MpReachNlriBuilder(); + mpReachBuilder.setAfi(Ipv6AddressFamily.class); + mpReachBuilder.setSafi(UnicastSubsequentAddressFamily.class); + mpReachBuilder.setCNextHop(nextHop); + mpReachBuilder.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType( + new DestinationIpv6CaseBuilder().setDestinationIpv6( + new DestinationIpv6Builder().setIpv6Prefixes(Lists.newArrayList( + new Ipv6PrefixesBuilder().setPrefix(pref1).build(), + new Ipv6PrefixesBuilder().setPrefix(pref2).build(), + new Ipv6PrefixesBuilder().setPrefix(pref3).build())).build()).build()).build()); + + paBuilder.addAugmentation(Attributes1.class, + new Attributes1Builder().setMpReachNlri(mpReachBuilder.build()).build()); + + builder.setAttributes(paBuilder.build()); + + return builder.build(); + } + + @Test + public void testGetOpenMessage() throws BGPParsingException, BGPDocumentedException { + final Map openMap = new HashMap<>(); + + final Set type = new HashSet<>(); + type.add(new BgpTableTypeImpl(Ipv4AddressFamily.class, MplsLabeledVpnSubsequentAddressFamily.class)); + + final List params = new ArrayList<>(); + + final CParameters par = new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder() + .setMultiprotocolCapability(new MultiprotocolCapabilityBuilder().setAfi(Ipv4AddressFamily.class) + .setSafi(MplsLabeledVpnSubsequentAddressFamily.class).build()).build()).build(); + params.add(new BgpParametersBuilder().setOptionalCapabilities(Lists.newArrayList( + new OptionalCapabilitiesBuilder().setCParameters(par).build())).build()); + + final byte[] input = new byte[]{5, 8, 13, 21}; + + openMap.put(Unpooled.copiedBuffer(input), new OpenBuilder() + .setMyAsNumber(Uint16.valueOf(30)) + .setHoldTimer(Uint16.valueOf(30)) + .setBgpParameters(params) + .setVersion(new ProtocolVersion(Uint8.valueOf(4))) + .build()); + + final BGPMessageParserMock mockParser = new BGPMessageParserMock(openMap); + + final Set result = new HashSet<>(); + for (final BgpParameters p : ((Open) mockParser.parseMessage(Unpooled.copiedBuffer(input), null)) + .getBgpParameters()) { + for (final OptionalCapabilities capa : p.getOptionalCapabilities()) { + final CParameters cp = capa.getCParameters(); + if (cp.augmentation(CParameters1.class) != null && cp.augmentation(CParameters1.class) + .getMultiprotocolCapability() != null) { + final BgpTableType t = new BgpTableTypeImpl(cp.augmentation(CParameters1.class) + .getMultiprotocolCapability().getAfi(), + cp.augmentation(CParameters1.class).getMultiprotocolCapability().getSafi()); + result.add(t); + } + } + } + assertEquals(type, result); + } }