From b982ad29b92dccb6ff5d92648324dc937c0e2ffe Mon Sep 17 00:00:00 2001 From: Shobhit Adlakha Date: Mon, 18 May 2020 10:11:42 -0400 Subject: Fix/Add Startup PTU trigger check (#3363) * Add Startup PTU check * Reset Stop PTU etry when first app is registered * Address review comment --- .../include/application_manager/policies/policy_handler.h | 2 ++ .../application_manager/src/application_manager_impl.cc | 2 ++ .../application_manager/src/policies/policy_handler.cc | 6 ++++++ .../application_manager/policies/policy_handler_interface.h | 9 +++++++++ .../include/policy/policy_regular/policy/policy_manager.h | 5 +++++ .../policies/mock_policy_handler_interface.h | 1 + .../test/policy/policy_regular/policy/mock_policy_manager.h | 1 + .../policy_regular/include/policy/policy_manager_impl.h | 5 +++++ .../policy/policy_regular/src/policy_manager_impl.cc | 12 ++++++++++++ 9 files changed, 43 insertions(+) diff --git a/src/components/application_manager/include/application_manager/policies/policy_handler.h b/src/components/application_manager/include/application_manager/policies/policy_handler.h index 2070554cd8..2c7b878023 100644 --- a/src/components/application_manager/include/application_manager/policies/policy_handler.h +++ b/src/components/application_manager/include/application_manager/policies/policy_handler.h @@ -324,6 +324,8 @@ class PolicyHandler : public PolicyHandlerInterface, void OnSystemRequestReceived() const OVERRIDE; + void TriggerPTUOnStartupIfRequired() OVERRIDE; + /** * @brief Get appropriate message parameters and send them with response * to HMI diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index e6705a4d8e..878cf5765e 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -898,6 +898,8 @@ void ApplicationManagerImpl::OnHMIStartedCooperation() { resume_controller().ResetLaunchTime(); RefreshCloudAppInformation(); + + policy_handler_->TriggerPTUOnStartupIfRequired(); } std::string ApplicationManagerImpl::PolicyIDByIconUrl(const std::string url) { diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc index 11decf45c3..678916f7eb 100644 --- a/src/components/application_manager/src/policies/policy_handler.cc +++ b/src/components/application_manager/src/policies/policy_handler.cc @@ -787,6 +787,12 @@ void PolicyHandler::OnSystemRequestReceived() const { policy_manager_->ResetTimeout(); } +void PolicyHandler::TriggerPTUOnStartupIfRequired() { +#ifndef EXTERNAL_PROPRIETARY_MODE + policy_manager_->TriggerPTUOnStartupIfRequired(); +#endif +} + void PolicyHandler::GetRegisteredLinks( std::map& out_links) const { DataAccessor accessor = application_manager_.applications(); diff --git a/src/components/include/application_manager/policies/policy_handler_interface.h b/src/components/include/application_manager/policies/policy_handler_interface.h index f85483f98e..735f44a314 100644 --- a/src/components/include/application_manager/policies/policy_handler_interface.h +++ b/src/components/include/application_manager/policies/policy_handler_interface.h @@ -768,6 +768,15 @@ class PolicyHandlerInterface : public VehicleDataItemProvider { */ virtual void OnSystemRequestReceived() const = 0; + /** + * @brief Triggers a PolicyTableUpdate on startup (only if an update is + * required) + * + * Currently, this function is only implemented for regular policies + * since the device consent is not enabled by default for external policies. + */ + virtual void TriggerPTUOnStartupIfRequired() = 0; + private: /** * @brief Processes data received via OnAppPermissionChanged notification diff --git a/src/components/include/policy/policy_regular/policy/policy_manager.h b/src/components/include/policy/policy_regular/policy/policy_manager.h index 0689a5b768..99f38673ef 100644 --- a/src/components/include/policy/policy_regular/policy/policy_manager.h +++ b/src/components/include/policy/policy_regular/policy/policy_manager.h @@ -801,6 +801,11 @@ class PolicyManager : public usage_statistics::StatisticsManager, */ virtual void ResetTimeout() = 0; + /** + * @brief Trigger a PTU once on startup if it is required + */ + virtual void TriggerPTUOnStartupIfRequired() = 0; + protected: /** * @brief Checks is PT exceeded IgnitionCycles diff --git a/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h b/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h index bcff478023..0dde38bc79 100644 --- a/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h +++ b/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h @@ -217,6 +217,7 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface { MOCK_CONST_METHOD1(SendOnAppPropertiesChangeNotification, void(const std::string& policy_app_id)); MOCK_METHOD0(OnPTExchangeNeeded, void()); + MOCK_METHOD0(TriggerPTUOnStartupIfRequired, void()); MOCK_METHOD1(GetAvailableApps, void(std::queue& apps)); MOCK_METHOD3( AddApplication, diff --git a/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h b/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h index c803f63c9d..ac0fab4328 100644 --- a/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h +++ b/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h @@ -262,6 +262,7 @@ class MockPolicyManager : public PolicyManager { MOCK_METHOD0(ExceededIgnitionCycles, bool()); MOCK_METHOD0(ExceededDays, bool()); MOCK_METHOD0(StartPTExchange, void()); + MOCK_METHOD0(TriggerPTUOnStartupIfRequired, void()); // --- Statistics Manager section MOCK_METHOD1(Increment, void(usage_statistics::GlobalCounterId type)); diff --git a/src/components/policy/policy_regular/include/policy/policy_manager_impl.h b/src/components/policy/policy_regular/include/policy/policy_manager_impl.h index b608c6f7ec..aa77019613 100644 --- a/src/components/policy/policy_regular/include/policy/policy_manager_impl.h +++ b/src/components/policy/policy_regular/include/policy/policy_manager_impl.h @@ -797,6 +797,11 @@ class PolicyManagerImpl : public PolicyManager { AppIdURL RetrySequenceUrl(const struct RetrySequenceURL& rs, const EndpointUrls& urls) const OVERRIDE; + /** + * @brief Trigger a PTU once on startup if it is required + */ + virtual void TriggerPTUOnStartupIfRequired() OVERRIDE; + #ifdef BUILD_TESTS /** * @brief Getter for cache_manager instance diff --git a/src/components/policy/policy_regular/src/policy_manager_impl.cc b/src/components/policy/policy_regular/src/policy_manager_impl.cc index b8380b761d..c6389b503b 100644 --- a/src/components/policy/policy_regular/src/policy_manager_impl.cc +++ b/src/components/policy/policy_regular/src/policy_manager_impl.cc @@ -713,6 +713,11 @@ void PolicyManagerImpl::UpdatePTUReadyAppsCount(const uint32_t new_app_count) { void PolicyManagerImpl::OnAppRegisteredOnMobile( const std::string& device_id, const std::string& application_id) { if (application_id != last_registered_policy_app_id_) { + if (last_registered_policy_app_id_.empty()) { + LOG4CXX_DEBUG(logger_, "Stopping update after first app is registered"); + // ResetRetrySequence(ResetRetryCountType::kResetInternally); + StopRetrySequence(); + } StartPTExchange(); last_registered_policy_app_id_ = application_id; } @@ -1867,6 +1872,13 @@ bool PolicyManagerImpl::FunctionGroupNeedEncryption( : false; } +void PolicyManagerImpl::TriggerPTUOnStartupIfRequired() { + LOG4CXX_AUTO_TRACE(logger_); + if (ignition_check) { + StartPTExchange(); + } +} + const std::string PolicyManagerImpl::GetPolicyFunctionName( const uint32_t function_id) const { return policy_table::EnumToJsonString( -- cgit v1.2.1