@@ -41,6 +41,7 @@ async fn dmq_consumer_client_server() {
41
41
. join ( "node.socket" ) ;
42
42
let ( stop_tx, stop_rx) = watch:: channel ( ( ) ) ;
43
43
44
+ // Start the server
44
45
let ( signature_dmq_tx, signature_dmq_rx) = unbounded_channel :: < DmqMessage > ( ) ;
45
46
let server = tokio:: spawn ( {
46
47
let socket_path = socket_path. clone ( ) ;
@@ -56,8 +57,10 @@ async fn dmq_consumer_client_server() {
56
57
}
57
58
} ) ;
58
59
60
+ // Start a first client, receive messages and wait for its deconnection
59
61
let client = tokio:: spawn ( {
60
62
let socket_path = socket_path. clone ( ) ;
63
+ let signature_dmq_tx = signature_dmq_tx. clone ( ) ;
61
64
async move {
62
65
let consumer_client = DmqConsumerClientPallas :: < DmqMessageTestPayload > :: new (
63
66
socket_path,
@@ -70,13 +73,12 @@ async fn dmq_consumer_client_server() {
70
73
messages. extend_from_slice ( & consumer_client. consume_messages ( ) . await . unwrap ( ) ) ;
71
74
signature_dmq_tx. send ( create_fake_msg ( b"msg_3" ) . await ) . unwrap ( ) ;
72
75
messages. extend_from_slice ( & consumer_client. consume_messages ( ) . await . unwrap ( ) ) ;
73
- stop_tx. send ( ( ) ) . unwrap ( ) ;
74
76
75
77
messages. into_iter ( ) . map ( |( msg, _) | msg) . collect :: < Vec < _ > > ( )
76
78
}
77
79
} ) ;
78
80
79
- let ( _ , messages) = tokio :: try_join! ( server , client) . unwrap ( ) ;
81
+ let messages = client. await . unwrap ( ) ;
80
82
assert_eq ! (
81
83
vec![
82
84
DmqMessageTestPayload :: new( b"msg_1" ) ,
@@ -85,4 +87,30 @@ async fn dmq_consumer_client_server() {
85
87
] ,
86
88
messages
87
89
) ;
90
+
91
+ // Sleep to avoid refused connection from the server
92
+ tokio:: time:: sleep ( std:: time:: Duration :: from_millis ( 3000 ) ) . await ;
93
+
94
+ // Start a second client, receive messages
95
+ let client = tokio:: spawn ( {
96
+ let socket_path = socket_path. clone ( ) ;
97
+ let signature_dmq_tx = signature_dmq_tx. clone ( ) ;
98
+ async move {
99
+ let consumer_client = DmqConsumerClientPallas :: < DmqMessageTestPayload > :: new (
100
+ socket_path,
101
+ cardano_network,
102
+ slog_scope:: logger ( ) ,
103
+ ) ;
104
+ let mut messages = vec ! [ ] ;
105
+ signature_dmq_tx. send ( create_fake_msg ( b"msg_4" ) . await ) . unwrap ( ) ;
106
+ messages. extend_from_slice ( & consumer_client. consume_messages ( ) . await . unwrap ( ) ) ;
107
+ stop_tx. send ( ( ) ) . unwrap ( ) ;
108
+
109
+ messages. into_iter ( ) . map ( |( msg, _) | msg) . collect :: < Vec < _ > > ( )
110
+ }
111
+ } ) ;
112
+
113
+ // Check that all messages have been correctly received
114
+ let ( _, messages) = tokio:: try_join!( server, client) . unwrap ( ) ;
115
+ assert_eq ! ( vec![ DmqMessageTestPayload :: new( b"msg_4" ) ] , messages) ;
88
116
}
0 commit comments