+ mock handlers.

pull/1/head
Ivan Olexyn 5 years ago
parent e9355280bc
commit 4fd4855a8f

@ -36,6 +36,7 @@ public class BridgeServlet extends HttpServlet {
e.printStackTrace(); e.printStackTrace();
} }
}); });
handleGetLinkThread.setName("handleGetLinkThread");
handleGetLinkThread.start(); handleGetLinkThread.start();
} else { } else {
Ride ridePayload = new Ride(jsonPayload); Ride ridePayload = new Ride(jsonPayload);
@ -50,6 +51,7 @@ public class BridgeServlet extends HttpServlet {
e.printStackTrace(); e.printStackTrace();
} }
}); });
handleGetRideRequestDataThread.setName("handleGetRideRequestDataThread");
handleGetRideRequestDataThread.start(); handleGetRideRequestDataThread.start();
} }
} }

@ -26,9 +26,9 @@ public class ClientServlet extends HttpServlet {
public ClientServlet() { public ClientServlet() {
// Thread : while AvailableRides < 256 , add Ride to AvailableRides , send POST (Ride) [DONE] // Thread : while AvailableRides < 256 , add Ride to AvailableRides , send POST (Ride) [DONE]
new Thread(new PostRideRunnable(this)).start(); Thread postRideThread = new Thread(new PostRideRunnable(this));
postRideThread.setName("postRideThread");
postRideThread.start();
} }
@ -65,7 +65,7 @@ public class ClientServlet extends HttpServlet {
/** /**
* # send GET (Request) to App * # send GET (Request) to App
*/ */
void sendGetRequest(Ride ride) throws IOException { void sendGetRequest(Ride ride) throws IOException, ServletException, InterruptedException {
// 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.
@ -85,7 +85,7 @@ public class ClientServlet extends HttpServlet {
/** /**
* # send GET (Ride)(Request)(Data) * # send GET (Ride)(Request)(Data)
*/ */
void sendGetRideRequestData(Ride oldRide) throws IOException { void sendGetRideRequestData(Ride oldRide) throws IOException, ServletException, InterruptedException {
HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL); HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL);

@ -47,8 +47,8 @@ public abstract class ActorRunnable implements Runnable {
} }
abstract void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException; public abstract void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException;
abstract void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException; public abstract void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException;
} }

@ -1,36 +1,63 @@
package actor; package actor;
import actor.ActorRunnable; import core.MockSet;
import exchange.ExchangeMock;
import exchange.RequestMock;
import org.apache.commons.io.IOUtils;
import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import core.MockSet;
public class AppMock extends ActorRunnable { public class AppMock extends ActorRunnable {
public AppMock(MockSet mockSet){ public AppMock(MockSet mockSet) {
super(mockSet); super(mockSet);
} }
@Override @Override
public void run() { public void run() {
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} }
@Override @Override
void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
RequestMock mockRequest = (RequestMock) request;
ExchangeMock exchange = mockRequest.exchange;
synchronized (exchange) {
String parsedRequest = IOUtils.toString(request.getReader());
JSONObject obj = new JSONObject(parsedRequest);
parsedRequest = obj.getString("request");
String dataString = "DATA" + parsedRequest.split("-")[1];
JSONObject dataObj = new JSONObject();
dataObj.put("data", dataString);
//Main.clientRunnable.responses.add(mockResponse); exchange.response.setStatus(200);
PrintWriter writer = exchange.response.getWriter();
writer.write(dataObj.toString());
writer.flush();
writer.close();
exchange.notify();
}
} }
@Override @Override
void doPost(HttpServletRequest request, HttpServletResponse response) { public void doPost(HttpServletRequest request, HttpServletResponse response) {
} }
} }

@ -35,12 +35,12 @@ public class UserMock extends ActorRunnable {
} }
@Override @Override
void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
} }
@Override @Override
void doPost(HttpServletRequest request, HttpServletResponse response) { public void doPost(HttpServletRequest request, HttpServletResponse response) {
} }

@ -67,11 +67,14 @@ public class BridgeMock extends BridgeServlet {
Thread.sleep(100); Thread.sleep(100);
ride.wait(); ride.wait();
} }
ride.setState(State.LOADED);
exchange.response.setStatus(200); exchange.response.setStatus(200);
PrintWriter writer = exchange.response.getWriter(); PrintWriter writer = exchange.response.getWriter();
writer.print(ride.getData()); writer.write(ride.getData());
ride.setState(State.LOADED); writer.flush();
writer.close();
ride.notify(); ride.notify();
} }
exchange.notify(); exchange.notify();
@ -112,7 +115,9 @@ public class BridgeMock extends BridgeServlet {
exchange.response.setStatus(200); exchange.response.setStatus(200);
PrintWriter writer = response.getWriter(); PrintWriter writer = response.getWriter();
writer.print(ride.json()); writer.write(ride.json());
writer.flush();
writer.close();
rideMap.remove(ride.getID()); rideMap.remove(ride.getID());
ride.notify(); ride.notify();
@ -167,10 +172,13 @@ public class BridgeMock extends BridgeServlet {
exchange.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(); writer.write(ride.json());
writer.flush();
writer.close();
ride.notify();
} }
exchange.notify();
} }

