Adapt mpls plugin to recent VPP API changes 72/11072/2
authorMarek Gradzki <[email protected]>
Mon, 12 Mar 2018 07:50:58 +0000 (08:50 +0100)
committerMarek Gradzki <[email protected]>
Mon, 12 Mar 2018 08:17:33 +0000 (09:17 +0100)
MPLS API changes were introduced by:
https://gerrit.fd.io/r/#/c/10781/

Change-Id: I0423a4cfdf3f0654324118a1d34864a079bff5d1
Signed-off-by: Marek Gradzki <[email protected]>
13 files changed:
bgp/bgp-prefix-sid/src/main/java/io/fd/hc2vpp/bgp/prefix/sid/IpRouteRequestProducer.java
bgp/bgp-prefix-sid/src/main/java/io/fd/hc2vpp/bgp/prefix/sid/MplsRouteRequestProducer.java
bgp/bgp-prefix-sid/src/test/java/io/fd/hc2vpp/bgp/prefix/sid/BgpPrefixSidMplsWriterTest.java
mpls/impl/src/main/java/io/fd/hc2vpp/mpls/ImposeAndForwardWriter.java
mpls/impl/src/main/java/io/fd/hc2vpp/mpls/Ipv4LookupWriter.java
mpls/impl/src/main/java/io/fd/hc2vpp/mpls/MplsLookupWriter.java
mpls/impl/src/main/java/io/fd/hc2vpp/mpls/MplsSwapWriter.java
mpls/impl/src/test/java/io/fd/hc2vpp/mpls/ImposeAndForwardTest.java
mpls/impl/src/test/java/io/fd/hc2vpp/mpls/PopAndIpv4LookupTest.java
mpls/impl/src/test/java/io/fd/hc2vpp/mpls/PopAndMplsLookupTest.java
mpls/impl/src/test/java/io/fd/hc2vpp/mpls/SwapAndForwardTest.java
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/MplsLabelTranslator.java [new file with mode: 0644]
vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/MplsLabelTranslatorTest.java [new file with mode: 0644]

index 4093a04..865993d 100644 (file)
@@ -20,7 +20,9 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static io.fd.hc2vpp.bgp.prefix.sid.MplsRouteRequestProducer.MPLS_LABEL_INVALID;
 
 import io.fd.hc2vpp.common.translate.util.Ipv4Translator;
+import io.fd.hc2vpp.common.translate.util.MplsLabelTranslator;
 import io.fd.vpp.jvpp.core.dto.IpAddDelRoute;
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
 import java.util.List;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
@@ -102,7 +104,7 @@ interface IpRouteRequestProducer {
             // TODO(HC2VPP-271): add support for special labels, e.g. implicit null (for PHP).
 
             // Push label received via BGP on packets destined to the prefix it was assigned to:
-            request.nextHopOutLabelStack = new int[] {label};
+            request.nextHopOutLabelStack =  new FibMplsLabel[] {MplsLabelTranslator.INSTANCE.translate(label)};
             request.nextHopNOutLabels = 1;
         }
     }
index 659cb99..83a07a9 100644 (file)
@@ -19,7 +19,9 @@ package io.fd.hc2vpp.bgp.prefix.sid;
 import static com.google.common.base.Preconditions.checkArgument;
 
 import io.fd.hc2vpp.common.translate.util.Ipv4Translator;
+import io.fd.hc2vpp.common.translate.util.MplsLabelTranslator;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDel;
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
 import java.util.List;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
@@ -63,7 +65,7 @@ interface MplsRouteRequestProducer extends Ipv4Translator {
         return request;
     }
 
