HONEYCOMB-70: add control ping to vpp-state
authorMarek Gradzki <[email protected]>
Mon, 31 Oct 2016 13:37:57 +0000 (14:37 +0100)
committerMarek Gradzki <[email protected]>
Mon, 31 Oct 2016 14:46:07 +0000 (15:46 +0100)
Change-Id: I7f02841d899465fd2156db0bb79fcc490cd4929f
Signed-off-by: Marek Gradzki <[email protected]>
v3po/api/src/main/yang/v3po.yang
v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppstate/VersionCustomizer.java
v3po/v3po2vpp/src/test/java/io/fd/honeycomb/translate/v3po/vppstate/VersionCustomizerTest.java
v3po/v3po2vpp/src/test/java/io/fd/honeycomb/translate/v3po/vppstate/VppStateTest.java

index 6d6d58d..d3869ab 100644 (file)
@@ -8,7 +8,8 @@ module v3po {
       "This revision adds the following new features:
        - ingress/egress ACLs support
        - moved ACL definitions to vpp-acl module
-       - updated l2 container constraint (permit IP address on BVI interface)";
+       - updated l2 container constraint (permit IP address on BVI interface)
+       - added PID of vpp process to vpp-state";
   }
 
   revision "2015-01-05" {
@@ -639,6 +640,11 @@ module v3po {
       leaf branch {
         type string;
       }
+      leaf pid {
+        type uint32;
+        description
+          "PID of the vpp process";
+      }
       description
       "vlib version info";
     }
index 71826dc..dfa0f96 100644 (file)
@@ -16,6 +16,7 @@
 
 package io.fd.honeycomb.translate.v3po.vppstate;
 
+import com.google.common.primitives.UnsignedInts;
 import io.fd.honeycomb.translate.read.ReadContext;
 import io.fd.honeycomb.translate.read.ReadFailedException;
 import io.fd.honeycomb.translate.spi.read.ReaderCustomizer;
@@ -25,6 +26,9 @@ import io.fd.honeycomb.translate.vpp.util.JvppReplyConsumer;
 import io.fd.vpp.jvpp.core.dto.ShowVersion;
 import io.fd.vpp.jvpp.core.dto.ShowVersionReply;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.dto.ControlPing;
+import io.fd.vpp.jvpp.dto.ControlPingReply;
+import io.fd.vpp.jvpp.dto.JVppReply;
 import java.util.concurrent.CompletionStage;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.VppStateBuilder;
@@ -54,7 +58,7 @@ public final class VersionCustomizer
     }
 
     @Override
-    public void readCurrentAttributes(@Nonnull InstanceIdentifier<Version> id, @Nonnull final VersionBuilder builder,
+    public void readCurrentAttributes(@Nonnull final InstanceIdentifier<Version> id, @Nonnull final VersionBuilder builder,
                                       @Nonnull final ReadContext context) throws ReadFailedException {
 
         // Execute with timeout
@@ -65,6 +69,14 @@ public final class VersionCustomizer
         builder.setName(toString(reply.program));
         builder.setBuildDate(toString(reply.buildDate));
         builder.setBuildDirectory(toString(reply.buildDirectory));
+        builder.setPid(getPid(id));
     }
 
+    private Long getPid(@Nonnull final InstanceIdentifier<Version> id) throws ReadFailedException {
+        final CompletionStage<JVppReply<ControlPing>> request = getFutureJVpp().send(new ControlPing());
+        final ControlPingReply reply = (ControlPingReply)getReplyForRead(request.toCompletableFuture(), id);
+        return UnsignedInts.toLong(reply.vpePid);
+    }
+
+
 }
index 0b03787..ab35bb3 100644 (file)
@@ -22,13 +22,15 @@ import static org.mockito.Mockito.when;
 
 import io.fd.honeycomb.translate.spi.read.ReaderCustomizer;
 import io.fd.honeycomb.vpp.test.read.ReaderCustomizerTest;
+import io.fd.vpp.jvpp.core.dto.ShowVersion;
+import io.fd.vpp.jvpp.core.dto.ShowVersionReply;
+import io.fd.vpp.jvpp.dto.ControlPing;
+import io.fd.vpp.jvpp.dto.ControlPingReply;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.VppStateBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.vpp.state.Version;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.vpp.state.VersionBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import io.fd.vpp.jvpp.core.dto.ShowVersion;
-import io.fd.vpp.jvpp.core.dto.ShowVersionReply;
 
 public class VersionCustomizerTest extends ReaderCustomizerTest<Version, VersionBuilder> {
 
@@ -50,7 +52,9 @@ public class VersionCustomizerTest extends ReaderCustomizerTest<Version, Version
         reply.buildDirectory = new byte[] {};
 
         when(api.showVersion(any(ShowVersion.class))).thenReturn(future(reply));
+        when(api.send(any(ControlPing.class))).thenReturn(future(new ControlPingReply()));
         getCustomizer().readCurrentAttributes(InstanceIdentifier.create(Version.class), new VersionBuilder(), ctx);
         verify(api).showVersion(any(ShowVersion.class));
+        verify(api).send(any(ControlPing.class));
     }
 }
\ No newline at end of file
index 9f3b8a4..cdb2b03 100644 (file)
@@ -39,6 +39,8 @@ import io.fd.honeycomb.translate.util.read.registry.CompositeReaderRegistryBuild
 import io.fd.honeycomb.vpp.test.util.NamingContextHelper;
 import io.fd.honeycomb.translate.vpp.util.NamingContext;
 import io.fd.honeycomb.vpp.test.util.FutureProducer;
+import io.fd.vpp.jvpp.dto.ControlPing;
+import io.fd.vpp.jvpp.dto.ControlPingReply;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -131,6 +133,7 @@ public class VppStateTest implements FutureProducer, NamingContextHelper {
             .setBuildDirectory("1")
             .setBranch("2")
             .setBuildDate("3")
+            .setPid(0L)
             .build();
     }
 
@@ -141,6 +144,8 @@ public class VppStateTest implements FutureProducer, NamingContextHelper {
         reply.version = version.getBranch().getBytes();
         reply.buildDirectory = version.getBuildDirectory().getBytes();
         when(api.showVersion(any(ShowVersion.class))).thenReturn(future(reply));
+        // Version Customizer uses ControlPing to obtain PID
+        when(api.send(any(ControlPing.class))).thenReturn(future(new ControlPingReply()));
     }
 
     private void whenL2FibTableDumpThenReturn(final List<L2FibTableEntry> entryList) {