diff --git a/mispbridge/src/core/BridgeServlet.java b/mispbridge/src/core/BridgeServlet.java index 13c9292..39d9349 100644 --- a/mispbridge/src/core/BridgeServlet.java +++ b/mispbridge/src/core/BridgeServlet.java @@ -36,6 +36,7 @@ public class BridgeServlet extends HttpServlet { e.printStackTrace(); } }); + handleGetLinkThread.setName("handleGetLinkThread"); handleGetLinkThread.start(); } else { Ride ridePayload = new Ride(jsonPayload); @@ -50,6 +51,7 @@ public class BridgeServlet extends HttpServlet { e.printStackTrace(); } }); + handleGetRideRequestDataThread.setName("handleGetRideRequestDataThread"); handleGetRideRequestDataThread.start(); } } diff --git a/mispclient/src/core/ClientServlet.java b/mispclient/src/core/ClientServlet.java index 9d8c71b..1966ad6 100644 --- a/mispclient/src/core/ClientServlet.java +++ b/mispclient/src/core/ClientServlet.java @@ -26,9 +26,9 @@ public class ClientServlet extends HttpServlet { public ClientServlet() { // 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 */ - void sendGetRequest(Ride ride) throws IOException { + void sendGetRequest(Ride ride) throws IOException, ServletException, InterruptedException { // send FOO // 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) */ - void sendGetRideRequestData(Ride oldRide) throws IOException { + void sendGetRideRequestData(Ride oldRide) throws IOException, ServletException, InterruptedException { HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL); diff --git a/mispmock/src/actor/ActorRunnable.java b/mispmock/src/actor/ActorRunnable.java index 7a190dd..1805504 100644 --- a/mispmock/src/actor/ActorRunnable.java +++ b/mispmock/src/actor/ActorRunnable.java @@ -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; } diff --git a/mispmock/src/actor/AppMock.java b/mispmock/src/actor/AppMock.java index a09e311..1497269 100644 --- a/mispmock/src/actor/AppMock.java +++ b/mispmock/src/actor/AppMock.java @@ -1,36 +1,63 @@ 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.HttpServletResponse; import java.io.IOException; - -import core.MockSet; +import java.io.PrintWriter; public class AppMock extends ActorRunnable { - public AppMock(MockSet mockSet){ + public AppMock(MockSet mockSet) { super(mockSet); } @Override public void run() { + while (true) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } } @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 - void doPost(HttpServletRequest request, HttpServletResponse response) { + public void doPost(HttpServletRequest request, HttpServletResponse response) { } } diff --git a/mispmock/src/actor/UserMock.java b/mispmock/src/actor/UserMock.java index c972d0e..4c07f2c 100644 --- a/mispmock/src/actor/UserMock.java +++ b/mispmock/src/actor/UserMock.java @@ -35,12 +35,12 @@ public class UserMock extends ActorRunnable { } @Override - void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { } @Override - void doPost(HttpServletRequest request, HttpServletResponse response) { + public void doPost(HttpServletRequest request, HttpServletResponse response) { } diff --git a/mispmock/src/core/BridgeMock.java b/mispmock/src/core/BridgeMock.java index dd0c5f6..a92f686 100644 --- a/mispmock/src/core/BridgeMock.java +++ b/mispmock/src/core/BridgeMock.java @@ -67,11 +67,14 @@ public class BridgeMock extends BridgeServlet { Thread.sleep(100); ride.wait(); } + ride.setState(State.LOADED); exchange.response.setStatus(200); PrintWriter writer = exchange.response.getWriter(); - writer.print(ride.getData()); - ride.setState(State.LOADED); + writer.write(ride.getData()); + writer.flush(); + writer.close(); + ride.notify(); } exchange.notify(); @@ -112,7 +115,9 @@ public class BridgeMock extends BridgeServlet { exchange.response.setStatus(200); PrintWriter writer = response.getWriter(); - writer.print(ride.json()); + writer.write(ride.json()); + writer.flush(); + writer.close(); rideMap.remove(ride.getID()); ride.notify(); @@ -167,10 +172,13 @@ public class BridgeMock extends BridgeServlet { exchange.response.setStatus(200); PrintWriter writer = response.getWriter(); - writer.print(ride.json()); - exchange.notify(); + //writer.print(ride.json()); + writer.write(ride.json()); + writer.flush(); + writer.close(); + ride.notify(); } - + exchange.notify(); } diff --git a/mispmock/src/core/ClientMock.java b/mispmock/src/core/ClientMock.java index 0e27490..246801a 100644 --- a/mispmock/src/core/ClientMock.java +++ b/mispmock/src/core/ClientMock.java @@ -1,6 +1,7 @@ package core; import exchange.ExchangeMock; +import org.json.JSONObject; import javax.servlet.ServletException; import java.io.DataOutputStream; @@ -55,31 +56,27 @@ public class ClientMock extends ClientServlet { * # send GET (Request) to App */ @Override - void sendGetRequest(Ride ride) throws IOException { - - 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); - } + void sendGetRequest(Ride ride) throws IOException, ServletException, InterruptedException { - 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) */ @Override - void sendGetRideRequestData(Ride ride) throws IOException { - - HttpURLConnection connection = ConnectionHelper.make("GET", ClientServlet.MISP_BRIDGE_URL); - - // send GET (Ride)(Request)(Data) - connection.setDoOutput(true); - DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); - outputStream.writeBytes(ride.json()); - outputStream.flush(); - outputStream.close(); - - // handle OK (Ride) - // remove Ride from LoadedRides - if (connection.getResponseCode() == 200) { - Ride shellIdRide = ConnectionHelper.parseRide(connection); - if (shellIdRide.getID() != null) { - rideMap.remove(ride.getID()); - } + void sendGetRideRequestData(Ride ride) throws IOException, ServletException, InterruptedException { + + // 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 (Ride)(Request)(Data) + exchange.notify(); + mockSet.bridgeMock.doGet(exchange.request,exchange.response); + exchange.wait(); + + // handle OK (Ride) + Ride parsedRide = new Ride(exchange.response.getContentAsString()); + rideMap.remove(parsedRide.getID()); } } diff --git a/mispmock/src/exchange/ExchangeMock.java b/mispmock/src/exchange/ExchangeMock.java index 9fea683..aca954b 100644 --- a/mispmock/src/exchange/ExchangeMock.java +++ b/mispmock/src/exchange/ExchangeMock.java @@ -4,6 +4,20 @@ package exchange; import java.util.ArrayList; import java.util.List; +/** + * How "exchange" mocks an exchange:
+ *
+ * An "exchange" corresponds to request & reply pair.
+ * - i.e. a GET & OK pair.
+ * Steps:
+ * 1. new Exchange()
+ * 2. set properties of .request
+ * 3. "send" request by using exchange.notify(); recipient.doGet();
+ * 4. recipient does someting with request
+ * - - recipient sets proerties of .response
+ * - - recipient sends reply using exchange.notify();
+ * 5. "receive" response by using exchange.wait(); + */ public class ExchangeMock { public static List exchangeList = new ArrayList<>(); diff --git a/mispmock/src/exchange/ResponseMock.java b/mispmock/src/exchange/ResponseMock.java index 501c80c..dad1a3f 100644 --- a/mispmock/src/exchange/ResponseMock.java +++ b/mispmock/src/exchange/ResponseMock.java @@ -8,6 +8,7 @@ import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; import java.util.List; import java.util.Locale; import java.util.Set; @@ -147,8 +148,8 @@ public class ResponseMock extends MockHttpServletResponse implements HttpServle } @Override - public PrintWriter getWriter() { - return null; + public PrintWriter getWriter() throws UnsupportedEncodingException { + return super.getWriter(); } @Override