Index: chrome/browser/chromeos/gdata/gdata_sync_client_unittest.cc |
diff --git a/chrome/browser/chromeos/gdata/gdata_sync_client_unittest.cc b/chrome/browser/chromeos/gdata/gdata_sync_client_unittest.cc |
index 14dcfd299437f972361262dff34a17b6caed52bf..892fc518e44c0ef09d1415dc5ade0cc32f951a2e 100644 |
--- a/chrome/browser/chromeos/gdata/gdata_sync_client_unittest.cc |
+++ b/chrome/browser/chromeos/gdata/gdata_sync_client_unittest.cc |
@@ -37,10 +37,11 @@ class GDataSyncClientTest : public testing::Test { |
public: |
GDataSyncClientTest() |
: ui_thread_(content::BrowserThread::UI, &message_loop_), |
+ io_thread_(content::BrowserThread::IO), |
+ sequence_token_( |
+ content::BrowserThread::GetBlockingPool()->GetSequenceToken()), |
profile_(new TestingProfile), |
mock_file_system_(new MockGDataFileSystem), |
- sync_client_(new GDataSyncClient(profile_.get(), |
- mock_file_system_.get())), |
mock_network_library_(NULL) { |
} |
@@ -51,14 +52,23 @@ class GDataSyncClientTest : public testing::Test { |
mock_network_library_ = new chromeos::MockNetworkLibrary; |
chromeos::CrosLibrary::Get()->GetTestApi()->SetNetworkLibrary( |
mock_network_library_, true); |
- EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver( |
- sync_client_.get())).Times(1); |
- EXPECT_CALL(*mock_network_library_, RemoveNetworkManagerObserver( |
- sync_client_.get())).Times(1); |
// Create a temporary directory. |
ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
+ // Initialize the sync client. |
+ cache_.reset(GDataCache::CreateGDataCache( |
+ temp_dir_.path(), |
+ content::BrowserThread::GetBlockingPool(), |
+ sequence_token_).release()); |
+ sync_client_.reset(new GDataSyncClient(profile_.get(), |
+ mock_file_system_.get(), |
+ cache_.get())); |
+ |
+ EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver( |
+ sync_client_.get())).Times(1); |
+ EXPECT_CALL(*mock_network_library_, RemoveNetworkManagerObserver( |
+ sync_client_.get())).Times(1); |
EXPECT_CALL(*mock_file_system_, AddObserver(sync_client_.get())) |
.Times(1); |
EXPECT_CALL(*mock_file_system_, RemoveObserver(sync_client_.get())) |
@@ -72,6 +82,23 @@ class GDataSyncClientTest : public testing::Test { |
// client registers itself as observer of NetworkLibrary. |
sync_client_.reset(); |
chromeos::CrosLibrary::Shutdown(); |
+ content::BrowserThread::GetBlockingPool() |
+ ->GetSequencedTaskRunner(sequence_token_)->PostTask( |
+ FROM_HERE, |
+ base::Bind(&base::DeletePointer<GDataCache>, cache_.release())); |
+ RunAllPendingForIO(); |
+ } |
+ |
+ // Used to wait for the result from an operation that involves file IO, |
+ // that runs on the blocking pool thread. |
+ void RunAllPendingForIO() { |
+ // We should first flush tasks on UI thread, as it can require some |
+ // tasks to be run before IO tasks start. |
+ message_loop_.RunAllPending(); |
+ content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
+ // Once IO tasks are done, flush UI thread again so the results from IO |
+ // tasks are processed. |
+ message_loop_.RunAllPending(); |
} |
// Sets up MockNetworkLibrary as if it's connected to wifi network. |
@@ -124,21 +151,26 @@ class GDataSyncClientTest : public testing::Test { |
// Sets up test files in the temporary directory. |
void SetUpTestFiles() { |
+ // Create a directory in the temporary directory for pinned files. |
+ const FilePath pinned_dir = |
+ cache_->GetCacheDirectoryPath(GDataCache::CACHE_TYPE_PINNED); |
+ ASSERT_TRUE(file_util::CreateDirectory(pinned_dir)); |
+ |
// Create a symlink in the temporary directory to /dev/null. |
// We'll collect this resource ID as a file to be fetched. |
ASSERT_TRUE( |
file_util::CreateSymbolicLink( |
FilePath::FromUTF8Unsafe("/dev/null"), |
- temp_dir_.path().Append("resource_id_not_fetched_foo"))); |
+ pinned_dir.Append("resource_id_not_fetched_foo"))); |
// Create some more. |
ASSERT_TRUE( |
file_util::CreateSymbolicLink( |
FilePath::FromUTF8Unsafe("/dev/null"), |
- temp_dir_.path().Append("resource_id_not_fetched_bar"))); |
+ pinned_dir.Append("resource_id_not_fetched_bar"))); |
ASSERT_TRUE( |
file_util::CreateSymbolicLink( |
FilePath::FromUTF8Unsafe("/dev/null"), |
- temp_dir_.path().Append("resource_id_not_fetched_baz"))); |
+ pinned_dir.Append("resource_id_not_fetched_baz"))); |
// Create a symlink in the temporary directory to a test file |
// We won't collect this resource ID, as it already exists. |
@@ -149,7 +181,7 @@ class GDataSyncClientTest : public testing::Test { |
ASSERT_TRUE( |
file_util::CreateSymbolicLink( |
test_file_path, |
- temp_dir_.path().Append("resource_id_fetched"))); |
+ pinned_dir.Append("resource_id_fetched"))); |
} |
// Called when StartInitialScan() is complete. |
@@ -172,9 +204,12 @@ class GDataSyncClientTest : public testing::Test { |
protected: |
MessageLoopForUI message_loop_; |
content::TestBrowserThread ui_thread_; |
+ content::TestBrowserThread io_thread_; |
+ const base::SequencedWorkerPool::SequenceToken sequence_token_; |
ScopedTempDir temp_dir_; |
scoped_ptr<TestingProfile> profile_; |
scoped_ptr<MockGDataFileSystem> mock_file_system_; |
+ scoped_ptr<GDataCache> cache_; |
scoped_ptr<GDataSyncClient> sync_client_; |
chromeos::MockNetworkLibrary* mock_network_library_; |
scoped_ptr<chromeos::Network> active_network_; |
@@ -183,10 +218,6 @@ class GDataSyncClientTest : public testing::Test { |
TEST_F(GDataSyncClientTest, StartInitialScan) { |
SetUpTestFiles(); |
- EXPECT_CALL(*mock_file_system_, GetCacheDirectoryPath( |
- GDataCache::CACHE_TYPE_PINNED)) |
- .WillOnce(Return(temp_dir_.path())); |
- |
sync_client_->StartInitialScan( |
base::Bind(&GDataSyncClientTest::OnInitialScanComplete, |
base::Unretained(this))); |