CARLA
Loading...
Searching...
No Matches
Functions
test_multigpu_router.cpp File Reference
#include "test.h"
#include <carla/Buffer.h>
#include <carla/multigpu/commands.h>
#include <carla/multigpu/listener.h>
#include <carla/multigpu/primary.h>
#include <carla/multigpu/primaryCommands.h>
#include <carla/multigpu/router.h>
#include <carla/multigpu/secondary.h>
#include <carla/streaming/detail/Token.h>
#include <boost/asio/io_context.hpp>
#include <boost/asio/executor_work_guard.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/read.hpp>
#include <boost/asio/write.hpp>
#include <chrono>
#include <cstring>
#include <future>
#include <memory>
#include <mutex>
#include <optional>
#include <set>
#include <string>
#include <string_view>
#include <thread>
#include <utility>
#include <vector>

Go to the source code of this file.

Functions

 TEST (MultiGpuCommands, episode_ready_message_round_trips_load_id)
 
 TEST (MultiGpuCommands, get_token_request_starts_with_the_stream_id)
 
 TEST (MultiGpuCommands, load_map_payload_round_trips_map_and_load_id)
 
 TEST (MultiGpuCommands, load_map_payload_without_load_id_parses_as_zero)
 
 TEST (MultiGpuCommands, token_not_ready_marker_is_distinct_from_other_replies)
 
 TEST (MultiGpuLoadMap, payload_carries_the_generated_world)
 
 TEST (MultiGpuLoadMap, payload_without_extras_has_none)
 
 TEST (MultiGpuLoadMap, unknown_extras_are_skipped_and_cut_ones_dropped)
 
 TEST (MultiGpuRouterProductionShutdown, stop_releases_listening_port_despite_reference_cycle)
 
 TEST (MultiGpuSecondary, is_not_connected_before_connect_or_after_stop)
 
 TEST (MultiGpuSecondary, oversize_message_from_the_primary_disconnects)
 
 TEST (MultiGpuSecondary, replies_reach_the_primary_in_order)
 
 TEST (MultiGpuSecondary, reports_connected_until_the_primary_closes)
 
 TEST (MultiGpuTransport, oversize_header_closes_the_session)
 
 TEST (MultiGpuTransport, write_queue_preserves_order_under_backpressure)
 
 TEST_F (MultiGpuRouterTest, cached_token_of_a_disconnected_secondary_is_routed_again)
 
 TEST_F (MultiGpuRouterTest, concurrent_get_token_calls_are_serialized_not_rejected)
 
 TEST_F (MultiGpuRouterTest, disconnect_rejects_pending_promise_for_that_session)
 
 TEST_F (MultiGpuRouterTest, duplicate_response_does_not_resolve_a_promise_twice)
 
 TEST_F (MultiGpuRouterTest, enable_for_ros_on_a_disconnected_secondary_routes_the_sensor_again)
 
 TEST_F (MultiGpuRouterTest, enable_for_ros_refused_by_the_secondary_returns_false)
 
 TEST_F (MultiGpuRouterTest, enable_for_ros_without_any_secondary_returns_instead_of_recursing)
 
 TEST_F (MultiGpuRouterTest, episode_ready_marker_is_not_misdelivered_to_a_pending_promise)
 
 TEST_F (MultiGpuRouterTest, episode_ready_marker_with_no_pending_promise_triggers_resync_callback)
 
 TEST_F (MultiGpuRouterTest, first_new_secondary_takes_every_lost_sensor)
 
 TEST_F (MultiGpuRouterTest, forgotten_sensor_is_not_rerouted)
 
 TEST_F (MultiGpuRouterTest, get_token_after_failed_request_routes_to_remaining_secondary)
 
 TEST_F (MultiGpuRouterTest, get_token_always_carries_the_primary_stream_id)
 
 TEST_F (MultiGpuRouterTest, get_token_fails_cleanly_when_secondary_disconnects_mid_request)
 
 TEST_F (MultiGpuRouterTest, get_token_not_ready_reply_returns_nullopt_and_caches_nothing)
 
 TEST_F (MultiGpuRouterTest, get_token_on_a_lost_route_enables_ros_again)
 
 TEST_F (MultiGpuRouterTest, get_token_reroutes_a_lost_route_before_reroute_runs)
 
 TEST_F (MultiGpuRouterTest, get_token_with_malformed_reply_returns_nullopt_and_caches_nothing)
 
 TEST_F (MultiGpuRouterTest, get_token_with_no_secondary_returns_nullopt_and_caches_nothing)
 
 TEST_F (MultiGpuRouterTest, load_map_forgets_cached_tokens)
 
 TEST_F (MultiGpuRouterTest, load_map_wait_can_be_abandoned)
 
 TEST_F (MultiGpuRouterTest, load_map_waits_until_every_secondary_is_ready_or_gone)
 
 TEST_F (MultiGpuRouterTest, load_map_without_secondaries_waits_for_nothing)
 
 TEST_F (MultiGpuRouterTest, lost_route_survives_ros_queries_and_failed_get_token)
 
 TEST_F (MultiGpuRouterTest, new_secondary_takes_over_the_sensors_of_a_lost_one)
 
 TEST_F (MultiGpuRouterTest, next_new_secondary_takes_over_when_the_first_drops_mid_way)
 
 TEST_F (MultiGpuRouterTest, overlapping_request_to_same_session_is_rejected_not_orphaned)
 
 TEST_F (MultiGpuRouterTest, reroute_after_load_map_is_a_no_op)
 
 TEST_F (MultiGpuRouterTest, reroute_enables_ros_again_on_the_new_secondary)
 
 TEST_F (MultiGpuRouterTest, reroute_leaves_sensors_of_live_secondaries_alone)
 
 TEST_F (MultiGpuRouterTest, reroute_stops_when_the_new_secondary_disconnects_mid_way)
 
 TEST_F (MultiGpuRouterTest, reroute_without_lost_sensors_is_a_no_op)
 
 TEST_F (MultiGpuRouterTest, response_after_rejection_is_dropped)
 
 TEST_F (MultiGpuRouterTest, response_with_pending_promise_does_not_trigger_resync_callback)
 
 TEST_F (MultiGpuRouterTest, ros_queries_on_a_disconnected_secondary_return_without_a_round_trip)
 
 TEST_F (MultiGpuRouterTest, sensor_refused_by_the_new_secondary_is_routed_lazily_later)
 
 TEST_F (MultiGpuRouterTest, session_connected_before_load_map_keeps_the_broadcast_behaviour)
 
 TEST_F (MultiGpuRouterTest, session_connecting_after_load_map_loads_the_remembered_map_before_resync)
 
 TEST_F (MultiGpuRouterTest, session_connecting_later_gets_the_remembered_generated_world)
 
 TEST_F (MultiGpuRouterTest, session_connecting_without_a_remembered_map_gets_no_load_map)
 
 TEST_F (MultiGpuRouterTest, session_that_left_before_the_call_is_skipped)
 
 TEST_F (MultiGpuRouterTest, stale_episode_ready_for_map_a_does_not_clear_map_b_wait)
 
 TEST_F (MultiGpuRouterTest, stale_episode_ready_still_rearms_resync)
 
 TEST_F (MultiGpuRouterTest, stale_ready_of_an_older_load_does_not_finish_a_late_secondary_load)
 
 TEST_F (MultiGpuRouterTest, stop_rejects_every_pending_request)
 
 TEST_F (MultiGpuRouterTest, unsolicited_non_marker_data_does_not_trigger_resync_callback)
 
 TEST_F (MultiGpuRouterTest, untagged_episode_ready_does_not_clear_a_tagged_load_wait)
 
 TEST_F (MultiGpuRouterTest, write_to_next_round_robins_across_connected_sessions)
 
 TEST_F (MultiGpuRouterTest, write_to_next_with_connected_session_stays_pending)
 
 TEST_F (MultiGpuRouterTest, write_to_next_with_no_sessions_rejects_instead_of_hanging)
 
 TEST_F (MultiGpuRouterTest, write_to_one_with_disconnected_but_still_alive_session_rejects)
 
 TEST_F (MultiGpuRouterTest, write_to_one_with_expired_session_rejects_instead_of_hanging)
 

