Convert to using retrofit (untested)

pull/3/head
Bertrik Sikken 2018-05-01 23:02:29 +02:00
rodzic 61a7f7e0bc
commit 15ddfebee1
5 zmienionych plików z 58 dodań i 51 usunięć

Wyświetl plik

@ -11,21 +11,16 @@ ext {
libraries.slf4j = 'org.slf4j:slf4j-api:1.7.25'
libraries.slf4jlog4j = 'org.slf4j:slf4j-log4j12:1.7.25'
// REST libraries
libraries.jetty = [
'org.eclipse.jetty:jetty-server:9.3.10.v20160621',
'org.eclipse.jetty:jetty-http-spi:9.3.10.v20160621'
]
libraries.jackson = [
'org.glassfish.jersey.media:jersey-media-json-jackson:2.26'
'com.fasterxml.jackson.core:jackson-databind:2.9.5'
]
libraries.jersey_client = [
'org.glassfish.jersey.core:jersey-client:2.26',
'org.glassfish.jersey.ext:jersey-proxy-client:2.26',
'org.glassfish.jersey.inject:jersey-hk2:2.26'
libraries.retrofit = [
'com.squareup.retrofit2:retrofit:2.4.0',
'com.squareup.retrofit2:converter-jackson:2.4.0',
'com.squareup.retrofit2:converter-scalars:2.4.0'
]
libraries.retrofit_mock = 'com.squareup.retrofit2:retrofit-mock:2.4.0'
libraries.mqtt_client = 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'

Wyświetl plik

@ -9,7 +9,9 @@ dependencies {
compile libraries.mqtt_client
compile libraries.jackson
compile libraries.jersey_client
compile libraries.retrofit
testCompile libraries.retrofit_mock
}
//Add configuration folder to classpath:

Wyświetl plik

@ -1,5 +1,6 @@
package nl.sikken.bertrik.hab.habitat;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@ -10,20 +11,20 @@ import java.util.List;
import java.util.Locale;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.xml.bind.DatatypeConverter;
import org.glassfish.jersey.client.ClientProperties;
import org.glassfish.jersey.client.proxy.WebResourceFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nl.sikken.bertrik.hab.habitat.docs.ListenerInformationDoc;
import nl.sikken.bertrik.hab.habitat.docs.ListenerTelemetryDoc;
import nl.sikken.bertrik.hab.habitat.docs.PayloadTelemetryDoc;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
import retrofit2.converter.scalars.ScalarsConverterFactory;
/**
* Habitat uploader.
@ -52,9 +53,19 @@ public final class HabitatUploader {
public static IHabitatRestApi newRestClient(String url, int timeout) {
// create the REST client
LOG.info("Creating new habitat REST client with timeout {} for {}", timeout, url);
final WebTarget target = ClientBuilder.newClient().property(ClientProperties.CONNECT_TIMEOUT, timeout)
.property(ClientProperties.READ_TIMEOUT, timeout).target(url);
return WebResourceFactory.newResource(IHabitatRestApi.class, target);
OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(timeout, TimeUnit.MILLISECONDS)
.writeTimeout(timeout, TimeUnit.MILLISECONDS)
.readTimeout(timeout, TimeUnit.MILLISECONDS)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(JacksonConverterFactory.create())
.client(client)
.build();
return retrofit.create(IHabitatRestApi.class);
}
/**
@ -125,9 +136,9 @@ public final class HabitatUploader {
private void uploadPayloadTelemetry(String docId, String json) {
LOG.info("Upload payload telemetry doc {}: {}", docId, json);
try {
final String response = restClient.updateListener(docId, json);
final String response = restClient.updateListener(docId, json).execute().body();
LOG.info("Result payload telemetry doc {}: {}", docId, response);
} catch (WebApplicationException e) {
} catch (IOException e) {
LOG.warn("Caught exception: {}", e.getMessage());
}
}
@ -165,7 +176,7 @@ public final class HabitatUploader {
try {
// get two uuids
LOG.info("Getting UUIDs for listener data upload...");
final UuidsList list = restClient.getUuids(2);
final UuidsList list = restClient.getUuids(2).execute().body();
final List<String> uuids = list.getUuids();
if ((uuids != null) && (uuids.size() >= 2)) {
LOG.info("Got {} UUIDs", uuids.size());
@ -173,18 +184,19 @@ public final class HabitatUploader {
// upload payload listener info
LOG.info("Upload listener info using UUID {}...", uuids.get(0));
final ListenerInformationDoc info = new ListenerInformationDoc(instant, receiver);
final UploadResult infoResult = restClient.uploadDocument(uuids.get(0), info.format());
final UploadResult infoResult = restClient.uploadDocument(uuids.get(0), info.format()).execute().body();
LOG.info("Result listener info: {}", infoResult);
// upload payload telemetry
LOG.info("Upload listener telemetry using UUID {}...", uuids.get(1));
final ListenerTelemetryDoc telem = new ListenerTelemetryDoc(instant, receiver);
final UploadResult telemResult = restClient.uploadDocument(uuids.get(1), telem.format());
final UploadResult telemResult =
restClient.uploadDocument(uuids.get(1), telem.format()).execute().body();
LOG.info("Result listener telemetry: {}", telemResult);
} else {
LOG.warn("Did not receive UUIDs for upload");
}
} catch (WebApplicationException e) {
} catch (IOException e) {
LOG.warn("Caught WebServiceException: {}", e.getMessage());
}
}

Wyświetl plik

@ -1,32 +1,24 @@
package nl.sikken.bertrik.hab.habitat;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;
/**
* Interface definition for payload telemetry and listener telemetry towards Habitat.
*/
@Path("")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public interface IHabitatRestApi {
@Path("/habitat/_design/payload_telemetry/_update/add_listener/{doc_id}")
@PUT
String updateListener(@PathParam("doc_id") String docId, String json);
@PUT("/habitat/_design/payload_telemetry/_update/add_listener/{doc_id}")
Call<String> updateListener(@Path("doc_id") String docId, @Body String json);
@Path("/_uuids")
@GET
UuidsList getUuids(@QueryParam("count") int count);
@GET("/_uuids")
Call<UuidsList> getUuids(@Query("count") int count);
@Path("/habitat/{doc_id}")
@PUT
UploadResult uploadDocument(@PathParam("doc_id") String docId, String document);
@PUT("/habitat/{doc_id}")
Call<UploadResult> uploadDocument(@Path("doc_id") String docId, @Body String document);
}

Wyświetl plik

@ -1,5 +1,6 @@
package nl.sikken.bertrik.hab.habitat;
import java.io.IOException;
import java.time.Instant;
import java.util.Arrays;
@ -8,6 +9,7 @@ import org.junit.Test;
import org.mockito.Mockito;
import nl.sikken.bertrik.hab.Sentence;
import retrofit2.mock.Calls;
/**
* Unit tests for HabitatUploader.
@ -18,13 +20,16 @@ public final class HabitatUploaderTest {
/**
* Happy flow scenario for payload upload.
* @throws IOException
*/
@Test
public void testUploadPayload() {
public void testUploadPayload() throws IOException {
// create a mocked rest client
final IHabitatRestApi restClient = Mockito.mock(IHabitatRestApi.class);
Mockito.when(restClient.updateListener(Mockito.anyString(), Mockito.anyString())).thenReturn("OK");
Mockito.when(restClient.getUuids(Mockito.anyInt())).thenReturn(new UuidsList(Arrays.asList("uuid1", "uuid2")));
Mockito.when(restClient.updateListener(Mockito.anyString(), Mockito.anyString()))
.thenReturn(Calls.response("OK"));
Mockito.when(restClient.getUuids(Mockito.anyInt()))
.thenReturn(Calls.response(new UuidsList(Arrays.asList("uuid1", "uuid2"))));
final HabitatUploader uploader = new HabitatUploader(restClient);
@ -50,9 +55,10 @@ public final class HabitatUploaderTest {
public void testUploadListener() {
// create a mocked rest client
final IHabitatRestApi restClient = Mockito.mock(IHabitatRestApi.class);
Mockito.when(restClient.getUuids(Mockito.anyInt())).thenReturn(new UuidsList(Arrays.asList("uuid1", "uuid2")));
Mockito.when(restClient.getUuids(Mockito.anyInt()))
.thenReturn(Calls.response(new UuidsList(Arrays.asList("uuid1", "uuid2"))));
Mockito.when(restClient.uploadDocument(Mockito.anyString(), Mockito.anyString()))
.thenReturn(new UploadResult(true, "id", "rev"));
.thenReturn(Calls.response(new UploadResult(true, "id", "rev")));
final HabitatUploader uploader = new HabitatUploader(restClient);