From 6c940c2764b44df1aceaefd5929c9dd3a4b0e9c9 Mon Sep 17 00:00:00 2001 From: Conor Flynn Date: Mon, 26 Sep 2022 12:04:57 -0400 Subject: [PATCH] Integrated REST API endpoints successfully. --- .../Internal Manual/Packet Spreadsheet.xlsx | Bin 18969 -> 19070 bytes .../DeFi Data Engine/config/app.properties | 3 + .../DeFi Data Engine/config/stream.properties | 4 +- .../org/out/consumers/SocketConsumer.java | 90 +++++++++----- .../out/destinations/SocketDestination.java | 2 +- .../org/out/handler/ProtocolDirectory.java | 30 ----- .../java/org/out/socket/SocketManager.java | 1 + .../TemplateExternalConnection.java | 5 - .../handler/ExternalStreamHandler.java | 6 +- .../handler/ExternalStreamManager.java | 8 -- .../local/handler/LocalStreamHandler.java | 5 - .../registry/StreamRegistryController.java | 13 ++- .../test/lsh/mongodb/TestMongoDatabase.java | 12 +- .../Rest Application/config/app.properties | 13 ++- .../java/org/rest/application/Endpoint.java | 110 +++++++++++++----- .../socket/SocketConnectionTest.java | 40 +++++-- 16 files changed, 208 insertions(+), 134 deletions(-) delete mode 100644 DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/ProtocolDirectory.java diff --git a/Data Engine/Documents/Internal Manual/Packet Spreadsheet.xlsx b/Data Engine/Documents/Internal Manual/Packet Spreadsheet.xlsx index 7d2c590a8e99861288216ce921011741b032cfc1..d2af62abecfb60a4bbf50f469431c0c00e91e132 100644 GIT binary patch delta 8347 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 delta 8242 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 diff --git a/DeFi-Data-Engine/DeFi Data Engine/config/app.properties b/DeFi-Data-Engine/DeFi Data Engine/config/app.properties index e3ce106e..7a3ae42c 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/config/app.properties +++ b/DeFi-Data-Engine/DeFi Data Engine/config/app.properties @@ -9,6 +9,9 @@ general.data.delim=, # collection delimiter general.collection.delim== +# transfer delimiter +general.transfer.delim=&&& + # date time formatter for data intake general.data.dateformat=dd-MM-yyyy diff --git a/DeFi-Data-Engine/DeFi Data Engine/config/stream.properties b/DeFi-Data-Engine/DeFi Data Engine/config/stream.properties index ec810c17..b8f5bc7c 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/config/stream.properties +++ b/DeFi-Data-Engine/DeFi Data Engine/config/stream.properties @@ -1,10 +1,10 @@ # === GENERAL PROPERTIES === # consumer types for accepting input -general.consumer.types=null +general.consumer.types=socket_consumer # producer types for writing output -general.producer.types=null +general.producer.types=socket_producer # === REST SOCKET PROPERTIES === diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java index eee258fc..b085611e 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java @@ -4,11 +4,11 @@ import java.io.DataOutputStream; import java.io.IOException; import java.net.SocketException; + import org.framework.router.Response; import org.json.JSONObject; import org.out.handler.OutputConsumer; import org.out.handler.OutputManager; -import org.out.handler.ProtocolDirectory; import org.out.socket.SocketManager; import org.properties.Config; @@ -46,41 +46,79 @@ public void run() { // listen for data packets from rest socket while(true) { - String[] data = ((String)in.readUTF()).split(Config.getProperty("app", "general.internal.delim")); - int protocol_index = 0, data_index = 0; - if(data.length == 2) { - protocol_index = 0; - data_index = 1; - } - - else if(data.length == 3) { - protocol_index = 1; - data_index = 2; - } - - else { - System.err.println("Invalid data format for SocketConsumer. Terminating."); - System.exit(1); - } - - String[] protocol = ProtocolDirectory.getProtocol(data[protocol_index]); - if(protocol == null) { + String[] data = ((String)in.readUTF()).split(Config.getProperty("app", "general.transfer.delim")); + String tag, sub_tag, sub_data, data_str; + + if(data.length == 3) { + tag = data[0]; + sub_tag = data[1]; + data_str = data[2]; + + Response response = send(tag, sub_tag, data_str); out.writeUTF(new JSONObject() - .put("response", "403") - .put("message", "Protocol does not exist. Please reference documentation.") + .put("response", "200") + .put("code", response.code()) + .put("message", response.message()) + .put("data", response.data()) .toString()); - } else { - Response response = send(protocol[0], protocol[1], data[data_index], data[0]); + + } else if(data.length == 4) { + tag = data[0]; + sub_tag = data[1]; + sub_data = data[2]; + data_str = data[3]; + + Response response = send(tag, sub_tag, data_str, sub_data); out.writeUTF(new JSONObject() .put("response", "200") .put("code", response.code()) .put("message", response.message()) .put("data", response.data()) - .toString()); + .toString()); + + } else { + out.writeUTF(new JSONObject() + .put("response", "502") + .put("message", "Communication between REST API and SocketConsumer is not consistent. Differing input lengths.") + .toString()); } + + +// int protocol_index = 0, data_index = 0; +// if(data.length == 2) { +// protocol_index = 0; +// data_index = 1; +// } +// +// else if(data.length == 3) { +// protocol_index = 1; +// data_index = 2; +// } +// +// else { +// System.err.println("Invalid data format for SocketConsumer. Terminating."); +// System.exit(1); +// } +// +// String[] protocol = ProtocolDirectory.getProtocol(data[protocol_index]); +// if(protocol == null) { +// out.writeUTF(new JSONObject() +// .put("response", "403") +// .put("message", "Protocol does not exist. Please reference documentation.") +// .toString()); +// } else { +// Response response = send(protocol[0], protocol[1], data[data_index], data[0]); +// out.writeUTF(new JSONObject() +// .put("response", "200") +// .put("code", response.code()) +// .put("message", response.message()) +// .put("data", response.data()) +// .toString()); +// } } } catch(SocketException e) { - System.out.println("Rest Application has unexpectedly closed."); + System.err.println("Rest Application has unexpectedly closed."); + System.exit(1); } catch (IOException e) { e.printStackTrace(); System.exit(1); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/destinations/SocketDestination.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/destinations/SocketDestination.java index 82230598..daab980b 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/destinations/SocketDestination.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/destinations/SocketDestination.java @@ -20,8 +20,8 @@ public SocketDestination(String key, DataOutputStream out) { public final synchronized boolean send(Packet packet) { try { out.write(packet.getData().getBytes()); + out.write(10); } catch (JSONException | IOException e) { - e.printStackTrace(); return false; } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/ProtocolDirectory.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/ProtocolDirectory.java deleted file mode 100644 index c5558db0..00000000 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/ProtocolDirectory.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.out.handler; - -import java.util.HashMap; - -public class ProtocolDirectory { - - private static final HashMap protocols; - -static { - protocols = new HashMap(); - - protocols.put("source_exists", new String[]{"SRC", "EXSR"}); - protocols.put("stream_exists", new String[]{"SRC", "EXST"}); - protocols.put("initialize", new String[]{"SRC", "INIT"}); - protocols.put("is_authorized", new String[]{"SRC", "IATH"}); - protocols.put("is_active", new String[]{"SRC", "IATV"}); - protocols.put("execute", new String[]{"SRC", "EXEC"}); - protocols.put("kill", new String[]{"SRC", "KILL"}); - protocols.put("subscribe", new String[]{"SRC", "SUBS"}); - protocols.put("request", new String[]{"SRC", "RQST"}); - protocols.put("scan", new String[] {"SRC", "SCAN"}); -} - - public static String[] getProtocol(String protocol) { - if(protocols.containsKey(protocol)) - return protocols.get(protocol); - - return null; - } -} \ No newline at end of file diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/socket/SocketManager.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/socket/SocketManager.java index e6c798e5..e32aa95f 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/socket/SocketManager.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/socket/SocketManager.java @@ -51,6 +51,7 @@ public synchronized static String accept(int port) { DataOutputStream out = new DataOutputStream(connection.getOutputStream()); String key = UUID.randomUUID().toString(); out.write(key.getBytes()); + out.write(10); if(connections.containsKey(key)) connections.get(key).close(); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateExternalConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateExternalConnection.java index 7f2716d1..74e0afa8 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateExternalConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateExternalConnection.java @@ -1,8 +1,5 @@ package org.stream.external.connected.connections; -import java.time.format.DateTimeFormatter; - -import org.properties.Config; import org.stream.external.handler.ExternalStreamConnection; import org.stream.external.handler.ExternalStreamManager; @@ -12,8 +9,6 @@ public class TemplateExternalConnection extends ExternalStreamConnection { private boolean authorized = false; private boolean override = false; - private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(Config.getProperty("app", "general.data.dateformat")); - public TemplateExternalConnection(ExternalStreamManager manager, String data) { super(manager, data.split(",")[0]); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java index ee963dd6..74d4114d 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java @@ -34,11 +34,13 @@ public Response processEXST(Packet packet) { public Response processINIT(Packet packet) { // extract template from data String data = packet.getData(); - int splitIndex = data.indexOf(','); + String delim = Config.getProperty("app", "general.internal.delim"); + int delim_len = delim.length(); + int splitIndex = data.indexOf(delim); String template = ""; if(splitIndex != -1) { template = data.substring(0, splitIndex).trim(); - data = data.substring(splitIndex + 1).trim(); + data = data.substring(splitIndex + delim_len).trim(); } else { template = data; data = ""; diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java index e1f89656..78d45c4b 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java @@ -399,10 +399,6 @@ protected boolean killStream(String hash) { */ private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(Config.getProperty("app", "general.data.dateformat")); protected void processSubscription(String hash, String subscription, String destination, String data) { - Response out_response = handler.send("OUT", "EDAT", String.format("%s", data), destination); - if(out_response.code() != 200) - Logger.warn(out_response); - // define subscribed date String date = LocalDate.now().format(formatter); String collection = subscription + Config.getProperty("app", "general.collection.delim") + date; @@ -420,10 +416,6 @@ protected void processSubscription(String hash, String subscription, String dest * @param data Data sent by the given subscription. */ protected void processRequest(String hash, String request, String destination, String data) { - Response out_response = handler.send("OUT", "EDAT", String.format("%s", data), destination); - if(out_response.code() != 200) - Logger.warn(out_response); - Response lsh_response = handler.send("LSH", "PUSH", String.format("%s%s%s", data, Config.getProperty("app", "general.internal.delim"), request)); if(lsh_response.code() != 200) Logger.warn(lsh_response); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamHandler.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamHandler.java index a2c9e163..958b8de0 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamHandler.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamHandler.java @@ -1,12 +1,7 @@ package org.stream.local.handler; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.Arrays; -import java.util.List; import java.util.Set; -import java.util.stream.Collectors; - import org.framework.router.Packet; import org.framework.router.Response; import org.framework.router.ResponseFactory; diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java index 3f5663fe..45a00550 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java @@ -94,9 +94,9 @@ public Response processRQST(Packet packet) { // dated else if(data.length == 5) { - LocalDate start = LocalDate.parse(data[1], formatter); - LocalDate end = LocalDate.parse(data[2], formatter); try { + LocalDate start = LocalDate.parse(data[1], formatter); + LocalDate end = LocalDate.parse(data[2], formatter); List dates = start.datesUntil(end).collect(Collectors.toList()); // invalid date processing if(dates.isEmpty()) @@ -108,13 +108,20 @@ else if(data.length == 5) { // perform requests request = uuid + Config.getProperty("app", "general.collection.delim") + data[3] + Config.getProperty("app", "general.collection.delim") + date.format(formatter); lsh_response = send("LSH", "RQST", format(request, data[4]), packet.getSubData()); + if(lsh_response.code() == 200) + continue; + if(lsh_response.code() == 446) { esh_response = send("ESH", "RQST", format(data[0], request), packet.getSubData()); if(esh_response.code() != 200) return esh_response; + } else { + return lsh_response; } + - if(lsh_response.code() != 200 && lsh_response.code() != 446) + lsh_response = send("LSH", "RQST", format(request, data[4]), packet.getSubData()); + if(lsh_response.code() != 200) return lsh_response; } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/lsh/mongodb/TestMongoDatabase.java b/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/lsh/mongodb/TestMongoDatabase.java index 62df17d6..b1fdece3 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/lsh/mongodb/TestMongoDatabase.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/lsh/mongodb/TestMongoDatabase.java @@ -88,17 +88,9 @@ public void TestRQSTDated() { Config.setProperty("stream", "mongodb.database.main", "testing"); Core core = new Core(); - assertEquals(200, core.send("SRC", "INIT", "external_template, key").code()); + assertEquals(200, core.send("SRC", "INIT", "external_template:::key").code()); - assertEquals(200, core.send("SRC", "RQST", "key:::10-09-2022:::12-09-2022:::template-external-request:::get_all, template-external-request", "null").code()); -// assertEquals(445, core.send("LSH", "RQST", "get_all, test-mongo-database, invalid").code()); -// assertEquals(446, core.send("LSH", "RQST", "get_all, dne").code()); -// -// // test get_item -// assertEquals(200, core.send("LSH", "RQST", "get_item, test-mongo-database, element1, e1").code()); -// assertEquals(446, core.send("LSH", "RQST", "get_item, test-mongo-database, element1, e2").code()); -// -// assertEquals(500, core.send("LSH", "RQST", "").code()); + assertEquals(200, core.send("SRC", "RQST", "key:::10-09-2022:::15-09-2022:::template-external-request:::get_all, template-external-request", "null").code()); } @Test diff --git a/DeFi-Data-Engine/Rest Application/config/app.properties b/DeFi-Data-Engine/Rest Application/config/app.properties index 526cb9b7..11c5215b 100644 --- a/DeFi-Data-Engine/Rest Application/config/app.properties +++ b/DeFi-Data-Engine/Rest Application/config/app.properties @@ -3,8 +3,17 @@ # Wait-time in between checking for responses from engine: rest.wait.ms=10 -# Delimiter used for communication between engine and API: -general.internal.delim=,., +# delimiter used for internal processing +general.internal.delim=::: + +# data delimiter +general.data.delim=, + +# collection delimiter +general.collection.delim== + +# transfer delimiter +general.transfer.delim=&&& # === SPRING PROPERTIES === diff --git a/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java b/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java index 3fb4496c..e512294e 100644 --- a/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java +++ b/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java @@ -33,53 +33,105 @@ public class Endpoint { e.printStackTrace(); System.exit(1); } -} - // sample testing url: http://localhost:8080/defi/v1/rest/live?key=TEST-KEY&protocol=request&data=key,external - @GetMapping(path="/defi/v1/rest/live") - public String getRestLive(@RequestParam String key, @RequestParam String protocol, @RequestParam String data) throws InterruptedException { - String response = request(key, protocol, data); - if(response == null) - return new JSONObject() - .put("response", "500") - .put("message", "Unexpected invalid request. Cannot process given response.") - .toString(); - - return response; +} + + @GetMapping(path="/defi/v1/rest/source_exists") + public String getSourceExists(@RequestParam String source) { + return requestStatic("SRC", "EXSR", source); } - @GetMapping(path="/defi/v1/rest/static") - public String getRestStatic(@RequestParam String protocol, @RequestParam String data) throws InterruptedException { - String response = request("", protocol, data); - if(response == null) - return new JSONObject() - .put("response", "500") - .put("message", "Unexpected invalid request. Cannot process given response.") - .toString(); - - return response; + @GetMapping(path="/defi/v1/rest/stream_exists") + public String getStreamExists(@RequestParam String key) { + return requestStatic("SRC", "EXST", key); + } + + @GetMapping(path="/defi/v1/rest/initialize") + public String getInitialize(@RequestParam String source, @RequestParam String auth_data) { + return requestStatic("SRC", "INIT", source, auth_data); + } + + @GetMapping(path="/defi/v1/rest/is_authorized") + public String getIsAuthorized(@RequestParam String key) { + return requestStatic("SRC", "IATH", key); + } + + @GetMapping(path="/defi/v1/rest/is_active") + public String getIsActive(@RequestParam String key) { + return requestStatic("SRC", "IATV", key); } - private final synchronized String request(String key, String protocol, String data) { + @GetMapping(path="/defi/v1/rest/execute") + @Deprecated + public String getExecute(@RequestParam String key) { + return requestStatic("SRC", "EXEC", key); + } + + @GetMapping(path="/defi/v1/rest/kill") + @Deprecated + public String getKill(@RequestParam String key) { + return requestStatic("SRC", "KILL", key); + } + + @GetMapping(path="/defi/v1/rest/subscribe") + @Deprecated + public String getSubscription(@RequestParam String key, @RequestParam String subscription) { + return requestStatic("SRC", "SUBS", key, subscription); + } + + @GetMapping(path="/defi/v1/rest/request") + public String getRequest(@RequestParam String destination, @RequestParam String key, @RequestParam String request, @RequestParam String query) { + return request("SRC", "RQST", destination, key, request, query); + } + + @GetMapping(path="/defi/v1/rest/request_dated") + public String getRequest(@RequestParam String destination, @RequestParam String key, @RequestParam String request, @RequestParam String query, @RequestParam String start_date, @RequestParam String end_date) { + return request("SRC", "RQST", destination, key, start_date, end_date, request, query); + } + + private final String requestStatic(String tag, String sub_tag, String... data) { + return request(tag, sub_tag, "", data); + } + + private final String request(String tag, String sub_tag, String destination, String... data) { try { - String delim = Config.getProperty("app", "general.internal.delim"); - if(key.contains(delim) || protocol.contains(delim) || data.contains(delim)) + String delim = Config.getProperty("app", "general.transfer.delim"); + if(destination.contains(delim)) return new JSONObject() .put("response", "406") .put("message", String.format("Parameters cannot contain the character sequence <%s>. Please request with a different character.", delim)) .toString(); + if(data.length == 0) + throw new IOException("Data length 0, fatal error occured"); + + StringBuilder formatted_data = new StringBuilder(); + String internal_delim = Config.getProperty("app", "general.internal.delim"); + for(int i = 0; i < data.length; i++) { + if(data[i].contains(delim)) + return new JSONObject() + .put("response", "406") + .put("message", String.format("Parameters cannot contain the character sequence <%s>. Please request with a different character.", delim)) + .toString(); + formatted_data.append(data[i]); + if(i != data.length - 1) + formatted_data.append(internal_delim); + } + // static request - if(key.equals("")) - out.writeUTF(String.format("%s%s%s", protocol, delim, data)); + if(destination.equals("")) + out.writeUTF(String.format("%s%s%s%s%s", tag, delim, sub_tag, delim, formatted_data)); // live request else - out.writeUTF(String.format("%s%s%s%s%s", key, delim, protocol, delim, data)); + out.writeUTF(String.format("%s%s%s%s%s%s%s", tag, delim, sub_tag, delim, destination, delim, formatted_data)); return in.readUTF(); } catch (IOException e) { e.printStackTrace(); System.exit(1); } - return null; + return new JSONObject() + .put("response", "500") + .put("message", "Unexpected invalid request. Cannot process given response.") + .toString(); } } \ No newline at end of file diff --git a/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java b/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java index d864e816..3007daee 100644 --- a/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java +++ b/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java @@ -2,7 +2,6 @@ import java.io.BufferedReader; import java.io.DataInputStream; -import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; @@ -14,17 +13,16 @@ public class SocketConnectionTest { public static void main(String[] args) throws UnknownHostException, IOException { + final Socket socket = SocketFactory.getDefault().createSocket("localhost", 61200); + final DataInputStream in = new DataInputStream(socket.getInputStream()); + + String key = readLine(in); + Thread thread = new Thread() { public void run() { try { - Socket socket = SocketFactory.getDefault().createSocket("localhost", 61200); - DataInputStream in = new DataInputStream(socket.getInputStream()); - DataOutputStream out = new DataOutputStream(socket.getOutputStream()); - - out.writeUTF("TEST-KEY"); - while(true) { - System.out.println(in.readUTF()); + System.out.println(readLine(in)); } } catch(Exception e) { e.printStackTrace(); @@ -34,8 +32,18 @@ public void run() { }; thread.start(); - System.out.println("INIT RESPONSE: " + request("http://localhost:8080/defi/v1/rest/static?protocol=initialize&data=external_template,key")); - System.out.println("RQST RESPONSE: " + request("http://localhost:8080/defi/v1/rest/live?key=TEST-KEY&protocol=request&data=key,external")); + //TODO FIX INTEGRATION WITH REST API + System.out.println("SOURCE_EXISTS RESPONSE: " + request("http://localhost:8080/defi/v1/rest/source_exists?source=external_template")); + System.out.println("INIT RESPONSE: " + request("http://localhost:8080/defi/v1/rest/initialize?source=external_template&auth_data=key")); + System.out.println("STREAM_EXISTS RESPONSE: " + request("http://localhost:8080/defi/v1/rest/stream_exists?key=key")); + System.out.println("IS_AUTHORIZED RESPONSE: " + request("http://localhost:8080/defi/v1/rest/is_authorized?key=key")); + System.out.println("RQST RESPONSE: " + request( + String.format("http://localhost:8080/defi/v1/rest/request_dated?destination=%s" + + "&key=key" + + "&request=template-external-request" + + "&query=get_all,template-external-request" + + "&start_date=10-09-2022" + + "&end_date=14-09-2022", key))); } public static String request(String str, String... params) throws IOException { @@ -56,8 +64,18 @@ public static String request(String str, String... params) throws IOException { return response.toString(); } else { - System.out.println("GET request not worked"); + System.err.println(String.format("Request Failure code <%d> url <%s>\nmsg <%s>", responseCode, obj.toString(), con.toString())); + System.exit(1); } return ""; } + + public static final String readLine(DataInputStream in) throws IOException { + StringBuilder out = new StringBuilder(); + char c = 0; + while((c = (char)in.read()) != 10) + out.append(c); + + return out.toString(); + } } \ No newline at end of file