Function Documentation

◆ TEST() [1/15]

TEST ( MultiGpuCommands  ,
episode_ready_message_round_trips_load_id   
)

◆ TEST() [2/15]

TEST ( MultiGpuCommands  ,
get_token_request_starts_with_the_stream_id   
)

Definition at line 755 of file test_multigpu_router.cpp.

◆ TEST() [3/15]

TEST ( MultiGpuCommands  ,
load_map_payload_round_trips_map_and_load_id   
)

◆ TEST() [4/15]

TEST ( MultiGpuCommands  ,
load_map_payload_without_load_id_parses_as_zero   
)

Definition at line 1454 of file test_multigpu_router.cpp.

References carla::multigpu::ParseLoadMapPayload().

◆ TEST() [5/15]

TEST ( MultiGpuCommands  ,
token_not_ready_marker_is_distinct_from_other_replies   
)

◆ TEST() [6/15]

TEST ( MultiGpuLoadMap  ,
payload_carries_the_generated_world   
)

◆ TEST() [7/15]

TEST ( MultiGpuLoadMap  ,
payload_without_extras_has_none   
)

◆ TEST() [8/15]

TEST ( MultiGpuLoadMap  ,
unknown_extras_are_skipped_and_cut_ones_dropped   
)

◆ TEST() [9/15]

TEST ( MultiGpuRouterProductionShutdown  ,
stop_releases_listening_port_despite_reference_cycle   
)

◆ TEST() [10/15]

TEST ( MultiGpuSecondary  ,
is_not_connected_before_connect_or_after_stop   
)

Definition at line 1704 of file test_multigpu_router.cpp.

◆ TEST() [11/15]

TEST ( MultiGpuSecondary  ,
oversize_message_from_the_primary_disconnects   
)

◆ TEST() [12/15]

TEST ( MultiGpuSecondary  ,
replies_reach_the_primary_in_order   
)

Definition at line 1728 of file test_multigpu_router.cpp.

References first.

◆ TEST() [13/15]

TEST ( MultiGpuSecondary  ,
reports_connected_until_the_primary_closes   
)

Definition at line 1691 of file test_multigpu_router.cpp.

◆ TEST() [14/15]

TEST ( MultiGpuTransport  ,
oversize_header_closes_the_session   
)

◆ TEST() [15/15]

TEST ( MultiGpuTransport  ,
write_queue_preserves_order_under_backpressure   
)

Definition at line 1601 of file test_multigpu_router.cpp.

References first, and carla::multigpu::SEND_FRAME.

◆ TEST_F() [1/52]

TEST_F ( MultiGpuRouterTest  ,
cached_token_of_a_disconnected_secondary_is_routed_again   
)

◆ TEST_F() [2/52]

TEST_F ( MultiGpuRouterTest  ,
concurrent_get_token_calls_are_serialized_not_rejected   
)

◆ TEST_F() [3/52]

TEST_F ( MultiGpuRouterTest  ,
disconnect_rejects_pending_promise_for_that_session   
)

◆ TEST_F() [4/52]

TEST_F ( MultiGpuRouterTest  ,
duplicate_response_does_not_resolve_a_promise_twice   
)

◆ TEST_F() [5/52]

TEST_F ( MultiGpuRouterTest  ,
enable_for_ros_on_a_disconnected_secondary_routes_the_sensor_again   
)

◆ TEST_F() [6/52]

TEST_F ( MultiGpuRouterTest  ,
enable_for_ros_refused_by_the_secondary_returns_false   
)

◆ TEST_F() [7/52]

TEST_F ( MultiGpuRouterTest  ,
enable_for_ros_without_any_secondary_returns_instead_of_recursing   
)

◆ TEST_F() [8/52]

TEST_F ( MultiGpuRouterTest  ,
episode_ready_marker_is_not_misdelivered_to_a_pending_promise   
)

◆ TEST_F() [9/52]

TEST_F ( MultiGpuRouterTest  ,
episode_ready_marker_with_no_pending_promise_triggers_resync_callback   
)

◆ TEST_F() [10/52]

TEST_F ( MultiGpuRouterTest  ,
first_new_secondary_takes_every_lost_sensor   
)

◆ TEST_F() [11/52]

TEST_F ( MultiGpuRouterTest  ,
forgotten_sensor_is_not_rerouted   
)

◆ TEST_F() [12/52]

TEST_F ( MultiGpuRouterTest  ,
get_token_after_failed_request_routes_to_remaining_secondary   
)

◆ TEST_F() [13/52]

TEST_F ( MultiGpuRouterTest  ,
get_token_always_carries_the_primary_stream_id   
)

◆ TEST_F() [14/52]

TEST_F ( MultiGpuRouterTest  ,
get_token_fails_cleanly_when_secondary_disconnects_mid_request   
)

◆ TEST_F() [15/52]

TEST_F ( MultiGpuRouterTest  ,
get_token_not_ready_reply_returns_nullopt_and_caches_nothing   
)

◆ TEST_F() [16/52]

TEST_F ( MultiGpuRouterTest  ,
get_token_on_a_lost_route_enables_ros_again   
)

◆ TEST_F() [17/52]

TEST_F ( MultiGpuRouterTest  ,
get_token_reroutes_a_lost_route_before_reroute_runs   
)

◆ TEST_F() [18/52]

TEST_F ( MultiGpuRouterTest  ,
get_token_with_malformed_reply_returns_nullopt_and_caches_nothing   
)

◆ TEST_F() [19/52]

TEST_F ( MultiGpuRouterTest  ,
get_token_with_no_secondary_returns_nullopt_and_caches_nothing   
)

◆ TEST_F() [20/52]

TEST_F ( MultiGpuRouterTest  ,
load_map_forgets_cached_tokens   
)

◆ TEST_F() [21/52]

TEST_F ( MultiGpuRouterTest  ,
load_map_wait_can_be_abandoned   
)

◆ TEST_F() [22/52]

TEST_F ( MultiGpuRouterTest  ,
load_map_waits_until_every_secondary_is_ready_or_gone   
)

◆ TEST_F() [23/52]

TEST_F ( MultiGpuRouterTest  ,
load_map_without_secondaries_waits_for_nothing   
)

◆ TEST_F() [24/52]

TEST_F ( MultiGpuRouterTest  ,
lost_route_survives_ros_queries_and_failed_get_token   
)

◆ TEST_F() [25/52]

TEST_F ( MultiGpuRouterTest  ,
new_secondary_takes_over_the_sensors_of_a_lost_one   
)

◆ TEST_F() [26/52]

TEST_F ( MultiGpuRouterTest  ,
next_new_secondary_takes_over_when_the_first_drops_mid_way   
)

◆ TEST_F() [27/52]

TEST_F ( MultiGpuRouterTest  ,
overlapping_request_to_same_session_is_rejected_not_orphaned   
)

◆ TEST_F() [28/52]

TEST_F ( MultiGpuRouterTest  ,
reroute_after_load_map_is_a_no_op   
)

◆ TEST_F() [29/52]

TEST_F ( MultiGpuRouterTest  ,
reroute_enables_ros_again_on_the_new_secondary   
)

◆ TEST_F() [30/52]

TEST_F ( MultiGpuRouterTest  ,
reroute_leaves_sensors_of_live_secondaries_alone   
)

◆ TEST_F() [31/52]

TEST_F ( MultiGpuRouterTest  ,
reroute_stops_when_the_new_secondary_disconnects_mid_way   
)

◆ TEST_F() [32/52]

TEST_F ( MultiGpuRouterTest  ,
reroute_without_lost_sensors_is_a_no_op   
)

◆ TEST_F() [33/52]

TEST_F ( MultiGpuRouterTest  ,
response_after_rejection_is_dropped   
)

◆ TEST_F() [34/52]

TEST_F ( MultiGpuRouterTest  ,
response_with_pending_promise_does_not_trigger_resync_callback   
)

◆ TEST_F() [35/52]

TEST_F ( MultiGpuRouterTest  ,
ros_queries_on_a_disconnected_secondary_return_without_a_round_trip   
)

◆ TEST_F() [36/52]

TEST_F ( MultiGpuRouterTest  ,
sensor_refused_by_the_new_secondary_is_routed_lazily_later   
)

◆ TEST_F() [37/52]

TEST_F ( MultiGpuRouterTest  ,
session_connected_before_load_map_keeps_the_broadcast_behaviour   
)

◆ TEST_F() [38/52]

TEST_F ( MultiGpuRouterTest  ,
session_connecting_after_load_map_loads_the_remembered_map_before_resync   
)

◆ TEST_F() [39/52]

TEST_F ( MultiGpuRouterTest  ,
session_connecting_later_gets_the_remembered_generated_world   
)

◆ TEST_F() [40/52]

TEST_F ( MultiGpuRouterTest  ,
session_connecting_without_a_remembered_map_gets_no_load_map   
)

◆ TEST_F() [41/52]

TEST_F ( MultiGpuRouterTest  ,
session_that_left_before_the_call_is_skipped   
)

◆ TEST_F() [42/52]

TEST_F ( MultiGpuRouterTest  ,
stale_episode_ready_for_map_a_does_not_clear_map_b_wait   
)

◆ TEST_F() [43/52]

TEST_F ( MultiGpuRouterTest  ,
stale_episode_ready_still_rearms_resync   
)

◆ TEST_F() [44/52]

TEST_F ( MultiGpuRouterTest  ,
stale_ready_of_an_older_load_does_not_finish_a_late_secondary_load   
)

◆ TEST_F() [45/52]

TEST_F ( MultiGpuRouterTest  ,
stop_rejects_every_pending_request   
)

◆ TEST_F() [46/52]

TEST_F ( MultiGpuRouterTest  ,
unsolicited_non_marker_data_does_not_trigger_resync_callback   
)

◆ TEST_F() [47/52]

TEST_F ( MultiGpuRouterTest  ,
untagged_episode_ready_does_not_clear_a_tagged_load_wait   
)

◆ TEST_F() [48/52]

TEST_F ( MultiGpuRouterTest  ,
write_to_next_round_robins_across_connected_sessions   
)

◆ TEST_F() [49/52]

TEST_F ( MultiGpuRouterTest  ,
write_to_next_with_connected_session_stays_pending   
)

◆ TEST_F() [50/52]

TEST_F ( MultiGpuRouterTest  ,
write_to_next_with_no_sessions_rejects_instead_of_hanging   
)

◆ TEST_F() [51/52]

TEST_F ( MultiGpuRouterTest  ,
write_to_one_with_disconnected_but_still_alive_session_rejects   
)

◆ TEST_F() [52/52]

TEST_F ( MultiGpuRouterTest  ,
write_to_one_with_expired_session_rejects_instead_of_hanging   
)