@@ -7,8 +7,8 @@ use edgezero_core::http::response_builder as edge_response_builder;
77use edgezero_core:: key_value_store:: NoopKvStore ;
88use error_stack:: Report ;
99use fastly:: http:: { header, Method , StatusCode } ;
10- use fastly:: Request ;
11- use trusted_server_core:: auction:: build_orchestrator;
10+ use fastly:: { Request , Response } ;
11+ use trusted_server_core:: auction:: { build_orchestrator, AuctionOrchestrator } ;
1212use trusted_server_core:: ec:: registry:: PartnerRegistry ;
1313use trusted_server_core:: integrations:: IntegrationRegistry ;
1414use trusted_server_core:: platform:: {
@@ -330,14 +330,38 @@ fn test_runtime_services_with_secret_and_http_client(
330330 . build ( )
331331}
332332
333+ fn test_partner_registry ( settings : & Settings ) -> PartnerRegistry {
334+ PartnerRegistry :: from_config ( & settings. ec . partners ) . expect ( "should build partner registry" )
335+ }
336+
337+ fn buffered_route_response (
338+ settings : & Settings ,
339+ orchestrator : & AuctionOrchestrator ,
340+ integration_registry : & IntegrationRegistry ,
341+ services : & RuntimeServices ,
342+ req : Request ,
343+ ) -> Response {
344+ let partner_registry = test_partner_registry ( settings) ;
345+ let outcome = futures:: executor:: block_on ( route_request (
346+ settings,
347+ orchestrator,
348+ integration_registry,
349+ & partner_registry,
350+ services,
351+ req,
352+ ) )
353+ . expect ( "should route test request" ) ;
354+
355+ outcome. response . expect ( "should buffer test response" )
356+ }
357+
333358#[ test]
334359fn routes_use_request_local_consent ( ) {
335360 let settings = create_test_settings ( ) ;
336361 let orchestrator = build_orchestrator ( & settings) . expect ( "should build auction orchestrator" ) ;
337362 let integration_registry =
338363 IntegrationRegistry :: new ( & settings) . expect ( "should create integration registry" ) ;
339- let partner_registry =
340- PartnerRegistry :: from_config ( & settings. ec . partners ) . expect ( "should build partner registry" ) ;
364+ let partner_registry = test_partner_registry ( & settings) ;
341365
342366 let discovery_req = Request :: get ( "https://test.com/.well-known/trusted-server.json" ) ;
343367 let discovery_services = test_runtime_services ( & discovery_req) ;
@@ -396,14 +420,13 @@ fn asset_routes_bypass_publisher_consent_dependencies() {
396420
397421 let asset_req = Request :: get ( "https://test.com/.images/logo.png?auto=webp" ) ;
398422 let asset_services = test_runtime_services ( & asset_req) ;
399- let asset_resp = futures :: executor :: block_on ( route_request (
423+ let asset_resp = buffered_route_response (
400424 & settings,
401425 & orchestrator,
402426 & integration_registry,
403427 & asset_services,
404428 asset_req,
405- ) )
406- . expect ( "should return an error response for asset proxy requests" ) ;
429+ ) ;
407430 assert_eq ! (
408431 asset_resp. get_status( ) ,
409432 StatusCode :: BAD_GATEWAY ,
@@ -430,14 +453,13 @@ fn asset_origin_failure_does_not_fall_back_to_publisher_origin() {
430453 Arc :: clone ( & http_client) as Arc < dyn PlatformHttpClient > ,
431454 ) ;
432455
433- let resp = futures :: executor :: block_on ( route_request (
456+ let resp = buffered_route_response (
434457 & settings,
435458 & orchestrator,
436459 & integration_registry,
437460 & services,
438461 req,
439- ) )
440- . expect ( "should return an error response for failed asset origin" ) ;
462+ ) ;
441463
442464 assert_eq ! (
443465 resp. get_status( ) ,
@@ -518,14 +540,13 @@ fn s3_asset_origin_error_stays_uncacheable_after_global_headers() {
518540 Arc :: clone ( & http_client) as Arc < dyn PlatformHttpClient > ,
519541 ) ;
520542
521- let resp = futures :: executor :: block_on ( route_request (
543+ let resp = buffered_route_response (
522544 & settings,
523545 & orchestrator,
524546 & integration_registry,
525547 & services,
526548 req,
527- ) )
528- . expect ( "should route S3 asset request" ) ;
549+ ) ;
529550
530551 assert_eq ! (
531552 resp. get_status( ) ,
@@ -567,14 +588,13 @@ fn asset_routes_proxy_head_requests() {
567588 Arc :: clone ( & http_client) as Arc < dyn PlatformHttpClient > ,
568589 ) ;
569590
570- let resp = futures :: executor :: block_on ( route_request (
591+ let resp = buffered_route_response (
571592 & settings,
572593 & orchestrator,
573594 & integration_registry,
574595 & services,
575596 req,
576- ) )
577- . expect ( "should route HEAD asset request" ) ;
597+ ) ;
578598
579599 assert_eq ! (
580600 resp. get_status( ) ,
@@ -617,14 +637,13 @@ fn asset_routes_ignore_query_string_for_matching() {
617637 Arc :: clone ( & http_client) as Arc < dyn PlatformHttpClient > ,
618638 ) ;
619639
620- let resp = futures :: executor :: block_on ( route_request (
640+ let resp = buffered_route_response (
621641 & settings,
622642 & orchestrator,
623643 & integration_registry,
624644 & services,
625645 req,
626- ) )
627- . expect ( "should route asset request with query string" ) ;
646+ ) ;
628647
629648 assert_eq ! (
630649 resp. get_status( ) ,
@@ -667,14 +686,13 @@ fn asset_routes_pass_redirect_responses_through() {
667686 Arc :: clone ( & http_client) as Arc < dyn PlatformHttpClient > ,
668687 ) ;
669688
670- let resp = futures :: executor :: block_on ( route_request (
689+ let resp = buffered_route_response (
671690 & settings,
672691 & orchestrator,
673692 & integration_registry,
674693 & services,
675694 req,
676- ) )
677- . expect ( "should route redirecting asset request" ) ;
695+ ) ;
678696
679697 assert_eq ! (
680698 resp. get_status( ) ,
@@ -691,6 +709,7 @@ fn asset_routes_pass_redirect_responses_through() {
691709#[ test]
692710fn asset_routes_skip_non_get_head_requests ( ) {
693711 let mut settings = create_test_settings ( ) ;
712+ settings. publisher . origin_url = "https://" . to_string ( ) ;
694713 settings. proxy . asset_routes = vec ! [ ProxyAssetRoute :: new(
695714 "/.images/" ,
696715 "https://assets.example.com" ,
@@ -707,18 +726,17 @@ fn asset_routes_skip_non_get_head_requests() {
707726 Arc :: clone ( & http_client) as Arc < dyn PlatformHttpClient > ,
708727 ) ;
709728
710- let resp = futures :: executor :: block_on ( route_request (
729+ let resp = buffered_route_response (
711730 & settings,
712731 & orchestrator,
713732 & integration_registry,
714733 & services,
715734 req,
716- ) )
717- . expect ( "should route non-asset POST request" ) ;
735+ ) ;
718736
719737 assert_eq ! (
720738 resp. get_status( ) ,
721- StatusCode :: SERVICE_UNAVAILABLE ,
739+ StatusCode :: BAD_GATEWAY ,
722740 "should fall through to publisher fallback for POST requests"
723741 ) ;
724742 assert ! (
@@ -744,14 +762,13 @@ fn built_in_routes_take_precedence_over_asset_routes() {
744762
745763 let req = Request :: get ( "https://test.com/.well-known/trusted-server.json" ) ;
746764 let services = test_runtime_services ( & req) ;
747- let resp = futures :: executor :: block_on ( route_request (
765+ let resp = buffered_route_response (
748766 & settings,
749767 & orchestrator,
750768 & integration_registry,
751769 & services,
752770 req,
753- ) )
754- . expect ( "should route discovery request" ) ;
771+ ) ;
755772 assert_eq ! (
756773 resp. get_status( ) ,
757774 StatusCode :: OK ,
@@ -772,14 +789,13 @@ fn integration_routes_take_precedence_over_asset_routes() {
772789
773790 let req = Request :: get ( "https://test.com/prebid.js" ) ;
774791 let services = test_runtime_services ( & req) ;
775- let mut resp = futures :: executor :: block_on ( route_request (
792+ let mut resp = buffered_route_response (
776793 & settings,
777794 & orchestrator,
778795 & integration_registry,
779796 & services,
780797 req,
781- ) )
782- . expect ( "should route integration request" ) ;
798+ ) ;
783799 assert_eq ! (
784800 resp. get_status( ) ,
785801 StatusCode :: OK ,
0 commit comments