Added unit test of gRPC application service with translator fixes
Change-Id: I731901d59ea667de96031df44dc58e575ccabe06
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationProtoTranslator.java
index eba30ee..568be18 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationProtoTranslator.java
@@ -23,7 +23,9 @@
import org.onosproject.incubator.protobuf.models.security.PermissionProtoTranslator;
import org.onosproject.security.Permission;
+import java.util.Optional;
import java.util.Set;
+import java.util.stream.Collectors;
import static org.onosproject.grpc.core.models.ApplicationProtoOuterClass.ApplicationProto.getDefaultInstance;
@@ -58,6 +60,7 @@
.withRole((ApplicationRole) ApplicationEnumsProtoTranslator.translate(app.getRole()).get())
.withPermissions(permissions)
.withFeatures(app.getFeaturesList())
+ .withFeaturesRepo(Optional.empty()) // TODO: need to add features repo
.withRequiredApps(app.getRequiredAppsList())
.build();
}
@@ -81,6 +84,10 @@
.setUrl(application.url())
.setVersion(VersionProtoTranslator.translate(application.version()))
.setRole(ApplicationEnumsProtoTranslator.translate(application.role()))
+ .addAllFeatures(application.features())
+ .addAllPermissions(application.permissions().stream().map(p ->
+ PermissionProtoTranslator.translate(p)).collect(Collectors.toList()))
+ .addAllRequiredApps(application.requiredApps())
.build();
}
diff --git a/incubator/protobuf/services/nb/src/test/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbApplicationServiceTest.java b/incubator/protobuf/services/nb/src/test/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbApplicationServiceTest.java
new file mode 100644
index 0000000..f04618f
--- /dev/null
+++ b/incubator/protobuf/services/nb/src/test/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbApplicationServiceTest.java
@@ -0,0 +1,292 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * 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 org.onosproject.incubator.protobuf.services.nb;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import io.grpc.BindableService;
+import io.grpc.ManagedChannel;
+import io.grpc.inprocess.InProcessChannelBuilder;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.app.ApplicationListener;
+import org.onosproject.app.ApplicationService;
+import org.onosproject.app.ApplicationState;
+import org.onosproject.core.Application;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.ApplicationRole;
+import org.onosproject.core.DefaultApplication;
+import org.onosproject.core.DefaultApplicationId;
+import org.onosproject.core.Version;
+import org.onosproject.grpc.app.models.ApplicationEnumsProto;
+import org.onosproject.grpc.core.models.ApplicationIdProtoOuterClass;
+import org.onosproject.grpc.core.models.ApplicationProtoOuterClass;
+import org.onosproject.grpc.nb.app.ApplicationServiceGrpc;
+import org.onosproject.incubator.protobuf.models.core.ApplicationEnumsProtoTranslator;
+import org.onosproject.incubator.protobuf.models.core.ApplicationIdProtoTranslator;
+import org.onosproject.incubator.protobuf.models.core.ApplicationProtoTranslator;
+import org.onosproject.security.Permission;
+
+import java.io.IOException;
+import java.util.Optional;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.onosproject.grpc.nb.app.ApplicationServiceNb.*;
+
+/**
+ * Unit tests for applications gRPC NB services.
+ */
+public class GrpcNbApplicationServiceTest {
+
+ private static InProcessServer<BindableService> inprocessServer;
+ private static ApplicationServiceGrpc.ApplicationServiceBlockingStub blockingStub;
+ private static ManagedChannel channel;
+
+ private final ApplicationService appService = new MockApplicationService();
+
+ private ApplicationId id1 = new DefaultApplicationId(1, "app1");
+ private ApplicationId id2 = new DefaultApplicationId(2, "app2");
+ private ApplicationId id3 = new DefaultApplicationId(3, "app3");
+ private ApplicationId id4 = new DefaultApplicationId(4, "app4");
+
+ private static final Version VER = Version.version(1, 2, "a", "b");
+
+ private DefaultApplication.Builder baseBuilder = DefaultApplication.builder()
+ .withVersion(VER)
+ .withIcon(new byte[0])
+ .withRole(ApplicationRole.ADMIN)
+ .withPermissions(ImmutableSet.of())
+ .withFeaturesRepo(Optional.empty())
+ .withFeatures(ImmutableList.of("My Feature"))
+ .withRequiredApps(ImmutableList.of());
+
+ private Application app1 =
+ DefaultApplication.builder(baseBuilder)
+ .withAppId(id1)
+ .withTitle("title1")
+ .withDescription("desc1")
+ .withOrigin("origin1")
+ .withCategory("category1")
+ .withUrl("url1")
+ .withReadme("readme1")
+ .build();
+ private Application app2 =
+ DefaultApplication.builder(baseBuilder)
+ .withAppId(id2)
+ .withTitle("title2")
+ .withDescription("desc2")
+ .withOrigin("origin2")
+ .withCategory("category2")
+ .withUrl("url2")
+ .withReadme("readme2")
+ .build();
+ private Application app3 =
+ DefaultApplication.builder(baseBuilder)
+ .withAppId(id3)
+ .withTitle("title3")
+ .withDescription("desc3")
+ .withOrigin("origin3")
+ .withCategory("category3")
+ .withUrl("url3")
+ .withReadme("readme3")
+ .build();
+ private Application app4 =
+ DefaultApplication.builder(baseBuilder)
+ .withAppId(id4)
+ .withTitle("title4")
+ .withDescription("desc4")
+ .withOrigin("origin4")
+ .withCategory("category4")
+ .withUrl("url4")
+ .withReadme("readme4")
+ .build();
+
+ private Set apps = ImmutableSet.of(app1, app2, app3, app4);
+
+ /**
+ * Initializes the test environment.
+ */
+ @Before
+ public void setUp() throws IllegalAccessException, IOException, InstantiationException {
+
+ GrpcNbApplicationService grpcAppService = new GrpcNbApplicationService();
+ grpcAppService.applicationService = appService;
+ inprocessServer = grpcAppService.registerInProcessServer();
+ inprocessServer.start();
+
+ channel = InProcessChannelBuilder.forName("test").directExecutor()
+ .usePlaintext(true).build();
+
+ blockingStub = ApplicationServiceGrpc.newBlockingStub(channel);
+ }
+
+ /**
+ * Finalizes the test setup.
+ */
+ @After
+ public void tearDown() {
+ channel.shutdownNow();
+ inprocessServer.stop();
+ }
+
+ /**
+ * Tests the invocation result of getApplications method.
+ *
+ * @throws InterruptedException
+ */
+ @Test
+ public void testGetApplications() throws InterruptedException {
+ getApplicationsRequest request = getApplicationsRequest.getDefaultInstance();
+ getApplicationsReply reply;
+
+ reply = blockingStub.getApplications(request);
+ assertEquals(4, reply.getApplicationCount());
+ }
+
+ /**
+ * Tests the invocation result of getId method.
+ *
+ * @throws InterruptedException
+ */
+ @Test
+ public void testGetId() throws InterruptedException {
+ getIdRequest request = getIdRequest.newBuilder()
+ .setName("one")
+ .build();
+
+ getIdReply reply = blockingStub.getId(request);
+ ApplicationIdProtoOuterClass.ApplicationIdProto appIdProto = reply.getApplicationId();
+ assertEquals(id1, ApplicationIdProtoTranslator.translate(appIdProto));
+ }
+
+ /**
+ * Tests the invocation result of getApplication method.
+ *
+ * @throws InterruptedException
+ */
+ @Test
+ public void testGetApplication() throws InterruptedException {
+ getApplicationRequest request = getApplicationRequest.newBuilder()
+ .setApplicationId(ApplicationIdProtoTranslator.translate(id1))
+ .build();
+
+ getApplicationReply reply = blockingStub.getApplication(request);
+ ApplicationProtoOuterClass.ApplicationProto appProto = reply.getApplication();
+ assertEquals(app1, ApplicationProtoTranslator.translate(appProto));
+ }
+
+ /**
+ * Tests the invocation result of getState method.
+ *
+ * @throws InterruptedException
+ */
+ @Test
+ public void testGetState() throws InterruptedException {
+ getStateRequest request = getStateRequest.newBuilder()
+ .setApplicationId(ApplicationIdProtoTranslator.translate(id1))
+ .build();
+
+ getStateReply reply = blockingStub.getState(request);
+ ApplicationEnumsProto.ApplicationStateProto stateProto = reply.getState();
+ assertEquals(Optional.of(ApplicationState.INSTALLED),
+ ApplicationEnumsProtoTranslator.translate(stateProto));
+ }
+
+ /**
+ * Mock class for application service.
+ */
+ private class MockApplicationService implements ApplicationService {
+
+ MockApplicationService() {}
+
+ @Override
+ public Set<Application> getApplications() {
+ return apps;
+ }
+
+ @Override
+ public ApplicationId getId(String name) {
+
+ if ("one".equals(name)) {
+ return id1;
+ }
+
+ if ("two".equals(name)) {
+ return id2;
+ }
+
+ if ("three".equals(name)) {
+ return id3;
+ }
+
+ if ("four".equals(name)) {
+ return id4;
+ }
+
+ return null;
+ }
+
+ @Override
+ public Application getApplication(ApplicationId appId) {
+
+ if (id1.equals(appId)) {
+ return app1;
+ }
+
+ if (id2.equals(appId)) {
+ return app2;
+ }
+
+ if (id3.equals(appId)) {
+ return app3;
+ }
+
+ if (id4.equals(appId)) {
+ return app4;
+ }
+
+ return null;
+ }
+
+ @Override
+ public ApplicationState getState(ApplicationId appId) {
+ return ApplicationState.INSTALLED;
+ }
+
+ @Override
+ public Set<Permission> getPermissions(ApplicationId appId) {
+ return null;
+ }
+
+ @Override
+ public void registerDeactivateHook(ApplicationId appId, Runnable hook) {
+
+ }
+
+ @Override
+ public void addListener(ApplicationListener listener) {
+
+ }
+
+ @Override
+ public void removeListener(ApplicationListener listener) {
+
+ }
+ }
+}