// Execute the request on the remote server
Future<Response> responseFuture = messageTransport.executeRequestAsync(request);
assertNotNull(responseFuture);
// Get the request on the server side
Message receivedRequest = Message.parseDelimitedFrom(network.getServerSocket().getInputStream());
assertEquals(receivedRequest.getRequest(), request);
// Generate a response on the server
DevModeResponse.CapabilityExchange.Capability.Builder capabilityBuilder = DevModeResponse.CapabilityExchange.Capability.newBuilder();
capabilityBuilder.setCapability(DevModeRequest.RequestType.RESTART_WEB_SERVER);
DevModeResponse.CapabilityExchange.Builder capabilityExchangeResponseBuilder = DevModeResponse.CapabilityExchange.newBuilder();
capabilityExchangeResponseBuilder.addCapabilities(capabilityBuilder);
DevModeResponse.Builder devModeResponseBuilder = DevModeResponse.newBuilder();
devModeResponseBuilder.setResponseType(DevModeResponse.ResponseType.CAPABILITY_EXCHANGE);
devModeResponseBuilder.setCapabilityExchange(capabilityExchangeResponseBuilder);
Response.Builder responseBuilder = Response.newBuilder();
responseBuilder.setDevModeResponse(devModeResponseBuilder);
Response response = responseBuilder.build();
Message.Builder responseMsgBuilder = Message.newBuilder();
responseMsgBuilder.setMessageType(Message.MessageType.RESPONSE);
// Make sure we set the right message id
responseMsgBuilder.setMessageId(receivedRequest.getMessageId());
responseMsgBuilder.setResponse(response);
Message responseMsg = responseMsgBuilder.build();
// Send the response back to the client
responseMsg.writeDelimitedTo(network.getServerSocket().getOutputStream());
// Make sure that the response received on the client is identical to
// the response sent by the server
assertEquals(responseFuture.get(2, TimeUnit.SECONDS), response);