Index: chrome/browser/extensions/activity_log/activity_database_unittest.cc |
diff --git a/chrome/browser/extensions/activity_log/activity_database_unittest.cc b/chrome/browser/extensions/activity_log/activity_database_unittest.cc |
index cdd657875f9348ef2cc66f504af3fe591d3fc188..ee07d8a554e1e93866948de376d204d2450ba59b 100644 |
--- a/chrome/browser/extensions/activity_log/activity_database_unittest.cc |
+++ b/chrome/browser/extensions/activity_log/activity_database_unittest.cc |
@@ -13,10 +13,12 @@ |
#include "base/macros.h" |
#include "base/run_loop.h" |
#include "base/test/simple_test_clock.h" |
+#include "base/threading/thread_task_runner_handle.h" |
#include "base/time/time.h" |
#include "build/build_config.h" |
#include "chrome/browser/extensions/activity_log/activity_action_constants.h" |
#include "chrome/browser/extensions/activity_log/activity_database.h" |
+#include "chrome/browser/extensions/activity_log/activity_log_task_runner.h" |
#include "chrome/browser/extensions/activity_log/fullstream_ui_policy.h" |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/test_extension_system.h" |
@@ -26,11 +28,24 @@ |
#include "chrome/test/base/testing_profile.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/test/test_browser_thread.h" |
+#include "content/public/test/test_utils.h" |
#include "extensions/common/dom_action_types.h" |
#include "sql/statement.h" |
#include "testing/gtest/include/gtest/gtest.h" |
-using content::BrowserThread; |
+#define TEST_ON_ACTIVITY_LOG_RUNNER(test_class, test_name) \ |
Devlin
2017/07/12 19:30:36
gab@, I'm curious what you think of a pattern like
|
+ class test_class##_##test_name##_Runner : public test_class { \ |
+ public: \ |
+ void RunTest(); \ |
+ }; \ |
+ TEST_F(test_class##_##test_name##_Runner, test_name) { \ |
+ base::RunLoop run_loop; \ |
+ GetActivityLogTaskRunner()->PostTask( \ |
+ FROM_HERE, base::Bind(&test_class##_##test_name##_Runner::RunTest, \ |
+ base::Unretained(this))); \ |
+ content::RunAllBlockingPoolTasksUntilIdle(); \ |
+ } \ |
+ void test_class##_##test_name##_Runner::RunTest() |
namespace constants = activity_log_constants; |
@@ -134,6 +149,10 @@ class ActivityDatabaseTest : public ChromeRenderViewHostTestHarness { |
db_delegate_->Record(db, action); |
} |
+ int CountActions(ActivityDatabase* db, const std::string& api_name_pattern) { |
+ return CountActions(&db->db_, api_name_pattern); |
+ } |
+ |
int CountActions(sql::Connection* db, const std::string& api_name_pattern) { |
if (!db->DoesTableExist(ActivityDatabaseTestPolicy::kTableName)) |
return -1; |
@@ -148,12 +167,16 @@ class ActivityDatabaseTest : public ChromeRenderViewHostTestHarness { |
return statement.ColumnInt(0); |
} |
+ void RecordBatchedActions(ActivityDatabase* db) { |
+ db->RecordBatchedActionsWhileTesting(); |
+ } |
+ |
private: |
ActivityDatabaseTestPolicy* db_delegate_; |
}; |
// Check that the database is initialized properly. |
-TEST_F(ActivityDatabaseTest, Init) { |
+TEST_ON_ACTIVITY_LOG_RUNNER(ActivityDatabaseTest, Init) { |
base::ScopedTempDir temp_dir; |
base::FilePath db_file; |
ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
@@ -170,7 +193,7 @@ TEST_F(ActivityDatabaseTest, Init) { |
} |
// Check that actions are recorded in the db. |
-TEST_F(ActivityDatabaseTest, RecordAction) { |
+TEST_ON_ACTIVITY_LOG_RUNNER(ActivityDatabaseTest, RecordAction) { |
base::ScopedTempDir temp_dir; |
base::FilePath db_file; |
ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
@@ -189,7 +212,7 @@ TEST_F(ActivityDatabaseTest, RecordAction) { |
ASSERT_EQ(1, CountActions(&db, "brewster")); |
} |
-TEST_F(ActivityDatabaseTest, BatchModeOff) { |
+TEST_ON_ACTIVITY_LOG_RUNNER(ActivityDatabaseTest, BatchModeOff) { |
base::ScopedTempDir temp_dir; |
base::FilePath db_file; |
ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
@@ -202,12 +225,12 @@ TEST_F(ActivityDatabaseTest, BatchModeOff) { |
scoped_refptr<Action> action = CreateAction(base::Time::Now(), "brewster"); |
Record(activity_db, action); |
- ASSERT_EQ(1, CountActions(&activity_db->db_, "brewster")); |
+ ASSERT_EQ(1, CountActions(activity_db, "brewster")); |
activity_db->Close(); |
} |
-TEST_F(ActivityDatabaseTest, BatchModeOn) { |
+TEST_ON_ACTIVITY_LOG_RUNNER(ActivityDatabaseTest, BatchModeOn) { |
base::ScopedTempDir temp_dir; |
base::FilePath db_file; |
ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
@@ -219,17 +242,16 @@ TEST_F(ActivityDatabaseTest, BatchModeOn) { |
activity_db->SetBatchModeForTesting(true); |
scoped_refptr<Action> action = CreateAction(base::Time::Now(), "brewster"); |
Record(activity_db, action); |
- ASSERT_EQ(0, CountActions(&activity_db->db_, "brewster")); |
+ ASSERT_EQ(0, CountActions(activity_db, "brewster")); |
// Artificially trigger and then stop the timer. |
- activity_db->SetTimerForTesting(0); |
- base::RunLoop().RunUntilIdle(); |
Devlin
2017/07/12 19:30:36
We can remove this here because SetTimerForTesting
|
- ASSERT_EQ(1, CountActions(&activity_db->db_, "brewster")); |
+ RecordBatchedActions(activity_db); |
+ ASSERT_EQ(1, CountActions(activity_db, "brewster")); |
activity_db->Close(); |
} |
-TEST_F(ActivityDatabaseTest, BatchModeFlush) { |
+TEST_ON_ACTIVITY_LOG_RUNNER(ActivityDatabaseTest, BatchModeFlush) { |
base::ScopedTempDir temp_dir; |
base::FilePath db_file; |
ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
@@ -241,17 +263,17 @@ TEST_F(ActivityDatabaseTest, BatchModeFlush) { |
activity_db->SetBatchModeForTesting(true); |
scoped_refptr<Action> action = CreateAction(base::Time::Now(), "brewster"); |
Record(activity_db, action); |
- ASSERT_EQ(0, CountActions(&activity_db->db_, "brewster")); |
+ ASSERT_EQ(0, CountActions(activity_db, "brewster")); |
// Request an immediate database flush. |
activity_db->AdviseFlush(ActivityDatabase::kFlushImmediately); |
- ASSERT_EQ(1, CountActions(&activity_db->db_, "brewster")); |
+ ASSERT_EQ(1, CountActions(activity_db, "brewster")); |
activity_db->Close(); |
} |
// Check that nothing explodes if the DB isn't initialized. |
-TEST_F(ActivityDatabaseTest, InitFailure) { |
+TEST_ON_ACTIVITY_LOG_RUNNER(ActivityDatabaseTest, InitFailure) { |
base::ScopedTempDir temp_dir; |
base::FilePath db_file; |
ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |