diff --git a/examples/0_forward/alice b/examples/0_forward/alice deleted file mode 100755 index 0322bf3a9890bd8e84adba6da7a4c253c3a56341..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22568 zcmeHPe{d7moqv)5n*?Ox5JE$*EG?vlVA&=VoF61BW7+GR!9HWBWUgcp(%MpyC3Uq5 zCO0&s4rx_FC)2sfWO8%C9E@r1aygp0_Bu^Fr8(Nz7fRfeG)zLG ze!p+uSKeLirs+)YrqkJHYrp&be1E+6zPtOh?}y%l@!qarAiyXE*_{kIX_?F+^T^m_ zKW7Ej&aP!L`xyHRwg`{~@R7L$sd+{;9W(_*>xEtjDB4X5`D9QA4tW^~`zSxoQz{`+ zw3|<|I5nvxG9bz#rWoxO;;GJDN)j^<|lDA2#l#ubhju!QL7!sX0F+^ zo7-mE5&ed+n-Y}lkVQKd#RH@}Wlo6Bi9isgcw+JKb4K_(6O@5NUPi(?`Ej12E~frp z7%4novWBxjWqv}`%kHnhj+fIk`@KgB`+&&LD=raHexjnftRhjUDb3Qjs;EIZvk`K0SgDp!3c%ZY5c8vqYw|CJT=30Hsz7j_m}cb_W!IxU_f&~v-@G%SCV8IVtaJoh){*nb>X3_Ug{RsFG@FUk0*fj_?p{HEb!?y@JmXImIkj!YTB$~k5HO#NwI*~+J01-P>A0vsDw%W#H# z8fCNRE0EUx7&WA))GPxY#{BKF{?Z zy2MF&PC0eyF6GpfkP?_yzW=_ltm>gocyQWd{)e~y2b6`Ct{YOyznFOdYB9a=p8*N% zIbD+<>c9SFRD`=AqLdF^DVHvfAG*wp4KwH8uT+%sDdp(Um80>?<>`|VNoKqRGeaOc zi5Gq5-{EZHh11-_Ll;kA1<%IkWYAQO9lhjAnL$L!pS?zVlwCQjT9d8oxL`6HvZ3{qRD}kz6TY z^_^-~PlE2uHaIBd_<7~%jydIM{QPrMSkUrI=t=_&s(Hq=voD>fJ_Uma48HUAgDyL#8Zhi$~nf4&RuPQ4d0R=2&< zu=+68ptt;HZ~0PZ`L$SO`OlQ`(*fnypO*d?+mFBA6Z=eTPwc*!YQ0DK^8t29dAn0> zY0#UW{0R6F@FUk0*0Y3tM1pEm25%|B1KtRmfP#*Dt0cl-I%H*U%8fJc^z3Ym5 zqf%Vgr2~l~=dOwG?iuXa*}aBOTfjWiXa?uFq~W}NAfcz4z%;W_%9ji&zh3&A#Rt-v ztkz`cC2hTgvsh_8pUanuAXyC4RZaPg5==BTW!A61eet0~ERzFJN=Tzxv6vXqBqJ{s zwOr~pn#h9lOm0LPEsmIFVIo(Y8-p1*iQ%l9)GD#IO>{0R6F@FUk0* z0Y3tM1pEm62}Gb#=7l&X)^}sq0F#qWn=oq-^dmxHiQrj8=4Z4PZ49PDF@1y|VV$2? z@4QOzwD#>r!Cw(_>=R)k`CIQ-@|+LJNX#|cK(8#2kriumq2DCrw015k%13MFR&s5| zt{0RDPDJx0%bWyF&YZ!9bLzj*8onEZ{Mkh^KO?*#cq+Fd^l%~?6Xg%nbG$zNLLVmj zI4_FJpnJyon}po7{(n5)DZ6I2MO@!5LGKZCSkU_geMHc&3i>TUpAmFg&>sr=OF@4t z=pu0+t`HOp)4hHBZBi4g)Lt*$3Tsl^q)n}Dx3;!#+A1{-Xemia7$)A_ww~ej$9^>4 zz}>O6fm_n;Tibx8-!BlY(Mx_vz2b+|(>|o$pIG_u{LJpSUJ&IwT`n6W@Xv z50Vq5=Sf_zg(JzN<03PDP4SYNIvcwCKFv17fyG53Jn?J2fj_zpHtc3ty`9{zCbNlR znz8F_vJJ^$wV>w>Sk#@#=di({woByG)i*HM({(SapxFwW?ah3J^zPkiY}c+hX!Y&f z1#(Au>acC8j)CwpuEEebedS@mOdZw}qncXC!zyh}2c2rWYSwL0BVfw_t**s2{h9UC zwL~^El0)BqJa6{n8T0Q?|9Ph`Nx%KCm{%3eo>|)1k4P!(vRwO=qw8UR)%`liYN0c|4}l z2lycwQ8zy%BkHC@^;z`+^`iP55#`~9`+!3TI);-$xke)dYbMUP;vsgy6<@&WLvDT+ zR>!fdnS`KcN#k91ypFkz6NR8NOXEv+{l$#NsqFYQjK;IunL z`e8=*kR6BKx+Gg6ejb7m2-v2uvJmw6XFFiI9CWp z2kH07cKsEMiSa=@egm6u#pi!tZr7*LP%Dc25ZuU~-YeTc=-$IV2EXQG4_3i8WP(c> zjh~QghXCqMJN|+Sel^diou&GIR^St&{U!X6 zz-e5c@V^5*0He{9vdkeYHl`;zUi-YfAp9`VuAAD7{ebJ&K6jS^cPqbFy{>XU%h=$@ zWpZ7mZho%e1NMzI&-E(612|gmc&^t9eVTtD=UX{m+s@q0{nS41djW5R_~S3VFwwYP zf#V#q9Yz;G(*~n)&i3K+9{P`a;NSMZ{{?WjeJsua9)Wz1%d)LJpG7~x+IINAJ^a7! zfmb~6>!7}kwj537lOA}N2Y#;yz8`R`mouJYfJ-j;9{9@~hmmA)pJ>9*AUtRhcm7*7OrzewX)zmQqp2 zO?p~jM85@g=TWz8Zq~I_I$@YQ_O#rJ`-)WmK@+y~N$N&hG|!@mTrLkQH`PooV?>iq zUWHYkPArT|nxUnl zTW@LK>aL^?!!4&KbUkqpvNQC9%$%4>l}1Mof{BIWH>XV%CSj5qlu1>)24XwnDy$@i zje}IXVv4Dq_wJ1C=-F+U}DyBb-yC*oTM*%ehSl`s;pnGo(AWEai* zFc)3pwnyf6Lv}rLyCFMPv-gl)%(pADL-V=OrblqKp=jp*MGzO;u1z2-=GAl}m&#gq zUE(Xf)t){ug7xESsi>ta5foWi5D1(#;@B)PHI+3V*o2{B=J)^?G8*XZD;7m*<_l}t zG>UJrluT>M{d|`ud-YUxaL0CW=dft;;HZ(<2h`9_nx->8PY7*M4kj?8v5uZ*BQYYl zkz6UduatqU(K66XA_pt?(=3`gm;-+%HFQ&Qzor*)_LHj#Mg@uDsS! zLmPv0d`v)==Ql-EON$31odR3pObhb~F)ipE94AII(5{bQqYZ~B&%ksB(PL3~R!8Ca zGt0#*6HOR~p4nG2;Q9U|BwUAr@4i9di~9An{~)bHp{!8Xnmz#xuKghUGeH@+`Th1J z&dnd-Ytoi*O@h__LQv-N3&P=A&dnd3_MIU5Evyxx{AoO)9^TI|kv)8E^Mqq0*0d8C zTpL67w0@>l*ndw{80WO{l=mI%`8(_Xu(0nCdNh9W ztgz=hV1Nwmp*K+zzpns>F%jzUQYQlki7&ojjMhn+pjlQrM_PuD)m{?zlCbAOivhtz zk2~!}|4|YP42HygKrYCR_$M6pG`=$?7ED#wQV0WaTaY^h|HH`Tx>kUmYK7H7zE{P*BRB=o=1u>eo#Od*}V)xE$;)ut#51{u8nc9An3Y zeS~xK2Pgjyh|s4{uPT!L#wuc-Q2sl>>uqjHE4Y&={xOz2SjzL0{{R3 diff --git a/examples/0_forward/bob b/examples/0_forward/bob deleted file mode 100755 index 7de028d774f55b706aa3adca61385f1f932fd8ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22416 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 #include #include "../../reowolf.h" -#include "../check.c" +#include "../utility.c" -int main() { // ALICE +int main() { // AMY char* pdl = "primitive forward(in i, out o) {" @@ -21,22 +21,25 @@ int main() { // ALICE check("fgets", fgets(msg_buf, 128-1, stdin) == NULL); int msg_len = strlen(msg_buf); msg_buf[msg_len-1] = 0; - printf("sending msg `%s`\n", msg_buf); + printf("will send msg `%s`\n", msg_buf); Connector* c = connector_new(); + printf("configuring...\n"); check("config ", connector_configure(c, pdl, "forward")); check("bind 0 ", connector_bind_native(c, 0)); check("bind 1 ", connector_bind_passive(c, 1, "127.0.0.1:7000")); - check("connect", connector_connect(c, 10000)); + printf("connecting...\n"); + check("connect", connector_connect(c, 5000)); int i; for (i = 0; i < 3; i++) { check("put ", connector_put(c, 0, msg_buf, msg_len)); - check("sync", connector_sync(c, 10000)); - printf("SEND OK\n"); + check("sync", connector_sync(c, 1000)); + printf("Sent one message!\n"); } - printf("OK\n"); + printf("destroying...\n"); connector_destroy(c); + printf("exiting...\n"); return 0; } \ No newline at end of file diff --git a/examples/0_three_forward/amy.exe b/examples/0_three_forward/amy.exe new file mode 100644 index 0000000000000000000000000000000000000000..d3447385a1a15cf4f37cfa907820bc02f72b1abb GIT binary patch literal 59728 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 literal 0 HcmV?d00001 diff --git a/examples/0_three_forward/bob.c b/examples/0_three_forward/bob.c new file mode 100644 index 0000000000000000000000000000000000000000..9a2c1f19c29b93e84c2f092cf560c7217d5f3328 --- /dev/null +++ b/examples/0_three_forward/bob.c @@ -0,0 +1,40 @@ +#include +#include "../../reowolf.h" +#include "../utility.c" + +int main() { // BOB! + + char* pdl = + "primitive forward(in i, out o) {" + " while(true) synchronous {" + " put(o, get(i));" + " }" + "}" + ; + + // BOB + Connector* c = connector_new(); + printf("configuring...\n"); + check("config ", connector_configure(c, pdl, "forward")); + check("bind 0 ", connector_bind_active(c, 0, "127.0.0.1:7000")); + check("bind 1 ", connector_bind_native(c, 1)); + printf("connecting...\n"); + check("connect", connector_connect(c, 5000)); + + int i; + for (i = 0; i < 3; i++) { + check("get ", connector_get(c, 0)); + check("sync", connector_sync(c, 1000)); + + int msg_len; + const unsigned char * msg; + check("read", connector_gotten(c, 0, &msg, &msg_len)); + + printf("Received one message `%s`!\n", msg); + } + + printf("destroying...\n"); + connector_destroy(c); + printf("exiting...\n"); + return 0; +} \ No newline at end of file diff --git a/examples/0_three_forward/bob.exe b/examples/0_three_forward/bob.exe new file mode 100644 index 0000000000000000000000000000000000000000..0482d0817eec1f4cb6df2dc1f6a78093902238b3 GIT binary patch literal 58519 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 literal 0 HcmV?d00001 diff --git a/examples/0_three_forward/make.sh b/examples/0_three_forward/make.sh new file mode 100644 index 0000000000000000000000000000000000000000..2a55b236fc6ece4baf796ff607056fb115b806f3 --- /dev/null +++ b/examples/0_three_forward/make.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +LIB_PATH="../../target/release" +gcc -L $LIB_PATH -lreowolf_rs -Wl,-R$LIB_PATH amy.c -o ./amy +gcc -L $LIB_PATH -lreowolf_rs -Wl,-R$LIB_PATH bob.c -o ./bob diff --git a/examples/1_load_pdl/amy.c b/examples/1_load_pdl/amy.c new file mode 100644 index 0000000000000000000000000000000000000000..0ce093f5d808a2c535728a85e58816ced530aa54 --- /dev/null +++ b/examples/1_load_pdl/amy.c @@ -0,0 +1,40 @@ +#include +#include +#include +#include "../../reowolf.h" +#include "../utility.c" + +int main() { // AMY + char * pdl = buffer_pdl("forward.pdl"); + + char msg_buf[128]; + memset(msg_buf, 0, 128); + + printf("input a message to send:"); + + check("fgets", fgets(msg_buf, 128-1, stdin) == NULL); + int msg_len = strlen(msg_buf); + msg_buf[msg_len-1] = 0; + printf("will send msg `%s`\n", msg_buf); + + Connector* c = connector_new(); + printf("configuring...\n"); + check("config ", connector_configure(c, pdl, "forward")); + check("bind 0 ", connector_bind_native(c, 0)); + check("bind 1 ", connector_bind_passive(c, 1, "127.0.0.1:7000")); + printf("connecting...\n"); + check("connect", connector_connect(c, 5000)); + + int i; + for (i = 0; i < 3; i++) { + check("put ", connector_put(c, 0, msg_buf, msg_len)); + check("sync", connector_sync(c, 1000)); + printf("Sent one message!\n"); + } + + printf("destroying...\n"); + connector_destroy(c); + printf("exiting...\n"); + free(pdl); + return 0; +} \ No newline at end of file diff --git a/examples/1_load_pdl/amy.exe b/examples/1_load_pdl/amy.exe new file mode 100644 index 0000000000000000000000000000000000000000..a5e1abdf227f30afecd4fb24d8f137ee573034d6 GIT binary patch literal 59903 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 r5LIsobp@g8Tb+XBNlqt #include "../../reowolf.h" -#include "../check.c" +#include "../utility.c" -int main() { - - char* pdl ="\ - primitive forward(in i, out o) {\ - while(true) synchronous {\ - put(o, get(i));\ - }\ - }"; +int main() { // BOB! + char * pdl = buffer_pdl("forward.pdl"); // BOB Connector* c = connector_new(); + printf("configuring...\n"); check("config ", connector_configure(c, pdl, "forward")); check("bind 0 ", connector_bind_active(c, 0, "127.0.0.1:7000")); check("bind 1 ", connector_bind_native(c, 1)); - check("connect", connector_connect(c, 10000)); + printf("connecting...\n"); + check("connect", connector_connect(c, 5000)); int i; for (i = 0; i < 3; i++) { check("get ", connector_get(c, 0)); - check("sync", connector_sync(c, 10000)); + check("sync", connector_sync(c, 1000)); int msg_len; const unsigned char * msg; check("read", connector_gotten(c, 0, &msg, &msg_len)); - printf("received: `%s`\n", msg); + printf("Received one message `%s`!\n", msg); } - printf("OK\n"); + printf("destroying...\n"); connector_destroy(c); + printf("exiting...\n"); + free(pdl); return 0; } \ No newline at end of file diff --git a/examples/1_load_pdl/bob.exe b/examples/1_load_pdl/bob.exe new file mode 100644 index 0000000000000000000000000000000000000000..73633f123685a02535dd3317ec16242983a20fef GIT binary patch literal 58694 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 +#include +#include +#include "../../reowolf.h" +#include "../utility.c" + +int main() { // AMY + char * pdl = buffer_pdl("swap.pdl"); + + Connector* c = connector_new(); + printf("configuring...\n"); + + check("config ", connector_configure(c, pdl, "forward_two")); + check("bind 0 ", connector_bind_native(c, 0)); + check("bind 1 ", connector_bind_native(c, 1)); + check("bind 2 ", connector_bind_passive(c, 2, "127.0.0.1:7000")); + check("bind 3 ", connector_bind_passive(c, 3, "127.0.0.1:7001")); + printf("connecting...\n"); + check("connect", connector_connect(c, 5000)); + + int i; + for (i = 0; i < 3; i++) { + printf("\nround %d\n", i); + + check("put ", connector_put(c, 0, "one", 3)); + check("put ", connector_put(c, 1, "two", 3)); + check("sync", connector_sync(c, 1000)); + + printf("Sent both messages!\n"); + } + + printf("destroying...\n"); + connector_destroy(c); + printf("exiting...\n"); + free(pdl); + return 0; +} \ No newline at end of file diff --git a/examples/2_atomic_swap/amy.exe b/examples/2_atomic_swap/amy.exe new file mode 100644 index 0000000000000000000000000000000000000000..768eefb05046248479f85020ac2ef27cad5258a4 GIT binary patch literal 59042 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 Gl>ZNaP*ddq literal 0 HcmV?d00001 diff --git a/examples/2_atomic_swap/bob.c b/examples/2_atomic_swap/bob.c new file mode 100644 index 0000000000000000000000000000000000000000..595cf304032c4cb00dd33c925bf6c9642b46923f --- /dev/null +++ b/examples/2_atomic_swap/bob.c @@ -0,0 +1,43 @@ +#include +#include "../../reowolf.h" +#include "../utility.c" + +int main() { // BOB! + char * pdl = buffer_pdl("forward.pdl"); + Connector* c = connector_new(); + + printf("configuring...\n"); + check("config ", connector_configure(c, pdl, "forward_two")); + + check("bind 0 ", connector_bind_active(c, 0, "127.0.0.1:7000")); + check("bind 1 ", connector_bind_active(c, 1, "127.0.0.1:7001")); + check("bind 2 ", connector_bind_native(c, 2)); + check("bind 3 ", connector_bind_native(c, 3)); + + printf("connecting...\n"); + check("connect", connector_connect(c, 5000)); + + int msg_len; + const unsigned char * msg; + + int i; + for (i = 0; i < 3; i++) { + printf("\nround %d\n", i); + + check("get ", connector_get(c, 0)); + check("get ", connector_get(c, 1)); + check("sync", connector_sync(c, 1000)); + + check("read one", connector_gotten(c, 0, &msg, &msg_len)); + printf("Got message one: `%.*s`\n", msg_len, msg); + + check("read two", connector_gotten(c, 1, &msg, &msg_len)); + printf("Got message two: `%.*s`\n", msg_len, msg); + } + + printf("destroying...\n"); + connector_destroy(c); + printf("exiting...\n"); + free(pdl); + return 0; +} \ No newline at end of file diff --git a/examples/2_atomic_swap/bob.exe b/examples/2_atomic_swap/bob.exe new file mode 100644 index 0000000000000000000000000000000000000000..e118b9d6458523e12bcaf09fd7c18f0d30d5a668 GIT binary patch literal 59718 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 +#include +#include + +void check(const char* phase, int err) { + if (err) { + printf("ERR %d in phase `%s`. Err was `%s`\nEXITING!\n", + err, phase, connector_error_peek()); + exit(1); + } +} + +// allocates a buffer! +char * buffer_pdl(char * filename) { + FILE *f = fopen("forward.pdl", "rb"); + if (f == NULL) { + printf("Opening pdl file returned errno %d!\n", errno); + exit(1); + } + fseek(f, 0, SEEK_END); + long fsize = ftell(f); + fseek(f, 0, SEEK_SET); + char *pdl = malloc(fsize + 1); + fread(pdl, 1, fsize, f); + fclose(f); + pdl[fsize] = 0; + return pdl; +} \ No newline at end of file diff --git a/huang b/huang deleted file mode 100644 index d5d491feda2e55a058b56d62adf92463d73db0a5..0000000000000000000000000000000000000000 --- a/huang +++ /dev/null @@ -1,147 +0,0 @@ -/* CBindgen generated */ - -#ifndef REOWOLF_HEADER_DEFINED -#define REOWOLF_HEADER_DEFINED - -#include -#include -#include -#include - -typedef struct Connector Connector; - -typedef uint32_t ControllerId; - -/** - * Provides a binding annotation for the port with the given index with "active": - * (The port will conenct to a "passive" port at the given address during connect()) - * Returns: - * - 0 for success - * - 1 if the port was already bound and was left unchanged - * # Safety - * TODO - */ -int connector_bind_active(Connector *connector, unsigned int proto_port_index, const char *address); - -/** - * Provides a binding annotation for the port with the given index with "native": - * (The port is exposed for reading and writing from the application) - * Returns: - * # Safety - * TODO - */ -int connector_bind_native(Connector *connector, uintptr_t proto_port_index); - -/** - * Provides a binding annotation for the port with the given index with "native": - * (The port is exposed for reading and writing from the application) - * Returns: - * # Safety - * TODO - */ -int connector_bind_passive(Connector *connector, - unsigned int proto_port_index, - const char *address); - -/** - * Configures the given Reowolf connector with a protocol description in PDL. - * Returns: - * # Safety - * TODO - */ -int connector_configure(Connector *connector, char *pdl, char *main); - -/** - * Provides a binding annotation for the port with the given index with "active": - * (The port will conenct to a "passive" port at the given address during connect()) - * Returns: - * - 0 SUCCESS: connected successfully - * - TODO error codes - * # Safety - * TODO - */ -int connector_connect(Connector *connector, uint64_t timeout_millis); - -/** - * Destroys the given connector, freeing its underlying resources. - * # Safety - * TODO - */ -void connector_destroy(Connector *connector); - -/** - * Resets the error message buffer. - * Returns: - * - 0 if an error was cleared - * - 1 if there was no error to clear - * # Safety - * TODO - */ -int connector_error_clear(void); - -/** - * Returns a pointer into the error buffer for reading as a null-terminated string - * Returns null if there is no error in the buffer. - * # Safety - * TODO - */ -const char *connector_error_peek(void); - -/** - * Prepares to synchronously put a message at the given port, writing it to the given buffer. - * - 0 SUCCESS - * - 1 this port has the wrong direction - * - 2 this port is already marked to get - * # Safety - * TODO - */ -int connector_get(Connector *connector, unsigned int proto_port_index); - -/** - * # Safety - * TODO - */ -int connector_gotten(Connector *connector, - unsigned int proto_port_index, - const unsigned char **buf_ptr_outptr, - unsigned int *len_outptr); - -/** - * Creates and returns Reowolf Connector structure allocated on the heap. - */ -Connector *connector_new(void); - -/** - * # Safety - * TODO - */ -int connector_next_batch(Connector *connector); - -/** - * Prepares to synchronously put a message at the given port, reading it from the given buffer. - * # Safety - * TODO - */ -int connector_put(Connector *connector, - unsigned int proto_port_index, - unsigned char *buf_ptr, - unsigned int msg_len); - -/** - * # Safety - * TODO - */ -int connector_sync(Connector *connector, uint64_t timeout_millis); - -/** - * Creates and returns Reowolf Connector structure allocated on the heap. - */ -Connector *connector_with_controller_id(ControllerId controller_id); - -/** - * # Safety - * TODO - */ -int port_close(Connector *connector, unsigned int _proto_port_index); - -#endif /* REOWOLF_HEADER_DEFINED */ diff --git a/src/runtime/actors.rs b/src/runtime/actors.rs index bb402ce1bf5db6f999db1e2072a20671ea22097d..bf56da5fc034ebaac67ffcfc63822ba84468b629 100644 --- a/src/runtime/actors.rs +++ b/src/runtime/actors.rs @@ -137,10 +137,28 @@ impl PolyP { continue 'to_run_loop; } } - Some(false) => assert!(!fired), + Some(false) => { + if fired { + println!( + "pred {:#?} in {:#?} out {:#?}", + &predicate, + branch.inbox.get(ekey), + branch.outbox.get(ekey) + ); + panic!("channel_id {:?} fired (based on outbox/inbox) but the predicate had Some(false)!" ,channel_id) + } + } None => { predicate.replace_assignment(channel_id, false); - assert!(!fired) + if fired { + println!( + "pred {:#?} in {:#?} out {:#?}", + &predicate, + branch.inbox.get(ekey), + branch.outbox.get(ekey) + ); + panic!("channel_id {:?} fired (based on outbox/inbox) but the predicate had None!" ,channel_id) + } } } } diff --git a/src/test/connector.rs b/src/test/connector.rs index 1fe8ef31d27b5795c30326b36233e82636d9079e..641366ea6cc78b8a2695d858815c8e7d2090f651 100644 --- a/src/test/connector.rs +++ b/src/test/connector.rs @@ -609,6 +609,50 @@ fn connector_exchange() { ])); } +#[test] +fn connector_both() { + /* -------> -----P|A----> -------> + / /--->\ \ / /---P|A-->\ \ / /--->\ \ + Alice exchange exchange Bob + */ + let timeout = Duration::from_millis(1_500); + let addrs = [next_addr(), next_addr()]; + const N: usize = 1; + assert!(run_connector_set(&[ + // + &|x| { + // Alice + x.configure(PDL, b"exchange").unwrap(); + x.bind_port(0, Native).unwrap(); // native in a + x.bind_port(1, Passive(addrs[0])).unwrap(); // peer out a + x.bind_port(2, Native).unwrap(); // native in b + x.bind_port(3, Passive(addrs[1])).unwrap(); // peer out b + x.connect(timeout).unwrap(); + for _ in 0..N { + assert_eq!(Ok(()), x.put(0, b"one".to_vec())); + assert_eq!(Ok(()), x.put(1, b"two".to_vec())); + assert_eq!(Ok(0), x.sync(timeout)); + } + }, + &|x| { + // Alice + x.configure(PDL, b"exchange").unwrap(); + x.bind_port(0, Active(addrs[0])).unwrap(); // peer in a + x.bind_port(1, Native).unwrap(); // native out b + x.bind_port(2, Active(addrs[1])).unwrap(); // peer in b + x.bind_port(3, Native).unwrap(); // native out a + x.connect(timeout).unwrap(); + for _ in 0..N { + assert_eq!(Ok(()), x.get(0)); + assert_eq!(Ok(()), x.get(1)); + assert_eq!(Ok(0), x.sync(timeout)); + assert_eq!(Ok(b"one" as &[u8]), x.read_gotten(0)); + assert_eq!(Ok(b"two" as &[u8]), x.read_gotten(1)); + } + }, + ])); +} + #[test] fn connector_routing_filter() { // Make a protocol whose behavior is a function of the contents of