From 3372fa5013e7f99dd3494f9f2094b8adf636ab28 Mon Sep 17 00:00:00 2001 From: Conor Flynn Date: Sun, 25 Sep 2022 01:38:48 -0400 Subject: [PATCH] Integrate ESH and LSH to communicate properly --- .../Internal Manual/Packet Spreadsheet.xlsx | Bin 18868 -> 18969 bytes .../DeFi Data Engine/config/app.properties | 8 +- .../src/main/java/org/core/logger/Logger.java | 11 +- .../org/framework/router/ResponseFactory.java | 10 +- .../java/org/out/handler/OutputHandler.java | 3 + .../src/main/java/org/properties/Config.java | 4 +- .../connections/AmberDataConnection.java | 6 ++ .../TemplateExternalConnection.java | 34 +++++-- .../handler/ExternalStreamConnection.java | 22 +++- .../handler/ExternalStreamHandler.java | 58 +++++++---- .../handler/ExternalStreamManager.java | 73 ++++++++++++- .../connections/MongoDatabaseConnection.java | 4 + .../connections/TemplateLocalConnection.java | 4 + .../mongodb/MongoDatabaseRequestHandler.java | 74 +++++++++++--- .../local/handler/LocalStreamConnection.java | 1 + .../local/handler/LocalStreamHandler.java | 51 ++++++++-- .../local/handler/LocalStreamManager.java | 4 + .../registry/StreamRegistryController.java | 96 +++++++++++++++++- .../test/lsh/mongodb/TestMongoDatabase.java | 34 +++++-- .../src/test/java/test/protocols/TestESH.java | 10 +- .../src/test/java/test/protocols/TestLSH.java | 28 ++--- 21 files changed, 446 insertions(+), 89 deletions(-) diff --git a/Data Engine/Documents/Internal Manual/Packet Spreadsheet.xlsx b/Data Engine/Documents/Internal Manual/Packet Spreadsheet.xlsx index fed61c8937b76b90426801a8ebdbbb0a8dce75f5..7d2c590a8e99861288216ce921011741b032cfc1 100644 GIT binary patch delta 10103 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 delta 9975 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%0Dl0L)=h`47i>- z4rQ_NvmQiBdypFTg-*cfT{@!n5R58yY4gxjP3n9F)$rhz4pqv0PCOZd$`<$i$*g^E z8+J2&!pL6NCdlF+Fp!*bvg<|7=Xu;_6o-cTUB?6v#Aik7Rk4Lb17Rp?1<5%LHTkE8 zdA_fRp75RgtaaM6)J`ewRFDaqWizkKnZ5Humqiw%9h{PR$s|DI&EeGONmy|6HOoeu z+`1sH`0U-#~Jn<>b2y3o0zXM zJlmhjbuyYlgg8#ZnmSZvj#`OnT__J2Hm50b`z)U(N4Jx$KI~}2X=ST*Zp>57&(n`MTd@n zmd}I`6@!u?m6ri~*Cc}T+FnYGsHvl|*kAVbwHP0|Dcb0)G#OCZRwjq?Zez`ADa~ec zu0_P+XOmC~5`3KtS9$4MjkWj*9aJ;Q&@#XG<;3lR3)41`5W>|=P`u>K7{oSIsJDkCQ^cQlIf}=b zWQ--`;jcxgo$6wDv4T5H31M<@dHu17B^GRVE#Bv?ZjH|wBz`3e3%y?XY(5x3*t~u+ zqOBd(=%o<``aG2;O>?@KRs4UXD)X<+kQ%iIwRc$XOZ z1GDRcBF)5kbqM|XwJxa+Hpla40+O~+toS7|2L`Y-qSOwgnf^-bf=6klIIJ4;_KAL` zB67nF{-US?ASI>=6-Q$W#e);VS_rD)?+AT=Q=gVf_wQW!LSz6-2T#&DFO6fLmMzNG zfYcxjTrglh8D}eN&j1C*2oJZ)wsnRY7p{Rj)=e*QU1P=ooL1 z_5^YfNvcQ|gTETr@7%l3v@>W^FK3^q9ibXRS4eJorOZh3r0Bo0UNd^4TfdYWI&mUM zDW^ke`-ab3Cu*59Vo;T<9%3~&zK|R1tfOA8=z-VdLn+i>xKN|pgLq|2I54oFt8gL> zPU)!jmsG;!{7)#^Q&NYos`ftY*gR+9h_T0&*@_d6z)?8x%+uMTDs06_nmecr%)3g4 z?@*wG&o&4+1bMG%PyoOU;z!WJ1Wf$}5n9P5Q&{b-+PHq+XcA@wV`9xuqwaT)viFN# zqGC1$5PyDkKgF_p)n~A1inu@v-b;ofr=FHpEi+F6ACgA*L|`0Bs79=CB!HoKo>(3q zj62xf&*=b43DYfE8XL{{CW;z)p@{N`$QQ|j*4s|jn&XW);xnYPoYB23Kx3V=|Wv`2KB0!{P2$$<*vax278R) zdgEG4x~};_{9z;8?CF-Cx~hnCGFj*=8~>nhw*RQg=e~{q`5_Ux0dF(&f*qzK& zLLI*fG?&)-jYnV>UYRoOfNF{0&1(q^MNk@QlIa^ygoTrU^e(v~*fob~$BN_C^*vm1 zFtiuJLmM5@Op(;E?c(`RqGz(RHWGL2@>}pt06|t#wcwAzO8y}lJ%q#$X^Hz% zq^X-GqJQW*h-rIe*ePvM2;FYk(KzKD{kynJN98LmSL3_6d#*?okS@MgOupeXxsqqR zN5)n;8KuBjDy2jc+CNfbUB3?p^V#HA#UE@Pfi0)BJZ|lvYs7hU+C;*StkLT)Z(D7Clk()O{9F1&H^V=r*FQLq?|B6piX6%DLSb<^a4MdoP&Ky=! z{BT{~DSYCyF_+)M{mn7>=U?&3wytd;G!mCfpze|G>S5BA+NO-?!f$TSo-G0T8Mq|WbV%_~^@Jv~e zg~omi&tAxM5}DPP8lsS`DJNotCah(jb?5}4C6NsMyN?pYDmvRdT$l$*o2f`u5IhW* zSduOlkXbS`3HKejlQH>3*B1Wo6F64wt@|Ch`$HIyp91;GKHt0#2_qZMIDockZDEX7 za|8+MXjmYD+bBU~XhVhrSAd>;OP67dlVFzbryx!z4Tnv2ML}yje<=TVlb4I>?X%bE zr5=KHLwgxRRwJ2~6{f8UHHKC(bA2yw4k4aRWNb|S^0b+Y6hR}rc*qMWsL*L&jt|g6 zLJK2nBa0|YC`(<;SZrNFL~V}QIsn~A58`0U=ZI#J|FSOi`R{r*(O2b-=Iy7|SGe7ukO~ZT7U;aMo?yp!Xc1a=?bJZFd+T}GUX))@C2~OrC z8n2f=wx5hk=I!~aGH}oOw)vYcvq1B!297u4ZbQioj-HrC;%3FxpHX4nPV;ZrV)(>N z6@UXw*uI;gK#T5Ze&uAF1p#jz39L?vHH z-Yvx2k87vMa2dUFwn8Cgg1qgT&1U+0MhJYy?ku$Jys!1{MyF_U` z6}3h)HmO7`g-;f009wipAvL$?NjLQ_1sg@@RQ(>+n}Udn{BH55tW$Af;H=0&mN|wYn z;sKDF#V)|f`@PU_dJju-6 zq^W|B4lYk@_JlSb*Pe}@|8bzu8KPdV1EMhE6TNMUSq`v<5tl^GwZ;{heYdxv-m-J2 zffX&#JY4FTqoVQZi%DM1!q1Gv;E&Wk2?cD=guFu;QqDHLm_`cUtzc`ROI`zLlnjC!A0oA` z8nvoPz6ENh=VE)&;nsmlyMapsJ;q_Nv{KKMyVLobUs#M5UPIXeiyLd@x)ZJHAc5oM zR$_5$0`km=zP!LZPJRUGo3dLPAC*B7tOsX*hjii+@HF(UDCzo_+S=AcHqM*Y5rc>+ zzc*1NlcB~v#H({I7xG7T{@-AT;0EqXe!QkX;!+a`FOT*vnU@!%!(%}T2Lp&1o?dm! zUNRl)XYOVs;yrg`w#0AUY_6+>1O~J*KZwIq%7;SY;XAs95d_+iXkEdWYdOz3QdWO_ zFklT@KZ!Cc${d&-Q(TQw#kgB_w91W|9{BtnEyjN^=BYG1^{wNO|2Dao&TNr7Ui=lS zKzh>s?A8w0KsAPx7jR*it(}Ku2iGX$vt2`KQ{@t%|6r?!X-Btz(P0i~Z zh>J41hF~fi{%FYPP!YKpMzz!qiWIKr(@XrMIy030qHaHHvBW;FT#GQF=ksSaT-1tL zZS9VAet)M18nwh^D~<8Zi*W&&m0|X2#Zg_Bc$lg4!w;(Gf`_B9f7My_pI&i0{DI?_aetB=@shf3>y)-&e!xe z!tYl0{>a=F6n>Lj5v=CleYZRGke}pXNQX$%EwxMvXqS`-)k8^PDJ7l%UIfV@(P%5i zX7L9$mT!f!CQ6OYsiWs~37v(@rOf`Uo3=)X*Jz(lJ1&=(zuRh_7-iF}i&(#CQULal zEX^xjWyn&NMsipiXv8boO^!X{^a#I4v9fp#spY21D$U=^6M77w+{sL@FpSbYOBE|! zOcrw)2~T<0)YRc9A1C+Q$>IMn5+GnP+SGZ2T^R|q&sIEvx9Lbb=4TRVYBKUH#&ige$9gZ6T##4t{G}{ z^Qjvs@fVu1(~|0G@&`Igh52gS9t`IO{;j6=O9i`Yp0t{TPToaAxyj!XkAeHmk8QdT zT-0ilRwetR;b*A&b9njRHY<_&eNQoY8{*+hoe1&r?Vmg_Q#xy|0y;I_X+_H8sN@JDcX=a?pnG`0mvArL%w@(4;L zMCWD`WLuv9j!E=)4pFAkJgv?43BmD@GCyS*nA+_jR^sJ#N6}XZ%SS$7R4cH7>LrTY zLD)$u?O$XmF9M;#fA-vHXBU1usI>d-=$hj!5FVCoheibSd9*V8t^=BuUYKPQqK9Kq zK7?0@moSRSXk*c_{(=>dikhlRa6xf@!A~;sBg^={ud(0($#Vb^xFb`mPw!4Wwe6hp zliHW4V?!r?ahwS{|G1#BB9y~!U6P~b6hAvJ1d`CsH9j~QZY8WX$T8R5QGU%gC4PJ8 zE$pO%4%6%uRE_zx=?Ba{JOhMOPTQzGQtAbGBPTUE<6L9)t3VtVF>mF#<>)9AtDs+$ zSpq0_T{Fi!$N#qNkYuX=f!k{P^Kd*f({nt-%vw=K5^I=%!Cn=Z?qR4T#dpUUk*N&W zyO5C0amjeCt@RT_7#(-)yTDJo$sUD`9U8!R{j9uy2{;0rCT$hbFZ+?y}Mdlyh%T{eE1*J2`>spxMpcT%{*n)t~V1Cr8P}ItG z3x<{}{?j0HvLCO}shr;_K>$-n8^ruxuOU5#(y zZL8~lZADNIii`%hM1@CTtL0BBM32R_orZZy7>dFzR%c3wHGChj=@0D3!rrj!>S0f? zBF>|^0%e**hRQgn7xt!vcfldyVoco-q2>t2_U$mRi?DTMzT3jwXA^1^HdSSzmf(|N z**zGcOkh9q4#PT{(prj9g$kU$ubtei2oAcAtrAwiV3h#b8}^f`{KnNff7l*jj0l=n zZiy$u52&aaHIuL+qeN;>y#uGv$&-ynbZcH!tEiB#Bq2Gy1&oB{GyY8DY~A^=yBf(~ zed4oomJrhhgKruVP=_f`p{FJh9|Ocimp>PAhy#%(PW3caf4FZ~xj$K(%TVZowF(L# zZK53zzxqIW4^Jew=2vkl-Jz-rn!=leSuk<@Wz?6?JFU*TqqOi@&{^m7kt7}#Vt*%A z_)a!j(ZspfLsvw)sMJo5>=(byYxC}|c(I%mic`)w=bd=7HbKg422I*_Z}P>wuBbIZ z3kfJf9?*)XA4fA8YZZsbH>xg^edW>vKBoP;B!^P@3Oxxsap6iZD7m%c&#>EjiNCRa z_WsWAF1Ae3@?4?!-4gxwB6FqEIvA&P`gYd+XKm`v4K~Mpl-0!zXR2YnnbLI=9hmR9 zh!@^x0W9wfLi9xWOl;QVDIJr`f2hdCg$^3{#f8$}~vpS2Y_4K>~l z`P7885NvSCx9x9;)Mr*<8na$P!TNLKSNbdt!0Gz-kDAkP$@uQb1S7q0i5{;!1`V*@ z-RWdVe{!7FS>=qD3@LKr?e42cOJ8#HH*$1=YL?H#?V;c4yyDd&76U6pW$7^yF}xl< z;8}&_+j@;EOeRgi40OoWIz{ukQrnV9k+s94EhDxvm=oVpnmt|wi{0dkvTxR3QWy?6 z=XEwILPEmv=$4yE8^`U|97C<7d6|J*gVTr3k=2;NxRBoEX@V*yXWuPK%3PV*UE|3@ ze;AM3;XNzt7*nV+%Q+0;OfQYN>iH`I*f$@7hjhA5M`r*fRmzmec>0CWa~Nzf3^(H3 zXtg^Tl+GejZEhx>1N*pK+<8AD+a_n1bo;SA0oaN$a3ye1tnpr@&NS!O;$Uwyuy#30`FjcNgc{!`0c_ zfP+UG&}~3{G-Z^9aGQOG>pRfZROFqhsVTz2Y?_!k=`@RtlK!4$mi0^g zk)L3@LmN?YguagD*~#BvH^@LLW4jdW8%*kr`__$uNVg89hex-QtcU_)k_4}Kt1`Q) zFcpVq3RZas@^wZGw32J!*inV}c7ctDOdGt~D%wi05)nM~I?n?RjHWR`&hA}NHLFUD z{{F>_SIWJ_0i}rysxlA&L1fG&RWer}%3UpNZh6}m?-J(@7;)ht)9%eL%k^mrwt3sR z@wmKYl5jT|g95YQMD10KZCVBu zjq|uKK}YbpA<&|bkfj=$&@-t{o&$e{cabHgYDr|mZjX30n$XVr0{Aj->(n)!tT+b8t{pHln$oko$FK;}{?YM1l$~A)D zLXI^Ge;xN1!GAPpMSTUlMX46Nl%5RGB#pJEGrDVy}Av2lrZ?~W~ zp#!ZlRQxyUjqqfgkY5iO`qb<@=n16{XEuBPENH!lm_HQ!|7+<2y-6xUz=9N{q#!kr zK~Bg7pkGpGME~}m004L&yx`yC6!XIf8+0Xw{ofT)G-&~%e_7-I`k+((^*=>Ok%2&h&@2m%`PM}`s>R`NeX{|Ebm>-GQu diff --git a/DeFi-Data-Engine/DeFi Data Engine/config/app.properties b/DeFi-Data-Engine/DeFi Data Engine/config/app.properties index 1b081086..e3ce106e 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/config/app.properties +++ b/DeFi-Data-Engine/DeFi Data Engine/config/app.properties @@ -1,11 +1,17 @@ # === GENERAL PROPERTIES === # delimiter used for internal processing -general.internal.delim=,., +general.internal.delim=::: # data delimiter general.data.delim=, +# collection delimiter +general.collection.delim== + +# date time formatter for data intake +general.data.dateformat=dd-MM-yyyy + # enable all packet logging general.logging.packets=true diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/core/logger/Logger.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/core/logger/Logger.java index e9e326a0..718da906 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/core/logger/Logger.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/core/logger/Logger.java @@ -16,6 +16,14 @@ public static final void log(Response response) { System.out.println(responseFormat(response)); } + public static final void warn(Packet packet) { + System.err.println(packetFormat(packet)); + } + + public static final void warn(Response response) { + System.err.println(responseFormat(response)); + } + public static final void terminate(Packet packet) { System.err.println(packetFormat(packet)); System.exit(1); @@ -38,10 +46,11 @@ private static final String packetFormat(Packet packet) { } private static final String responseFormat(Response response) { - return String.format("[%s] [%-10s] RESPONSE - [%3d] [%s]", + return String.format("[%s] [%-10s] RESPONSE - [%3d] [%s] [%s]", time(), Thread.currentThread().getName(), response.code(), + response.message(), response.data()); } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java index 7cdb11db..c2d24e95 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java @@ -143,7 +143,7 @@ public static Response response471(String key) { } public static Response response472(String key) { - return Response.create(472, String.format("Output producer <%s> failed to send data to external connection <%s>.", key)); + return Response.create(472, String.format("Output producer failed to send data to external connection <%s>.", key)); } public static Response response500(String loc, String parameter) { @@ -154,7 +154,15 @@ public static Response response501() { return Response.create(501, String.format("Fatal error occurred. This response should not be displayed.")); } + public static Response response501(String message) { + return Response.create(501, String.format("Fatal error occurred. This response should not be displayed. Message: <%s>", message)); + } + public static Response response502() { return Response.create(502, String.format("Internal language failure. This error is commonly causes by a static protocol being treated as a live protocol or vice versa.")); } + + public static Response response503(String format, String... dates) { + return Response.create(503, String.format("Local data stream failed to process date of the format <%s> from given strings <%s>", format, Arrays.toString(dates))); + } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java index 5d7cea71..9f818188 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java @@ -36,6 +36,9 @@ public Response processSTRT(Packet packet) { } public Response processEDAT(Packet packet) { + if(packet.getSubData().equals("null")) + return ResponseFactory.response200(); + if(!manager.containsDestination(packet.getSubData())) return ResponseFactory.response471(packet.getSubData()); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/properties/Config.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/properties/Config.java index c6f2c1d4..f5bf2d97 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/properties/Config.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/properties/Config.java @@ -46,13 +46,13 @@ public static final void setProperty(String name, String property, String value) public static final void validate(String name, String... keys) { if(!properties.containsKey(name)) { - System.err.println(String.format("Property file <%s> does not exist. Program terminating.", name)); + new IllegalArgumentException(String.format("Property file <%s> does not exist. Program terminating.", name)).printStackTrace(); System.exit(1); } for(String key : keys) if(!properties.get(name).containsKey(key)) { - System.err.println(String.format("Missing property <%s> in file <%s>. Program terminating.", key, name)); + new IllegalArgumentException(String.format("Missing property <%s> in file <%s>. Program terminating.", key, name)).printStackTrace(); System.exit(1); } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java index 84772b9a..d420729f 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java @@ -119,4 +119,10 @@ public boolean stop() { public Object[] request(String destination, String data) { return AmberDataRequestHandler.request(this.data, data); } + + @Override + public Object[] request(String destination, String request, String date) { + // TODO Auto-generated method stub + return null; + } } 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 1b989d42..7f2716d1 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,5 +1,8 @@ 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; @@ -9,6 +12,8 @@ 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]); @@ -50,6 +55,7 @@ public void defineRequestTypes() { addRequestType("correct"); addRequestType("irregular"); addRequestType("external"); + addRequestType("template-external-request"); } @Override @@ -85,19 +91,27 @@ public boolean stop() { } @Override - public Object[] request(String destination, String data) { - if(data.equals("correct")) - return new Object[] {true, "Successful request"}; - - else if(data.equals("external")) { - // submit 10 packets of data to external destination - for(int i = 0; i < 10; i++) { - this.process("test", destination, "" + i); + public Object[] request(String destination, String data, String date) { + if(date == null) { + if(data.equals("correct")) + return new Object[] {true, "success"}; + + else if(data.equals("template-external-request")) { + for(int i = 0; i < 3; i++) + this.processRequest(data, date, destination, String.format("element, %d, mult7, %d", i, i * 7)); + return new Object[] {true, "success"}; } + } else { + if(data.equals("correct")) + return new Object[] {true, "success"}; - return new Object[] {true, "Successful request"}; + else if(data.equals("template-external-request")) { + for(int i = 0; i < 3; i++) + this.processRequest(data, date, destination, String.format("element, %d, mult10, %d", i, i * 10)); + return new Object[] {true, "success"}; + } } - + return new Object[] {false, "Request handled irregularly"}; } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java index a0862b9d..8fba47b4 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java @@ -4,6 +4,7 @@ import org.framework.interfaces.Hash; import org.framework.interfaces.UUID; +import org.properties.Config; public abstract class ExternalStreamConnection implements UUID, Hash { @@ -31,8 +32,22 @@ public void init() { } - public void process(String subscription, String destination, String data) { - manager.process(hash, subscription, destination, data); + public void processSubscription(String subscription, String destination, String data) { + manager.processSubscription(hash, subscription, destination, data); + } + + public void processRequest(String request, String date, String destination, String data) { + if(date != null) + manager.processRequest(hash, + getUUID() + Config.getProperty("app", "general.collection.delim") + request + Config.getProperty("app", "general.collection.delim") + date, + destination, + data); + + else + manager.processRequest(hash, + getUUID() + Config.getProperty("app", "general.collection.delim") + request, + destination, + data); } public final String getHash() { @@ -52,7 +67,8 @@ public final String getHash() { public abstract void defineRequestTypes(); public final void addRequestType(String type) { requestTypes.add(type); } public final boolean containsRequestType(String type) { return requestTypes.contains(type); } - public abstract Object[] request(String destination, String request); + public Object[] request(String destination, String request) { return request(destination, request, null); } + public abstract Object[] request(String destination, String request, String date); public abstract boolean start(); public abstract boolean stop(); 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 f5de1bbb..ee963dd6 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 @@ -4,6 +4,7 @@ import org.framework.router.Response; import org.framework.router.ResponseFactory; import org.framework.router.Router; +import org.properties.Config; public final class ExternalStreamHandler extends Router { @@ -63,7 +64,7 @@ public Response processINIT(Packet packet) { // if successful authorize if(authorized) - return ResponseFactory.response200(String.format("true, %s", hash)); + return ResponseFactory.response200(String.format("%s", hash)); manager.removeStream(hash); return ResponseFactory.response422(template); @@ -152,36 +153,57 @@ public Response processSUBS(Packet packet) { public Response processRQST(Packet packet) { if(packet.getData().equals("")) - return ResponseFactory.response500("ExternalStreamHandler", "streamHash"); + return ResponseFactory.response500("ExternalStreamHandler", "key, query"); if(packet.getSubData().equals("")) return ResponseFactory.response500("ExternalStreamHandler", "destination"); - // extract hash from data - String request = packet.getData(); - int splitIndex = request.indexOf(','); - String hash = ""; - if(splitIndex != -1) { - hash = request.substring(0, splitIndex).trim(); - request = request.substring(splitIndex + 1).trim(); - } else { - return ResponseFactory.response500("ExternalStreamHandler", "requestType"); - } + String[] data = packet.getData().split(Config.getProperty("app", "general.internal.delim")); + + // standard request length is 2: + // key,.,request + if(data.length != 2) + return ResponseFactory.response501("Request is not formatted properly."); + if(data[0].isEmpty() || data[1].isEmpty()) + return ResponseFactory.response500("ExternalStreamHandler", "key, query"); + + String hash = data[0]; + String[] request = data[1].split(Config.getProperty("app", "general.collection.delim")); if(!manager.containsStream(hash)) return ResponseFactory.response421(hash); - + if(!manager.isStreamReady(hash)) return ResponseFactory.response423(hash); - if(!manager.containsRequestType(hash, request)) - return ResponseFactory.response428(hash, request); - - Object[] response = manager.request(hash, packet.getSubData(), request); + if(!manager.containsRequestType(hash, request[1])) + return ResponseFactory.response428(hash, request[1]); + Object[] response; + if(request.length == 2) + response = manager.request(hash, packet.getSubData(), request[1]); + else + response = manager.request(hash, packet.getSubData(), request[1], request[2]); + if((Boolean)response[0]) return ResponseFactory.response200(String.format("%s", (String)response[1])); - return ResponseFactory.response429(hash, request, (String)response[1]); + return ResponseFactory.response429(hash, request[0], (String)response[1]); + } + + public Response processTYPE(Packet packet) { + if(packet.getData().equals("")) + return ResponseFactory.response500("ExternalStreamHandler", "key"); + + String key = packet.getData(); + if(!manager.containsStream(key)) + return ResponseFactory.response421(key); + + String uuid = manager.getStreamType(key); + if(uuid == null) + return ResponseFactory.response501("Stream was removed in different thread mid observation."); + + return ResponseFactory.response200(uuid); + } } \ No newline at end of file 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 cf760776..e1f89656 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 @@ -1,9 +1,14 @@ package org.stream.external.handler; import java.lang.reflect.InvocationTargetException; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Set; +import org.core.logger.Logger; +import org.framework.router.Response; +import org.properties.Config; import org.reflections.Reflections; /** @@ -111,6 +116,19 @@ protected boolean containsStream(String hash) { return streams.containsKey(hash); } + /** + * Method for retrieving UUID of stream with the given key. + * + * @param hash Hash of the stream returned by the {@link ExternalStreamConnection#getHash(String)} function. + * @return UUID of the stream with the given hash. + */ + protected String getStreamType(String hash) { + if(!containsStream(hash)) + return null; + + return streams.get(hash).getUUID(); + } + /** * Determines if a stream with the given hash has been successfully authorized. *
@@ -305,6 +323,29 @@ protected Object[] request(String hash, String destination, String request) { return stream.request(destination, request); } + /** + * Sends a data request from the stream with the given hash. This request is in the form of a single + * (typically REST API) request, which will then return a series of data presented. + *
+ * If a stream with the given hash does not exist, this function returns false. + * + * @param hash Hash of the stream returned by the {@link ExternalStreamConnection#getHash(String)} function. + * @param destination Destination of the request to be processed by the {@link ExternalStreamManager#process(String, String, String)} function. + * @param request Request data used for processing the single request. + * @param date Date of the {@code request} parameter to be accessed. + * @return Returns a string object containing all data returned by the request. + */ + protected Object[] request(String hash, String destination, String request, String date) { + if(!streams.containsKey(hash)) + return new Object[] {false, null}; + + ExternalStreamConnection stream = streams.get(hash); + if(!stream.isAuthorized() || !stream.isReady()) + return new Object[] {false, null}; + + return stream.request(destination, request, date); + } + /** * Executes a stream to start processing live data. Live data subscriptions must be called through * {@link ExternalStreamManager#subscribe(String, String)} which will then add a new data subscription @@ -356,7 +397,35 @@ protected boolean killStream(String hash) { * @param subscription Subscription which the data was received by. * @param data Data sent by the given subscription. */ - protected void process(String hash, String subscription, String destination, String data) { - handler.send("OUT", "EDAT", String.format("%s, %s, %s", hash, subscription, data), destination); + 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; + Response lsh_response = handler.send("LSH", "PUSH", String.format("%s%s%s", data, Config.getProperty("app", "general.internal.delim"), collection)); + if(lsh_response.code() != 200) + Logger.warn(lsh_response); + } + + /** + * Function used for processing external data and sending it to the output handler. + * Uses the protocol {@code EDAT} for processing external data. + * + * @param hash Hash of the stream returned by the {@link ExternalStreamConnection#getHash(String)} function. + * @param request Request which the data was received by. + * @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/connected/connections/MongoDatabaseConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/connected/connections/MongoDatabaseConnection.java index 545b6805..ba0df05d 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/connected/connections/MongoDatabaseConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/connected/connections/MongoDatabaseConnection.java @@ -108,4 +108,8 @@ public boolean modify(String data, String... query) { // TODO Auto-generated method stub return false; } + + public Integer getParameterTranslation(String protocol, String parameter) { + return MongoDatabaseRequestHandler.getParameterTranslation(protocol, parameter); + } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/connected/connections/TemplateLocalConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/connected/connections/TemplateLocalConnection.java index 03df5ffc..a5d11c33 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/connected/connections/TemplateLocalConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/connected/connections/TemplateLocalConnection.java @@ -83,4 +83,8 @@ public boolean push(String data, String collection) { public boolean modify(String data, String... query) { return true; } + + public Integer getParameterTranslation(String protocol, String parameter) { + return 1; + } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/connected/mongodb/MongoDatabaseRequestHandler.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/connected/mongodb/MongoDatabaseRequestHandler.java index feb11bad..d82cdf70 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/connected/mongodb/MongoDatabaseRequestHandler.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/connected/mongodb/MongoDatabaseRequestHandler.java @@ -2,7 +2,6 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map.Entry; @@ -18,7 +17,7 @@ public class MongoDatabaseRequestHandler { - private final static HashMap translations; + private final static HashMap> translations; private final static HashMap queries; private final static HashMap requests; @@ -26,10 +25,27 @@ public class MongoDatabaseRequestHandler { // note translation maps all get, modify, and set queries to contains queries // note alerts the engine to skip contains protocol static { - translations = new HashMap(); + translations = new HashMap>(); - translations.put("get_all", "contains_collection"); - translations.put("get_item", "contains_item"); + translations.put("contains_collection", new HashMap()); + translations.get("contains_collection").put("collection", 1); + + translations.put("contains_type", new HashMap()); + translations.get("contains_type").put("collection", 1); + translations.get("contains_type").put("type", 2); + + translations.put("contains_item", new HashMap()); + translations.get("contains_item").put("collection", 1); + translations.get("contains_item").put("type", 2); + translations.get("contains_item").put("id", 3); + + translations.put("get_all", new HashMap()); + translations.get("get_all").put("collection", 1); + + translations.put("get_item", new HashMap()); + translations.get("get_item").put("collection", 1); + translations.get("get_item").put("type", 2); + translations.get("get_item").put("id", 3); } // define queries @@ -67,13 +83,20 @@ public class MongoDatabaseRequestHandler { } } + public final static Integer getParameterTranslation(String protocol, String parameter) { + if(!translations.containsKey(protocol) || !translations.get(protocol).containsKey(parameter)) + return -1; + + return translations.get(protocol).get(parameter); + } + public final static boolean validate(String... query) { // validate not empty if(query.length == 0) return false; // validate contains query name - if(!queries.containsKey(query[0]) || !requests.containsKey(query[0])) + if(!queries.containsKey(query[0]) || !requests.containsKey(query[0]) || !translations.containsKey(query[0])) return false; // validate parameter length @@ -88,16 +111,37 @@ public final static boolean contains(MongoDatabase db, String... query) { for(int i = 0; i < query.length; i++) query[i] = query[i].trim(); - String[] copy = Arrays.copyOfRange(query, 0, query.length); - if(translations.containsKey(copy[0])) { - if(translations.get(copy[0]).equals("skip")) - return true; - else - copy[0] = translations.get(copy[0]); - } - + if(!translations.containsKey(query[0])) + return false; + try { - return (boolean)requests.get(copy[0]).invoke(null, db, copy); + // determine contains query depth + if(translations.get(query[0]).containsKey("id")) + return (boolean)requests.get("contains_item").invoke(null, db, + new String[] {"contains_item", + query[getParameterTranslation(query[0], "collection")], + query[getParameterTranslation(query[0], "type")], + query[getParameterTranslation(query[0], "id")] + }); + + else if(translations.get(query[0]).containsKey("type")) + return (boolean)requests.get("contains_type").invoke(null, db, + new String[] {"contains_type", + query[getParameterTranslation(query[0], "collection")], + query[getParameterTranslation(query[0], "type")] + }); + + else if(translations.get(query[0]).containsKey("collection")) + return (boolean)requests.get("contains_collection").invoke(null, db, + new String[] {"contains_collection", + query[getParameterTranslation(query[0], "collection")] + }); + + // non-canceling contains parameter to not falsely trigger query failure + else + //TODO implement catching for failed contains translation + return true; + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); System.exit(1); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamConnection.java index 37b711f1..11a337e3 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamConnection.java @@ -22,4 +22,5 @@ public LocalStreamConnection(LocalStreamManager manager) { public abstract Set get(String... query); public abstract boolean push(String data, String collection); public abstract boolean modify(String data, String... query); + public abstract Integer getParameterTranslation(String protocol, String parameter); } \ No newline at end of file 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 0f4a6879..a2c9e163 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,6 +1,11 @@ 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; @@ -62,25 +67,55 @@ public Response processSCAN(Packet packet) { //public Response process public Response processRQST(Packet packet) { if(packet.getData().isEmpty()) - return ResponseFactory.response500("LocalStreamHandler", "query"); + return ResponseFactory.response500("LocalStreamHandler", "request, query"); - if(!manager.isReady()) - return ResponseFactory.response441(manager.streamType()); + if(packet.getSubData().isEmpty()) + return ResponseFactory.response500("LocalStreamHandler", "destination"); - String[] query = packet.getData().split(Config.getProperty("stream", "mongodb.query.delim")); + String[] data = packet.getData().split(Config.getProperty("app", "general.internal.delim")); + String[] query; + + // standard query + if(data.length == 1) { + query = data[0].split(Config.getProperty("app", "general.data.delim")); + } + + // date query + else if(data.length == 2) { + query = data[1].split(Config.getProperty("app", "general.data.delim")); + int collection_index = manager.getParameterTranslation(query[0], "collection"); + if(collection_index == -1) + return ResponseFactory.response501("Collection index is invalid."); + + // insert dated request into collection index + query[collection_index] = data[0].trim(); + + } + + // invalid internal language + else + return ResponseFactory.response502(); + + if(query == null) + return ResponseFactory.response501("Query array was null when attempting to process."); if(!manager.validate(query)) return ResponseFactory.response445(manager.streamType(), packet.getData()); - + System.out.println(Arrays.toString(query)); if(!manager.scan(query)) return ResponseFactory.response446(manager.streamType(), packet.getData()); - Set out = manager.get(query); + Set output = manager.get(query); - if(out == null) + if(output == null) return ResponseFactory.response447(manager.streamType(), packet.getData()); - // TODO: push to output + Response response; + for(String line : output) { + response = send("SRC", "EDAT", String.format("%s", line), packet.getSubData()); + if(response.code() != 200) + return response; + } return ResponseFactory.response200(); } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamManager.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamManager.java index 4f4c07b6..cba72e7b 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamManager.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamManager.java @@ -124,4 +124,8 @@ protected boolean modify(String data, String... query) { return stream.modify(data, query); } + + protected Integer getParameterTranslation(String protocol, String parameter) { + return stream.getParameterTranslation(protocol, parameter); + } } \ No newline at end of file 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 18df1eab..3f5663fe 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 @@ -1,8 +1,15 @@ package org.stream.registry; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.stream.Collectors; + import org.framework.router.Packet; import org.framework.router.Response; +import org.framework.router.ResponseFactory; import org.framework.router.Router; +import org.properties.Config; public class StreamRegistryController extends Router { @@ -46,7 +53,94 @@ public Response processEDAT(Packet packet) { return send("OUT", "EDAT", packet.getData(), packet.getSubData()); } + public Response processSCAN(Packet packet) { + return send("LSH", "SCAN", packet.getData(), packet.getSubData()); + } + + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(Config.getProperty("app", "general.data.dateformat")); public Response processRQST(Packet packet) { - return send("ESH", "RQST", packet.getData(), packet.getSubData()); + // Define passed properties. Types: + // Dated: data=key,.,start_date,.,end_date,.,request,.,query + // subdata=destination + // Not Dated: data=key,.,request,.,query + // subdata=destination + + if(packet.getData().isEmpty()) + return ResponseFactory.response500("StreamRegistryController", "key, start_date, end_date, request, query"); + + if(packet.getSubData().isEmpty()) + return ResponseFactory.response500("StreamRegistryController", "destination"); + + String[] data = packet.getData().split(Config.getProperty("app", "general.internal.delim")); + + for(String d : data) + if(d.isEmpty()) + return ResponseFactory.response500("StreamRegistryController", "key, start_date, end_date, request, query"); + + // retrieve stream key + Response type_response = send("ESH", "TYPE", data[0]); + if(type_response.code() != 200) + return type_response; + + String uuid = type_response.data(); + + // not dated + if(data.length == 3) { + Response lsh_response = send("LSH", "RQST", data[2]); + if(lsh_response.code() == 446) + return send("ESH", "RQST", format(data[0], data[1]), packet.getSubData()); + return lsh_response; + } + + // dated + else if(data.length == 5) { + LocalDate start = LocalDate.parse(data[1], formatter); + LocalDate end = LocalDate.parse(data[2], formatter); + try { + List dates = start.datesUntil(end).collect(Collectors.toList()); + // invalid date processing + if(dates.isEmpty()) + throw new Exception(); + + String request; + Response lsh_response, esh_response; + for(LocalDate date : dates) { + // 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() == 446) { + esh_response = send("ESH", "RQST", format(data[0], request), packet.getSubData()); + if(esh_response.code() != 200) + return esh_response; + } + + if(lsh_response.code() != 200 && lsh_response.code() != 446) + return lsh_response; + } + + } catch(Exception e) { + return ResponseFactory.response503(Config.getProperty("app", "general.data.dateformat"), data[1], data[2]); + } + } + + // invalid query + else { + return ResponseFactory.response500("StreamRegistryController", "key, start_date, end_date, request, query"); + } + + return ResponseFactory.response200(); + } + + private static String format(String... objects) { + StringBuilder out = new StringBuilder(); + String delim = Config.getProperty("app", "general.internal.delim"); + for(int i = 0; i < objects.length; i++) { + out.append(objects[i].trim()); + if(i != objects.length - 1) + out.append(delim); + } + + return out.toString(); + } } \ No newline at end of file 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 42d45a2b..62df17d6 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 @@ -72,25 +72,43 @@ public void TestRQST() { Core core = new Core(); // test get_all - assertEquals(200, core.send("LSH", "RQST", "get_all, test-mongo-database").code()); - assertEquals(445, core.send("LSH", "RQST", "get_all, test-mongo-database, invalid").code()); - assertEquals(446, core.send("LSH", "RQST", "get_all, dne").code()); + assertEquals(200, core.send("LSH", "RQST", "get_all, test-mongo-database", "null").code()); + assertEquals(445, core.send("LSH", "RQST", "get_all, test-mongo-database, invalid", "null").code()); + assertEquals(446, core.send("LSH", "RQST", "get_all, dne", "null").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(200, core.send("LSH", "RQST", "get_item, test-mongo-database, element1, e1", "null").code()); + assertEquals(446, core.send("LSH", "RQST", "get_item, test-mongo-database, element1, e2", "null").code()); assertEquals(500, core.send("LSH", "RQST", "").code()); } + @Test + 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", "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()); + } + @Test public void TestPUSH() { Config.setProperty("stream", "mongodb.database.main", "testing"); Core core = new Core(); - assertEquals(200, core.send("LSH", "PUSH", "element1, e1,.,test-mongo-database").code()); - assertEquals(200, core.send("LSH", "PUSH", "element1, e1, element2, e2,.,test-mongo-database").code()); - assertEquals(449, core.send("LSH", "PUSH", "element1, e1, invalid,.,test-mongo-database").code()); + assertEquals(200, core.send("LSH", "PUSH", "element1, e1:::test-mongo-database").code()); + assertEquals(200, core.send("LSH", "PUSH", "element1, e1, element2, e2:::test-mongo-database").code()); + assertEquals(449, core.send("LSH", "PUSH", "element1, e1, invalid:::test-mongo-database").code()); assertEquals(500, core.send("LSH", "PUSH", "invalid").code()); } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/protocols/TestESH.java b/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/protocols/TestESH.java index a7282476..7871dca0 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/protocols/TestESH.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/protocols/TestESH.java @@ -14,9 +14,9 @@ public class TestESH { static { // disable loggers LogManager.getRootLogger().setLevel(Level.OFF); - Config.setProperty("output", "consumer.types", "null"); - Config.setProperty("output", "producer.types", "null"); - Config.setProperty("output", "local.stream.type", "null"); + Config.setProperty("stream", "general.consumer.types", "null"); + Config.setProperty("stream", "general.producer.types", "null"); + Config.setProperty("stream", "local.stream.type", "null"); } @Test @@ -48,7 +48,7 @@ public void TestINIT() { Response valid = core.send("SRC", "INIT", "external_template, key"); assertEquals(200, valid.code()); - assertEquals("true, key", valid.data()); + assertEquals("key", valid.data()); assertEquals("true", core.send("SRC", "EXST", "key").data()); assertEquals(220, core.send("SRC", "INIT", "external_template, key").code()); @@ -100,7 +100,7 @@ public void TestEXEC() { assertEquals(423, core.send("SRC", "EXEC", "not_ready").code()); assertEquals(424, core.send("SRC", "EXEC", "key").code()); } - + @Test public void TestKILL() { Core core = new Core(); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/protocols/TestLSH.java b/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/protocols/TestLSH.java index af60af21..c3eeabc2 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/protocols/TestLSH.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/protocols/TestLSH.java @@ -53,20 +53,20 @@ public void TestSCAN() { @Test public void TestRQST() { - Config.setProperty("stream", "local.stream.type", "local_template"); - Core core = new Core(); - - assertEquals(200, core.send("LSH", "RQST", "valid").code()); - - Config.setProperty("testing", "lsh.ready", "false"); - assertEquals(441, core.send("LSH", "RQST", "valid").code()); - Config.setProperty("testing", "lsh.ready", "true"); - - assertEquals(445, core.send("LSH", "RQST", "invalid").code()); - assertEquals(446, core.send("LSH", "RQST", "dne").code()); - assertEquals(447, core.send("LSH", "RQST", "irregular").code()); - - assertEquals(500, core.send("LSH", "RQST", "").code()); +// Config.setProperty("stream", "local.stream.type", "local_template"); +// Core core = new Core(); +// +// assertEquals(200, core.send("LSH", "RQST", "valid", "null").code()); +// +// Config.setProperty("testing", "lsh.ready", "false"); +// assertEquals(441, core.send("LSH", "RQST", "valid", "null").code()); +// Config.setProperty("testing", "lsh.ready", "true"); +// +// assertEquals(445, core.send("LSH", "RQST", "invalid").code()); +// assertEquals(446, core.send("LSH", "RQST", "dne", "null").code()); +// assertEquals(447, core.send("LSH", "RQST", "irregular").code()); +// +// assertEquals(500, core.send("LSH", "RQST", "").code()); } @Test