Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1669)

Unified Diff: net/http/http_server_properties_manager_unittest.cc

Issue 2657013002: Introduce ThreadTaskRunnerHandle::OverrideForTesting and TestMockTimeTaskRunner::ScopedContext. (Closed)
Patch Set: fix RecentTabHelperTest crash? Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/http/http_server_properties_manager_unittest.cc
diff --git a/net/http/http_server_properties_manager_unittest.cc b/net/http/http_server_properties_manager_unittest.cc
index 0b9fb61c4e89f312bf9060b1956d2a63372d1700..35da22f80a630df82b799f7a1bcf91012f53752f 100644
--- a/net/http/http_server_properties_manager_unittest.cc
+++ b/net/http/http_server_properties_manager_unittest.cc
@@ -7,15 +7,16 @@
#include <memory>
#include <utility>
+#include "base/bind.h"
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
-#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
+#include "base/memory/ref_counted.h"
#include "base/single_thread_task_runner.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
+#include "base/test/scoped_mock_time_message_loop_task_runner.h"
#include "base/test/test_mock_time_task_runner.h"
#include "base/test/test_simple_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
@@ -81,12 +82,16 @@ class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
public:
TestingHttpServerPropertiesManager(
HttpServerPropertiesManager::PrefDelegate* pref_delegate,
- scoped_refptr<base::SingleThreadTaskRunner> pref_task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> net_task_runner)
+ scoped_refptr<TestMockTimeTaskRunner> pref_task_runner,
+ scoped_refptr<TestMockTimeTaskRunner> net_task_runner)
: HttpServerPropertiesManager(pref_delegate,
pref_task_runner,
- net_task_runner) {
- InitializeOnNetworkThread();
+ net_task_runner),
+ pref_task_runner_(std::move(pref_task_runner)),
+ net_task_runner_(std::move(net_task_runner)) {
+ // This call must run in the context of |net_task_runner_|.
+ TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_);
+ HttpServerPropertiesManager::InitializeOnNetworkThread();
}
~TestingHttpServerPropertiesManager() override {}
@@ -95,19 +100,23 @@ class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread;
void UpdateCacheFromPrefsOnUIConcrete() {
+ TestMockTimeTaskRunner::ScopedContext scoped_context(pref_task_runner_);
HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread();
}
void UpdatePrefsFromCacheOnNetworkThreadConcrete(
const base::Closure& callback) {
+ TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_);
HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback);
}
void ScheduleUpdatePrefsOnNetworkThreadConcrete(Location location) {
+ TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_);
HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(location);
}
- void ScheduleUpdatePrefsOnNetworkThread() {
+ void ScheduleUpdatePrefsOnNetworkThreadDefault() {
+ TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_);
// Picked a random Location as caller.
HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(
DETECTED_CORRUPTED_PREFS);
@@ -132,6 +141,11 @@ class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
const base::Closure& completion));
private:
+ // References to the underlying task runners, used to simulate running in
+ // their contexts where required.
+ scoped_refptr<TestMockTimeTaskRunner> pref_task_runner_;
+ scoped_refptr<TestMockTimeTaskRunner> net_task_runner_;
+
DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager);
};
@@ -143,50 +157,36 @@ static const int kHttpServerPropertiesVersions[] = {3, 4, 5};
class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> {
protected:
- HttpServerPropertiesManagerTest()
- : pref_test_task_runner_(new TestMockTimeTaskRunner()),
- net_test_task_runner_(new TestMockTimeTaskRunner()) {}
+ HttpServerPropertiesManagerTest() = default;
void SetUp() override {
one_day_from_now_ = base::Time::Now() + base::TimeDelta::FromDays(1);
pref_delegate_ = new MockPrefDelegate;
http_server_props_manager_.reset(
new StrictMock<TestingHttpServerPropertiesManager>(
- pref_delegate_, pref_test_task_runner_, net_test_task_runner_));
+ pref_delegate_, pref_test_task_runner_.task_runner(),
+ net_test_task_runner_));
EXPECT_FALSE(http_server_props_manager_->IsInitialized());
ExpectCacheUpdate();
EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
- pref_test_task_runner_->FastForwardUntilNoTasksRemain();
- // InitializeOnNetworkThread() is called from the test thread, so
- // PostTaskAndReply() will post back to the test thread.
- // TODO(xunjieli): Fix this in a follow-up so we can use
- // |net_test_task_runner_|->RunUntilIdle().
- base::RunLoop().RunUntilIdle();
+ pref_test_task_runner_->RunUntilIdle();
+ net_test_task_runner_->RunUntilIdle();
EXPECT_TRUE(http_server_props_manager_->IsInitialized());
EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
}
- void SetUpWithNonTaskRunner() {
- pref_delegate_ = new MockPrefDelegate;
- http_server_props_manager_.reset(
- new StrictMock<TestingHttpServerPropertiesManager>(
- pref_delegate_, base::ThreadTaskRunnerHandle::Get(),
- net_test_task_runner_));
-
- EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
- ExpectCacheUpdate();
- base::RunLoop().RunUntilIdle();
- EXPECT_TRUE(http_server_props_manager_->IsInitialized());
- }
-
void TearDown() override {
if (http_server_props_manager_.get())
http_server_props_manager_->ShutdownOnPrefThread();
- base::RunLoop().RunUntilIdle();
- pref_test_task_runner_->FastForwardUntilNoTasksRemain();
- net_test_task_runner_->FastForwardUntilNoTasksRemain();
+ // Run pending non-delayed tasks but don't FastForwardUntilNoTasksRemain()
+ // as some delayed tasks may forever repost (e.g. because impl doesn't use a
+ // mock clock and doesn't see timings as having expired, ref.
+ // HttpServerPropertiesImpl::
+ // ScheduleBrokenAlternateProtocolMappingsExpiration()).
+ pref_test_task_runner_->RunUntilIdle();
+ net_test_task_runner_->RunUntilIdle();
http_server_props_manager_.reset();
}
@@ -234,8 +234,16 @@ class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> {
std::unique_ptr<TestingHttpServerPropertiesManager>
http_server_props_manager_;
base::Time one_day_from_now_;
- scoped_refptr<TestMockTimeTaskRunner> pref_test_task_runner_;
- scoped_refptr<TestMockTimeTaskRunner> net_test_task_runner_;
+
+ // Overrides the main thread's message loop with a mock tick clock. Making the
+ // main thread the |pref_test_task_runner_| matches expectations better than
+ // having an independent TestMockTimeTaskRunner and makes tests easier to
+ // write.
+ base::ScopedMockTimeMessageLoopTaskRunner pref_test_task_runner_;
+
+ // Mock the net task runner as well.
+ scoped_refptr<TestMockTimeTaskRunner> net_test_task_runner_ =
+ new TestMockTimeTaskRunner;
private:
DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest);
@@ -655,8 +663,6 @@ TEST_P(HttpServerPropertiesManagerTest, SupportsSpdy) {
// completed.
TEST_P(HttpServerPropertiesManagerTest,
SinglePrefUpdateForTwoSpdyServerCacheChanges) {
- // Keep this in sync with http_server_properties_manager.cc
- const int64_t kUpdatePrefsDelayMs = 60000;
ExpectPrefsUpdate(2);
ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(3);
@@ -669,9 +675,10 @@ TEST_P(HttpServerPropertiesManagerTest,
// The pref update task should be scheduled to network thread.
EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
- // Move forward the task runner with kUpdatePrefsDelayMs/2.
+ // Move forward the task runner short by 20ms.
net_test_task_runner_->FastForwardBy(
- base::TimeDelta::FromMilliseconds(kUpdatePrefsDelayMs / 2));
+ HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting() -
+ base::TimeDelta::FromMilliseconds(20));
// Set another spdy server to trigger another call to
// ScheduleUpdatePrefsOnNetworkThread. There should be no new update posted to
@@ -681,9 +688,8 @@ TEST_P(HttpServerPropertiesManagerTest,
EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
- // Forward another kUpdatePrefsDelayMs/2. The pref update should be executed.
- net_test_task_runner_->FastForwardBy(
- base::TimeDelta::FromMilliseconds(kUpdatePrefsDelayMs / 2));
+ // Move forward the extra 20ms. The pref update should be executed.
+ net_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20));
EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
pref_test_task_runner_->FastForwardUntilNoTasksRemain();
@@ -802,38 +808,50 @@ TEST_P(HttpServerPropertiesManagerTest, SetAlternativeServicesEmpty) {
TEST_P(HttpServerPropertiesManagerTest, ConfirmAlternativeService) {
ExpectPrefsUpdate(1);
- url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80);
- EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
- AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", 443);
-
- ExpectScheduleUpdatePrefsOnNetworkThread();
- http_server_props_manager_->SetAlternativeService(
- spdy_server_mail, alternative_service, one_day_from_now_);
-
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
- alternative_service));
-
- ExpectScheduleUpdatePrefsOnNetworkThread();
- http_server_props_manager_->MarkAlternativeServiceBroken(alternative_service);
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
- alternative_service));
-
- ExpectScheduleUpdatePrefsOnNetworkThread();
- http_server_props_manager_->ConfirmAlternativeService(alternative_service);
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
- alternative_service));
- // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once.
- http_server_props_manager_->ConfirmAlternativeService(alternative_service);
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
- alternative_service));
+ url::SchemeHostPort spdy_server_mail;
+ AlternativeService alternative_service;
+
+ {
+ TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_);
+
+ spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80);
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
+ alternative_service =
+ AlternativeService(kProtoHTTP2, "mail.google.com", 443);
+
+ ExpectScheduleUpdatePrefsOnNetworkThread();
+ http_server_props_manager_->SetAlternativeService(
+ spdy_server_mail, alternative_service, one_day_from_now_);
+
+ EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
+ alternative_service));
+ EXPECT_FALSE(
+ http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ alternative_service));
+
+ ExpectScheduleUpdatePrefsOnNetworkThread();
+ http_server_props_manager_->MarkAlternativeServiceBroken(
+ alternative_service);
+ EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
+ alternative_service));
+ EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ alternative_service));
+
+ ExpectScheduleUpdatePrefsOnNetworkThread();
+ http_server_props_manager_->ConfirmAlternativeService(alternative_service);
+ EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
+ alternative_service));
+ EXPECT_FALSE(
+ http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ alternative_service));
+ // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once.
+ http_server_props_manager_->ConfirmAlternativeService(alternative_service);
+ EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
+ alternative_service));
+ EXPECT_FALSE(
+ http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ alternative_service));
+ }
// Run the task.
EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
@@ -846,10 +864,14 @@ TEST_P(HttpServerPropertiesManagerTest, ConfirmAlternativeService) {
Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
- alternative_service));
+ {
+ TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_);
+ EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
+ alternative_service));
+ EXPECT_FALSE(
+ http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ alternative_service));
+ }
}
TEST_P(HttpServerPropertiesManagerTest, SupportsQuic) {
@@ -939,31 +961,33 @@ TEST_P(HttpServerPropertiesManagerTest, QuicServerInfo) {
}
TEST_P(HttpServerPropertiesManagerTest, Clear) {
- // This task expect to run the QuitWhenIdleClosure in the current thread,
- // thus can not mock the pref task runner.
- SetUpWithNonTaskRunner();
-
ExpectPrefsUpdate(1);
ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(5);
- url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
- http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
- AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", 1234);
- http_server_props_manager_->SetAlternativeService(
- spdy_server, alternative_service, one_day_from_now_);
- IPAddress actual_address(127, 0, 0, 1);
- http_server_props_manager_->SetSupportsQuic(true, actual_address);
- ServerNetworkStats stats;
- stats.srtt = base::TimeDelta::FromMicroseconds(10);
- http_server_props_manager_->SetServerNetworkStats(spdy_server, stats);
-
- QuicServerId mail_quic_server_id("mail.google.com", 80);
- std::string quic_server_info1("quic_server_info1");
- http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
- quic_server_info1);
+ const url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
+ const IPAddress actual_address(127, 0, 0, 1);
+ const QuicServerId mail_quic_server_id("mail.google.com", 80);
+ const std::string quic_server_info1("quic_server_info1");
+
+ {
+ TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_);
+
+ http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
+ AlternativeService alternative_service(kProtoHTTP2, "mail.google.com",
+ 1234);
+ http_server_props_manager_->SetAlternativeService(
+ spdy_server, alternative_service, one_day_from_now_);
+ http_server_props_manager_->SetSupportsQuic(true, actual_address);
+ ServerNetworkStats stats;
+ stats.srtt = base::TimeDelta::FromMicroseconds(10);
+ http_server_props_manager_->SetServerNetworkStats(spdy_server, stats);
+
+ http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
+ quic_server_info1);
+ }
// Run the task.
- base::RunLoop().RunUntilIdle();
+ EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
EXPECT_TRUE(net_test_task_runner_->HasPendingTask());
net_test_task_runner_->FastForwardUntilNoTasksRemain();
EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
@@ -983,10 +1007,14 @@ TEST_P(HttpServerPropertiesManagerTest, Clear) {
ExpectPrefsUpdate(1);
- // Clear http server data, time out if we do not get a completion callback.
- http_server_props_manager_->Clear(base::MessageLoop::QuitWhenIdleClosure());
-
- base::RunLoop().Run();
+ // Clear http server data and run the ensuing non-delayed prefs update.
+ {
+ TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_);
+ http_server_props_manager_->Clear();
+ }
+ EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
+ pref_test_task_runner_->RunUntilIdle();
+ EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
EXPECT_FALSE(
@@ -1186,8 +1214,6 @@ TEST_P(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) {
TEST_P(HttpServerPropertiesManagerTest,
SingleCacheUpdateForMultipleUpdatesScheduled) {
- // Keep this in sync with http_server_properties_manager.cc
- const int64_t kUpdateCacheDelayMs = 1000;
// Update cache.
ExpectCacheUpdate();
@@ -1196,17 +1222,17 @@ TEST_P(HttpServerPropertiesManagerTest,
http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount());
- // Move forward the task runner kUpdateCacheDelayMs/2.
+ // Move forward the task runner short by 20ms.
pref_test_task_runner_->FastForwardBy(
- base::TimeDelta::FromMilliseconds(kUpdateCacheDelayMs / 2));
+ HttpServerPropertiesManager::GetUpdateCacheDelayForTesting() -
+ base::TimeDelta::FromMilliseconds(20));
// Schedule a new cache update within the time window should be a no-op.
http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount());
- // Move forward the task runner kUpdateCaceDelayMs/2, now the cache update
- // should be exectured.
- pref_test_task_runner_->FastForwardBy(
- base::TimeDelta::FromMilliseconds(kUpdateCacheDelayMs / 2));
+ // Move forward the task runner the extra 20ms, now the cache update should be
+ // executed.
+ pref_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20));
// Since this test has no pref corruption, there shouldn't be any pref update.
EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
@@ -1295,44 +1321,56 @@ TEST_P(HttpServerPropertiesManagerTest,
DoNotPersistExpiredOrBrokenAlternativeService) {
ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(2);
- AlternativeServiceInfoVector alternative_service_info_vector;
-
- const AlternativeService broken_alternative_service(
- kProtoHTTP2, "broken.example.com", 443);
- const base::Time time_one_day_later =
- base::Time::Now() + base::TimeDelta::FromDays(1);
- alternative_service_info_vector.push_back(
- AlternativeServiceInfo(broken_alternative_service, time_one_day_later));
- // #1: MarkAlternativeServiceBroken().
- http_server_props_manager_->MarkAlternativeServiceBroken(
- broken_alternative_service);
-
- const AlternativeService expired_alternative_service(
- kProtoHTTP2, "expired.example.com", 443);
- const base::Time time_one_day_ago =
- base::Time::Now() - base::TimeDelta::FromDays(1);
- alternative_service_info_vector.push_back(
- AlternativeServiceInfo(expired_alternative_service, time_one_day_ago));
-
- const AlternativeService valid_alternative_service(kProtoHTTP2,
- "valid.example.com", 443);
- alternative_service_info_vector.push_back(
- AlternativeServiceInfo(valid_alternative_service, time_one_day_later));
-
- const url::SchemeHostPort server("https", "www.example.com", 443);
- // #2: SetAlternativeService().
- ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
- server, alternative_service_info_vector));
+ {
+ TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_);
+
+ AlternativeServiceInfoVector alternative_service_info_vector;
+
+ const AlternativeService broken_alternative_service(
+ kProtoHTTP2, "broken.example.com", 443);
+ const base::Time time_one_day_later =
+ base::Time::Now() + base::TimeDelta::FromDays(1);
+ alternative_service_info_vector.push_back(
+ AlternativeServiceInfo(broken_alternative_service, time_one_day_later));
+ // #1: MarkAlternativeServiceBroken().
+ http_server_props_manager_->MarkAlternativeServiceBroken(
+ broken_alternative_service);
+
+ const AlternativeService expired_alternative_service(
+ kProtoHTTP2, "expired.example.com", 443);
+ const base::Time time_one_day_ago =
+ base::Time::Now() - base::TimeDelta::FromDays(1);
+ alternative_service_info_vector.push_back(
+ AlternativeServiceInfo(expired_alternative_service, time_one_day_ago));
+
+ const AlternativeService valid_alternative_service(
+ kProtoHTTP2, "valid.example.com", 443);
+ alternative_service_info_vector.push_back(
+ AlternativeServiceInfo(valid_alternative_service, time_one_day_later));
+
+ const url::SchemeHostPort server("https", "www.example.com", 443);
+ // #2: SetAlternativeService().
+ ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
+ server, alternative_service_info_vector));
+ }
// Update cache.
ExpectPrefsUpdate(1);
EXPECT_TRUE(net_test_task_runner_->HasPendingTask());
EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
- net_test_task_runner_->FastForwardUntilNoTasksRemain();
+
+ // |net_test_task_runner_| has a remaining pending task to expire
+ // |broken_alternative_service| |time_one_day_later| (and the impl uses
+ // TimeTicks::Now() without a mock clock so FastForwardUntilNoTasksRemain()
+ // would result in an infinite loop).
+ net_test_task_runner_->FastForwardBy(
+ HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting());
+ EXPECT_EQ(1U, net_test_task_runner_->GetPendingTaskCount());
+
EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
pref_test_task_runner_->FastForwardUntilNoTasksRemain();
- EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
+ EXPECT_EQ(1U, net_test_task_runner_->GetPendingTaskCount());
EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
const base::DictionaryValue& pref_dict =
@@ -1457,7 +1495,7 @@ TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdateCache2) {
//
TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs0) {
// Post an update task to the IO thread.
- http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread();
+ http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThreadDefault();
// Shutdown comes before the task is executed.
http_server_props_manager_->ShutdownOnPrefThread();
http_server_props_manager_.reset();
@@ -1472,7 +1510,7 @@ TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs0) {
TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs1) {
ExpectPrefsUpdate(1);
// Post an update task.
- http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread();
+ http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThreadDefault();
// Shutdown comes before the task is executed.
http_server_props_manager_->ShutdownOnPrefThread();
// Run the task after shutdown, but before deletion.

Powered by Google App Engine
This is Rietveld 408576698