-    final class Impl implements Ipv4Translator {
+    final class Impl implements Ipv4Translator, MplsLabelTranslator {
         private static MplsRouteAddDel mplsRouteAddDel(final boolean isAdd) {
             final MplsRouteAddDel request = new MplsRouteAddDel();
             request.mrIsAdd = Ipv4Translator.INSTANCE.booleanToByte(isAdd);
@@ -145,7 +147,7 @@ interface MplsRouteRequestProducer extends Ipv4Translator {
             // TODO(HC2VPP-271): add support for special labels, e.g. implicit null (for PHP).
 
             // swap one label to another
-            request.mrNextHopOutLabelStack = new int[] {label};
+            request.mrNextHopOutLabelStack = new FibMplsLabel[] {MplsLabelTranslator.INSTANCE.translate(label)};
             request.mrNextHopNOutLabels = 1;
         }
     }
index 93b6ac6..aefd74a 100644 (file)
@@ -35,6 +35,7 @@ import io.fd.vpp.jvpp.core.dto.IpAddDelRouteReply;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDel;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDelReply;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
 import java.util.Collections;
 import org.junit.Before;
 import org.junit.Test;
@@ -189,7 +190,9 @@ public class BgpPrefixSidMplsWriterTest implements FutureProducer, ByteDataTrans
 
         request.mrLabel = 16102;
 
-        request.mrNextHopOutLabelStack = new int[] {16101};
+        final FibMplsLabel mplsLabel = new FibMplsLabel();
+        mplsLabel.label = 16101;
+        request.mrNextHopOutLabelStack = new FibMplsLabel[] {mplsLabel};
         request.mrNextHopNOutLabels = 1;
 
         request.mrEos = booleanToByte(isEos);
@@ -209,7 +212,9 @@ public class BgpPrefixSidMplsWriterTest implements FutureProducer, ByteDataTrans
         request.nextHopAddress = new byte[] {5, 6, 7, 8};
         request.nextHopSwIfIndex = -1;
 
-        request.nextHopOutLabelStack = new int[] {16101};
+        final FibMplsLabel mplsLabel = new FibMplsLabel();
+        mplsLabel.label = 16101;
+        request.nextHopOutLabelStack = new FibMplsLabel[] {mplsLabel};
         request.nextHopNOutLabels = 1;
         return request;
     }
index 861ab9d..40efd75 100644 (file)
@@ -19,11 +19,13 @@ package io.fd.hc2vpp.mpls;
 import static com.google.common.base.Preconditions.checkArgument;
 
 import io.fd.hc2vpp.common.translate.util.Ipv4Translator;
+import io.fd.hc2vpp.common.translate.util.MplsLabelTranslator;
 import io.fd.hc2vpp.common.translate.util.NamingContext;
 import io.fd.honeycomb.translate.MappingContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.IpAddDelRoute;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
 import java.util.List;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
@@ -47,7 +49,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
  *
  * @see <a href="https://git.fd.io/vpp/tree/src/vnet/ip/ip.api">ip_add_del_route</a> definition
  */
-final class ImposeAndForwardWriter implements LspWriter, Ipv4Translator {
+final class ImposeAndForwardWriter implements LspWriter, Ipv4Translator, MplsLabelTranslator {
     private final FutureJVppCore vppApi;
     private final NamingContext interfaceContext;
 
@@ -115,7 +117,7 @@ final class ImposeAndForwardWriter implements LspWriter, Ipv4Translator {
 
         final MplsLabel outgoingLabel = path.getOutgoingLabel();
         checkArgument(outgoingLabel != null, "Configuring impose-and-forward, but outgoing-label is missing.");
-        request.nextHopOutLabelStack = new int[] {outgoingLabel.getValue().intValue()};
+        request.nextHopOutLabelStack = new FibMplsLabel[] {translate(outgoingLabel.getValue())};
         request.nextHopNOutLabels = 1;
 
         return path.getOutgoingInterface();
@@ -140,7 +142,8 @@ final class ImposeAndForwardWriter implements LspWriter, Ipv4Translator {
         checkArgument(numberOfLabels > 0 && numberOfLabels < MAX_LABELS, "Number of labels (%s) not in range (0, %s].",
             numberOfLabels, MAX_LABELS, numberOfLabels);
         request.nextHopNOutLabels = (byte) numberOfLabels;
-        request.nextHopOutLabelStack = labels.stream().mapToInt(label -> label.getValue().intValue()).toArray();
+        request.nextHopOutLabelStack =
+            labels.stream().map(label -> translate(label.getValue())).toArray(FibMplsLabel[]::new);
 
         return paths.getOutgoingInterface();
     }
index 94862c5..be26166 100644 (file)
@@ -22,6 +22,7 @@ import io.fd.honeycomb.translate.MappingContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDel;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.mpls._static.rev170310.StaticLspConfig;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.mpls._static.rev170310._static.lsp.Config;
@@ -61,7 +62,7 @@ final class Ipv4LookupWriter implements LspWriter, MplsInSegmentTranslator {
         request.mrNextHopProto = IPV4_PROTOCOL;
         request.mrNextHopWeight = 1;
         request.mrNextHop = new byte[0]; // no next hop since we POP
-        request.mrNextHopOutLabelStack = new int[0]; // no new labels
+        request.mrNextHopOutLabelStack = new FibMplsLabel[0]; // no new labels
         request.mrNextHopSwIfIndex = -1;
         request.mrNextHopViaLabel = MPLS_LABEL_INVALID;
 
index d5d4872..86e7bde 100644 (file)
@@ -22,6 +22,7 @@ import io.fd.honeycomb.translate.MappingContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDel;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.mpls._static.rev170310.StaticLspConfig;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.mpls._static.rev170310._static.lsp.Config;
@@ -61,7 +62,7 @@ final class MplsLookupWriter implements LspWriter, MplsInSegmentTranslator {
         request.mrNextHopProto = MPLS_PROTOCOL;
         request.mrNextHopWeight = 1;
         request.mrNextHop = new byte[0]; // no next hop since we POP
-        request.mrNextHopOutLabelStack = new int[0]; // no new labels
+        request.mrNextHopOutLabelStack = new FibMplsLabel[0]; // no new labels
         request.mrNextHopSwIfIndex = -1;
         request.mrNextHopViaLabel = MPLS_LABEL_INVALID;
 
index 8d834fe..28aba7a 100644 (file)
@@ -19,11 +19,13 @@ package io.fd.hc2vpp.mpls;
 import static com.google.common.base.Preconditions.checkArgument;
 
 import io.fd.hc2vpp.common.translate.util.Ipv4Translator;
+import io.fd.hc2vpp.common.translate.util.MplsLabelTranslator;
 import io.fd.hc2vpp.common.translate.util.NamingContext;
 import io.fd.honeycomb.translate.MappingContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDel;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
@@ -40,7 +42,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
  *
  * @see <a href="https://git.fd.io/vpp/tree/src/vnet/mpls/mpls.api">mpls_route_add_del</a> definition
  */
-final class MplsSwapWriter implements LspWriter, Ipv4Translator, MplsInSegmentTranslator {
+final class MplsSwapWriter implements LspWriter, Ipv4Translator, MplsInSegmentTranslator, MplsLabelTranslator {
 
     private final FutureJVppCore vppApi;
     private final NamingContext interfaceContext;
@@ -83,7 +85,7 @@ final class MplsSwapWriter implements LspWriter, Ipv4Translator, MplsInSegmentTr
 
         final MplsLabel outgoingLabel = path.getOutgoingLabel();
         checkArgument(outgoingLabel != null, "Configuring swap-and-forward, but outgoing-label is missing.");
-        request.mrNextHopOutLabelStack = new int[] {outgoingLabel.getValue().intValue()};
+        request.mrNextHopOutLabelStack = new FibMplsLabel[] {translate(outgoingLabel.getValue())};
         request.mrNextHopNOutLabels = 1;
 
         final String outgoingInterface = path.getOutgoingInterface();
index c1ced8e..6eb559d 100644 (file)
@@ -23,11 +23,13 @@ import static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet
 
 import io.fd.hc2vpp.common.test.write.WriterCustomizerTest;
 import io.fd.hc2vpp.common.translate.util.ByteDataTranslator;
+import io.fd.hc2vpp.common.translate.util.MplsLabelTranslator;
 import io.fd.hc2vpp.common.translate.util.NamingContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.IpAddDelRoute;
 import io.fd.vpp.jvpp.core.dto.IpAddDelRouteReply;
 import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
 import java.util.Arrays;
 import java.util.Collections;
 import org.junit.Test;
@@ -52,7 +54,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.types.rev170227.MplsLabel;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
-public class ImposeAndForwardTest extends WriterCustomizerTest implements ByteDataTranslator {
+public class ImposeAndForwardTest extends WriterCustomizerTest implements ByteDataTranslator, MplsLabelTranslator {
 
     private static final String IF_NAME = "local0";
     private static final int IF_INDEX = 123;
@@ -180,7 +182,7 @@ public class ImposeAndForwardTest extends WriterCustomizerTest implements ByteDa
         request.nextHopAddress = nextHop;
         request.nextHopNOutLabels = 1;
         request.nextHopViaLabel = LspWriter.MPLS_LABEL_INVALID;
-        request.nextHopOutLabelStack = new int[] {label};
+        request.nextHopOutLabelStack = new FibMplsLabel[] {translate(label)};
         return request;
     }
 
@@ -194,7 +196,7 @@ public class ImposeAndForwardTest extends WriterCustomizerTest implements ByteDa
         request.nextHopAddress = new byte[] {10, 10, 12, 2};
         request.nextHopNOutLabels = 2;
         request.nextHopViaLabel = LspWriter.MPLS_LABEL_INVALID;
-        request.nextHopOutLabelStack = new int[] {102, 104};
+        request.nextHopOutLabelStack = new FibMplsLabel[] {translate(102), translate(104)};
         return request;
     }
 }
index e924cfa..61e1c6d 100644 (file)
@@ -27,6 +27,7 @@ import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDel;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDelReply;
 import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.mpls._static.rev170310.Mpls1;
@@ -119,7 +120,7 @@ public class PopAndIpv4LookupTest extends WriterCustomizerTest implements ByteDa
         request.mrNextHop = new byte[0]; // POP, so no next hop
         request.mrNextHopSwIfIndex = -1; // this is what CLI is doing
         request.mrNextHopViaLabel = LspWriter.MPLS_LABEL_INVALID; // default value used by make test
-        request.mrNextHopOutLabelStack = new int[0];
+        request.mrNextHopOutLabelStack = new FibMplsLabel[0];
         return request;
     }
 }
index de32a19..f5a7697 100644 (file)
@@ -27,6 +27,7 @@ import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDel;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDelReply;
 import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.mpls._static.rev170310.Mpls1;
@@ -119,7 +120,7 @@ public class PopAndMplsLookupTest extends WriterCustomizerTest implements ByteDa
         request.mrNextHop = new byte[0]; // POP, so no next hop
         request.mrNextHopSwIfIndex = -1; // this is what CLI is doing
         request.mrNextHopViaLabel = LspWriter.MPLS_LABEL_INVALID; // default value used by make test
-        request.mrNextHopOutLabelStack = new int[0];
+        request.mrNextHopOutLabelStack = new FibMplsLabel[0];
         return request;
     }
 }
index 6fd9e02..5b0e124 100644 (file)
@@ -22,11 +22,13 @@ import static org.mockito.Mockito.when;
 
 import io.fd.hc2vpp.common.test.write.WriterCustomizerTest;
 import io.fd.hc2vpp.common.translate.util.ByteDataTranslator;
+import io.fd.hc2vpp.common.translate.util.MplsLabelTranslator;
 import io.fd.hc2vpp.common.translate.util.NamingContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDel;
 import io.fd.vpp.jvpp.core.dto.MplsRouteAddDelReply;
 import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
@@ -46,7 +48,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.types.rev170227.MplsLabel;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
-public class SwapAndForwardTest extends WriterCustomizerTest implements ByteDataTranslator {
+public class SwapAndForwardTest extends WriterCustomizerTest implements ByteDataTranslator, MplsLabelTranslator {
 
     private static final String IF_NAME = "local0";
     private static final int IF_INDEX = 123;
@@ -117,7 +119,7 @@ public class SwapAndForwardTest extends WriterCustomizerTest implements ByteData
         request.mrNextHopSwIfIndex = IF_INDEX;
         request.mrNextHopViaLabel = LspWriter.MPLS_LABEL_INVALID; // default value used by make test
         request.mrNextHopNOutLabels = 1;
-        request.mrNextHopOutLabelStack = new int[] {OUT_LABEL};
+        request.mrNextHopOutLabelStack = new FibMplsLabel[] {translate(OUT_LABEL)};
         return request;
     }
 }
diff --git a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/MplsLabelTranslator.java b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/MplsLabelTranslator.java
new file mode 100644 (file)
index 0000000..0065373
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.hc2vpp.common.translate.util;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
+import javax.annotation.Nonnull;
+
+/**
+ * Utility for Translating between different representations of MPLS label.
+ */
+public interface MplsLabelTranslator {
+    /**
+     * Make available also from static context.
+     */
+    MplsLabelTranslator INSTANCE = new MplsLabelTranslator() {
+    };
+
+    /**
+     * Builds {@link FibMplsLabel} from its YANG representation.
+     *
+     * @param label YANG representation of MPLS Label
+     * @return VPP representation of MPLS label
+     */
+    default FibMplsLabel translate(@Nonnull final Long label) {
+        checkNotNull(label, "MPLS label should not be null");
+        return translate(label.intValue());
+    }
+
+    /**
+     * Builds {@link FibMplsLabel} from int value.
+     *
+     * @param label MPLS Label value
+     * @return VPP representation of MPLS label
+     */
+    default FibMplsLabel translate(final int label) {
+        final FibMplsLabel fibMplsLabel = new FibMplsLabel();
+        fibMplsLabel.label = label;
+        return fibMplsLabel;
+    }
+}
diff --git a/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/MplsLabelTranslatorTest.java b/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/MplsLabelTranslatorTest.java
new file mode 100644 (file)
index 0000000..b0e7dd6
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.hc2vpp.common.translate.util;
+
+import static org.junit.Assert.assertEquals;
+
+import io.fd.vpp.jvpp.core.types.FibMplsLabel;
+import org.junit.Test;
+
+public class MplsLabelTranslatorTest implements MplsLabelTranslator {
+    @Test
+    public void testTranslateLong() {
+        final int expectedLabel = 1048575;
+        final FibMplsLabel expected  = new FibMplsLabel();
+        expected.label = expectedLabel;
+        assertEquals(expected, translate(Long.valueOf(1048575)));
+    }
+    @Test
+    public void testTranslateInt() {
+        final int expectedLabel = 11;
+        final FibMplsLabel expected  = new FibMplsLabel();
+        expected.label = expectedLabel;
+        assertEquals(expected, translate(expectedLabel));
+    }
+
+}