+ formulate mock handlers

pull/1/head
Ivan Olexyn 5 years ago
parent f92d3778e2
commit d133e8ed76

@ -13,8 +13,8 @@ public class BridgeServlet extends HttpServlet {
protected static final String MISP_CLIENT_URL = "http://localhost:9090/mispclient/core";
public List<Ride> availableRides = new ArrayList<>();
public List<Ride> deliveredRides = new ArrayList<>();
protected List<Ride> deliveredData = new ArrayList<>();
public List<Ride> bookedRides = new ArrayList<>();
protected List<Ride> loadedRides = new ArrayList<>();
// #######
//
@ -71,7 +71,7 @@ public class BridgeServlet extends HttpServlet {
* remove Ride from ForwardedData
* add Ride to EOL
*/
protected void handleGetRideRequestData(HttpServletRequest request, HttpServletResponse response) {
protected void handleGetRideRequestData(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
// # send OK (EOL)
}

@ -16,6 +16,8 @@ import java.util.List;
public class ClientServlet extends HttpServlet {
protected static final String MISP_BRIDGE_URL = "http://localhost:9090/mispbridge/core";
protected static final String APP_URL = "http://localhost:9090";
public static final int AVAILABLE_RIDES_OVERHEAD = 1;
public List<Ride> availableRides = new ArrayList<>();
@ -35,7 +37,7 @@ public class ClientServlet extends HttpServlet {
* # send POST (Ride)
* Generated by Loop
*/
void sendPostRide(Ride oldRide) throws IOException, ServletException {
void sendPostRide(Ride oldRide) throws IOException, ServletException, InterruptedException {
HttpURLConnection connection = ConnectionHelper.make("POST", MISP_BRIDGE_URL);
@ -64,7 +66,7 @@ public class ClientServlet extends HttpServlet {
/**
* # send GET (Request) to App
*/
Ride sendGetRequest(Ride oldRide) throws IOException {
void sendGetRequest(Ride oldRide) throws IOException {
// send FOO
// TODO make sure as many as possible tyes of requests can be forwarded.
@ -79,14 +81,14 @@ public class ClientServlet extends HttpServlet {
newRide.setData(data);
loadedRides.add(newRide);
sendGetRideRequestData(newRide);
return newRide;
}
/**
* # send GET (Ride)(Request)(Data)
*/
Ride sendGetRideRequestData(Ride oldRide) throws IOException {
void sendGetRideRequestData(Ride oldRide) throws IOException {
HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL);
@ -106,7 +108,6 @@ public class ClientServlet extends HttpServlet {
loadedRides.remove(oldRide);
}
}
return null;
}
@ -130,7 +131,7 @@ class PostRideRunnable implements Runnable {
public void run() {
while (true) {
if (clientServlet.availableRides.size() < ClientServlet.AVAILABLE_RIDES_OVERHEAD) {
try {clientServlet.sendPostRide(new Ride());} catch (IOException | ServletException e) { e.printStackTrace(); }
try {clientServlet.sendPostRide(new Ride());} catch (IOException | ServletException | InterruptedException e) { e.printStackTrace(); }
}
try {Thread.sleep(500);} catch (InterruptedException e) { e.printStackTrace(); }
}

@ -19,11 +19,15 @@ public class ConnectionHelper {
public static Ride parseRide(HttpURLConnection connection) throws IOException {
return new Ride(parseString(connection));
}
public static String parseString(HttpURLConnection connection) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String out;
StringBuilder sb = new StringBuilder();
while ((out = in.readLine()) != null) { sb.append(out); }
in.close();
return new Ride(sb.toString());
return sb.toString();
}
}

@ -17,8 +17,8 @@ public class Ride {
rideID = "" + count++;
}
public Ride(String json){
json = json.replace("{","").replace("}","");
public Ride(String json) {
json = json.replace("{", "").replace("}", "");
String[] split = json.split(",");
rideID = split[0].split(":")[1];
request = split[1].split(":")[1];
@ -26,42 +26,44 @@ public class Ride {
}
public void setRequest(String request) {
this.request = request;
}
public void setData(String data){
public void setData(String data) {
this.data = data;
}
public String getRequest(){
public String getRequest() {
return this.request;
}
public String getData(){
public String getData() {
return this.data;
}
public String getRideID(){
public String getRideID() {
return this.rideID;
}
private String brace(String foo){
return "\""+foo+"\"";
private String brace(String foo) {
return "\"" + foo + "\"";
}
public String json(){
String[] keys = {"rideID", "request", "data"};
String[] values = { rideID, request, data};
public String json() {
String[] keys = {"rideID",
"request",
"data"};
String[] values = {rideID,
request,
data};
StringBuilder sb = new StringBuilder();
sb.append("{");
for (int i =0; i<keys.length; i++){
for (int i = 0; i < keys.length; i++) {
sb.append(brace(keys[i]));
sb.append(":");
sb.append(brace(values[i]));
if (i+1 < keys.length){
if (i + 1 < keys.length) {
sb.append(",");
}
}
@ -70,9 +72,6 @@ public class Ride {
}
@Override
public boolean equals(Object o) {
if (this == o) return true;

@ -1,6 +1,6 @@
import exchange.ExchangeMock;
import exchange.RequestMock;
import org.apache.commons.io.IOUtils;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@ -38,49 +38,43 @@ public class BridgeMock extends BridgeServlet {
@Override
protected void handleGetRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
RequestMock mockRequest = (RequestMock) request;
ExchangeMock exchange = mockRequest.exchange;
synchronized (exchange) {
String parsedRequest = IOUtils.toString(request.getReader());
while (!(availableRides.size() > 0)) { Thread.sleep(100); }
Ride ride = availableRides.remove(0);
deliveredRides.add(ride);
while (ride.getData() == null) {
synchronized (ride) {
ride.setRequest(parsedRequest);
bookedRides.add(ride);
while (ride.getData()==null) {
ride.notify();
Thread.sleep(100);
ride.wait();
}
PrintWriter writer = response.getWriter();
exchange.response.setStatus(200);
PrintWriter writer = exchange.response.getWriter();
writer.print(ride.getData());
loadedRides.remove(ride);
ride.notify();
}
exchange.notify();
}
}
/**
* handle GET (Ride)
* if Ride in ReservedRides,
* remove Ride from ReservedRides
* add Ride to Deliveredrides
*/
protected void handleGetRide(HttpServletRequest request, HttpServletResponse response) {
// # send OK (Ride)(Request)
new Ride();
}
/**
* handle GET (Ride)(Request)
* if Ride in DeliveredRides
* remove Ride from DeliveredRides
* add Ride to NewRequest
* send OK (Ride)(Request)
* remove Ride from NewRequest
* add Ride to ForwardedRequest
*/
protected Ride handleGetRideRequest(HttpServletRequest request, HttpServletResponse response) {
// # send OK (Ride)(Request)(Data)
return new Ride();
}
/**
@ -95,9 +89,32 @@ public class BridgeMock extends BridgeServlet {
* remove Ride from ForwardedData
* add Ride to EOL
*/
protected void handleGetRideRequestData(HttpServletRequest request, HttpServletResponse response) {
// # send OK (EOL)
new Ride();
protected void handleGetRideRequestData(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
RequestMock mockRequest = (RequestMock) request;
ExchangeMock exchange = mockRequest.exchange;
synchronized (exchange) {
String jsonPayload = IOUtils.toString(request.getReader());
Ride ride = new Ride(jsonPayload);
synchronized (ride) {
bookedRides.remove(ride);
while (!bookedRides.contains(ride)) {
ride.notify();
Thread.sleep(100);
ride.wait();
}
exchange.response.setStatus(200);
PrintWriter writer = response.getWriter();
writer.print(ride.json());
exchange.notify();
}
}
}
// #######
@ -112,30 +129,39 @@ public class BridgeMock extends BridgeServlet {
/**
* handle POST (Ride)
* add Ride to AvailableRides
* - wait for Ride to be booked
* - send OK to Client
*/
@Override
protected void handlePostRide(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
// WIP wait till GET (LINK) arrives.
RequestMock mockRequest = (RequestMock) request;
ExchangeMock exchange = mockRequest.exchange;
synchronized (exchange) {
String jsonPayload = IOUtils.toString(request.getReader());
Ride ride = new Ride(jsonPayload);
availableRides.add(ride);
synchronized (ride){
while (availableRides.contains(ride)){
synchronized (ride) {
availableRides.add(ride);
while (!bookedRides.contains(ride)) {
ride.notify();
Thread.sleep(100);
ride.wait();
}
// SUPER ILLEGAL MOCKING
response.setStatus(200);
exchange.response.setStatus(200);
PrintWriter writer = response.getWriter();
writer.print(ride.json());
exchange.notify();
}
}
}
}

@ -1,8 +1,9 @@
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import exchange.ExchangeMock;
import javax.servlet.ServletException;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
/**
* Wraps a ClientServlet so it can be debugged easily, i.e. without running Tomcat.
@ -18,21 +19,94 @@ public class ClientMock extends ClientServlet {
}
@Override
void sendPostRide(Ride oldRide) throws IOException, ServletException {
// SUPER ILLEGAL MOCKING
MockHttpServletRequest request = new MockHttpServletRequest();
void sendPostRide(Ride ride) throws IOException, ServletException, InterruptedException {
request.setMethod("POST");
request.setContentType("application/json");
String payload = oldRide.json();
request.setContent(payload.getBytes());
availableRides.add(ride);
MockHttpServletResponse response = new MockHttpServletResponse();
// Mock Exchange
ExchangeMock exchange = new ExchangeMock();
exchange.request.setMethod("POST");
exchange.request.setContentType("application/json");
exchange.request.setContent(ride.json().getBytes());
synchronized (exchange){
// Mock POST (Ride)
mockSet.bridgeMock.doPost(exchange.request,exchange.response);
exchange.notify();
exchange.wait();
// handle OK (Ride)(Request)
Ride parsedRide = new Ride(exchange.response.getContentAsString());
ride.setRequest(parsedRide.getRequest());
int i = availableRides.indexOf(ride);
bookedRides.add(availableRides.remove(i));
sendGetRequest(ride);
}
}
/**
* # send GET (Request) to App
*/
@Override
void sendGetRequest(Ride oldRide) throws IOException {
HttpURLConnection connection = ConnectionHelper.make("GET", APP_URL);
// send GET (Request)
availableRides.add(oldRide);
mockSet.bridgeMock.doPost(request,response);
connection.setDoOutput(true);
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(oldRide.getRequest());
outputStream.flush();
outputStream.close();
// handle OK (Data)
// remove Ride from BookedRides
// add Ride to LoadedRides
// send GET (Ride)(Data)
if (connection.getResponseCode() == 200) {
String parsedData = ConnectionHelper.parseString(connection);
oldRide.setData(parsedData);
int i = bookedRides.indexOf(oldRide);
loadedRides.add(bookedRides.remove(i));
}
sendGetRideRequestData(oldRide);
}
/**
* # send GET (Ride)(Request)(Data)
*/
@Override
void sendGetRideRequestData(Ride oldRide) throws IOException {
HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL);
// send GET (Ride)(Request)(Data)
connection.setDoOutput(true);
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(oldRide.json());
outputStream.flush();
outputStream.close();
// handle OK (EOL)
// remove Ride from LoadedRides
if (connection.getResponseCode() == 200) {
Ride shellIdRide = ConnectionHelper.parseRide(connection);
if (shellIdRide.getRideID() != null) {
loadedRides.remove(oldRide);
}
}
}
}
Loading…
Cancel
Save