Skip to content
This repository has been archived by the owner on Dec 18, 2022. It is now read-only.

[#41] fix not expected response #42

Merged
merged 1 commit into from
May 31, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@
public abstract class DssRestActorJsonService<S extends Serializable> extends AbstractDssRestActorService<S> {

private static final TypeReference<HashMap<String, Serializable>> DEFAULT_TYPE_REFERENCE = new TypeReference<HashMap<String, Serializable>>() {};
private final TypeReference<S> typeReference = new TypeReference<S>() {};
private final TypeReference<S> typeReference;

public DssRestActorJsonService(
TypeReference<S> typeReference,
String name,
String path,
DssRestMethodType methodType,
Expand All @@ -39,14 +40,24 @@ public DssRestActorJsonService(
fromCharset(consumeCharset),
(Objects.nonNull(produce) ? produce : DssRestContentInfo.APPLICATION_JSON_UTF8)
);
this.typeReference = typeReference;
}

public DssRestActorJsonService(
String name,
String path,
DssRestMethodType methodType
) {
this(name, path, methodType, CharsetUtil.UTF_8, DssRestContentInfo.APPLICATION_JSON_UTF8);
this(new TypeReference<S>() {}, name, path, methodType, CharsetUtil.UTF_8, DssRestContentInfo.APPLICATION_JSON_UTF8);
}

public DssRestActorJsonService(
TypeReference<S> typeReference,
String name,
String path,
DssRestMethodType methodType
) {
this(typeReference, name, path, methodType, CharsetUtil.UTF_8, DssRestContentInfo.APPLICATION_JSON_UTF8);
}

@SuppressWarnings("unchecked")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import akka.actor.typed.Behavior;
import akka.actor.typed.javadsl.ActorContext;
import akka.actor.typed.javadsl.Behaviors;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ztkmkoo.dss.core.actor.exception.DssUserActorDuplicateBehaviorCreateException;
import com.ztkmkoo.dss.core.message.rest.*;
import com.ztkmkoo.dss.core.network.rest.entity.DssRestRequest;
Expand Down Expand Up @@ -197,7 +199,13 @@ private static void sendResponse(

private static HttpResponse responseFromServiceActor(DssRestChannelHandlerCommandResponse response) {
if (Objects.nonNull(response.getResponse())) {
return new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.valueOf(response.getStatus()), Unpooled.copiedBuffer("Some Content", CharsetUtil.UTF_8));
final ObjectMapper mapper = new ObjectMapper();
ztkmkoo marked this conversation as resolved.
Show resolved Hide resolved
try {
final String json = mapper.writeValueAsString(response.getResponse());
return new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.valueOf(response.getStatus()), Unpooled.copiedBuffer(json, CharsetUtil.UTF_8));
} catch (JsonProcessingException e) {
return new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.INTERNAL_SERVER_ERROR);
}
} else {
return new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.valueOf(response.getStatus()));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package com.ztkmkoo.dss.server.rest;

import com.fasterxml.jackson.core.type.TypeReference;
import com.ztkmkoo.dss.core.actor.rest.entity.DssRestServiceRequest;
import com.ztkmkoo.dss.core.actor.rest.entity.DssRestServiceResponse;
import com.ztkmkoo.dss.core.actor.rest.service.DssRestActorFormDataService;
import com.ztkmkoo.dss.core.actor.rest.service.DssRestActorJsonService;
import com.ztkmkoo.dss.core.actor.rest.service.DssRestActorService;
import com.ztkmkoo.dss.core.network.rest.enumeration.DssRestMethodType;
import lombok.Getter;
import lombok.Setter;
import org.awaitility.Awaitility;
import org.junit.Test;

import java.io.Serializable;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;

Expand Down Expand Up @@ -39,24 +44,72 @@ protected DssRestServiceResponse handlingRequest(DssRestServiceRequest<HashMap<S
}
});

stopDssRestServerAfterActivated(dssRestServer, 10 ,15);

new Thread(() -> {
dssRestServer.start();

assertTrue(dssRestServer.isShutdown());
}

@Test
public void test() throws InterruptedException {
final DssRestServer dssRestServer = new DssRestServer("127.0.0.1", 8181);
dssRestServer
.addDssRestService(new TestService("test", "/hi", DssRestMethodType.GET));

stopDssRestServerAfterActivated(dssRestServer, 10 ,15);

dssRestServer.start();

assertTrue(dssRestServer.isShutdown());
}

@Getter
private static class TestResponse implements DssRestServiceResponse {
private final String message;

public TestResponse(String name) {
this.message = "Hi " + name;
}
}

@Getter @Setter
private static class TestRequest implements Serializable {
private String name;
}

private static class TestService extends DssRestActorJsonService<TestRequest> {

public TestService(String name, String path, DssRestMethodType methodType) {
super(new TypeReference<TestRequest>() {}, name, path, methodType);
}

@Override
protected DssRestServiceResponse handlingRequest(DssRestServiceRequest<TestRequest> request) {
final TestRequest testRequest = request.getBody();
final String name = testRequest.getName();
return new TestResponse(name);
}
}

private static void startOnNewThread(Runnable runnable) {
new Thread(runnable).start();
}

private static void stopDssRestServerAfterActivated(DssRestServer dssRestServer, int waitStartupSeconds, int waitShutdownSeconds) {
startOnNewThread(() -> {
try {
await()
.atMost(10, TimeUnit.SECONDS)
.atMost(waitStartupSeconds, TimeUnit.SECONDS)
.until(dssRestServer::isActivated);
dssRestServer.stop();

await()
.atMost(waitShutdownSeconds, TimeUnit.SECONDS)
.until(dssRestServer::isShutdown);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();

dssRestServer.start();

await()
.atMost(15, TimeUnit.SECONDS)
.until(dssRestServer::isShutdown);

assertTrue(dssRestServer.isShutdown());
});
}
}