BUG-2982 : moved path-attributes container to grouping
[bgpcep.git] / bgp / parser-impl / src / test / java / org / opendaylight / protocol / bgp / parser / impl / PathAttributeParserTest.java
index f68034c9920459ea3912430554f21d20da4eaef3..7be43ba9c7e16e40bd48f858dae682b4d7ac4284 100644 (file)
@@ -9,28 +9,81 @@ package org.opendaylight.protocol.bgp.parser.impl;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-import io.netty.buffer.Unpooled;
 
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import java.util.Arrays;
 import org.junit.Test;
 import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
 import org.opendaylight.protocol.bgp.parser.BGPParsingException;
+import org.opendaylight.protocol.bgp.parser.impl.message.update.AigpAttributeParser;
+import org.opendaylight.protocol.bgp.parser.spi.AttributeUtil;
+import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
 import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.Attributes;
+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.Aigp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.aigp.AigpTlv;
 
 /*
- * To test incorrect values.
+ * This class is aimed to test parsing and serializing path attributes.
  */
 public class PathAttributeParserTest {
-       @Test
-       public void testOriginParser() throws Exception {
-               try {
-                       ServiceLoaderBGPExtensionProviderContext.getSingletonInstance().getAttributeRegistry().parseAttributes(Unpooled.copiedBuffer(new byte[] { 0x40, 0x01, 0x01, 0x04 }));
-                       fail("This needs to fail.");
-               } catch (final BGPDocumentedException e) {
-                       assertEquals("Unknown Origin type.", e.getMessage());
-                       assertArrayEquals(new byte[] { 0x01, 0x01, 0x04 }, e.getData());
-               } catch (final BGPParsingException e) {
-                       fail("This exception should not occur.");
-               }
-       }
+
+    @Test
+    public void testOriginParser() {
+        try {
+            ServiceLoaderBGPExtensionProviderContext.getSingletonInstance().getAttributeRegistry().parseAttributes(
+                    Unpooled.copiedBuffer(new byte[] { 0x40, 0x01, 0x01, 0x04 }));
+            fail("This needs to fail.");
+        } catch (final BGPDocumentedException e) {
+            assertEquals("Unknown Origin type.", e.getMessage());
+            assertArrayEquals(new byte[] { 0x01, 0x01, 0x04 }, e.getData());
+        } catch (final BGPParsingException e) {
+            fail("This exception should not occur.");
+        }
+    }
+
+    @Test
+    public void testParsingAigpAttributeWithCorrectTLV() throws BGPDocumentedException, BGPParsingException {
+        final byte[] value = new byte[] { 1, 0, 11, 0, 0, 0, 0, 0, 0, 0, 8 };
+        final ByteBuf buffer = Unpooled.buffer();
+
+        AttributeUtil.formatAttribute(AttributeUtil.OPTIONAL, AigpAttributeParser.TYPE, Unpooled.copiedBuffer(value), buffer);
+
+        final BGPExtensionProviderContext providerContext = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
+        final Attributes pathAttributes = providerContext.getAttributeRegistry().parseAttributes(buffer);
+        final Aigp aigp = pathAttributes.getAigp();
+        final AigpTlv tlv = aigp.getAigpTlv();
+
+        assertNotNull("Tlv should not be null.", tlv);
+        assertEquals("Aigp tlv should have metric with value 8.", 8, tlv.getMetric().getValue().intValue());
+    }
+
+    @Test
+    public void testSerializingAigpAttribute() throws BGPDocumentedException, BGPParsingException {
+        final byte[] value = new byte[] { 1, 0, 11, 0, 0, 0, 0, 0, 0, 0, 8 };
+        final ByteBuf inputData = Unpooled.buffer();
+        final ByteBuf testBuffer = Unpooled.buffer();
+
+        AttributeUtil.formatAttribute(AttributeUtil.OPTIONAL, AigpAttributeParser.TYPE, Unpooled.copiedBuffer(value), inputData);
+
+        final BGPExtensionProviderContext providerContext = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
+        final Attributes pathAttributes = providerContext.getAttributeRegistry().parseAttributes(inputData);
+        final Aigp aigp = pathAttributes.getAigp();
+
+        final AttributesBuilder pathAttributesBuilder = new AttributesBuilder();
+        pathAttributesBuilder.setAigp(aigp);
+
+        final AigpAttributeParser parser = new AigpAttributeParser();
+        parser.serializeAttribute(pathAttributesBuilder.build(), testBuffer);
+
+        final byte[] unparserData = inputData.copy(0, inputData.writerIndex()).array();
+        final byte[] serializedData = testBuffer.copy(0, inputData.writerIndex()).array();
+
+        assertTrue("Buffers should be the same.", Arrays.equals(unparserData, serializedData));
+    }
 }