Refactor Region gRPC NB service to use static registry binding
Change-Id: Ifa0666caffb659a5e40e1888150a947b07fc4d88
diff --git a/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbRegionService.java b/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbRegionService.java
index 744941f..e697a7a 100644
--- a/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbRegionService.java
+++ b/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbRegionService.java
@@ -15,11 +15,9 @@
*/
package org.onosproject.incubator.protobuf.services.nb;
-import org.onosproject.incubator.protobuf.models.net.RegionProtoTranslator;
import com.google.common.annotations.Beta;
-import io.grpc.Server;
-import io.grpc.ServerBuilder;
+import io.grpc.BindableService;
import io.grpc.stub.StreamObserver;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
@@ -27,28 +25,22 @@
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.onosproject.grpc.nb.net.region.RegionServiceGrpc.RegionServiceImplBase;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.region.RegionId;
-import org.onosproject.net.region.Region;
-import org.onosproject.net.region.RegionService;
-
-
-import java.io.IOException;
-
-import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionsRequest;
-import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionsReply;
-
-import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionRequest;
-import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionReply;
-
-import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionForDeviceRequest;
-import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionForDeviceReply;
-
-import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionDevicesRequest;
import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionDevicesReply;
-
-import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionHostsRequest;
+import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionDevicesRequest;
+import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionForDeviceReply;
+import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionForDeviceRequest;
import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionHostsReply;
+import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionHostsRequest;
+import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionReply;
+import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionRequest;
+import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionsReply;
+import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionsRequest;
+import org.onosproject.incubator.protobuf.models.net.RegionProtoTranslator;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.region.Region;
+import org.onosproject.net.region.RegionId;
+import org.onosproject.net.region.RegionService;
+import org.onosproject.protobuf.api.GrpcServiceRegistry;
import org.slf4j.Logger;
import static org.slf4j.LoggerFactory.getLogger;
@@ -60,30 +52,44 @@
@Component(immediate = true)
public class GrpcNbRegionService {
- private Server server;
private final Logger log = getLogger(getClass());
- private RegionServiceNBServerInternal innerClassInstance = null;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected GrpcServiceRegistry registry;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected RegionService regionService;
+ private RegionServiceNbServerInternal innerClassInstance = null;
+
@Activate
public void activate() {
- server = ServerBuilder.forPort(64000).addService(new RegionServiceNBServerInternal()).build();
- try {
- server.start();
- } catch (IOException e) {
- log.error("Failed to start server", e);
- throw new RuntimeException("Failed to start server", e);
- }
+
+ registry.register(getInnerClassInstance());
+ log.info("Started.");
}
@Deactivate
public void deactivate() {
- server.shutdown();
+
+ registry.unregister(getInnerClassInstance());
+ log.info("Stopped.");
}
- public class RegionServiceNBServerInternal extends RegionServiceImplBase {
+ /**
+ * Register Region Service, used for unit testing purposes.
+ *
+ * @return An instance of binding Region service
+ */
+ public InProcessServer<BindableService> registerInProcessServer() {
+ InProcessServer<BindableService> inprocessServer =
+ new InProcessServer(GrpcNbRegionService.RegionServiceNbServerInternal.class);
+ inprocessServer.addServiceToBind(getInnerClassInstance());
+
+ return inprocessServer;
+ }
+
+ private final class RegionServiceNbServerInternal extends RegionServiceImplBase {
/**
* Service for interacting with inventory of network control regions.
*/
@@ -153,9 +159,9 @@
}
}
- public RegionServiceNBServerInternal getInnerClassInstance() {
+ private RegionServiceNbServerInternal getInnerClassInstance() {
if (innerClassInstance == null) {
- innerClassInstance = new RegionServiceNBServerInternal();
+ innerClassInstance = new RegionServiceNbServerInternal();
}
return innerClassInstance;
}
diff --git a/incubator/protobuf/services/nb/src/test/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbRegionServiceTest.java b/incubator/protobuf/services/nb/src/test/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbRegionServiceTest.java
index 7b93d8e..7e03dce 100644
--- a/incubator/protobuf/services/nb/src/test/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbRegionServiceTest.java
+++ b/incubator/protobuf/services/nb/src/test/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbRegionServiceTest.java
@@ -16,29 +16,29 @@
package org.onosproject.incubator.protobuf.services.nb;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableList;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.onosproject.cluster.NodeId;
-import org.onosproject.grpc.net.models.RegionProtoOuterClass;
-
-import static org.junit.Assert.assertTrue;
-import static org.onosproject.cluster.NodeId.nodeId;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.HostId.hostId;
-
+import com.google.common.collect.ImmutableSet;
+import io.grpc.BindableService;
import io.grpc.ManagedChannel;
import io.grpc.inprocess.InProcessChannelBuilder;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onosproject.cluster.NodeId;
+import org.onosproject.grpc.nb.net.region.RegionServiceGrpc;
+import org.onosproject.grpc.nb.net.region.RegionServiceGrpc.RegionServiceBlockingStub;
+import org.onosproject.grpc.nb.net.region.RegionServiceNb;
+import org.onosproject.grpc.net.models.RegionProtoOuterClass;
+import org.onosproject.incubator.protobuf.models.net.RegionProtoTranslator;
import org.onosproject.net.DefaultAnnotations;
-
import org.onosproject.net.DefaultDevice;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
-
import org.onosproject.net.HostId;
import org.onosproject.net.provider.ProviderId;
import org.onosproject.net.region.DefaultRegion;
+import org.onosproject.net.region.Region;
+import org.onosproject.net.region.RegionId;
import org.onosproject.net.region.RegionListener;
import org.onosproject.net.region.RegionService;
@@ -50,20 +50,16 @@
import java.util.Map;
import java.util.Set;
-import org.junit.Test;
-
-import org.onosproject.incubator.protobuf.models.net.RegionProtoTranslator;
-import org.onosproject.grpc.nb.net.region.RegionServiceGrpc;
-import org.onosproject.grpc.nb.net.region.RegionServiceGrpc.RegionServiceBlockingStub;
-import org.onosproject.grpc.nb.net.region.RegionServiceNb;
-import org.onosproject.incubator.protobuf.services.nb.GrpcNbRegionService.RegionServiceNBServerInternal;
-import org.onosproject.net.region.Region;
-import org.onosproject.net.region.RegionId;
+import static org.junit.Assert.assertTrue;
+import static org.onosproject.cluster.NodeId.nodeId;
+import static org.onosproject.net.DeviceId.deviceId;
+import static org.onosproject.net.HostId.hostId;
public class GrpcNbRegionServiceTest {
- private static InProcessServer<GrpcNbRegionService.RegionServiceNBServerInternal> inprocessServer;
- private static ManagedChannel channel;
+
+ private static InProcessServer<BindableService> inprocessServer;
private static RegionServiceBlockingStub blockingStub;
+ private static ManagedChannel channel;
private static final String C1 = "C1";
private static final String C2 = "C2";
@@ -287,14 +283,11 @@
@BeforeClass
public static void beforeClass() throws InstantiationException, IllegalAccessException, IOException {
- inprocessServer = new InProcessServer<RegionServiceNBServerInternal>(RegionServiceNBServerInternal.class);
-
- GrpcNbRegionService outer = new GrpcNbRegionService();
- GrpcNbRegionService.RegionServiceNBServerInternal inner = outer.getInnerClassInstance();
- outer.regionService = MOCK_REGION;
- inprocessServer.addServiceToBind(inner);
-
+ GrpcNbRegionService regionService = new GrpcNbRegionService();
+ regionService.regionService = MOCK_REGION;
+ inprocessServer = regionService.registerInProcessServer();
inprocessServer.start();
+
channel = InProcessChannelBuilder.forName("test").directExecutor()
// Channels are secure by default (via SSL/TLS). For the example we disable TLS to avoid
// needing certificates.