package com.devicehive.rpcclient;
/*
* #%L
* DeviceHive Backend Logic
* %%
* Copyright (C) 2016 DataArt
* %%
* 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.
* #L%
*/
import com.devicehive.base.AbstractSpringTest;
import com.devicehive.model.DeviceCommand;
import com.devicehive.model.DeviceNotification;
import com.devicehive.model.JsonStringWrapper;
import com.devicehive.model.rpc.*;
import com.devicehive.shim.api.Request;
import com.devicehive.shim.api.Response;
import com.devicehive.shim.api.client.RpcClient;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
public class RpcClientActionTest extends AbstractSpringTest {
@Autowired
private RpcClient client;
// subscriptions in _SubscribeIntegrationTest
@Test
public void testNotificationSearchAction() throws Exception {
NotificationSearchRequest searchRequest = new NotificationSearchRequest();
searchRequest.setId(Long.MAX_VALUE); // nonexistent id
searchRequest.setGuid(UUID.randomUUID().toString()); // random guid
Request request = Request.newBuilder()
.withPartitionKey(searchRequest.getGuid())
.withBody(searchRequest)
.build();
CompletableFuture<Response> future = new CompletableFuture<>();
client.call(request, future::complete);
Response response = future.get(10, TimeUnit.SECONDS);
NotificationSearchResponse responseBody = (NotificationSearchResponse) response.getBody();
assertTrue(responseBody.getNotifications().isEmpty());
}
@Test
public void testCommandSearchAction() throws Exception {
CommandSearchRequest searchRequest = new CommandSearchRequest();
searchRequest.setId(Long.MAX_VALUE); // nonexistent id
searchRequest.setGuid(UUID.randomUUID().toString()); // random guid
Request request = Request.newBuilder()
.withPartitionKey(searchRequest.getGuid())
.withBody(searchRequest)
.build();
CompletableFuture<Response> future = new CompletableFuture<>();
client.call(request, future::complete);
Response response = future.get(10, TimeUnit.SECONDS);
CommandSearchResponse responseBody = (CommandSearchResponse) response.getBody();
assertTrue(responseBody.getCommands().isEmpty());
}
@Test
public void testCommandInsertAction() throws Exception {
DeviceCommand command = new DeviceCommand();
command.setCommand("test_command");
command.setDeviceGuid(UUID.randomUUID().toString());
CommandInsertRequest insertRequest = new CommandInsertRequest(command);
Request request = Request.newBuilder()
.withPartitionKey(insertRequest.getDeviceCommand().getDeviceGuid())
.withBody(insertRequest)
.build();
CompletableFuture<Response> future = new CompletableFuture<>();
client.call(request, future::complete);
Response response = future.get(10, TimeUnit.SECONDS);
CommandInsertResponse responseBody = (CommandInsertResponse) response.getBody();
assertNotNull(responseBody.getDeviceCommand());
}
@Test
public void testCommandUpdateAction() throws Exception {
DeviceCommand command = new DeviceCommand();
command.setCommand("test_command");
command.setResult(new JsonStringWrapper("{\"result\": \"OK\"}"));
command.setDeviceGuid(UUID.randomUUID().toString());
CommandUpdateRequest updateRequest = new CommandUpdateRequest(command);
Request request = Request.newBuilder()
.withPartitionKey(updateRequest.getDeviceCommand().getDeviceGuid())
.withBody(updateRequest)
.build();
CompletableFuture<Response> future = new CompletableFuture<>();
client.call(request, future::complete);
Response response = future.get(10, TimeUnit.SECONDS);
assertNotNull(response);
}
@Test
public void testNotificationInsertAction() throws Exception {
DeviceNotification notification = new DeviceNotification();
notification.setNotification("test_notification");
notification.setDeviceGuid(UUID.randomUUID().toString());
NotificationInsertRequest insertRequest = new NotificationInsertRequest(notification);
Request request = Request.newBuilder()
.withPartitionKey(insertRequest.getDeviceNotification().getDeviceGuid())
.withBody(insertRequest)
.build();
CompletableFuture<Response> future = new CompletableFuture<>();
client.call(request, future::complete);
Response response = future.get(10, TimeUnit.SECONDS);
NotificationInsertResponse responseBody = (NotificationInsertResponse) response.getBody();
assertNotNull(responseBody.getDeviceNotification());
}
@Test
public void testListUserAction() throws Exception {
ListUserRequest listUserRequest = new ListUserRequest();
listUserRequest.setLogin(UUID.randomUUID().toString()); // nonexistent login
Request request = Request.newBuilder()
.withBody(listUserRequest)
.build();
CompletableFuture<Response> future = new CompletableFuture<>();
client.call(request, future::complete);
Response response = future.get(10, TimeUnit.SECONDS);
ListUserResponse responseBody = (ListUserResponse) response.getBody();
assertNotNull(responseBody.getUsers().isEmpty());
}
@Test
public void testListNetworkAction() throws Exception {
ListNetworkRequest listNetworkRequest = new ListNetworkRequest();
listNetworkRequest.setName(UUID.randomUUID().toString()); // nonexistent name
Request request = Request.newBuilder()
.withBody(listNetworkRequest)
.build();
CompletableFuture<Response> future = new CompletableFuture<>();
client.call(request, future::complete);
Response response = future.get(10, TimeUnit.SECONDS);
ListNetworkResponse responseBody = (ListNetworkResponse) response.getBody();
assertNotNull(responseBody.getNetworks().isEmpty());
}
@Test
public void testListDeviceClassAction() throws Exception {
ListDeviceClassRequest deviceClassRequest = new ListDeviceClassRequest();
deviceClassRequest.setName(UUID.randomUUID().toString()); // nonexistent name
Request request = Request.newBuilder()
.withBody(deviceClassRequest)
.build();
CompletableFuture<Response> future = new CompletableFuture<>();
client.call(request, future::complete);
Response response = future.get(10, TimeUnit.SECONDS);
ListDeviceClassResponse responseBody = (ListDeviceClassResponse) response.getBody();
assertNotNull(responseBody.getDeviceClasses().isEmpty());
}
@Test
public void testListDeviceAction() throws Exception {
ListDeviceRequest deviceRequest = new ListDeviceRequest();
deviceRequest.setName(UUID.randomUUID().toString()); // nonexistent name
deviceRequest.setSortOrderAsc(false);
Request request = Request.newBuilder()
.withBody(deviceRequest)
.build();
CompletableFuture<Response> future = new CompletableFuture<>();
client.call(request, future::complete);
Response response = future.get(10, TimeUnit.SECONDS);
ListDeviceResponse responseBody = (ListDeviceResponse) response.getBody();
assertNotNull(responseBody.getDevices().isEmpty());
}
}