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

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

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

@ -26,8 +26,6 @@ public class Ride {
} }
public void setRequest(String request) { public void setRequest(String request) {
this.request = request; this.request = request;
} }
@ -53,8 +51,12 @@ public class Ride {
} }
public String json() { public String json() {
String[] keys = {"rideID", "request", "data"}; String[] keys = {"rideID",
String[] values = { rideID, request, data}; "request",
"data"};
String[] values = {rideID,
request,
data};
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("{"); sb.append("{");
for (int i = 0; i < keys.length; i++) { for (int i = 0; i < keys.length; i++) {
@ -70,9 +72,6 @@ public class Ride {
} }
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; if (this == o) return true;

@ -1,6 +1,6 @@
import exchange.ExchangeMock;
import exchange.RequestMock;
import org.apache.commons.io.IOUtils; 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.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -38,49 +38,43 @@ public class BridgeMock extends BridgeServlet {
@Override @Override
protected void handleGetRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { 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); } while (!(availableRides.size() > 0)) { Thread.sleep(100); }
Ride ride = availableRides.remove(0); Ride ride = availableRides.remove(0);
deliveredRides.add(ride);
synchronized (ride) {
ride.setRequest(parsedRequest);
bookedRides.add(ride);
while (ride.getData()==null) { while (ride.getData()==null) {
ride.notify(); ride.notify();
Thread.sleep(100);
ride.wait(); ride.wait();
} }
exchange.response.setStatus(200);
PrintWriter writer = response.getWriter(); PrintWriter writer = exchange.response.getWriter();
writer.print(ride.getData()); 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 * remove Ride from ForwardedData
* add Ride to EOL * add Ride to EOL
*/ */
protected void handleGetRideRequestData(HttpServletRequest request, HttpServletResponse response) { protected void handleGetRideRequestData(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
// # send OK (EOL) RequestMock mockRequest = (RequestMock) request;
new Ride(); 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) * handle POST (Ride)
* add Ride to AvailableRides * - wait for Ride to be booked
* - send OK to Client
*/ */
@Override @Override
protected void handlePostRide(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { 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()); String jsonPayload = IOUtils.toString(request.getReader());
Ride ride = new Ride(jsonPayload); 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(); ride.notify();
Thread.sleep(100); Thread.sleep(100);
ride.wait(); ride.wait();
} }
// SUPER ILLEGAL MOCKING
response.setStatus(200); exchange.response.setStatus(200);
PrintWriter writer = response.getWriter(); PrintWriter writer = response.getWriter();
writer.print(ride.json()); writer.print(ride.json());
exchange.notify();
} }
} }
} }
}

@ -1,8 +1,9 @@
import org.springframework.mock.web.MockHttpServletRequest; import exchange.ExchangeMock;
import org.springframework.mock.web.MockHttpServletResponse;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import java.net.HttpURLConnection;
/** /**
* Wraps a ClientServlet so it can be debugged easily, i.e. without running Tomcat. * Wraps a ClientServlet so it can be debugged easily, i.e. without running Tomcat.
@ -18,21 +19,94 @@ public class ClientMock extends ClientServlet {
} }
@Override @Override
void sendPostRide(Ride oldRide) throws IOException, ServletException { void sendPostRide(Ride ride) throws IOException, ServletException, InterruptedException {
// SUPER ILLEGAL MOCKING
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("POST"); availableRides.add(ride);
request.setContentType("application/json");
String payload = oldRide.json();
request.setContent(payload.getBytes());
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); 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