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

Side by Side Diff: net/disk_cache/entry_unittest.cc

Issue 2053133002: Remove MessageLoop::current()->RunUntilIdle() in net. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 unified diff | Download patch
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 <utility> 5 #include <utility>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/files/file.h" 9 #include "base/files/file.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 2135 matching lines...) Expand 10 before | Expand all | Expand 10 after
2146 entry1->Doom(); 2146 entry1->Doom();
2147 entry1->Close(); 2147 entry1->Close();
2148 entry2->Close(); 2148 entry2->Close();
2149 2149
2150 // Doom the second entry after it's fully saved. 2150 // Doom the second entry after it's fully saved.
2151 EXPECT_EQ(net::OK, DoomEntry(key2)); 2151 EXPECT_EQ(net::OK, DoomEntry(key2));
2152 2152
2153 // Make sure we do all needed work. This may fail for entry2 if between Close 2153 // Make sure we do all needed work. This may fail for entry2 if between Close
2154 // and DoomEntry the system decides to remove all traces of the file from the 2154 // and DoomEntry the system decides to remove all traces of the file from the
2155 // system cache so we don't see that there is pending IO. 2155 // system cache so we don't see that there is pending IO.
2156 base::MessageLoop::current()->RunUntilIdle(); 2156 base::RunLoop().RunUntilIdle();
2157 2157
2158 if (memory_only_) { 2158 if (memory_only_) {
2159 EXPECT_EQ(0, cache_->GetEntryCount()); 2159 EXPECT_EQ(0, cache_->GetEntryCount());
2160 } else { 2160 } else {
2161 if (5 == cache_->GetEntryCount()) { 2161 if (5 == cache_->GetEntryCount()) {
2162 // Most likely we are waiting for the result of reading the sparse info 2162 // Most likely we are waiting for the result of reading the sparse info
2163 // (it's always async on Posix so it is easy to miss). Unfortunately we 2163 // (it's always async on Posix so it is easy to miss). Unfortunately we
2164 // don't have any signal to watch for so we can only wait. 2164 // don't have any signal to watch for so we can only wait.
2165 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(500)); 2165 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(500));
2166 base::MessageLoop::current()->RunUntilIdle(); 2166 base::RunLoop().RunUntilIdle();
2167 } 2167 }
2168 EXPECT_EQ(0, cache_->GetEntryCount()); 2168 EXPECT_EQ(0, cache_->GetEntryCount());
2169 } 2169 }
2170 } 2170 }
2171 2171
2172 TEST_F(DiskCacheEntryTest, DoomSparseEntry) { 2172 TEST_F(DiskCacheEntryTest, DoomSparseEntry) {
2173 UseCurrentThread(); 2173 UseCurrentThread();
2174 InitCache(); 2174 InitCache();
2175 DoomSparseEntry(); 2175 DoomSparseEntry();
2176 } 2176 }
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after
3027 3027
3028 // Lets do a Write so we block until both the Close and the Write 3028 // Lets do a Write so we block until both the Close and the Write
3029 // operation finishes. Write must fail since we are writing in a closed entry. 3029 // operation finishes. Write must fail since we are writing in a closed entry.
3030 EXPECT_EQ( 3030 EXPECT_EQ(
3031 net::ERR_IO_PENDING, 3031 net::ERR_IO_PENDING,
3032 entry->WriteData(1, 0, buffer1.get(), kSize1, cb.callback(), false)); 3032 entry->WriteData(1, 0, buffer1.get(), kSize1, cb.callback(), false));
3033 EXPECT_EQ(net::ERR_FAILED, cb.GetResult(net::ERR_IO_PENDING)); 3033 EXPECT_EQ(net::ERR_FAILED, cb.GetResult(net::ERR_IO_PENDING));
3034 3034
3035 // Finish running the pending tasks so that we fully complete the close 3035 // Finish running the pending tasks so that we fully complete the close
3036 // operation and destroy the entry object. 3036 // operation and destroy the entry object.
3037 base::MessageLoop::current()->RunUntilIdle(); 3037 base::RunLoop().RunUntilIdle();
3038 3038
3039 // At this point the |entry| must have been destroyed, and called 3039 // At this point the |entry| must have been destroyed, and called
3040 // RemoveSelfFromBackend(). 3040 // RemoveSelfFromBackend().
3041 disk_cache::Entry* entry2 = NULL; 3041 disk_cache::Entry* entry2 = NULL;
3042 ASSERT_EQ(net::ERR_IO_PENDING, 3042 ASSERT_EQ(net::ERR_IO_PENDING,
3043 cache_->OpenEntry(key, &entry2, cb.callback())); 3043 cache_->OpenEntry(key, &entry2, cb.callback()));
3044 ASSERT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); 3044 ASSERT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING));
3045 EXPECT_NE(null, entry2); 3045 EXPECT_NE(null, entry2);
3046 3046
3047 disk_cache::Entry* entry3 = NULL; 3047 disk_cache::Entry* entry3 = NULL;
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
3201 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); 3201 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING));
3202 3202
3203 EXPECT_EQ( 3203 EXPECT_EQ(
3204 kSize1, 3204 kSize1,
3205 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); 3205 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false));
3206 3206
3207 entry->Close(); 3207 entry->Close();
3208 3208
3209 // Finish running the pending tasks so that we fully complete the close 3209 // Finish running the pending tasks so that we fully complete the close
3210 // operation and destroy the entry object. 3210 // operation and destroy the entry object.
3211 base::MessageLoop::current()->RunUntilIdle(); 3211 base::RunLoop().RunUntilIdle();
3212 3212
3213 for (int i = 0; i < disk_cache::kSimpleEntryFileCount; ++i) { 3213 for (int i = 0; i < disk_cache::kSimpleEntryFileCount; ++i) {
3214 base::FilePath entry_file_path = cache_path_.AppendASCII( 3214 base::FilePath entry_file_path = cache_path_.AppendASCII(
3215 disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, i)); 3215 disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, i));
3216 base::File::Info info; 3216 base::File::Info info;
3217 EXPECT_FALSE(base::GetFileInfo(entry_file_path, &info)); 3217 EXPECT_FALSE(base::GetFileInfo(entry_file_path, &info));
3218 } 3218 }
3219 } 3219 }
3220 3220
3221 TEST_F(DiskCacheEntryTest, SimpleCacheDoomCreateRace) { 3221 TEST_F(DiskCacheEntryTest, SimpleCacheDoomCreateRace) {
(...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after
4049 // Close does not have a callback. However, we need to be sure the close is 4049 // Close does not have a callback. However, we need to be sure the close is
4050 // finished before we continue the test. We can take advantage of how the ref 4050 // finished before we continue the test. We can take advantage of how the ref
4051 // counting of a SimpleEntryImpl works to fake out a callback: When the 4051 // counting of a SimpleEntryImpl works to fake out a callback: When the
4052 // last Close() call is made to an entry, an IO operation is sent to the 4052 // last Close() call is made to an entry, an IO operation is sent to the
4053 // synchronous entry to close the platform files. This IO operation holds a 4053 // synchronous entry to close the platform files. This IO operation holds a
4054 // ref pointer to the entry, which expires when the operation is done. So, 4054 // ref pointer to the entry, which expires when the operation is done. So,
4055 // we take a refpointer, and watch the SimpleEntry object until it has only 4055 // we take a refpointer, and watch the SimpleEntry object until it has only
4056 // one ref; this indicates the IO operation is complete. 4056 // one ref; this indicates the IO operation is complete.
4057 while (!entry1_refptr->HasOneRef()) { 4057 while (!entry1_refptr->HasOneRef()) {
4058 base::PlatformThread::YieldCurrentThread(); 4058 base::PlatformThread::YieldCurrentThread();
4059 base::MessageLoop::current()->RunUntilIdle(); 4059 base::RunLoop().RunUntilIdle();
4060 } 4060 }
4061 entry1_refptr = NULL; 4061 entry1_refptr = NULL;
4062 4062
4063 // In the bug case, this new entry ends up being a duplicate object pointing 4063 // In the bug case, this new entry ends up being a duplicate object pointing
4064 // at the same underlying files. 4064 // at the same underlying files.
4065 disk_cache::Entry* entry3 = NULL; 4065 disk_cache::Entry* entry3 = NULL;
4066 EXPECT_EQ(net::OK, OpenEntry(key, &entry3)); 4066 EXPECT_EQ(net::OK, OpenEntry(key, &entry3));
4067 ScopedEntryPtr entry3_closer(entry3); 4067 ScopedEntryPtr entry3_closer(entry3);
4068 EXPECT_NE(null, entry3); 4068 EXPECT_NE(null, entry3);
4069 4069
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
4258 entry->Close(); 4258 entry->Close();
4259 4259
4260 base::RunLoop().RunUntilIdle(); 4260 base::RunLoop().RunUntilIdle();
4261 disk_cache::SimpleBackendImpl::FlushWorkerPoolForTesting(); 4261 disk_cache::SimpleBackendImpl::FlushWorkerPoolForTesting();
4262 base::RunLoop().RunUntilIdle(); 4262 base::RunLoop().RunUntilIdle();
4263 4263
4264 EXPECT_TRUE( 4264 EXPECT_TRUE(
4265 disk_cache::simple_util::CorruptKeySHA256FromEntry(key, cache_path_)); 4265 disk_cache::simple_util::CorruptKeySHA256FromEntry(key, cache_path_));
4266 EXPECT_NE(net::OK, OpenEntry(key, &entry)); 4266 EXPECT_NE(net::OK, OpenEntry(key, &entry));
4267 } 4267 }
OLDNEW
« no previous file with comments | « net/disk_cache/disk_cache_perftest.cc ('k') | net/http/disk_cache_based_quic_server_info_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698