From 76f7bc4abbe4c4743d4749528d81b4684317938c Mon Sep 17 00:00:00 2001 From: Dana Kutenicsova Date: Sat, 5 Apr 2014 20:54:10 +0200 Subject: [PATCH] Added unit tests for bgp-parser-api. Change-Id: Ifdd15e880a695d705f5689d0d3e7b48bce78cc25 Signed-off-by: Dana Kutenicsova --- .../protocol/bgp/parser/AsNumberUtil.java | 14 +++++++--- .../bgp/parser/BGPDocumentedException.java | 8 +++--- .../protocol/bgp/parser/APITest.java | 26 +++++++++++++++++++ 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java index 3b83f28174..d1f4e4d4a4 100644 --- a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java +++ b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java @@ -17,25 +17,31 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.c.parameters.as4.bytes._case.As4BytesCapability; public final class AsNumberUtil { + private AsNumberUtil() { throw new UnsupportedOperationException("Utility class should never be instantiated"); } + /** + * Looks for As4Byte Capability in capabilities and extracts AS number. + * + * @param open remote BGP open message + * @return AsNumber + */ public static AsNumber advertizedAsNumber(final Open open) { // Look for AS4 capability very defensively final List params = open.getBgpParameters(); if (params != null) { - for (BgpParameters p : params) { + for (final BgpParameters p : params) { final CParameters cp = p.getCParameters(); - if (cp != null && cp instanceof As4BytesCase) { - final As4BytesCapability capa = ((As4BytesCase)cp).getAs4BytesCapability(); + if (cp instanceof As4BytesCase) { + final As4BytesCapability capa = ((As4BytesCase) cp).getAs4BytesCapability(); if (capa != null) { return capa.getAsNumber(); } } } } - // Fallback to whatever is in the header return new AsNumber(open.getMyAsNumber().longValue()); } diff --git a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/BGPDocumentedException.java b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/BGPDocumentedException.java index 5f078a8779..8d01f4f69e 100644 --- a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/BGPDocumentedException.java +++ b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/BGPDocumentedException.java @@ -9,6 +9,7 @@ package org.opendaylight.protocol.bgp.parser; import java.util.Arrays; +import org.opendaylight.protocol.util.Values; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -95,10 +96,11 @@ public final class BGPDocumentedException extends Exception { } public static BGPDocumentedException badMessageLength(final String message, final int length) { - Preconditions.checkArgument(length >= 0 && length <= 65535); + Preconditions.checkArgument(length >= 0 && length <= Values.UNSIGNED_SHORT_MAX_VALUE); - return new BGPDocumentedException(message, BGPError.BAD_MSG_LENGTH, new byte[] { UnsignedBytes.checkedCast(length / 256), - UnsignedBytes.checkedCast(length % 256) }); + return new BGPDocumentedException(message, BGPError.BAD_MSG_LENGTH, new byte[] { + UnsignedBytes.checkedCast(length / (Values.UNSIGNED_BYTE_MAX_VALUE + 1)), + UnsignedBytes.checkedCast(length % (Values.UNSIGNED_BYTE_MAX_VALUE + 1)) }); } } diff --git a/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java b/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java index 7fa2d036ad..daaafa85f9 100644 --- a/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java +++ b/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java @@ -10,7 +10,18 @@ package org.opendaylight.protocol.bgp.parser; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import java.util.ArrayList; +import java.util.List; + import org.junit.Test; +import org.opendaylight.protocol.util.ByteArray; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber; +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.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.c.parameters.As4BytesCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; public class APITest { @@ -20,6 +31,9 @@ public class APITest { assertEquals("Some message", de.getMessage()); assertEquals(BGPError.BAD_BGP_ID, de.getError()); assertNull(de.getData()); + + final BGPDocumentedException doc = BGPDocumentedException.badMessageLength("Wrong length", 5000); + assertEquals(5000, ByteArray.bytesToInt(doc.getData())); } @Test @@ -37,4 +51,16 @@ public class APITest { public void testTerminationReason() { assertEquals(BGPError.BAD_PEER_AS.toString(), new BGPTerminationReason(BGPError.BAD_PEER_AS).getErrorMessage()); } + + @Test + public void testAsNumberUtil() { + final List params = new ArrayList<>(); + params.add(new BgpParametersBuilder().setCParameters( + new As4BytesCaseBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(new AsNumber(35L)).build()).build()).build()); + final Open open1 = new OpenBuilder().setBgpParameters(params).build(); + assertEquals(35L, AsNumberUtil.advertizedAsNumber(open1).getValue().longValue()); + + final Open open2 = new OpenBuilder().setMyAsNumber(10).build(); + assertEquals(10, AsNumberUtil.advertizedAsNumber(open2).getValue().intValue()); + } } -- 2.36.6