X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgp%2Fparser-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fbgp%2Fparser%2Fimpl%2FComplementaryTest.java;h=55a50958c165953e50045503f1dc475e9265441e;hb=3c135df98a164d4207775de96a5217a392d1949e;hp=7afcc9de0b669de34d9e2a0dd777198f05d45590;hpb=e839341f0730816c55fec9313929f03b74262276;p=bgpcep.git diff --git a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java index 7afcc9de0b..55a50958c1 100644 --- a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java +++ b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java @@ -13,243 +13,241 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.fail; -import java.util.Map; - +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import java.util.ArrayList; +import java.util.List; import org.junit.Test; import org.opendaylight.protocol.bgp.parser.BGPDocumentedException; -import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl; -import org.opendaylight.protocol.bgp.parser.impl.message.update.CommunitiesParser; +import org.opendaylight.protocol.bgp.parser.impl.message.update.ExtendedCommunitiesAttributeParser; import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry; import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext; -import org.opendaylight.protocol.util.ByteList; +import org.opendaylight.protocol.util.ByteArray; +import org.opendaylight.protocol.util.NoopReferenceCache; 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.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.LinkstateAddressFamily; -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.open.bgp.parameters.c.parameters.CAs4Bytes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.c.parameters.CAs4BytesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.c.parameters.c.as4.bytes.As4BytesCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.AggregatorBuilder; -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.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.MultiprotocolCapability; -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.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.AttributesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.AggregatorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.ExtendedCommunities; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapability.RestartFlags; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.Tables; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.graceful.restart.capability.TablesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpAggregator; 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.ShortAsNumber; 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.extended.community.extended.community.CAsSpecificExtendedCommunity; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.CAsSpecificExtendedCommunityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.CInet4SpecificExtendedCommunity; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.CInet4SpecificExtendedCommunityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.COpaqueExtendedCommunity; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.COpaqueExtendedCommunityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.CRouteOriginExtendedCommunity; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.CRouteOriginExtendedCommunityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.CRouteTargetExtendedCommunity; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.CRouteTargetExtendedCommunityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.c.as.specific.extended.community.AsSpecificExtendedCommunityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.c.inet4.specific.extended.community.Inet4SpecificExtendedCommunityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.c.opaque.extended.community.OpaqueExtendedCommunityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.c.route.origin.extended.community.RouteOriginExtendedCommunityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.c.route.target.extended.community.RouteTargetExtendedCommunityBuilder; - -import com.google.common.collect.Maps; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.AsSpecificExtendedCommunityCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.AsSpecificExtendedCommunityCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.Inet4SpecificExtendedCommunityCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.Inet4SpecificExtendedCommunityCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.OpaqueExtendedCommunityCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.OpaqueExtendedCommunityCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.RouteOriginExtendedCommunityCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.RouteOriginExtendedCommunityCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.RouteTargetExtendedCommunityCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.RouteTargetExtendedCommunityCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.as.specific.extended.community._case.AsSpecificExtendedCommunityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.inet4.specific.extended.community._case.Inet4SpecificExtendedCommunityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.opaque.extended.community._case.OpaqueExtendedCommunityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.route.origin.extended.community._case.RouteOriginExtendedCommunityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.extended.community.extended.community.route.target.extended.community._case.RouteTargetExtendedCommunityBuilder; public class ComplementaryTest { - @Test - public void testBGPParameter() { - - final BgpTableType t = new BgpTableTypeImpl(LinkstateAddressFamily.class, UnicastSubsequentAddressFamily.class); - final BgpTableType t1 = new BgpTableTypeImpl(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class); - - final MultiprotocolCapability cap = new MultiprotocolCapabilityBuilder().setAfi(LinkstateAddressFamily.class).setSafi( - UnicastSubsequentAddressFamily.class).build(); - final CParameters tlv1 = new CMultiprotocolBuilder().setMultiprotocolCapability(cap).build(); - - final MultiprotocolCapability cap1 = new MultiprotocolCapabilityBuilder().setAfi(Ipv4AddressFamily.class).setSafi( - UnicastSubsequentAddressFamily.class).build(); - final CParameters tlv2 = new CMultiprotocolBuilder().setMultiprotocolCapability(cap1).build(); - - final Map tt = Maps.newHashMap(); - tt.put(t, true); - tt.put(t1, false); - - // final BGPParameter tlv3 = new GracefulCapability(false, 0, tt); - - final CParameters tlv4 = new CAs4BytesBuilder().setAs4BytesCapability( - new As4BytesCapabilityBuilder().setAsNumber(new AsNumber((long) 40)).build()).build(); - - // assertFalse(((GracefulCapability) tlv3).isRestartFlag()); - - // assertEquals(0, ((GracefulCapability) tlv3).getRestartTimerValue()); - - assertFalse(tlv1.equals(tlv2)); - - // assertNotSame(tlv1.hashCode(), tlv3.hashCode()); - - // assertNotSame(tlv2.toString(), tlv3.toString()); - - // assertEquals(((GracefulCapability) tlv3).getTableTypes(), tt); - - assertEquals(cap.getSafi(), cap1.getSafi()); - - assertNotSame(cap.getAfi(), cap1.getAfi()); - - assertEquals(40, ((CAs4Bytes) tlv4).getAs4BytesCapability().getAsNumber().getValue().longValue()); - - assertEquals( - new CAs4BytesBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(new AsNumber((long) 40)).build()).build(), - tlv4); - } - - @Test - public void testBGPAggregatorImpl() { - final BgpAggregator ipv4 = new AggregatorBuilder().setAsNumber(new AsNumber((long) 5524)).setNetworkAddress( - new Ipv4Address("124.55.42.1")).build(); - final BgpAggregator ipv4i = new AggregatorBuilder().setAsNumber(new AsNumber((long) 5525)).setNetworkAddress( - new Ipv4Address("124.55.42.1")).build(); - - assertNotSame(ipv4.hashCode(), ipv4i.hashCode()); - - assertNotSame(ipv4.getAsNumber(), ipv4i.getAsNumber()); - - assertEquals(ipv4.getNetworkAddress(), ipv4i.getNetworkAddress()); - } - - @Test - public void testCommunitiesParser() { - CAsSpecificExtendedCommunity as = null; - try { - as = (CAsSpecificExtendedCommunity) CommunitiesParser.parseExtendedCommunity(new byte[] { 0, 5, 0, 54, 0, 0, 1, 76 }); - } catch (final BGPDocumentedException e1) { - fail("Not expected exception: " + e1); - } - CAsSpecificExtendedCommunity expected = new CAsSpecificExtendedCommunityBuilder().setAsSpecificExtendedCommunity( - new AsSpecificExtendedCommunityBuilder().setTransitive(false).setGlobalAdministrator(new AsNumber(54L)).setLocalAdministrator( - new byte[] { 0, 0, 1, 76 }).build()).build(); - assertEquals(expected.getAsSpecificExtendedCommunity().isTransitive(), as.getAsSpecificExtendedCommunity().isTransitive()); - assertEquals(expected.getAsSpecificExtendedCommunity().getGlobalAdministrator(), - as.getAsSpecificExtendedCommunity().getGlobalAdministrator()); - assertArrayEquals(expected.getAsSpecificExtendedCommunity().getLocalAdministrator(), - as.getAsSpecificExtendedCommunity().getLocalAdministrator()); - - try { - as = (CAsSpecificExtendedCommunity) CommunitiesParser.parseExtendedCommunity(new byte[] { 40, 5, 0, 54, 0, 0, 1, 76 }); - } catch (final BGPDocumentedException e1) { - fail("Not expected exception: " + e1); - } - expected = new CAsSpecificExtendedCommunityBuilder().setAsSpecificExtendedCommunity( - new AsSpecificExtendedCommunityBuilder().setTransitive(true).setGlobalAdministrator(new AsNumber(54L)).setLocalAdministrator( - new byte[] { 0, 0, 1, 76 }).build()).build(); - assertEquals(expected.getAsSpecificExtendedCommunity().isTransitive(), as.getAsSpecificExtendedCommunity().isTransitive()); - - CRouteTargetExtendedCommunity rtc = null; - try { - rtc = (CRouteTargetExtendedCommunity) CommunitiesParser.parseExtendedCommunity(new byte[] { 1, 2, 0, 35, 4, 2, 8, 7 }); - } catch (final BGPDocumentedException e1) { - fail("Not expected exception: " + e1); - } - final CRouteTargetExtendedCommunity rexpected = new CRouteTargetExtendedCommunityBuilder().setRouteTargetExtendedCommunity( - new RouteTargetExtendedCommunityBuilder().setGlobalAdministrator(new AsNumber(35L)).setLocalAdministrator( - new byte[] { 4, 2, 8, 7 }).build()).build(); - assertEquals(rexpected.getRouteTargetExtendedCommunity().getGlobalAdministrator(), - rtc.getRouteTargetExtendedCommunity().getGlobalAdministrator()); - assertArrayEquals(rexpected.getRouteTargetExtendedCommunity().getLocalAdministrator(), - rtc.getRouteTargetExtendedCommunity().getLocalAdministrator()); - - CRouteOriginExtendedCommunity roc = null; - try { - roc = (CRouteOriginExtendedCommunity) CommunitiesParser.parseExtendedCommunity(new byte[] { 0, 3, 0, 24, 4, 2, 8, 7 }); - } catch (final BGPDocumentedException e1) { - fail("Not expected exception: " + e1); - } - final CRouteOriginExtendedCommunity oexpected = new CRouteOriginExtendedCommunityBuilder().setRouteOriginExtendedCommunity( - new RouteOriginExtendedCommunityBuilder().setGlobalAdministrator(new AsNumber(24L)).setLocalAdministrator( - new byte[] { 4, 2, 8, 7 }).build()).build(); - assertEquals(oexpected.getRouteOriginExtendedCommunity().getGlobalAdministrator(), - roc.getRouteOriginExtendedCommunity().getGlobalAdministrator()); - assertArrayEquals(oexpected.getRouteOriginExtendedCommunity().getLocalAdministrator(), - roc.getRouteOriginExtendedCommunity().getLocalAdministrator()); - - CInet4SpecificExtendedCommunity sec = null; - try { - sec = (CInet4SpecificExtendedCommunity) CommunitiesParser.parseExtendedCommunity(new byte[] { 41, 6, 12, 51, 2, 5, 21, 45 }); - } catch (final BGPDocumentedException e1) { - fail("Not expected exception: " + e1); - } - final CInet4SpecificExtendedCommunity iexpected = new CInet4SpecificExtendedCommunityBuilder().setInet4SpecificExtendedCommunity( - new Inet4SpecificExtendedCommunityBuilder().setTransitive(true).setGlobalAdministrator(new Ipv4Address("12.51.2.5")).setLocalAdministrator( - new byte[] { 21, 45 }).build()).build(); - assertEquals(iexpected.getInet4SpecificExtendedCommunity().isTransitive(), sec.getInet4SpecificExtendedCommunity().isTransitive()); - assertEquals(iexpected.getInet4SpecificExtendedCommunity().getGlobalAdministrator(), - sec.getInet4SpecificExtendedCommunity().getGlobalAdministrator()); - assertArrayEquals(iexpected.getInet4SpecificExtendedCommunity().getLocalAdministrator(), - sec.getInet4SpecificExtendedCommunity().getLocalAdministrator()); - - COpaqueExtendedCommunity oec = null; - try { - oec = (COpaqueExtendedCommunity) CommunitiesParser.parseExtendedCommunity(new byte[] { 3, 6, 21, 45, 5, 4, 3, 1 }); - } catch (final BGPDocumentedException e1) { - fail("Not expected exception: " + e1); - } - final COpaqueExtendedCommunity oeexpected = new COpaqueExtendedCommunityBuilder().setOpaqueExtendedCommunity( - new OpaqueExtendedCommunityBuilder().setTransitive(false).setValue(new byte[] { 21, 45, 5, 4, 3, 1 }).build()).build(); - assertEquals(oeexpected.getOpaqueExtendedCommunity().isTransitive(), oec.getOpaqueExtendedCommunity().isTransitive()); - assertArrayEquals(oeexpected.getOpaqueExtendedCommunity().getValue(), oec.getOpaqueExtendedCommunity().getValue()); - - try { - oec = (COpaqueExtendedCommunity) CommunitiesParser.parseExtendedCommunity(new byte[] { 43, 6, 21, 45, 5, 4, 3, 1 }); - } catch (final BGPDocumentedException e1) { - fail("Not expected exception: " + e1); - } - final COpaqueExtendedCommunity oeexpected1 = new COpaqueExtendedCommunityBuilder().setOpaqueExtendedCommunity( - new OpaqueExtendedCommunityBuilder().setTransitive(true).setValue(new byte[] { 21, 45, 5, 4, 3, 1 }).build()).build(); - assertEquals(oeexpected1.getOpaqueExtendedCommunity().isTransitive(), oec.getOpaqueExtendedCommunity().isTransitive()); - assertArrayEquals(oeexpected1.getOpaqueExtendedCommunity().getValue(), oec.getOpaqueExtendedCommunity().getValue()); - - try { - CommunitiesParser.parseExtendedCommunity(new byte[] { 11, 11, 21, 45, 5, 4, 3, 1 }); - fail("Exception should have occured."); - } catch (final BGPDocumentedException e) { - assertEquals("Could not parse Extended Community type: 11", e.getMessage()); - } - } - - @Test - public void testBGPHeaderParser() throws Exception { - final MessageRegistry msgReg = ServiceLoaderBGPExtensionProviderContext.createConsumerContext().getMessageRegistry(); - try { - msgReg.parseMessage(new byte[] { (byte) 0, (byte) 0 }); - fail("Exception should have occured."); - } catch (final IllegalArgumentException e) { - assertEquals("Too few bytes in passed array. Passed: 2. Expected: >= 19.", e.getMessage()); - } - } - - @Test - public void testByteList() { - final ByteList b1 = new ByteList(); - b1.add(new byte[] { 3, 4, 8 }); - b1.add(new byte[] { 3, 4, 9 }); - - final ByteList b2 = new ByteList(); - b2.add(new byte[] { 3, 4, 8 }); - b2.add(new byte[] { 3, 4, 9 }); - - assertEquals(b1, b2); - assertEquals(b1.toString(), b2.toString()); - } - - @Test - public void testMessageParser() throws Exception { - final MessageRegistry msgReg = ServiceLoaderBGPExtensionProviderContext.createConsumerContext().getMessageRegistry(); - String ex = ""; - try { - msgReg.serializeMessage(null); - } catch (final IllegalArgumentException e) { - ex = e.getMessage(); - } - assertEquals("BGPMessage is mandatory.", ex); - } + @Test + public void testBGPParameter() { + + final MultiprotocolCapability cap = new MultiprotocolCapabilityBuilder().setAfi(Ipv6AddressFamily.class).setSafi( + UnicastSubsequentAddressFamily.class).build(); + final CParameters tlv1 = new MultiprotocolCaseBuilder().setMultiprotocolCapability(cap).build(); + + final MultiprotocolCapability cap1 = new MultiprotocolCapabilityBuilder().setAfi(Ipv4AddressFamily.class).setSafi( + UnicastSubsequentAddressFamily.class).build(); + final CParameters tlv2 = new MultiprotocolCaseBuilder().setMultiprotocolCapability(cap1).build(); + + final List tt = new ArrayList<>(); + tt.add(new TablesBuilder().setAfi(Ipv6AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).build()); + tt.add(new TablesBuilder().setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).build()); + + final GracefulRestartCapability tlv3 = new GracefulRestartCapabilityBuilder().setRestartFlags(new RestartFlags(Boolean.FALSE)).setRestartTime(0).setTables(tt).build(); + + final CParameters tlv4 = new As4BytesCaseBuilder().setAs4BytesCapability( + new As4BytesCapabilityBuilder().setAsNumber(new AsNumber((long) 40)).build()).build(); + + assertFalse(tlv3.getRestartFlags().isRestartState()); + + assertEquals(0, tlv3.getRestartTime().intValue()); + + assertFalse(tlv1.equals(tlv2)); + + assertNotSame(tlv1.hashCode(), tlv3.hashCode()); + + assertNotSame(tlv2.toString(), tlv3.toString()); + + assertEquals(tlv3.getTables(), tt); + + assertEquals(cap.getSafi(), cap1.getSafi()); + + assertNotSame(cap.getAfi(), cap1.getAfi()); + + assertEquals(40, ((As4BytesCase) tlv4).getAs4BytesCapability().getAsNumber().getValue().longValue()); + + assertEquals(new As4BytesCaseBuilder().setAs4BytesCapability( + new As4BytesCapabilityBuilder().setAsNumber(new AsNumber((long) 40)).build()).build(), tlv4); + } + + @Test + public void testBGPAggregatorImpl() { + final BgpAggregator ipv4 = new AggregatorBuilder().setAsNumber(new AsNumber((long) 5524)).setNetworkAddress( + new Ipv4Address("124.55.42.1")).build(); + final BgpAggregator ipv4i = new AggregatorBuilder().setAsNumber(new AsNumber((long) 5525)).setNetworkAddress( + new Ipv4Address("124.55.42.1")).build(); + + assertNotSame(ipv4.hashCode(), ipv4i.hashCode()); + + assertNotSame(ipv4.getAsNumber(), ipv4i.getAsNumber()); + + assertEquals(ipv4.getNetworkAddress(), ipv4i.getNetworkAddress()); + } + + private static final byte[] communitiesBytes = { 0, 5, 0, 54, 0, 0, 1, 76, + 40, 5, 0, 54, 0, 0, 1, 76, + 1, 2, 0, 35, 4, 2, 8, 7, + 0, 3, 0, 24, 4, 2, 8, 7, + 41, 6, 12, 51, 2, 5, 21, 45, + 3, 6, 21, 45, 5, 4, 3, 1, + 43, 6, 21, 45, 5, 4, 3, 1 }; + + @Test + public void testExtendedCommunitiesParser() { + final ExtendedCommunitiesAttributeParser parser = new ExtendedCommunitiesAttributeParser(NoopReferenceCache.getInstance()); + final AttributesBuilder pa = new AttributesBuilder(); + try { + parser.parseAttribute(Unpooled.copiedBuffer(communitiesBytes), pa); + } catch (final BGPDocumentedException e1) { + fail("Not expected exception: " + e1); + } + AsSpecificExtendedCommunityCase expected = new AsSpecificExtendedCommunityCaseBuilder().setAsSpecificExtendedCommunity( + new AsSpecificExtendedCommunityBuilder().setTransitive(false).setGlobalAdministrator(new ShortAsNumber(54L)).setLocalAdministrator( + new byte[] { 0, 0, 1, 76 }).build()).build(); + ExtendedCommunities ex = pa.getExtendedCommunities().get(0); + AsSpecificExtendedCommunityCase result = (AsSpecificExtendedCommunityCase) ex.getExtendedCommunity(); + assertEquals(expected.getAsSpecificExtendedCommunity().isTransitive(), result.getAsSpecificExtendedCommunity().isTransitive()); + assertEquals(expected.getAsSpecificExtendedCommunity().getGlobalAdministrator(), + result.getAsSpecificExtendedCommunity().getGlobalAdministrator()); + assertArrayEquals(expected.getAsSpecificExtendedCommunity().getLocalAdministrator(), + result.getAsSpecificExtendedCommunity().getLocalAdministrator()); + assertEquals(0, ex.getCommType().intValue()); + + expected = new AsSpecificExtendedCommunityCaseBuilder().setAsSpecificExtendedCommunity( + new AsSpecificExtendedCommunityBuilder().setTransitive(true).setGlobalAdministrator(new ShortAsNumber(54L)).setLocalAdministrator( + new byte[] { 0, 0, 1, 76 }).build()).build(); + ex = pa.getExtendedCommunities().get(1); + result = (AsSpecificExtendedCommunityCase) ex.getExtendedCommunity(); + assertEquals(expected.getAsSpecificExtendedCommunity().isTransitive(), result.getAsSpecificExtendedCommunity().isTransitive()); + assertEquals(40, ex.getCommType().intValue()); + + final RouteTargetExtendedCommunityCase rexpected = new RouteTargetExtendedCommunityCaseBuilder().setRouteTargetExtendedCommunity( + new RouteTargetExtendedCommunityBuilder().setGlobalAdministrator(new ShortAsNumber(35L)).setLocalAdministrator( + new byte[] { 4, 2, 8, 7 }).build()).build(); + ex = pa.getExtendedCommunities().get(2); + final RouteTargetExtendedCommunityCase rresult = (RouteTargetExtendedCommunityCase) ex.getExtendedCommunity(); + assertEquals(rexpected.getRouteTargetExtendedCommunity().getGlobalAdministrator(), + rresult.getRouteTargetExtendedCommunity().getGlobalAdministrator()); + assertArrayEquals(rexpected.getRouteTargetExtendedCommunity().getLocalAdministrator(), + rresult.getRouteTargetExtendedCommunity().getLocalAdministrator()); + assertEquals(1, ex.getCommType().intValue()); + assertEquals(2, ex.getCommSubType().intValue()); + + final RouteOriginExtendedCommunityCase oexpected = new RouteOriginExtendedCommunityCaseBuilder().setRouteOriginExtendedCommunity( + new RouteOriginExtendedCommunityBuilder().setGlobalAdministrator(new ShortAsNumber(24L)).setLocalAdministrator( + new byte[] { 4, 2, 8, 7 }).build()).build(); + ex = pa.getExtendedCommunities().get(3); + final RouteOriginExtendedCommunityCase oresult = (RouteOriginExtendedCommunityCase) ex.getExtendedCommunity(); + assertEquals(oexpected.getRouteOriginExtendedCommunity().getGlobalAdministrator(), + oresult.getRouteOriginExtendedCommunity().getGlobalAdministrator()); + assertArrayEquals(oexpected.getRouteOriginExtendedCommunity().getLocalAdministrator(), + oresult.getRouteOriginExtendedCommunity().getLocalAdministrator()); + assertEquals(0, ex.getCommType().intValue()); + assertEquals(3, ex.getCommSubType().intValue()); + + final Inet4SpecificExtendedCommunityCase iexpected = new Inet4SpecificExtendedCommunityCaseBuilder().setInet4SpecificExtendedCommunity( + new Inet4SpecificExtendedCommunityBuilder().setTransitive(true).setGlobalAdministrator(new Ipv4Address("12.51.2.5")).setLocalAdministrator( + new byte[] { 21, 45 }).build()).build(); + ex = pa.getExtendedCommunities().get(4); + final Inet4SpecificExtendedCommunityCase iresult = (Inet4SpecificExtendedCommunityCase) ex.getExtendedCommunity(); + assertEquals(iexpected.getInet4SpecificExtendedCommunity().isTransitive(), + iresult.getInet4SpecificExtendedCommunity().isTransitive()); + assertEquals(iexpected.getInet4SpecificExtendedCommunity().getGlobalAdministrator(), + iresult.getInet4SpecificExtendedCommunity().getGlobalAdministrator()); + assertArrayEquals(iexpected.getInet4SpecificExtendedCommunity().getLocalAdministrator(), + iresult.getInet4SpecificExtendedCommunity().getLocalAdministrator()); + assertEquals(41, ex.getCommType().intValue()); + + final OpaqueExtendedCommunityCase oeexpected = new OpaqueExtendedCommunityCaseBuilder().setOpaqueExtendedCommunity( + new OpaqueExtendedCommunityBuilder().setTransitive(false).setValue(new byte[] { 21, 45, 5, 4, 3, 1 }).build()).build(); + ex = pa.getExtendedCommunities().get(5); + final OpaqueExtendedCommunityCase oeresult = (OpaqueExtendedCommunityCase) ex.getExtendedCommunity(); + assertEquals(oeexpected.getOpaqueExtendedCommunity().isTransitive(), oeresult.getOpaqueExtendedCommunity().isTransitive()); + assertArrayEquals(oeexpected.getOpaqueExtendedCommunity().getValue(), oeresult.getOpaqueExtendedCommunity().getValue()); + assertEquals(3, ex.getCommType().intValue()); + + final OpaqueExtendedCommunityCase oeexpected1 = new OpaqueExtendedCommunityCaseBuilder().setOpaqueExtendedCommunity( + new OpaqueExtendedCommunityBuilder().setTransitive(true).setValue(new byte[] { 21, 45, 5, 4, 3, 1 }).build()).build(); + ex = pa.getExtendedCommunities().get(6); + final OpaqueExtendedCommunityCase oeresult1 = (OpaqueExtendedCommunityCase) ex.getExtendedCommunity(); + assertEquals(oeexpected1.getOpaqueExtendedCommunity().isTransitive(), oeresult1.getOpaqueExtendedCommunity().isTransitive()); + assertArrayEquals(oeexpected1.getOpaqueExtendedCommunity().getValue(), oeresult1.getOpaqueExtendedCommunity().getValue()); + assertEquals(43, ex.getCommType().intValue()); + + final ByteBuf serializedBuffer = Unpooled.buffer(); + parser.serializeAttribute(pa.build(), serializedBuffer); + assertArrayEquals(new byte[]{ (byte)192, 16, 56, 0, 5, 0, 54, 0, 0, 1, 76, + 40, 5, 0, 54, 0, 0, 1, 76, + 1, 2, 0, 35, 4, 2, 8, 7, + 0, 3, 0, 24, 4, 2, 8, 7, + 41, 6, 12, 51, 2, 5, 21, 45, + 3, 6, 21, 45, 5, 4, 3, 1, + 43, 6, 21, 45, 5, 4, 3, 1 }, ByteArray.readAllBytes(serializedBuffer)); + + try { + parser.parseAttribute(Unpooled.copiedBuffer(new byte[] { 11, 11, 21, 45, 5, 4, 3, 1 }), pa); + fail("Exception should have occured."); + } catch (final BGPDocumentedException e) { + assertEquals("Could not parse Extended Community type: 11", e.getMessage()); + } + } + + @Test + public void testBGPHeaderParser() throws Exception { + final MessageRegistry msgReg = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance().getMessageRegistry(); + try { + msgReg.parseMessage(Unpooled.copiedBuffer(new byte[] { (byte) 0, (byte) 0 })); + fail("Exception should have occured."); + } catch (final IllegalArgumentException e) { + assertEquals("Too few bytes in passed array. Passed: 2. Expected: >= 19.", e.getMessage()); + } + } + + @Test + public void testMessageParser() throws Exception { + final MessageRegistry msgReg = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance().getMessageRegistry(); + String ex = ""; + try { + msgReg.serializeMessage(null, Unpooled.EMPTY_BUFFER); + } catch (final NullPointerException e) { + ex = e.getMessage(); + } + assertEquals("BGPMessage is mandatory.", ex); + } }