@ -1,6 +1,7 @@
package core; package core;
import exchange.ExchangeMock; import exchange.ExchangeMock;
import org.json.JSONObject;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import java.io.DataOutputStream; import java.io.DataOutputStream;
@ -55,31 +56,27 @@ public class ClientMock extends ClientServlet {
* # send GET (Request) to App * # send GET (Request) to App
*/ */
@Override @Override
void sendGetRequest(Ride ride) throws IOException { void sendGetRequest(Ride ride) throws IOException, ServletException, InterruptedException {
HttpURLConnection connection = ConnectionHelper.make("GET", ClientServlet.APP_URL);
// send GET (Request)
connection.setDoOutput(true);
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(ride.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);
ride.setData(parsedData);
ride.setState(State.LOADED);
}
sendGetRideRequestData(ride); // Mock Exchange
ExchangeMock exchange = new ExchangeMock();
exchange.request.setMethod("GET");
exchange.request.setContentType("application/json");
exchange.request.setContent(ride.json().getBytes());
synchronized (exchange){
// Mock GET (Request)
exchange.notify();
mockSet.appMock.doGet(exchange.request,exchange.response);
exchange.wait();
// handle OK (Data)
Ride parsedRide = new Ride(exchange.response.getContentAsString());
ride.setData(parsedRide.getData());
ride.setState(State.LOADED);
sendGetRideRequestData(ride);
}
} }
@ -88,24 +85,24 @@ public class ClientMock extends ClientServlet {
* # send GET (Ride)(Request)(Data) * # send GET (Ride)(Request)(Data)
*/ */
@Override @Override
void sendGetRideRequestData(Ride ride) throws IOException { void sendGetRideRequestData(Ride ride) throws IOException, ServletException, InterruptedException {
HttpURLConnection connection = ConnectionHelper.make("GET", ClientServlet.MISP_BRIDGE_URL); // Mock Exchange
ExchangeMock exchange = new ExchangeMock();
// send GET (Ride)(Request)(Data)
connection.setDoOutput(true); exchange.request.setMethod("GET");
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); exchange.request.setContentType("application/json");
outputStream.writeBytes(ride.json()); exchange.request.setContent(ride.json().getBytes());
outputStream.flush();
outputStream.close(); synchronized (exchange){
// Mock GET (Ride)(Request)(Data)
// handle OK (Ride) exchange.notify();
// remove Ride from LoadedRides mockSet.bridgeMock.doGet(exchange.request,exchange.response);
if (connection.getResponseCode() == 200) { exchange.wait();
Ride shellIdRide = ConnectionHelper.parseRide(connection);
if (shellIdRide.getID() != null) { // handle OK (Ride)
rideMap.remove(ride.getID()); Ride parsedRide = new Ride(exchange.response.getContentAsString());
} rideMap.remove(parsedRide.getID());
} }
} }

@ -4,6 +4,20 @@ package exchange;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
/**
* How "exchange" mocks an exchange:<br>
* <br>
* An "exchange" corresponds to request & reply pair.<br>
* - i.e. a GET & OK pair.<br>
* Steps:<br>
* 1. new Exchange()<br>
* 2. set properties of .request<br>
* 3. "send" request by using exchange.notify(); recipient.doGet();<br>
* 4. recipient does someting with request<br>
* - - recipient sets proerties of .response<br>
* - - recipient sends reply using exchange.notify();<br>
* 5. "receive" response by using exchange.wait();
*/
public class ExchangeMock { public class ExchangeMock {
public static List<ExchangeMock> exchangeList = new ArrayList<>(); public static List<ExchangeMock> exchangeList = new ArrayList<>();

@ -8,6 +8,7 @@ import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Set; import java.util.Set;
@ -147,8 +148,8 @@ public class ResponseMock extends MockHttpServletResponse implements HttpServle
} }
@Override @Override
public PrintWriter getWriter() { public PrintWriter getWriter() throws UnsupportedEncodingException {
return null; return super.getWriter();
} }
@Override @Override

Loading…
Cancel
Save