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

Side by Side Diff: chrome/browser/chromeos/drive/drive_cache_unittest.cc

Issue 11275303: chromeos: Stop creating symlinks in DriveCacheTest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: _ Created 8 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/drive/drive_cache.h" 5 #include "chrome/browser/chromeos/drive/drive_cache.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 13 matching lines...) Expand all
24 24
25 using ::testing::AtLeast; 25 using ::testing::AtLeast;
26 using ::testing::Return; 26 using ::testing::Return;
27 using ::testing::StrictMock; 27 using ::testing::StrictMock;
28 28
29 namespace drive { 29 namespace drive {
30 namespace { 30 namespace {
31 31
32 const char kSymLinkToDevNull[] = "/dev/null"; 32 const char kSymLinkToDevNull[] = "/dev/null";
33 33
34 struct InitialCacheResource { 34 struct TestCacheResource {
35 const char* source_file; // Source file to be used for cache. 35 const char* source_file;
36 const char* resource_id; // Resource id of cache file. 36 const char* resource_id;
37 const char* md5; // MD5 of cache file. 37 const char* md5;
38 int cache_state; // Cache state of cache file. 38 bool is_pinned;
39 const char* expected_file_extension; // Expected extension of cached file. 39 bool is_dirty;
40 // Expected CacheSubDirectoryType of cached file. 40 } const test_cache_resources[] = {
41 DriveCache::CacheSubDirectoryType expected_sub_dir_type;
42 } const initial_cache_resources[] = {
43 // Cache resource in tmp dir, i.e. not pinned or dirty. 41 // Cache resource in tmp dir, i.e. not pinned or dirty.
44 { "gdata/root_feed.json", "tmp:resource_id", "md5_tmp_alphanumeric", 42 { "gdata/root_feed.json", "tmp:resource_id", "md5_tmp_alphanumeric",
45 test_util::TEST_CACHE_STATE_PRESENT, 43 false, false },
46 "md5_tmp_alphanumeric", DriveCache::CACHE_TYPE_TMP },
47 // Cache resource in tmp dir, i.e. not pinned or dirty, with resource_id 44 // Cache resource in tmp dir, i.e. not pinned or dirty, with resource_id
48 // containing non-alphanumeric characters, to test resource_id is escaped and 45 // containing non-alphanumeric characters.
49 // unescaped correctly.
50 { "gdata/subdir_feed.json", "tmp:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?", 46 { "gdata/subdir_feed.json", "tmp:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?",
51 "md5_tmp_non_alphanumeric", 47 "md5_tmp_non_alphanumeric", false, false },
52 test_util::TEST_CACHE_STATE_PRESENT, 48 // Cache resource that is pinned and persistent.
53 "md5_tmp_non_alphanumeric", DriveCache::CACHE_TYPE_TMP },
54 // Cache resource that is pinned, to test a pinned file is in persistent dir
55 // with a symlink in pinned dir referencing it.
56 { "gdata/directory_entry_atom.json", "pinned:existing", "md5_pinned_existing", 49 { "gdata/directory_entry_atom.json", "pinned:existing", "md5_pinned_existing",
57 test_util::TEST_CACHE_STATE_PRESENT | 50 true, false },
58 test_util::TEST_CACHE_STATE_PINNED | 51 // Cache resource with a non-existent source file that is pinned.
59 test_util::TEST_CACHE_STATE_PERSISTENT, 52 { "", "pinned:non-existent", "md5_pinned_non_existent", true, false },
60 "md5_pinned_existing", DriveCache::CACHE_TYPE_PERSISTENT }, 53 // Cache resource that is dirty.
61 // Cache resource with a non-existent source file that is pinned, to test that
62 // a pinned file can reference a non-existent file.
63 { "", "pinned:non-existent", "md5_pinned_non_existent",
64 test_util::TEST_CACHE_STATE_PINNED,
65 "md5_pinned_non_existent", DriveCache::CACHE_TYPE_TMP },
66 // Cache resource that is dirty, to test a dirty file is in persistent dir
67 // with a symlink in outgoing dir referencing it.
68 { "gdata/account_metadata.json", "dirty:existing", "md5_dirty_existing", 54 { "gdata/account_metadata.json", "dirty:existing", "md5_dirty_existing",
69 test_util::TEST_CACHE_STATE_PRESENT | 55 false, true },
70 test_util::TEST_CACHE_STATE_DIRTY | 56 // Cache resource that is pinned and dirty.
71 test_util::TEST_CACHE_STATE_PERSISTENT,
72 "local", DriveCache::CACHE_TYPE_PERSISTENT },
73 // Cache resource that is pinned and dirty, to test a dirty pinned file is in
74 // persistent dir with symlink in pinned and outgoing dirs referencing it.
75 { "gdata/basic_feed.json", "dirty_and_pinned:existing", 57 { "gdata/basic_feed.json", "dirty_and_pinned:existing",
76 "md5_dirty_and_pinned_existing", 58 "md5_dirty_and_pinned_existing", true, true },
77 test_util::TEST_CACHE_STATE_PRESENT |
78 test_util::TEST_CACHE_STATE_PINNED |
79 test_util::TEST_CACHE_STATE_DIRTY |
80 test_util::TEST_CACHE_STATE_PERSISTENT,
81 "local", DriveCache::CACHE_TYPE_PERSISTENT },
82 }; 59 };
83 60
84 const int64 kLotsOfSpace = kMinFreeSpace * 10; 61 const int64 kLotsOfSpace = kMinFreeSpace * 10;
85 62
86 struct PathToVerify { 63 struct PathToVerify {
87 PathToVerify(const FilePath& in_path_to_scan, 64 PathToVerify(const FilePath& in_path_to_scan,
88 const FilePath& in_expected_existing_path) : 65 const FilePath& in_expected_existing_path) :
89 path_to_scan(in_path_to_scan), 66 path_to_scan(in_path_to_scan),
90 expected_existing_path(in_expected_existing_path) { 67 expected_existing_path(in_expected_existing_path) {
91 } 68 }
(...skipping 20 matching lines...) Expand all
112 // Called upon completion of Iterate(). 89 // Called upon completion of Iterate().
113 void OnIterateCompleted(bool* out_is_called) { 90 void OnIterateCompleted(bool* out_is_called) {
114 *out_is_called = true; 91 *out_is_called = true;
115 } 92 }
116 93
117 // Copies results from ClearAll. 94 // Copies results from ClearAll.
118 void OnClearAll(bool* out_success, bool success) { 95 void OnClearAll(bool* out_success, bool success) {
119 *out_success = success; 96 *out_success = success;
120 } 97 }
121 98
99 // Used as a CacheOperationCallback to copy results from DriveCache methods.
100 void OnCacheOperation(DriveFileError* out_error,
101 std::string* out_resource_id,
102 std::string* out_md5,
103 DriveFileError error,
104 const std::string& resource_id,
105 const std::string& md5) {
106 *out_error = error;
107 *out_resource_id = resource_id;
108 *out_md5 = md5;
109 }
110
111 // Used as a GetFileFromCacheCallback to copy results from DriveCache methods.
112 void OnGetFile(DriveFileError* out_error,
113 FilePath* out_cache_file_path,
114 DriveFileError error,
115 const FilePath& cache_file_path) {
116 *out_error = error;
117 *out_cache_file_path = cache_file_path;
118 }
119
122 } // namespace 120 } // namespace
123 121
124 class DriveCacheTest : public testing::Test { 122 class DriveCacheTest : public testing::Test {
125 protected: 123 protected:
126 DriveCacheTest() 124 DriveCacheTest()
127 : ui_thread_(content::BrowserThread::UI, &message_loop_), 125 : ui_thread_(content::BrowserThread::UI, &message_loop_),
128 io_thread_(content::BrowserThread::IO), 126 io_thread_(content::BrowserThread::IO),
129 cache_(NULL), 127 cache_(NULL),
130 num_callback_invocations_(0), 128 num_callback_invocations_(0),
131 expected_error_(DRIVE_FILE_OK), 129 expected_error_(DRIVE_FILE_OK),
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 162
165 virtual void TearDown() OVERRIDE { 163 virtual void TearDown() OVERRIDE {
166 SetFreeDiskSpaceGetterForTesting(NULL); 164 SetFreeDiskSpaceGetterForTesting(NULL);
167 cache_->Destroy(); 165 cache_->Destroy();
168 // The cache destruction requires to post a task to the blocking pool. 166 // The cache destruction requires to post a task to the blocking pool.
169 google_apis::test_util::RunBlockingPoolTask(); 167 google_apis::test_util::RunBlockingPoolTask();
170 168
171 profile_.reset(NULL); 169 profile_.reset(NULL);
172 } 170 }
173 171
174 void PrepareForInitCacheTest() { 172 void PrepareTestCacheResources() {
175 DVLOG(1) << "PrepareForInitCacheTest start"; 173 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
176 // Create drive cache sub directories. 174 .WillRepeatedly(Return(kLotsOfSpace));
177 ASSERT_TRUE(file_util::CreateDirectory(
178 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_PERSISTENT)));
179 ASSERT_TRUE(file_util::CreateDirectory(
180 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_TMP)));
181 ASSERT_TRUE(file_util::CreateDirectory(
182 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_PINNED)));
183 ASSERT_TRUE(file_util::CreateDirectory(
184 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_OUTGOING)));
185 175
186 // Dump some files into cache dirs so that 176 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cache_resources); ++i) {
187 // DriveFileSystem::InitializeCacheOnBlockingPool would scan through them 177 const struct TestCacheResource& resource = test_cache_resources[i];
188 // and populate cache map accordingly. 178 // Copy file from data dir to cache.
189 179 if (!std::string(resource.source_file).empty()) {
190 // Copy files from data dir to cache dir to act as cached files.
191 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) {
192 const struct InitialCacheResource& resource = initial_cache_resources[i];
193 // Determine drive cache file absolute path according to cache state.
194 FilePath dest_path = cache_->GetCacheFilePath(
195 resource.resource_id,
196 resource.md5,
197 test_util::ToCacheEntry(resource.cache_state).is_pinned() ||
198 test_util::ToCacheEntry(resource.cache_state).is_dirty() ?
199 DriveCache::CACHE_TYPE_PERSISTENT :
200 DriveCache::CACHE_TYPE_TMP,
201 test_util::ToCacheEntry(resource.cache_state).is_dirty() ?
202 DriveCache::CACHED_FILE_LOCALLY_MODIFIED :
203 DriveCache::CACHED_FILE_FROM_SERVER);
204
205 // Copy file from data dir to cache subdir, naming it per cache files
206 // convention.
207 if (test_util::ToCacheEntry(resource.cache_state).is_present()) {
208 FilePath source_path = 180 FilePath source_path =
209 google_apis::test_util::GetTestFilePath(resource.source_file); 181 google_apis::test_util::GetTestFilePath(resource.source_file);
210 ASSERT_TRUE(file_util::CopyFile(source_path, dest_path)); 182
211 } else { 183 DriveFileError error = DRIVE_FILE_OK;
212 dest_path = FilePath(FILE_PATH_LITERAL(kSymLinkToDevNull)); 184 std::string resource_id;
185 std::string md5;
186 cache_->Store(resource.resource_id,
187 resource.md5,
188 source_path,
189 DriveCache::FILE_OPERATION_COPY,
190 base::Bind(&OnCacheOperation,
191 &error, &resource_id, &md5));
192 google_apis::test_util::RunBlockingPoolTask();
193 EXPECT_EQ(DRIVE_FILE_OK, error);
194 EXPECT_EQ(resource.resource_id, resource_id);
195 EXPECT_EQ(resource.md5, md5);
213 } 196 }
197 // Pin.
198 if (resource.is_pinned) {
199 DriveFileError error = DRIVE_FILE_OK;
200 std::string resource_id;
201 std::string md5;
202 EXPECT_CALL(*mock_cache_observer_,
203 OnCachePinned(resource.resource_id, resource.md5)).Times(1);
204 cache_->Pin(resource.resource_id,
205 resource.md5,
206 base::Bind(&OnCacheOperation,
207 &error, &resource_id, &md5));
208 google_apis::test_util::RunBlockingPoolTask();
209 EXPECT_EQ(DRIVE_FILE_OK, error);
210 EXPECT_EQ(resource.resource_id, resource_id);
211 EXPECT_EQ(resource.md5, md5);
212 }
213 // Mark dirty.
214 if (resource.is_dirty) {
215 DriveFileError error = DRIVE_FILE_OK;
216 FilePath cache_file_path;
217 cache_->MarkDirty(resource.resource_id,
218 resource.md5,
219 base::Bind(&OnGetFile, &error, &cache_file_path));
220 google_apis::test_util::RunBlockingPoolTask();
221 EXPECT_EQ(DRIVE_FILE_OK, error);
214 222
215 // Create symbolic link in pinned dir, naming it per cache files 223 std::string resource_id;
216 // convention. 224 std::string md5;
217 if (test_util::ToCacheEntry(resource.cache_state).is_pinned()) { 225 EXPECT_CALL(*mock_cache_observer_,
218 FilePath link_path = cache_->GetCacheFilePath( 226 OnCacheCommitted(resource.resource_id)).Times(1);
219 resource.resource_id, 227 cache_->CommitDirty(resource.resource_id,
220 "", 228 resource.md5,
221 DriveCache::CACHE_TYPE_PINNED, 229 base::Bind(&OnCacheOperation,
222 DriveCache::CACHED_FILE_FROM_SERVER); 230 &error, &resource_id, &md5));
223 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path)); 231 google_apis::test_util::RunBlockingPoolTask();
232 EXPECT_EQ(DRIVE_FILE_OK, error);
233 EXPECT_EQ(resource.resource_id, resource_id);
234 EXPECT_EQ(resource.md5, md5);
224 } 235 }
225
226 // Create symbolic link in outgoing dir, naming it per cache files
227 // convention.
228 if (test_util::ToCacheEntry(resource.cache_state).is_dirty()) {
229 FilePath link_path = cache_->GetCacheFilePath(
230 resource.resource_id,
231 "",
232 DriveCache::CACHE_TYPE_OUTGOING,
233 DriveCache::CACHED_FILE_FROM_SERVER);
234 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path));
235 }
236 }
237
238 DVLOG(1) << "PrepareForInitCacheTest finished";
239 cache_->ForceRescanForTesting();
240 google_apis::test_util::RunBlockingPoolTask();
241 }
242
243 void TestInitializeCache() {
244 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) {
245 const struct InitialCacheResource& resource = initial_cache_resources[i];
246 // Check cache file.
247 num_callback_invocations_ = 0;
248 TestGetFileFromCacheByResourceIdAndMd5(
249 resource.resource_id,
250 resource.md5,
251 test_util::ToCacheEntry(resource.cache_state).is_present() ?
252 DRIVE_FILE_OK :
253 DRIVE_FILE_ERROR_NOT_FOUND,
254 resource.expected_file_extension);
255 EXPECT_EQ(1, num_callback_invocations_);
256
257 // Verify cache state.
258 std::string md5;
259 if (test_util::ToCacheEntry(resource.cache_state).is_present())
260 md5 = resource.md5;
261 DriveCacheEntry cache_entry;
262 ASSERT_TRUE(GetCacheEntryFromOriginThread(
263 resource.resource_id, md5, &cache_entry));
264 EXPECT_TRUE(test_util::CacheStatesEqual(
265 test_util::ToCacheEntry(resource.cache_state),
266 cache_entry));
267 EXPECT_EQ(resource.expected_sub_dir_type,
268 DriveCache::GetSubDirectoryType(cache_entry));
269 } 236 }
270 } 237 }
271 238
272 void TestGetFileFromCacheByResourceIdAndMd5( 239 void TestGetFileFromCacheByResourceIdAndMd5(
273 const std::string& resource_id, 240 const std::string& resource_id,
274 const std::string& md5, 241 const std::string& md5,
275 DriveFileError expected_error, 242 DriveFileError expected_error,
276 const std::string& expected_file_extension) { 243 const std::string& expected_file_extension) {
277 expected_error_ = expected_error; 244 expected_error_ = expected_error;
278 expected_file_extension_ = expected_file_extension; 245 expected_file_extension_ = expected_file_extension;
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 int num_callback_invocations_; 729 int num_callback_invocations_;
763 DriveFileError expected_error_; 730 DriveFileError expected_error_;
764 int expected_cache_state_; 731 int expected_cache_state_;
765 DriveCache::CacheSubDirectoryType expected_sub_dir_type_; 732 DriveCache::CacheSubDirectoryType expected_sub_dir_type_;
766 bool expected_success_; 733 bool expected_success_;
767 bool expect_outgoing_symlink_; 734 bool expect_outgoing_symlink_;
768 std::string expected_file_extension_; 735 std::string expected_file_extension_;
769 int root_feed_changestamp_; 736 int root_feed_changestamp_;
770 }; 737 };
771 738
772 TEST_F(DriveCacheTest, InitializeCache) {
773 PrepareForInitCacheTest();
774 TestInitializeCache();
775 }
776
777 TEST_F(DriveCacheTest, GetCacheFilePath) { 739 TEST_F(DriveCacheTest, GetCacheFilePath) {
778 // Use alphanumeric characters for resource id. 740 // Use alphanumeric characters for resource id.
779 std::string resource_id("pdf:1a2b"); 741 std::string resource_id("pdf:1a2b");
780 std::string md5("abcdef0123456789"); 742 std::string md5("abcdef0123456789");
781 TestGetCacheFilePath(resource_id, md5, 743 TestGetCacheFilePath(resource_id, md5,
782 resource_id + FilePath::kExtensionSeparator + md5); 744 resource_id + FilePath::kExtensionSeparator + md5);
783 EXPECT_EQ(0, num_callback_invocations_); 745 EXPECT_EQ(0, num_callback_invocations_);
784 746
785 // Use non-alphanumeric characters for resource id, including '.' which is an 747 // Use non-alphanumeric characters for resource id, including '.' which is an
786 // extension separator, to test that the characters are escaped and unescaped 748 // extension separator, to test that the characters are escaped and unescaped
(...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after
1477 EXPECT_EQ(1, num_callback_invocations_); 1439 EXPECT_EQ(1, num_callback_invocations_);
1478 EXPECT_TRUE(CacheEntryExists(resource_id, md5)); 1440 EXPECT_TRUE(CacheEntryExists(resource_id, md5));
1479 1441
1480 // Try to remove the file. 1442 // Try to remove the file.
1481 num_callback_invocations_ = 0; 1443 num_callback_invocations_ = 0;
1482 TestRemoveFromCache(resource_id, DRIVE_FILE_OK); 1444 TestRemoveFromCache(resource_id, DRIVE_FILE_OK);
1483 EXPECT_EQ(1, num_callback_invocations_); 1445 EXPECT_EQ(1, num_callback_invocations_);
1484 } 1446 }
1485 1447
1486 TEST_F(DriveCacheTest, Iterate) { 1448 TEST_F(DriveCacheTest, Iterate) {
1487 PrepareForInitCacheTest(); 1449 PrepareTestCacheResources();
1488 1450
1489 std::vector<std::string> resource_ids; 1451 std::vector<std::string> resource_ids;
1490 std::vector<DriveCacheEntry> cache_entries; 1452 std::vector<DriveCacheEntry> cache_entries;
1491 bool completed = false; 1453 bool completed = false;
1492 cache_->Iterate( 1454 cache_->Iterate(
1493 base::Bind(&OnIterate, &resource_ids, &cache_entries), 1455 base::Bind(&OnIterate, &resource_ids, &cache_entries),
1494 base::Bind(&OnIterateCompleted, &completed)); 1456 base::Bind(&OnIterateCompleted, &completed));
1495 google_apis::test_util::RunBlockingPoolTask(); 1457 google_apis::test_util::RunBlockingPoolTask();
1496 1458
1497 ASSERT_TRUE(completed); 1459 ASSERT_TRUE(completed);
1498 1460
1499 sort(resource_ids.begin(), resource_ids.end()); 1461 sort(resource_ids.begin(), resource_ids.end());
1500 ASSERT_EQ(6U, resource_ids.size()); 1462 ASSERT_EQ(6U, resource_ids.size());
1501 EXPECT_EQ("dirty:existing", resource_ids[0]); 1463 EXPECT_EQ("dirty:existing", resource_ids[0]);
1502 EXPECT_EQ("dirty_and_pinned:existing", resource_ids[1]); 1464 EXPECT_EQ("dirty_and_pinned:existing", resource_ids[1]);
1503 EXPECT_EQ("pinned:existing", resource_ids[2]); 1465 EXPECT_EQ("pinned:existing", resource_ids[2]);
1504 EXPECT_EQ("pinned:non-existent", resource_ids[3]); 1466 EXPECT_EQ("pinned:non-existent", resource_ids[3]);
1505 EXPECT_EQ("tmp:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?", resource_ids[4]); 1467 EXPECT_EQ("tmp:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?", resource_ids[4]);
1506 EXPECT_EQ("tmp:resource_id", resource_ids[5]); 1468 EXPECT_EQ("tmp:resource_id", resource_ids[5]);
1507 1469
1508 ASSERT_EQ(6U, cache_entries.size()); 1470 ASSERT_EQ(6U, cache_entries.size());
1509 } 1471 }
1510 1472
1511 1473
1512 TEST_F(DriveCacheTest, ClearAll) { 1474 TEST_F(DriveCacheTest, ClearAll) {
1513 PrepareForInitCacheTest();
1514
1515 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1475 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1516 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 1476 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
1517 1477
1518 std::string resource_id("pdf:1a2b"); 1478 std::string resource_id("pdf:1a2b");
1519 std::string md5("abcdef0123456789"); 1479 std::string md5("abcdef0123456789");
1520 1480
1521 // Store an existing file. 1481 // Store an existing file.
1522 TestStoreToCache( 1482 TestStoreToCache(
1523 resource_id, md5, 1483 resource_id, md5,
1524 google_apis::test_util::GetTestFilePath("gdata/root_feed.json"), 1484 google_apis::test_util::GetTestFilePath("gdata/root_feed.json"),
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1578 cache->RequestInitialize( 1538 cache->RequestInitialize(
1579 base::Bind(&test_util::CopyResultFromInitializeCacheCallback, &success)); 1539 base::Bind(&test_util::CopyResultFromInitializeCacheCallback, &success));
1580 google_apis::test_util::RunBlockingPoolTask(); 1540 google_apis::test_util::RunBlockingPoolTask();
1581 EXPECT_FALSE(success); 1541 EXPECT_FALSE(success);
1582 1542
1583 cache->Destroy(); 1543 cache->Destroy();
1584 google_apis::test_util::RunBlockingPoolTask(); 1544 google_apis::test_util::RunBlockingPoolTask();
1585 } 1545 }
1586 1546
1587 } // namespace drive 1547 } // namespace drive
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698