Loading res_cache.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -1650,15 +1650,15 @@ int resolv_set_nameservers(unsigned netid, const std::vector<std::string>& serve uint8_t old_max_samples = netconfig->params.max_samples; netconfig->params = params; const int retryCount = Experiments::getInstance()->getFlag("retry_count", RES_DFLRETRY); const int retransmissionInterval = Experiments::getInstance()->getFlag("retransmission_time_interval", RES_TIMEOUT); // This check must always be true, but add a protection against OEMs configure negative values // for retry_count and base_timeout_msec. if (netconfig->params.retry_count == 0) { const int retryCount = Experiments::getInstance()->getFlag("retry_count", RES_DFLRETRY); netconfig->params.retry_count = (retryCount <= 0) ? RES_DFLRETRY : retryCount; } if (netconfig->params.base_timeout_msec == 0) { const int retransmissionInterval = Experiments::getInstance()->getFlag("retransmission_time_interval", RES_TIMEOUT); netconfig->params.base_timeout_msec = (retransmissionInterval <= 0) ? RES_TIMEOUT : retransmissionInterval; } Loading tests/resolv_integration_test.cpp +32 −39 Original line number Diff line number Diff line Loading @@ -7627,12 +7627,26 @@ TEST_F(ResolverMultinetworkTest, PerAppDefaultNetwork) { } } TEST_F(ResolverTest, NegativeValueInExperimentFlag_WithValidParams) { ScopedSystemProperties sp1(kRetransIntervalFlag, "-3000"); ScopedSystemProperties sp2(kRetryCountFlag, "-2"); TEST_F(ResolverTest, NegativeValueInExperimentFlag) { // Test setting up different retry count and BASE_TIMEOUT_MSEC in DNS server. const struct TestConfig { int retryCount; int baseTimeoutMsec; int expectedRetryCount; int expectedBaseTimeoutMsec; } TestConfigs[]{{2, 1000, 2, 1000}, {0, 0, RES_DFLRETRY, RES_TIMEOUT}}; for (const auto& config : TestConfigs) { SCOPED_TRACE(fmt::format("Setting up retryCount = {}, baseTimeoutMsec = {}", config.retryCount, config.baseTimeoutMsec)); // Initiate negative values in experiment flags. ScopedSystemProperties sp1(kRetryCountFlag, "-2"); ScopedSystemProperties sp2(kRetransIntervalFlag, "-3000"); resetNetwork(); ResolverParamsParcel setupParams = DnsResponderClient::GetDefaultResolverParamsParcel(); setupParams.retryCount = config.retryCount; setupParams.baseTimeoutMsec = config.baseTimeoutMsec; ASSERT_TRUE(mDnsClient.SetResolversFromParcel(setupParams)); std::vector<std::string> res_servers; Loading @@ -7642,31 +7656,10 @@ TEST_F(ResolverTest, NegativeValueInExperimentFlag_WithValidParams) { std::vector<ResolverStats> res_stats; int wait_for_pending_req_timeout_count; ASSERT_TRUE(DnsResponderClient::GetResolverInfo( mDnsClient.resolvService(), TEST_NETID, &res_servers, &res_domains, &res_tls_servers, &res_params, &res_stats, &wait_for_pending_req_timeout_count)); EXPECT_EQ(setupParams.retryCount, res_params.retry_count); EXPECT_EQ(setupParams.baseTimeoutMsec, res_params.base_timeout_msec); } TEST_F(ResolverTest, NegativeValueInExperimentFlag_WithZeroParams) { ScopedSystemProperties sp1(kRetransIntervalFlag, "-3000"); ScopedSystemProperties sp2(kRetryCountFlag, "-2"); resetNetwork(); ResolverParamsParcel setupParams = DnsResponderClient::GetDefaultResolverParamsParcel(); setupParams.retryCount = 0; setupParams.baseTimeoutMsec = 0; ASSERT_TRUE(mDnsClient.SetResolversFromParcel(setupParams)); mDnsClient.resolvService(), TEST_NETID, &res_servers, &res_domains, &res_tls_servers, &res_params, &res_stats, &wait_for_pending_req_timeout_count)); std::vector<std::string> res_servers; std::vector<std::string> res_domains; std::vector<std::string> res_tls_servers; res_params res_params; std::vector<ResolverStats> res_stats; int wait_for_pending_req_timeout_count; ASSERT_TRUE(DnsResponderClient::GetResolverInfo( mDnsClient.resolvService(), TEST_NETID, &res_servers, &res_domains, &res_tls_servers, &res_params, &res_stats, &wait_for_pending_req_timeout_count)); EXPECT_EQ(RES_DFLRETRY, res_params.retry_count); EXPECT_EQ(RES_TIMEOUT, res_params.base_timeout_msec); EXPECT_EQ(config.expectedRetryCount, res_params.retry_count); EXPECT_EQ(config.expectedBaseTimeoutMsec, res_params.base_timeout_msec); } } Loading
res_cache.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -1650,15 +1650,15 @@ int resolv_set_nameservers(unsigned netid, const std::vector<std::string>& serve uint8_t old_max_samples = netconfig->params.max_samples; netconfig->params = params; const int retryCount = Experiments::getInstance()->getFlag("retry_count", RES_DFLRETRY); const int retransmissionInterval = Experiments::getInstance()->getFlag("retransmission_time_interval", RES_TIMEOUT); // This check must always be true, but add a protection against OEMs configure negative values // for retry_count and base_timeout_msec. if (netconfig->params.retry_count == 0) { const int retryCount = Experiments::getInstance()->getFlag("retry_count", RES_DFLRETRY); netconfig->params.retry_count = (retryCount <= 0) ? RES_DFLRETRY : retryCount; } if (netconfig->params.base_timeout_msec == 0) { const int retransmissionInterval = Experiments::getInstance()->getFlag("retransmission_time_interval", RES_TIMEOUT); netconfig->params.base_timeout_msec = (retransmissionInterval <= 0) ? RES_TIMEOUT : retransmissionInterval; } Loading
tests/resolv_integration_test.cpp +32 −39 Original line number Diff line number Diff line Loading @@ -7627,12 +7627,26 @@ TEST_F(ResolverMultinetworkTest, PerAppDefaultNetwork) { } } TEST_F(ResolverTest, NegativeValueInExperimentFlag_WithValidParams) { ScopedSystemProperties sp1(kRetransIntervalFlag, "-3000"); ScopedSystemProperties sp2(kRetryCountFlag, "-2"); TEST_F(ResolverTest, NegativeValueInExperimentFlag) { // Test setting up different retry count and BASE_TIMEOUT_MSEC in DNS server. const struct TestConfig { int retryCount; int baseTimeoutMsec; int expectedRetryCount; int expectedBaseTimeoutMsec; } TestConfigs[]{{2, 1000, 2, 1000}, {0, 0, RES_DFLRETRY, RES_TIMEOUT}}; for (const auto& config : TestConfigs) { SCOPED_TRACE(fmt::format("Setting up retryCount = {}, baseTimeoutMsec = {}", config.retryCount, config.baseTimeoutMsec)); // Initiate negative values in experiment flags. ScopedSystemProperties sp1(kRetryCountFlag, "-2"); ScopedSystemProperties sp2(kRetransIntervalFlag, "-3000"); resetNetwork(); ResolverParamsParcel setupParams = DnsResponderClient::GetDefaultResolverParamsParcel(); setupParams.retryCount = config.retryCount; setupParams.baseTimeoutMsec = config.baseTimeoutMsec; ASSERT_TRUE(mDnsClient.SetResolversFromParcel(setupParams)); std::vector<std::string> res_servers; Loading @@ -7642,31 +7656,10 @@ TEST_F(ResolverTest, NegativeValueInExperimentFlag_WithValidParams) { std::vector<ResolverStats> res_stats; int wait_for_pending_req_timeout_count; ASSERT_TRUE(DnsResponderClient::GetResolverInfo( mDnsClient.resolvService(), TEST_NETID, &res_servers, &res_domains, &res_tls_servers, &res_params, &res_stats, &wait_for_pending_req_timeout_count)); EXPECT_EQ(setupParams.retryCount, res_params.retry_count); EXPECT_EQ(setupParams.baseTimeoutMsec, res_params.base_timeout_msec); } TEST_F(ResolverTest, NegativeValueInExperimentFlag_WithZeroParams) { ScopedSystemProperties sp1(kRetransIntervalFlag, "-3000"); ScopedSystemProperties sp2(kRetryCountFlag, "-2"); resetNetwork(); ResolverParamsParcel setupParams = DnsResponderClient::GetDefaultResolverParamsParcel(); setupParams.retryCount = 0; setupParams.baseTimeoutMsec = 0; ASSERT_TRUE(mDnsClient.SetResolversFromParcel(setupParams)); mDnsClient.resolvService(), TEST_NETID, &res_servers, &res_domains, &res_tls_servers, &res_params, &res_stats, &wait_for_pending_req_timeout_count)); std::vector<std::string> res_servers; std::vector<std::string> res_domains; std::vector<std::string> res_tls_servers; res_params res_params; std::vector<ResolverStats> res_stats; int wait_for_pending_req_timeout_count; ASSERT_TRUE(DnsResponderClient::GetResolverInfo( mDnsClient.resolvService(), TEST_NETID, &res_servers, &res_domains, &res_tls_servers, &res_params, &res_stats, &wait_for_pending_req_timeout_count)); EXPECT_EQ(RES_DFLRETRY, res_params.retry_count); EXPECT_EQ(RES_TIMEOUT, res_params.base_timeout_msec); EXPECT_EQ(config.expectedRetryCount, res_params.retry_count); EXPECT_EQ(config.expectedBaseTimeoutMsec, res_params.base_timeout_msec); } }