11// Copyright (c) 2019, MASQ (https://masq.ai) and/or its affiliates. All rights reserved.
22
33use masq_lib:: blockchains:: chains:: Chain ;
4- use masq_lib:: constants:: HTTP_PORT ;
54use masq_lib:: test_utils:: utils:: TEST_DEFAULT_MULTINODE_CHAIN ;
65use masq_lib:: utils:: find_free_port;
76use multinode_integration_tests_lib:: masq_mock_node:: MASQMockNode ;
@@ -87,12 +86,13 @@ fn reported_server_drop() {
8786 let ( _, _, lcp) = mock_node
8887 . wait_for_package ( & masquerader, Duration :: from_secs ( 2 ) )
8988 . unwrap ( ) ;
90- let stream_key = stream_key_from_request_lcp ( lcp, & exit_cryptde) ;
89+ let ( stream_key, return_route_id) =
90+ context_from_request_lcp ( lcp, real_node. main_cryptde_null ( ) . unwrap ( ) , & exit_cryptde) ;
9191
9292 mock_node
9393 . transmit_package (
9494 mock_node. port_list ( ) [ 0 ] ,
95- create_server_drop_report ( & mock_node, & real_node, stream_key) ,
95+ create_server_drop_report ( & mock_node, & real_node, stream_key, return_route_id ) ,
9696 & masquerader,
9797 real_node. main_public_key ( ) ,
9898 real_node. socket_addr ( PortSelector :: First ) ,
@@ -115,7 +115,7 @@ fn actual_server_drop() {
115115 let server_port = find_free_port ( ) ;
116116 let mut server = real_node. make_server ( server_port) ;
117117 let masquerader = JsonMasquerader :: new ( ) ;
118- let stream_key = arbitrary_stream_key ( ) ;
118+ let ( stream_key, return_route_id ) = arbitrary_context ( ) ;
119119 let index: u64 = 0 ;
120120 request_server_payload (
121121 index,
@@ -125,6 +125,7 @@ fn actual_server_drop() {
125125 & mut server,
126126 & masquerader,
127127 stream_key,
128+ return_route_id,
128129 ) ;
129130 let index: u64 = 1 ;
130131 request_server_payload (
@@ -135,6 +136,7 @@ fn actual_server_drop() {
135136 & mut server,
136137 & masquerader,
137138 stream_key,
139+ return_route_id,
138140 ) ;
139141
140142 server. shutdown ( ) ;
@@ -172,6 +174,7 @@ fn request_server_payload(
172174 server : & mut MASQNodeServer ,
173175 masquerader : & JsonMasquerader ,
174176 stream_key : StreamKey ,
177+ return_route_id : u32 ,
175178) {
176179 mock_node
177180 . transmit_package (
@@ -181,6 +184,7 @@ fn request_server_payload(
181184 & mock_node,
182185 & real_node,
183186 stream_key,
187+ return_route_id,
184188 & server,
185189 cluster. chain ,
186190 ) ,
@@ -208,7 +212,7 @@ fn reported_client_drop() {
208212 let server_port = find_free_port ( ) ;
209213 let mut server = real_node. make_server ( server_port) ;
210214 let masquerader = JsonMasquerader :: new ( ) ;
211- let stream_key = arbitrary_stream_key ( ) ;
215+ let ( stream_key, return_route_id ) = arbitrary_context ( ) ;
212216 let index: u64 = 0 ;
213217 mock_node
214218 . transmit_package (
@@ -218,6 +222,7 @@ fn reported_client_drop() {
218222 & mock_node,
219223 & real_node,
220224 stream_key,
225+ return_route_id,
221226 & server,
222227 cluster. chain ,
223228 ) ,
@@ -235,7 +240,7 @@ fn reported_client_drop() {
235240 mock_node
236241 . transmit_package (
237242 mock_node. port_list ( ) [ 0 ] ,
238- create_client_drop_report ( & mock_node, & real_node, stream_key) ,
243+ create_client_drop_report ( & mock_node, & real_node, stream_key, return_route_id ) ,
239244 & masquerader,
240245 real_node. main_public_key ( ) ,
241246 real_node. socket_addr ( PortSelector :: First ) ,
@@ -317,32 +322,40 @@ fn full_neighbor(one: &mut NodeRecord, another: &mut NodeRecord) {
317322 . unwrap ( ) ;
318323}
319324
320- fn stream_key_from_request_lcp ( lcp : LiveCoresPackage , exit_cryptde : & dyn CryptDE ) -> StreamKey {
325+ fn context_from_request_lcp (
326+ lcp : LiveCoresPackage ,
327+ originating_cryptde : & dyn CryptDE ,
328+ exit_cryptde : & dyn CryptDE ,
329+ ) -> ( StreamKey , u32 ) {
321330 let payload = match decodex :: < MessageType > ( exit_cryptde, & lcp. payload ) . unwrap ( ) {
322331 MessageType :: ClientRequest ( vd) => vd
323332 . extract ( & node_lib:: sub_lib:: migrations:: client_request_payload:: MIGRATIONS )
324333 . unwrap ( ) ,
325334 mt => panic ! ( "Unexpected: {:?}" , mt) ,
326335 } ;
327336 let stream_key = payload. stream_key ;
328- stream_key
337+ let return_route_id = decodex :: < u32 > ( originating_cryptde, & lcp. route . hops [ 6 ] ) . unwrap ( ) ;
338+ ( stream_key, return_route_id)
329339}
330340
331- fn arbitrary_stream_key ( ) -> StreamKey {
332- StreamKey :: make_meaningful_stream_key ( "arbitrary_context" )
341+ fn arbitrary_context ( ) -> ( StreamKey , u32 ) {
342+ (
343+ StreamKey :: make_meaningful_stream_key ( "arbitrary_context" ) ,
344+ 12345678 ,
345+ )
333346}
334347
335348fn create_request_icp (
336349 index : u64 ,
337350 originating_node : & MASQMockNode ,
338351 exit_node : & MASQRealNode ,
339352 stream_key : StreamKey ,
353+ return_route_id : u32 ,
340354 server : & MASQNodeServer ,
341355 chain : Chain ,
342356) -> IncipientCoresPackage {
343- let originating_main_cryptde = originating_node. main_cryptde_null ( ) . unwrap ( ) ;
344357 IncipientCoresPackage :: new (
345- originating_main_cryptde ,
358+ originating_node . main_cryptde_null ( ) . unwrap ( ) ,
346359 Route :: round_trip (
347360 RouteSegment :: new (
348361 vec ! [
@@ -358,8 +371,9 @@ fn create_request_icp(
358371 ] ,
359372 Component :: ProxyServer ,
360373 ) ,
361- originating_main_cryptde ,
374+ originating_node . main_cryptde_null ( ) . unwrap ( ) ,
362375 originating_node. consuming_wallet ( ) ,
376+ return_route_id,
363377 Some ( chain. rec ( ) . contract ) ,
364378 )
365379 . unwrap ( ) ,
@@ -368,7 +382,7 @@ fn create_request_icp(
368382 & ClientRequestPayload_0v1 {
369383 stream_key,
370384 sequenced_packet : SequencedPacket :: new ( Vec :: from ( HTTP_REQUEST ) , index, false ) ,
371- target_hostname : format ! ( "{}" , server. local_addr( ) . ip( ) ) ,
385+ target_hostname : Some ( format ! ( "{}" , server. local_addr( ) . ip( ) ) ) ,
372386 target_port : server. local_addr ( ) . port ( ) ,
373387 protocol : ProxyProtocol :: HTTP ,
374388 originator_public_key : originating_node. main_public_key ( ) . clone ( ) ,
@@ -386,9 +400,8 @@ fn create_meaningless_icp(
386400 let socket_addr = SocketAddr :: from_str ( "3.2.1.0:7654" ) . unwrap ( ) ;
387401 let stream_key =
388402 StreamKey :: make_meaningful_stream_key ( "Chancellor on brink of second bailout for banks" ) ;
389- let main_cryptde = originating_node. main_cryptde_null ( ) . unwrap ( ) ;
390403 IncipientCoresPackage :: new (
391- main_cryptde ,
404+ originating_node . main_cryptde_null ( ) . unwrap ( ) ,
392405 Route :: round_trip (
393406 RouteSegment :: new (
394407 vec ! [
@@ -404,8 +417,9 @@ fn create_meaningless_icp(
404417 ] ,
405418 Component :: ProxyServer ,
406419 ) ,
407- main_cryptde ,
420+ originating_node . main_cryptde_null ( ) . unwrap ( ) ,
408421 originating_node. consuming_wallet ( ) ,
422+ 1357 ,
409423 Some ( TEST_DEFAULT_MULTINODE_CHAIN . rec ( ) . contract ) ,
410424 )
411425 . unwrap ( ) ,
@@ -414,7 +428,7 @@ fn create_meaningless_icp(
414428 & ClientRequestPayload_0v1 {
415429 stream_key,
416430 sequenced_packet : SequencedPacket :: new ( Vec :: from ( HTTP_REQUEST ) , 0 , false ) ,
417- target_hostname : "nowhere.com" . to_string ( ) ,
431+ target_hostname : Some ( format ! ( "nowhere.com" ) ) ,
418432 target_port : socket_addr. port ( ) ,
419433 protocol : ProxyProtocol :: HTTP ,
420434 originator_public_key : originating_node. main_public_key ( ) . clone ( ) ,
@@ -429,9 +443,8 @@ fn create_server_drop_report(
429443 exit_node : & MASQMockNode ,
430444 originating_node : & MASQRealNode ,
431445 stream_key : StreamKey ,
446+ return_route_id : u32 ,
432447) -> IncipientCoresPackage {
433- let exit_main_cryptde = exit_node. main_cryptde_null ( ) . unwrap ( ) ;
434- let originating_main_cryptde = originating_node. main_cryptde_null ( ) . unwrap ( ) ;
435448 let mut route = Route :: round_trip (
436449 RouteSegment :: new (
437450 vec ! [
@@ -447,12 +460,15 @@ fn create_server_drop_report(
447460 ] ,
448461 Component :: ProxyServer ,
449462 ) ,
450- originating_main_cryptde ,
463+ originating_node . main_cryptde_null ( ) . unwrap ( ) ,
451464 originating_node. consuming_wallet ( ) ,
465+ return_route_id,
452466 Some ( TEST_DEFAULT_MULTINODE_CHAIN . rec ( ) . contract ) ,
453467 )
454468 . unwrap ( ) ;
455- route. shift ( originating_main_cryptde) . unwrap ( ) ;
469+ route
470+ . shift ( originating_node. main_cryptde_null ( ) . unwrap ( ) )
471+ . unwrap ( ) ;
456472 let payload = MessageType :: ClientResponse ( VersionedData :: new (
457473 & node_lib:: sub_lib:: migrations:: client_response_payload:: MIGRATIONS ,
458474 & ClientResponsePayload_0v1 {
@@ -462,7 +478,7 @@ fn create_server_drop_report(
462478 ) ) ;
463479
464480 IncipientCoresPackage :: new (
465- exit_main_cryptde ,
481+ exit_node . main_cryptde_null ( ) . unwrap ( ) ,
466482 route,
467483 payload,
468484 originating_node. alias_public_key ( ) ,
@@ -474,8 +490,8 @@ fn create_client_drop_report(
474490 originating_node : & MASQMockNode ,
475491 exit_node : & MASQRealNode ,
476492 stream_key : StreamKey ,
493+ return_route_id : u32 ,
477494) -> IncipientCoresPackage {
478- let originating_main_cryptde = originating_node. main_cryptde_null ( ) . unwrap ( ) ;
479495 let route = Route :: round_trip (
480496 RouteSegment :: new (
481497 vec ! [
@@ -491,8 +507,9 @@ fn create_client_drop_report(
491507 ] ,
492508 Component :: ProxyServer ,
493509 ) ,
494- originating_main_cryptde ,
510+ originating_node . main_cryptde_null ( ) . unwrap ( ) ,
495511 originating_node. consuming_wallet ( ) ,
512+ return_route_id,
496513 Some ( TEST_DEFAULT_MULTINODE_CHAIN . rec ( ) . contract ) ,
497514 )
498515 . unwrap ( ) ;
@@ -501,15 +518,15 @@ fn create_client_drop_report(
501518 & ClientRequestPayload_0v1 {
502519 stream_key,
503520 sequenced_packet : SequencedPacket :: new ( vec ! [ ] , 1 , true ) ,
504- target_hostname : String :: from ( "doesnt.matter.com" ) ,
505- target_port : HTTP_PORT ,
521+ target_hostname : Some ( String :: from ( "doesnt.matter.com" ) ) ,
522+ target_port : 80 ,
506523 protocol : ProxyProtocol :: HTTP ,
507524 originator_public_key : originating_node. main_public_key ( ) . clone ( ) ,
508525 } ,
509526 ) ) ;
510527
511528 IncipientCoresPackage :: new (
512- originating_main_cryptde ,
529+ originating_node . main_cryptde_null ( ) . unwrap ( ) ,
513530 route,
514531 payload,
515532 exit_node. main_public_key ( ) ,
0 commit comments