Skip to content

Commit

Permalink
Add/Update/Fix/Run RPC server and client tests (#214)
Browse files Browse the repository at this point in the history
Makes the existing tests run on build and actually work.
Adds test for Greengrass client V2.

This change very crucially adds a call to builder.excludeFieldsWithoutExposeAnnotation() when constructing the GSON instance. This tells GSON to only serialize and deserialize fields which are marked as @Exposed. This is necessary for JDK 9+ specifically to serialize errors because without it, GSON tries to serialize private fields from Throwable which Java prevents.

Fixes Greengrass client V2 which didn't run lambda-based callbacks in the executor.
Makes the socket domain configurable in the v2 client builder so that we can use IP instead of domain sockets.
  • Loading branch information
MikeDombo authored Jan 26, 2022
1 parent dc62c3e commit a568912
Show file tree
Hide file tree
Showing 70 changed files with 4,361 additions and 477 deletions.
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ jobs:
linux-compat:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
image:
- manylinux2014-x64
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -175,4 +175,6 @@ $RECYCLE.BIN/
.project
bin/
.classpath
.settings
.settings

*.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package software.amazon.awssdk.awstest;

import software.amazon.awssdk.awstest.model.CauseServiceErrorResponse;
import software.amazon.awssdk.eventstreamrpc.OperationResponse;
import software.amazon.awssdk.eventstreamrpc.StreamResponse;
import software.amazon.awssdk.eventstreamrpc.model.EventStreamJsonMessage;

import java.util.concurrent.CompletableFuture;

public final class CauseServiceErrorResponseHandler implements StreamResponse<CauseServiceErrorResponse, EventStreamJsonMessage> {
private final OperationResponse<CauseServiceErrorResponse, EventStreamJsonMessage> operationResponse;

public CauseServiceErrorResponseHandler(
final OperationResponse<CauseServiceErrorResponse, EventStreamJsonMessage> operationResponse) {
this.operationResponse = operationResponse;
}

@Override
public CompletableFuture<Void> getRequestFlushFuture() {
return operationResponse.getRequestFlushFuture();
}

@Override
public CompletableFuture<CauseServiceErrorResponse> getResponse() {
return operationResponse.getResponse();
}

@Override
public CompletableFuture<Void> sendStreamEvent(final EventStreamJsonMessage event) {
return operationResponse.sendStreamEvent(event);
}

@Override
public CompletableFuture<Void> closeStream() {
return operationResponse.closeStream();
}

@Override
public boolean isClosed() {
return operationResponse.isClosed();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package software.amazon.awssdk.awstest;

import software.amazon.awssdk.awstest.model.EchoStreamingMessage;
import software.amazon.awssdk.awstest.model.EchoStreamingResponse;
import software.amazon.awssdk.eventstreamrpc.OperationResponse;
import software.amazon.awssdk.eventstreamrpc.StreamResponse;

import java.util.concurrent.CompletableFuture;

public final class CauseStreamServiceToErrorResponseHandler implements StreamResponse<EchoStreamingResponse, EchoStreamingMessage> {
private final OperationResponse<EchoStreamingResponse, EchoStreamingMessage> operationResponse;

public CauseStreamServiceToErrorResponseHandler(
final OperationResponse<EchoStreamingResponse, EchoStreamingMessage> operationResponse) {
this.operationResponse = operationResponse;
}

@Override
public CompletableFuture<Void> getRequestFlushFuture() {
return operationResponse.getRequestFlushFuture();
}

@Override
public CompletableFuture<EchoStreamingResponse> getResponse() {
return operationResponse.getResponse();
}

@Override
public CompletableFuture<Void> sendStreamEvent(final EchoStreamingMessage event) {
return operationResponse.sendStreamEvent(event);
}

@Override
public CompletableFuture<Void> closeStream() {
return operationResponse.closeStream();
}

@Override
public boolean isClosed() {
return operationResponse.isClosed();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package software.amazon.awssdk.awstest;

import software.amazon.awssdk.awstest.model.EchoMessageResponse;
import software.amazon.awssdk.eventstreamrpc.OperationResponse;
import software.amazon.awssdk.eventstreamrpc.StreamResponse;
import software.amazon.awssdk.eventstreamrpc.model.EventStreamJsonMessage;

import java.util.concurrent.CompletableFuture;

public final class EchoMessageResponseHandler implements StreamResponse<EchoMessageResponse, EventStreamJsonMessage> {
private final OperationResponse<EchoMessageResponse, EventStreamJsonMessage> operationResponse;

public EchoMessageResponseHandler(
final OperationResponse<EchoMessageResponse, EventStreamJsonMessage> operationResponse) {
this.operationResponse = operationResponse;
}

@Override
public CompletableFuture<Void> getRequestFlushFuture() {
return operationResponse.getRequestFlushFuture();
}

@Override
public CompletableFuture<EchoMessageResponse> getResponse() {
return operationResponse.getResponse();
}

@Override
public CompletableFuture<Void> sendStreamEvent(final EventStreamJsonMessage event) {
return operationResponse.sendStreamEvent(event);
}

@Override
public CompletableFuture<Void> closeStream() {
return operationResponse.closeStream();
}

@Override
public boolean isClosed() {
return operationResponse.isClosed();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package software.amazon.awssdk.awstest;

import software.amazon.awssdk.awstest.model.EchoStreamingMessage;
import software.amazon.awssdk.awstest.model.EchoStreamingResponse;
import software.amazon.awssdk.eventstreamrpc.OperationResponse;
import software.amazon.awssdk.eventstreamrpc.StreamResponse;

import java.util.concurrent.CompletableFuture;

public final class EchoStreamMessagesResponseHandler implements StreamResponse<EchoStreamingResponse, EchoStreamingMessage> {
private final OperationResponse<EchoStreamingResponse, EchoStreamingMessage> operationResponse;

public EchoStreamMessagesResponseHandler(
final OperationResponse<EchoStreamingResponse, EchoStreamingMessage> operationResponse) {
this.operationResponse = operationResponse;
}

@Override
public CompletableFuture<Void> getRequestFlushFuture() {
return operationResponse.getRequestFlushFuture();
}

@Override
public CompletableFuture<EchoStreamingResponse> getResponse() {
return operationResponse.getResponse();
}

@Override
public CompletableFuture<Void> sendStreamEvent(final EchoStreamingMessage event) {
return operationResponse.sendStreamEvent(event);
}

@Override
public CompletableFuture<Void> closeStream() {
return operationResponse.closeStream();
}

@Override
public boolean isClosed() {
return operationResponse.isClosed();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package software.amazon.awssdk.awstest;

import software.amazon.awssdk.awstest.model.CauseServiceErrorRequest;
import software.amazon.awssdk.awstest.model.EchoMessageRequest;
import software.amazon.awssdk.awstest.model.EchoStreamingMessage;
import software.amazon.awssdk.awstest.model.EchoStreamingRequest;
import software.amazon.awssdk.awstest.model.GetAllCustomersRequest;
import software.amazon.awssdk.awstest.model.GetAllProductsRequest;
import software.amazon.awssdk.eventstreamrpc.StreamResponseHandler;
import software.amazon.awssdk.eventstreamrpc.model.EventStreamJsonMessage;

import java.util.Optional;

public interface EchoTestRPC {
CauseServiceErrorResponseHandler causeServiceError(final CauseServiceErrorRequest request,
final Optional<StreamResponseHandler<EventStreamJsonMessage>> streamResponseHandler);

CauseStreamServiceToErrorResponseHandler causeStreamServiceToError(
final EchoStreamingRequest request,
final Optional<StreamResponseHandler<EchoStreamingMessage>> streamResponseHandler);

EchoMessageResponseHandler echoMessage(final EchoMessageRequest request,
final Optional<StreamResponseHandler<EventStreamJsonMessage>> streamResponseHandler);

EchoStreamMessagesResponseHandler echoStreamMessages(final EchoStreamingRequest request,
final Optional<StreamResponseHandler<EchoStreamingMessage>> streamResponseHandler);

GetAllCustomersResponseHandler getAllCustomers(final GetAllCustomersRequest request,
final Optional<StreamResponseHandler<EventStreamJsonMessage>> streamResponseHandler);

GetAllProductsResponseHandler getAllProducts(final GetAllProductsRequest request,
final Optional<StreamResponseHandler<EventStreamJsonMessage>> streamResponseHandler);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package software.amazon.awssdk.awstest;

import software.amazon.awssdk.awstest.model.CauseServiceErrorRequest;
import software.amazon.awssdk.awstest.model.EchoMessageRequest;
import software.amazon.awssdk.awstest.model.EchoStreamingMessage;
import software.amazon.awssdk.awstest.model.EchoStreamingRequest;
import software.amazon.awssdk.awstest.model.GetAllCustomersRequest;
import software.amazon.awssdk.awstest.model.GetAllProductsRequest;
import software.amazon.awssdk.eventstreamrpc.EventStreamRPCClient;
import software.amazon.awssdk.eventstreamrpc.EventStreamRPCConnection;
import software.amazon.awssdk.eventstreamrpc.StreamResponseHandler;
import software.amazon.awssdk.eventstreamrpc.model.EventStreamJsonMessage;

import java.util.Optional;

public class EchoTestRPCClient extends EventStreamRPCClient implements EchoTestRPC {
public EchoTestRPCClient(final EventStreamRPCConnection connection) {
super(connection);
}

@Override
public CauseServiceErrorResponseHandler causeServiceError(final CauseServiceErrorRequest request,
final Optional<StreamResponseHandler<EventStreamJsonMessage>> streamResponseHandler) {
final CauseServiceErrorOperationContext operationContext = EchoTestRPCServiceModel.getCauseServiceErrorModelContext();
return new CauseServiceErrorResponseHandler(doOperationInvoke(operationContext, request, streamResponseHandler));
}

@Override
public CauseStreamServiceToErrorResponseHandler causeStreamServiceToError(
final EchoStreamingRequest request,
final Optional<StreamResponseHandler<EchoStreamingMessage>> streamResponseHandler) {
final CauseStreamServiceToErrorOperationContext operationContext = EchoTestRPCServiceModel.getCauseStreamServiceToErrorModelContext();
return new CauseStreamServiceToErrorResponseHandler(doOperationInvoke(operationContext, request, streamResponseHandler));
}

@Override
public EchoMessageResponseHandler echoMessage(final EchoMessageRequest request,
final Optional<StreamResponseHandler<EventStreamJsonMessage>> streamResponseHandler) {
final EchoMessageOperationContext operationContext = EchoTestRPCServiceModel.getEchoMessageModelContext();
return new EchoMessageResponseHandler(doOperationInvoke(operationContext, request, streamResponseHandler));
}

@Override
public EchoStreamMessagesResponseHandler echoStreamMessages(final EchoStreamingRequest request,
final Optional<StreamResponseHandler<EchoStreamingMessage>> streamResponseHandler) {
final EchoStreamMessagesOperationContext operationContext = EchoTestRPCServiceModel.getEchoStreamMessagesModelContext();
return new EchoStreamMessagesResponseHandler(doOperationInvoke(operationContext, request, streamResponseHandler));
}

@Override
public GetAllCustomersResponseHandler getAllCustomers(final GetAllCustomersRequest request,
final Optional<StreamResponseHandler<EventStreamJsonMessage>> streamResponseHandler) {
final GetAllCustomersOperationContext operationContext = EchoTestRPCServiceModel.getGetAllCustomersModelContext();
return new GetAllCustomersResponseHandler(doOperationInvoke(operationContext, request, streamResponseHandler));
}

@Override
public GetAllProductsResponseHandler getAllProducts(final GetAllProductsRequest request,
final Optional<StreamResponseHandler<EventStreamJsonMessage>> streamResponseHandler) {
final GetAllProductsOperationContext operationContext = EchoTestRPCServiceModel.getGetAllProductsModelContext();
return new GetAllProductsResponseHandler(doOperationInvoke(operationContext, request, streamResponseHandler));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package software.amazon.awssdk.awstest;

import software.amazon.awssdk.awstest.model.GetAllCustomersResponse;
import software.amazon.awssdk.eventstreamrpc.OperationResponse;
import software.amazon.awssdk.eventstreamrpc.StreamResponse;
import software.amazon.awssdk.eventstreamrpc.model.EventStreamJsonMessage;

import java.util.concurrent.CompletableFuture;

public final class GetAllCustomersResponseHandler implements StreamResponse<GetAllCustomersResponse, EventStreamJsonMessage> {
private final OperationResponse<GetAllCustomersResponse, EventStreamJsonMessage> operationResponse;

public GetAllCustomersResponseHandler(
final OperationResponse<GetAllCustomersResponse, EventStreamJsonMessage> operationResponse) {
this.operationResponse = operationResponse;
}

@Override
public CompletableFuture<Void> getRequestFlushFuture() {
return operationResponse.getRequestFlushFuture();
}

@Override
public CompletableFuture<GetAllCustomersResponse> getResponse() {
return operationResponse.getResponse();
}

@Override
public CompletableFuture<Void> sendStreamEvent(final EventStreamJsonMessage event) {
return operationResponse.sendStreamEvent(event);
}

@Override
public CompletableFuture<Void> closeStream() {
return operationResponse.closeStream();
}

@Override
public boolean isClosed() {
return operationResponse.isClosed();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package software.amazon.awssdk.awstest;

import software.amazon.awssdk.awstest.model.GetAllProductsResponse;
import software.amazon.awssdk.eventstreamrpc.OperationResponse;
import software.amazon.awssdk.eventstreamrpc.StreamResponse;
import software.amazon.awssdk.eventstreamrpc.model.EventStreamJsonMessage;

import java.util.concurrent.CompletableFuture;

public final class GetAllProductsResponseHandler implements StreamResponse<GetAllProductsResponse, EventStreamJsonMessage> {
private final OperationResponse<GetAllProductsResponse, EventStreamJsonMessage> operationResponse;

public GetAllProductsResponseHandler(
final OperationResponse<GetAllProductsResponse, EventStreamJsonMessage> operationResponse) {
this.operationResponse = operationResponse;
}

@Override
public CompletableFuture<Void> getRequestFlushFuture() {
return operationResponse.getRequestFlushFuture();
}

@Override
public CompletableFuture<GetAllProductsResponse> getResponse() {
return operationResponse.getResponse();
}

@Override
public CompletableFuture<Void> sendStreamEvent(final EventStreamJsonMessage event) {
return operationResponse.sendStreamEvent(event);
}

@Override
public CompletableFuture<Void> closeStream() {
return operationResponse.closeStream();
}

@Override
public boolean isClosed() {
return operationResponse.isClosed();
}
}
Loading

0 comments on commit a568912

Please sign in to comment.