kopia lustrzana https://github.com/bertrik/ttnhabbridge
Convert to using retrofit (untested)
rodzic
61a7f7e0bc
commit
15ddfebee1
|
@ -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'
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue