Skip to content
Snippets Groups Projects
Commit 385349f4 authored by Shankar Patali's avatar Shankar Patali
Browse files

Merge branch 'instantiate_controller_creator_in_ose_constructor' into 'main'

Instantiate ControllerCreator in OpenScenarioEngine class constructor

See merge request !177
parents b88aa1e0 029a3ed6
No related branches found
Tags v1.1.2
1 merge request!177Instantiate ControllerCreator in OpenScenarioEngine class constructor
......@@ -78,7 +78,8 @@ OpenScenarioEngine::OpenScenarioEngine(const std::string& scenario_file_path,
unsigned int initial_seed)
: scenario_file_path_{scenario_file_path},
environment_{std::move(environment)},
probability_service_{std::make_shared<ProbabilityService>(initial_seed)}
probability_service_{std::make_shared<ProbabilityService>(initial_seed)},
controller_creator_{std::make_shared<ControllerCreator>(*environment_)}
{
Logger::SetLogger(std::move(logger));
}
......@@ -91,7 +92,8 @@ void OpenScenarioEngine::Init()
}
entity_creator_ = std::make_shared<EntityCreator>(environment_);
controller_creator_ = std::make_shared<ControllerCreator>(*environment_);
controller_creator_->GetControllerService()->ResetControllerMappings();
ParseScenarioFile();
......
......@@ -19,9 +19,8 @@
namespace OpenScenarioEngine::v1_2
{
static constexpr const char* CONTROLLER_NAME_DEFAULT {"OpenScenarioEngine::v1_2::Default"};
static constexpr const char* CONTROLLER_NAME_OVERRIDE {"OpenScenarioEngine::v1_2::ExternalOverride"};
static constexpr const char* CONTROLLER_NAME_DEFAULT{"OpenScenarioEngine::v1_2::Default"};
static constexpr const char* CONTROLLER_NAME_OVERRIDE{"OpenScenarioEngine::v1_2::ExternalOverride"};
class ControllerService;
......
......@@ -16,7 +16,6 @@ namespace OpenScenarioEngine::v1_2
{
namespace detail
{
template <typename ActivationState>
inline ActivationState invert_if_changed(ActivationState value)
{
......@@ -78,4 +77,10 @@ void ControllerService::ChangeState(
entity_controllers.user_defined.at(controller_id)->ChangeState(lateral_state, longitudinal_state);
}
void ControllerService::ResetControllerMappings()
{
controllers.clear();
mapping.clear();
}
} // namespace OpenScenarioEngine::v1_2
\ No newline at end of file
......@@ -30,6 +30,8 @@ public:
mantle_api::IController::LateralState lateral_state,
mantle_api::IController::LongitudinalState longitudinal_state) override;
void ResetControllerMappings() override;
/// Mapping between entity_ids and its controllers
std::map<mantle_api::UniqueId, EntityControllers> controllers;
......
......@@ -22,7 +22,6 @@
namespace OpenScenarioEngine::v1_2
{
/// List of user defined controllers referenced by unique_id
using UserDefinedControllers = std::map<mantle_api::UniqueId, mantle_api::IController*>;
......@@ -71,6 +70,11 @@ public:
mantle_api::UniqueId controller_id,
mantle_api::IController::LateralState lateral,
mantle_api::IController::LongitudinalState longitudinal) = 0;
/// Resets internal state of the controller service by clearing mapping
/// between entity Ids and its controllers and also between controller Ids
/// and references.
virtual void ResetControllerMappings() = 0;
};
/// Pointer type of internally used housekeeping container
......
......@@ -381,3 +381,11 @@ TEST_F(OpenScenarioEngineTest, GivenScenarioWithNoSimulationTimeStopTrigger_When
EXPECT_EQ(engine.GetScenarioInfo().scenario_timeout_duration, mantle_api::Time{std::numeric_limits<double>::max()});
}
TEST_F(OpenScenarioEngineTest, GivenValidScenarioFile_WhenActivateExternalHostControlIsCalledWithoutInit_ThenNoThrow)
{
std::string xosc_file_path{GetScenariosPath(test_info_->file()) + default_xosc_scenario_};
OpenScenarioEngine::v1_2::OpenScenarioEngine engine(xosc_file_path, env_);
EXPECT_NO_THROW(engine.ActivateExternalHostControl());
}
\ No newline at end of file
......@@ -31,6 +31,10 @@ public:
ChangeState,
(mantle_api::UniqueId, mantle_api::UniqueId, mantle_api::IController::LateralState, mantle_api::IController::LongitudinalState),
(override));
MOCK_METHOD(void,
ResetControllerMappings,
(),
(override));
};
} // namespace testing::OpenScenarioEngine::v1_2
\ No newline at end of file
......@@ -236,3 +236,20 @@ TEST_F(ControllerCreator, GivenScenarioObjectWithoutController_WhenCreateControl
controller_creator.CreateControllers(scenario_objects);
}
TEST_F(ControllerCreator, GivenScenarioObjectWithController_WhenResetControllerMappingsIsCalled_ThenControllerServiceInternalStateIsReset)
{
constexpr mantle_api::UniqueId ENTITY_ID = 1234;
SETUP_ENTITY("test_entity", ENTITY_ID, true, true);
ON_CALL(mockControllerRepository, Create(_)).WillByDefault(ReturnRef(mockController));
OpenScenarioEngine::v1_2::ControllerCreator controller_creator(mockEnvironment);
controller_creator.CreateControllers(scenario_objects);
auto controller_service = controller_creator.GetControllerService();
ASSERT_TRUE(controller_service->GetControllers(ENTITY_ID).has_value());
controller_service->ResetControllerMappings();
EXPECT_FALSE(controller_service->GetControllers(ENTITY_ID).has_value());
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment