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

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

Issue 20251: Extend the IOBuffer to the disk cache.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/disk_cache/entry_impl.cc ('k') | net/disk_cache/mem_entry_impl.h » ('j') | 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/platform_thread.h" 6 #include "base/platform_thread.h"
7 #include "base/timer.h" 7 #include "base/timer.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "net/base/io_buffer.h"
9 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
10 #include "net/disk_cache/disk_cache_test_base.h" 11 #include "net/disk_cache/disk_cache_test_base.h"
11 #include "net/disk_cache/disk_cache_test_util.h" 12 #include "net/disk_cache/disk_cache_test_util.h"
12 #include "net/disk_cache/entry_impl.h" 13 #include "net/disk_cache/entry_impl.h"
13 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
14 15
15 using base::Time; 16 using base::Time;
16 17
17 extern int g_cache_tests_max_id; 18 extern int g_cache_tests_max_id;
18 extern volatile int g_cache_tests_received; 19 extern volatile int g_cache_tests_received;
19 extern volatile bool g_cache_tests_error; 20 extern volatile bool g_cache_tests_error;
20 21
21 // Tests that can run with different types of caches. 22 // Tests that can run with different types of caches.
22 class DiskCacheEntryTest : public DiskCacheTestWithCache { 23 class DiskCacheEntryTest : public DiskCacheTestWithCache {
23 protected: 24 protected:
24 void InternalSyncIO(); 25 void InternalSyncIO();
25 void InternalAsyncIO(); 26 void InternalAsyncIO();
26 void ExternalSyncIO(); 27 void ExternalSyncIO();
27 void ExternalAsyncIO(); 28 void ExternalAsyncIO();
28 void StreamAccess(); 29 void StreamAccess();
29 void GetKey(); 30 void GetKey();
30 void GrowData(); 31 void GrowData();
31 void TruncateData(); 32 void TruncateData();
33 void ZeroLengthIO();
32 void ReuseEntry(int size); 34 void ReuseEntry(int size);
33 void InvalidData(); 35 void InvalidData();
34 void DoomEntry(); 36 void DoomEntry();
35 void DoomedEntry(); 37 void DoomedEntry();
36 }; 38 };
37 39
38 void DiskCacheEntryTest::InternalSyncIO() { 40 void DiskCacheEntryTest::InternalSyncIO() {
39 disk_cache::Entry *entry1 = NULL; 41 disk_cache::Entry *entry1 = NULL;
40 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1)); 42 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1));
41 ASSERT_TRUE(NULL != entry1); 43 ASSERT_TRUE(NULL != entry1);
42 44
43 char buffer1[10]; 45 const int kSize1 = 10;
44 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); 46 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
45 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL)); 47 CacheTestFillBuffer(buffer1->data(), kSize1, false);
46 base::strlcpy(buffer1, "the data", arraysize(buffer1)); 48 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, kSize1, NULL));
47 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, false)); 49 base::strlcpy(buffer1->data(), "the data", kSize1);
48 memset(buffer1, 0, sizeof(buffer1)); 50 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, kSize1, NULL, false));
49 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL)); 51 memset(buffer1->data(), 0, kSize1);
50 EXPECT_STREQ("the data", buffer1); 52 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer1, kSize1, NULL));
53 EXPECT_STREQ("the data", buffer1->data());
51 54
52 char buffer2[5000]; 55 const int kSize2 = 5000;
53 char buffer3[10000] = {0}; 56 const int kSize3 = 10000;
54 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); 57 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
55 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); 58 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3);
56 EXPECT_EQ(5000, entry1->WriteData(1, 1500, buffer2, sizeof(buffer2), NULL, 59 memset(buffer3->data(), 0, kSize3);
57 false)); 60 CacheTestFillBuffer(buffer2->data(), kSize2, false);
58 memset(buffer2, 0, sizeof(buffer2)); 61 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2);
59 EXPECT_EQ(4989, entry1->ReadData(1, 1511, buffer2, sizeof(buffer2), NULL)); 62 EXPECT_EQ(5000, entry1->WriteData(1, 1500, buffer2, kSize2, NULL, false));
60 EXPECT_STREQ("big data goes here", buffer2); 63 memset(buffer2->data(), 0, kSize2);
61 EXPECT_EQ(5000, entry1->ReadData(1, 0, buffer2, sizeof(buffer2), NULL)); 64 EXPECT_EQ(4989, entry1->ReadData(1, 1511, buffer2, kSize2, NULL));
62 EXPECT_EQ(0, memcmp(buffer2, buffer3, 1500)); 65 EXPECT_STREQ("big data goes here", buffer2->data());
63 EXPECT_EQ(1500, entry1->ReadData(1, 5000, buffer2, sizeof(buffer2), NULL)); 66 EXPECT_EQ(5000, entry1->ReadData(1, 0, buffer2, kSize2, NULL));
67 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500));
68 EXPECT_EQ(1500, entry1->ReadData(1, 5000, buffer2, kSize2, NULL));
64 69
65 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, sizeof(buffer2), NULL)); 70 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, kSize2, NULL));
66 EXPECT_EQ(6500, entry1->ReadData(1, 0, buffer3, sizeof(buffer3), NULL)); 71 EXPECT_EQ(6500, entry1->ReadData(1, 0, buffer3, kSize3, NULL));
67 EXPECT_EQ(8192, entry1->WriteData(1, 0, buffer3, 8192, NULL, false)); 72 EXPECT_EQ(8192, entry1->WriteData(1, 0, buffer3, 8192, NULL, false));
68 EXPECT_EQ(8192, entry1->ReadData(1, 0, buffer3, sizeof(buffer3), NULL)); 73 EXPECT_EQ(8192, entry1->ReadData(1, 0, buffer3, kSize3, NULL));
69 EXPECT_EQ(8192, entry1->GetDataSize(1)); 74 EXPECT_EQ(8192, entry1->GetDataSize(1));
70 75
71 entry1->Doom(); 76 entry1->Doom();
72 entry1->Close(); 77 entry1->Close();
73 EXPECT_EQ(0, cache_->GetEntryCount()); 78 EXPECT_EQ(0, cache_->GetEntryCount());
74 } 79 }
75 80
76 TEST_F(DiskCacheEntryTest, InternalSyncIO) { 81 TEST_F(DiskCacheEntryTest, InternalSyncIO) {
77 InitCache(); 82 InitCache();
78 InternalSyncIO(); 83 InternalSyncIO();
(...skipping 24 matching lines...) Expand all
103 CallbackTest callback11(11, false); 108 CallbackTest callback11(11, false);
104 CallbackTest callback12(12, false); 109 CallbackTest callback12(12, false);
105 CallbackTest callback13(13, false); 110 CallbackTest callback13(13, false);
106 111
107 g_cache_tests_error = false; 112 g_cache_tests_error = false;
108 g_cache_tests_max_id = 0; 113 g_cache_tests_max_id = 0;
109 g_cache_tests_received = 0; 114 g_cache_tests_received = 0;
110 115
111 MessageLoopHelper helper; 116 MessageLoopHelper helper;
112 117
113 char buffer1[10]; 118 const int kSize1 = 10;
114 char buffer2[5000]; 119 const int kSize2 = 5000;
115 char buffer3[10000]; 120 const int kSize3 = 10000;
116 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); 121 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
117 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); 122 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
118 CacheTestFillBuffer(buffer3, sizeof(buffer3), false); 123 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3);
124 CacheTestFillBuffer(buffer1->data(), kSize1, false);
125 CacheTestFillBuffer(buffer2->data(), kSize2, false);
126 CacheTestFillBuffer(buffer3->data(), kSize3, false);
119 127
120 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), &callback1)); 128 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, kSize1, &callback1));
121 base::strlcpy(buffer1, "the data", arraysize(buffer1)); 129 base::strlcpy(buffer1->data(), "the data", kSize1);
122 int expected = 0; 130 int expected = 0;
123 int ret = entry1->WriteData(0, 0, buffer1, sizeof(buffer1), &callback2, 131 int ret = entry1->WriteData(0, 0, buffer1, kSize1, &callback2, false);
124 false);
125 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); 132 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret);
126 if (net::ERR_IO_PENDING == ret) 133 if (net::ERR_IO_PENDING == ret)
127 expected++; 134 expected++;
128 135
129 memset(buffer2, 0, sizeof(buffer1)); 136 memset(buffer2->data(), 0, kSize1);
130 ret = entry1->ReadData(0, 0, buffer2, sizeof(buffer1), &callback3); 137 ret = entry1->ReadData(0, 0, buffer2, kSize1, &callback3);
131 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); 138 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret);
132 if (net::ERR_IO_PENDING == ret) 139 if (net::ERR_IO_PENDING == ret)
133 expected++; 140 expected++;
134 141
135 g_cache_tests_max_id = 3; 142 g_cache_tests_max_id = 3;
136 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); 143 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
137 EXPECT_STREQ("the data", buffer2); 144 EXPECT_STREQ("the data", buffer2->data());
138 145
139 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); 146 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2);
140 ret = entry1->WriteData(1, 1500, buffer2, sizeof(buffer2), &callback4, false); 147 ret = entry1->WriteData(1, 1500, buffer2, kSize2, &callback4, false);
141 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); 148 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret);
142 if (net::ERR_IO_PENDING == ret) 149 if (net::ERR_IO_PENDING == ret)
143 expected++; 150 expected++;
144 151
145 memset(buffer3, 0, sizeof(buffer2)); 152 memset(buffer3->data(), 0, kSize2);
146 ret = entry1->ReadData(1, 1511, buffer3, sizeof(buffer2), &callback5); 153 ret = entry1->ReadData(1, 1511, buffer3, kSize2, &callback5);
147 EXPECT_TRUE(4989 == ret || net::ERR_IO_PENDING == ret); 154 EXPECT_TRUE(4989 == ret || net::ERR_IO_PENDING == ret);
148 if (net::ERR_IO_PENDING == ret) 155 if (net::ERR_IO_PENDING == ret)
149 expected++; 156 expected++;
150 157
151 g_cache_tests_max_id = 5; 158 g_cache_tests_max_id = 5;
152 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); 159 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
153 EXPECT_STREQ("big data goes here", buffer3); 160 EXPECT_STREQ("big data goes here", buffer3->data());
154 ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback6); 161 ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback6);
155 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); 162 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret);
156 if (net::ERR_IO_PENDING == ret) 163 if (net::ERR_IO_PENDING == ret)
157 expected++; 164 expected++;
158 165
159 memset(buffer3, 0, sizeof(buffer3)); 166 memset(buffer3->data(), 0, kSize3);
160 167
161 g_cache_tests_max_id = 6; 168 g_cache_tests_max_id = 6;
162 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); 169 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
163 EXPECT_EQ(0, memcmp(buffer2, buffer3, 1500)); 170 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500));
164 ret = entry1->ReadData(1, 5000, buffer2, sizeof(buffer2), &callback7); 171 ret = entry1->ReadData(1, 5000, buffer2, kSize2, &callback7);
165 EXPECT_TRUE(1500 == ret || net::ERR_IO_PENDING == ret); 172 EXPECT_TRUE(1500 == ret || net::ERR_IO_PENDING == ret);
166 if (net::ERR_IO_PENDING == ret) 173 if (net::ERR_IO_PENDING == ret)
167 expected++; 174 expected++;
168 175
169 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, sizeof(buffer2), &callback8)); 176 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, kSize2, &callback8));
170 ret = entry1->ReadData(1, 0, buffer3, sizeof(buffer3), &callback9); 177 ret = entry1->ReadData(1, 0, buffer3, kSize3, &callback9);
171 EXPECT_TRUE(6500 == ret || net::ERR_IO_PENDING == ret); 178 EXPECT_TRUE(6500 == ret || net::ERR_IO_PENDING == ret);
172 if (net::ERR_IO_PENDING == ret) 179 if (net::ERR_IO_PENDING == ret)
173 expected++; 180 expected++;
174 181
175 ret = entry1->WriteData(1, 0, buffer3, 8192, &callback10, false); 182 ret = entry1->WriteData(1, 0, buffer3, 8192, &callback10, false);
176 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); 183 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret);
177 if (net::ERR_IO_PENDING == ret) 184 if (net::ERR_IO_PENDING == ret)
178 expected++; 185 expected++;
179 186
180 ret = entry1->ReadData(1, 0, buffer3, sizeof(buffer3), &callback11); 187 ret = entry1->ReadData(1, 0, buffer3, kSize3, &callback11);
181 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); 188 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret);
182 if (net::ERR_IO_PENDING == ret) 189 if (net::ERR_IO_PENDING == ret)
183 expected++; 190 expected++;
184 191
185 EXPECT_EQ(8192, entry1->GetDataSize(1)); 192 EXPECT_EQ(8192, entry1->GetDataSize(1));
186 193
187 ret = entry1->ReadData(0, 0, buffer1, sizeof(buffer1), &callback12); 194 ret = entry1->ReadData(0, 0, buffer1, kSize1, &callback12);
188 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); 195 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret);
189 if (net::ERR_IO_PENDING == ret) 196 if (net::ERR_IO_PENDING == ret)
190 expected++; 197 expected++;
191 198
192 ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback13); 199 ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback13);
193 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); 200 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret);
194 if (net::ERR_IO_PENDING == ret) 201 if (net::ERR_IO_PENDING == ret)
195 expected++; 202 expected++;
196 203
197 g_cache_tests_max_id = 13; 204 g_cache_tests_max_id = 13;
198 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); 205 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
199 206
200 EXPECT_FALSE(g_cache_tests_error); 207 EXPECT_FALSE(g_cache_tests_error);
201 EXPECT_EQ(expected, g_cache_tests_received); 208 EXPECT_EQ(expected, g_cache_tests_received);
202 209
(...skipping 10 matching lines...) Expand all
213 TEST_F(DiskCacheEntryTest, MemoryOnlyInternalAsyncIO) { 220 TEST_F(DiskCacheEntryTest, MemoryOnlyInternalAsyncIO) {
214 SetMemoryOnlyMode(); 221 SetMemoryOnlyMode();
215 InitCache(); 222 InitCache();
216 InternalAsyncIO(); 223 InternalAsyncIO();
217 } 224 }
218 225
219 void DiskCacheEntryTest::ExternalSyncIO() { 226 void DiskCacheEntryTest::ExternalSyncIO() {
220 disk_cache::Entry *entry1; 227 disk_cache::Entry *entry1;
221 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1)); 228 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1));
222 229
223 char buffer1[17000], buffer2[25000]; 230 const int kSize1 = 17000;
224 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); 231 const int kSize2 = 25000;
225 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); 232 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
226 base::strlcpy(buffer1, "the data", arraysize(buffer1)); 233 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
227 EXPECT_EQ(17000, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, 234 CacheTestFillBuffer(buffer1->data(), kSize1, false);
228 false)); 235 CacheTestFillBuffer(buffer2->data(), kSize2, false);
229 memset(buffer1, 0, sizeof(buffer1)); 236 base::strlcpy(buffer1->data(), "the data", kSize1);
230 EXPECT_EQ(17000, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL)); 237 EXPECT_EQ(17000, entry1->WriteData(0, 0, buffer1, kSize1, NULL, false));
231 EXPECT_STREQ("the data", buffer1); 238 memset(buffer1->data(), 0, kSize1);
239 EXPECT_EQ(17000, entry1->ReadData(0, 0, buffer1, kSize1, NULL));
240 EXPECT_STREQ("the data", buffer1->data());
232 241
233 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); 242 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2);
234 EXPECT_EQ(25000, entry1->WriteData(1, 10000, buffer2, sizeof(buffer2), NULL, 243 EXPECT_EQ(25000, entry1->WriteData(1, 10000, buffer2, kSize2, NULL, false));
235 false)); 244 memset(buffer2->data(), 0, kSize2);
236 memset(buffer2, 0, sizeof(buffer2)); 245 EXPECT_EQ(24989, entry1->ReadData(1, 10011, buffer2, kSize2, NULL));
237 EXPECT_EQ(24989, entry1->ReadData(1, 10011, buffer2, sizeof(buffer2), NULL)); 246 EXPECT_STREQ("big data goes here", buffer2->data());
238 EXPECT_STREQ("big data goes here", buffer2); 247 EXPECT_EQ(25000, entry1->ReadData(1, 0, buffer2, kSize2, NULL));
239 EXPECT_EQ(25000, entry1->ReadData(1, 0, buffer2, sizeof(buffer2), NULL)); 248 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000));
240 EXPECT_EQ(0, memcmp(buffer2, buffer2, 10000)); 249 EXPECT_EQ(5000, entry1->ReadData(1, 30000, buffer2, kSize2, NULL));
241 EXPECT_EQ(5000, entry1->ReadData(1, 30000, buffer2, sizeof(buffer2), NULL));
242 250
243 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, sizeof(buffer2), NULL)); 251 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, kSize2, NULL));
244 EXPECT_EQ(17000, entry1->ReadData(1, 0, buffer1, sizeof(buffer1), NULL)); 252 EXPECT_EQ(17000, entry1->ReadData(1, 0, buffer1, kSize1, NULL));
245 EXPECT_EQ(17000, entry1->WriteData(1, 20000, buffer1, sizeof(buffer1), NULL, 253 EXPECT_EQ(17000, entry1->WriteData(1, 20000, buffer1, kSize1, NULL, false));
246 false));
247 EXPECT_EQ(37000, entry1->GetDataSize(1)); 254 EXPECT_EQ(37000, entry1->GetDataSize(1));
248 255
249 entry1->Doom(); 256 entry1->Doom();
250 entry1->Close(); 257 entry1->Close();
251 EXPECT_EQ(0, cache_->GetEntryCount()); 258 EXPECT_EQ(0, cache_->GetEntryCount());
252 } 259 }
253 260
254 TEST_F(DiskCacheEntryTest, ExternalSyncIO) { 261 TEST_F(DiskCacheEntryTest, ExternalSyncIO) {
255 InitCache(); 262 InitCache();
256 ExternalSyncIO(); 263 ExternalSyncIO();
(...skipping 20 matching lines...) Expand all
277 CallbackTest callback8(8, false); 284 CallbackTest callback8(8, false);
278 CallbackTest callback9(9, false); 285 CallbackTest callback9(9, false);
279 286
280 g_cache_tests_error = false; 287 g_cache_tests_error = false;
281 g_cache_tests_max_id = 0; 288 g_cache_tests_max_id = 0;
282 g_cache_tests_received = 0; 289 g_cache_tests_received = 0;
283 int expected = 0; 290 int expected = 0;
284 291
285 MessageLoopHelper helper; 292 MessageLoopHelper helper;
286 293
287 char buffer1[17000], buffer2[25000], buffer3[25000]; 294 const int kSize1 = 17000;
288 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); 295 const int kSize2 = 25000;
289 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); 296 const int kSize3 = 25000;
290 CacheTestFillBuffer(buffer3, sizeof(buffer3), false); 297 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
291 base::strlcpy(buffer1, "the data", arraysize(buffer1)); 298 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
292 int ret = entry1->WriteData(0, 0, buffer1, sizeof(buffer1), &callback1, 299 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3);
293 false); 300 CacheTestFillBuffer(buffer1->data(), kSize1, false);
301 CacheTestFillBuffer(buffer2->data(), kSize2, false);
302 CacheTestFillBuffer(buffer3->data(), kSize3, false);
303 base::strlcpy(buffer1->data(), "the data", kSize1);
304 int ret = entry1->WriteData(0, 0, buffer1, kSize1, &callback1, false);
294 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); 305 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret);
295 if (net::ERR_IO_PENDING == ret) 306 if (net::ERR_IO_PENDING == ret)
296 expected++; 307 expected++;
297 308
298 g_cache_tests_max_id = 1; 309 g_cache_tests_max_id = 1;
299 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); 310 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
300 311
301 memset(buffer2, 0, sizeof(buffer1)); 312 memset(buffer2->data(), 0, kSize1);
302 ret = entry1->ReadData(0, 0, buffer2, sizeof(buffer1), &callback2); 313 ret = entry1->ReadData(0, 0, buffer2, kSize1, &callback2);
303 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); 314 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret);
304 if (net::ERR_IO_PENDING == ret) 315 if (net::ERR_IO_PENDING == ret)
305 expected++; 316 expected++;
306 317
307 g_cache_tests_max_id = 2; 318 g_cache_tests_max_id = 2;
308 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); 319 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
309 EXPECT_STREQ("the data", buffer1); 320 EXPECT_STREQ("the data", buffer1->data());
310 321
311 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); 322 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2);
312 ret = entry1->WriteData(1, 10000, buffer2, sizeof(buffer2), &callback3, 323 ret = entry1->WriteData(1, 10000, buffer2, kSize2, &callback3, false);
313 false);
314 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); 324 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret);
315 if (net::ERR_IO_PENDING == ret) 325 if (net::ERR_IO_PENDING == ret)
316 expected++; 326 expected++;
317 327
318 g_cache_tests_max_id = 3; 328 g_cache_tests_max_id = 3;
319 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); 329 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
320 330
321 memset(buffer3, 0, sizeof(buffer3)); 331 memset(buffer3->data(), 0, kSize3);
322 ret = entry1->ReadData(1, 10011, buffer3, sizeof(buffer3), &callback4); 332 ret = entry1->ReadData(1, 10011, buffer3, kSize3, &callback4);
323 EXPECT_TRUE(24989 == ret || net::ERR_IO_PENDING == ret); 333 EXPECT_TRUE(24989 == ret || net::ERR_IO_PENDING == ret);
324 if (net::ERR_IO_PENDING == ret) 334 if (net::ERR_IO_PENDING == ret)
325 expected++; 335 expected++;
326 336
327 g_cache_tests_max_id = 4; 337 g_cache_tests_max_id = 4;
328 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); 338 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
329 EXPECT_STREQ("big data goes here", buffer3); 339 EXPECT_STREQ("big data goes here", buffer3->data());
330 ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback5); 340 ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback5);
331 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); 341 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret);
332 if (net::ERR_IO_PENDING == ret) 342 if (net::ERR_IO_PENDING == ret)
333 expected++; 343 expected++;
334 344
335 g_cache_tests_max_id = 5; 345 g_cache_tests_max_id = 5;
336 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); 346 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
337 EXPECT_EQ(0, memcmp(buffer2, buffer2, 10000)); 347 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000));
338 ret = entry1->ReadData(1, 30000, buffer2, sizeof(buffer2), &callback6); 348 ret = entry1->ReadData(1, 30000, buffer2, kSize2, &callback6);
339 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); 349 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret);
340 if (net::ERR_IO_PENDING == ret) 350 if (net::ERR_IO_PENDING == ret)
341 expected++; 351 expected++;
342 352
343 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, sizeof(buffer2), 353 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, kSize2, &callback7));
344 &callback7)); 354 ret = entry1->ReadData(1, 0, buffer1, kSize1, &callback8);
345 ret = entry1->ReadData(1, 0, buffer1, sizeof(buffer1), &callback8);
346 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); 355 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret);
347 if (net::ERR_IO_PENDING == ret) 356 if (net::ERR_IO_PENDING == ret)
348 expected++; 357 expected++;
349 ret = entry1->WriteData(1, 20000, buffer1, sizeof(buffer1), &callback9, 358 ret = entry1->WriteData(1, 20000, buffer1, kSize1, &callback9, false);
350 false);
351 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); 359 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret);
352 if (net::ERR_IO_PENDING == ret) 360 if (net::ERR_IO_PENDING == ret)
353 expected++; 361 expected++;
354 EXPECT_EQ(37000, entry1->GetDataSize(1)); 362 EXPECT_EQ(37000, entry1->GetDataSize(1));
355 363
356 g_cache_tests_max_id = 9; 364 g_cache_tests_max_id = 9;
357 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); 365 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
358 366
359 EXPECT_FALSE(g_cache_tests_error); 367 EXPECT_FALSE(g_cache_tests_error);
360 EXPECT_EQ(expected, g_cache_tests_received); 368 EXPECT_EQ(expected, g_cache_tests_received);
(...skipping 13 matching lines...) Expand all
374 InitCache(); 382 InitCache();
375 ExternalAsyncIO(); 383 ExternalAsyncIO();
376 } 384 }
377 385
378 void DiskCacheEntryTest::StreamAccess() { 386 void DiskCacheEntryTest::StreamAccess() {
379 disk_cache::Entry *entry = NULL; 387 disk_cache::Entry *entry = NULL;
380 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry)); 388 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry));
381 ASSERT_TRUE(NULL != entry); 389 ASSERT_TRUE(NULL != entry);
382 390
383 const int kBufferSize = 1024; 391 const int kBufferSize = 1024;
384 char buffer1[kBufferSize]; 392 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kBufferSize);
385 char buffer2[kBufferSize]; 393 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kBufferSize);
386 394
387 const int kNumStreams = 3; 395 const int kNumStreams = 3;
388 for (int i = 0; i < kNumStreams; i++) { 396 for (int i = 0; i < kNumStreams; i++) {
389 CacheTestFillBuffer(buffer1, kBufferSize, false); 397 CacheTestFillBuffer(buffer1->data(), kBufferSize, false);
390 EXPECT_EQ(kBufferSize, entry->WriteData(i, 0, buffer1, kBufferSize, NULL, 398 EXPECT_EQ(kBufferSize, entry->WriteData(i, 0, buffer1, kBufferSize, NULL,
391 false)); 399 false));
392 memset(buffer2, 0, kBufferSize); 400 memset(buffer2->data(), 0, kBufferSize);
393 EXPECT_EQ(kBufferSize, entry->ReadData(i, 0, buffer2, kBufferSize, NULL)); 401 EXPECT_EQ(kBufferSize, entry->ReadData(i, 0, buffer2, kBufferSize, NULL));
394 EXPECT_EQ(0, memcmp(buffer1, buffer2, kBufferSize)); 402 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kBufferSize));
395 } 403 }
396 404
397 EXPECT_EQ(net::ERR_INVALID_ARGUMENT, 405 EXPECT_EQ(net::ERR_INVALID_ARGUMENT,
398 entry->ReadData(kNumStreams, 0, buffer1, kBufferSize, NULL)); 406 entry->ReadData(kNumStreams, 0, buffer1, kBufferSize, NULL));
399 entry->Close(); 407 entry->Close();
400 } 408 }
401 409
402 TEST_F(DiskCacheEntryTest, StreamAccess) { 410 TEST_F(DiskCacheEntryTest, StreamAccess) {
403 InitCache(); 411 InitCache();
404 StreamAccess(); 412 StreamAccess();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 SetMemoryOnlyMode(); 462 SetMemoryOnlyMode();
455 InitCache(); 463 InitCache();
456 GetKey(); 464 GetKey();
457 } 465 }
458 466
459 void DiskCacheEntryTest::GrowData() { 467 void DiskCacheEntryTest::GrowData() {
460 std::string key1("the first key"); 468 std::string key1("the first key");
461 disk_cache::Entry *entry1, *entry2; 469 disk_cache::Entry *entry1, *entry2;
462 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); 470 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1));
463 471
464 char buffer1[20000]; 472 const int kSize = 20000;
465 char buffer2[20000]; 473 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize);
466 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); 474 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize);
467 memset(buffer2, 0, sizeof(buffer2)); 475 CacheTestFillBuffer(buffer1->data(), kSize, false);
476 memset(buffer2->data(), 0, kSize);
468 477
469 base::strlcpy(buffer1, "the data", arraysize(buffer1)); 478 base::strlcpy(buffer1->data(), "the data", kSize);
470 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, 10, NULL, false)); 479 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, 10, NULL, false));
471 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer2, 10, NULL)); 480 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer2, 10, NULL));
472 EXPECT_STREQ("the data", buffer2); 481 EXPECT_STREQ("the data", buffer2->data());
473 EXPECT_EQ(10, entry1->GetDataSize(0)); 482 EXPECT_EQ(10, entry1->GetDataSize(0));
474 483
475 EXPECT_EQ(2000, entry1->WriteData(0, 0, buffer1, 2000, NULL, false)); 484 EXPECT_EQ(2000, entry1->WriteData(0, 0, buffer1, 2000, NULL, false));
476 EXPECT_EQ(2000, entry1->GetDataSize(0)); 485 EXPECT_EQ(2000, entry1->GetDataSize(0));
477 EXPECT_EQ(2000, entry1->ReadData(0, 0, buffer2, 2000, NULL)); 486 EXPECT_EQ(2000, entry1->ReadData(0, 0, buffer2, 2000, NULL));
478 EXPECT_TRUE(!memcmp(buffer1, buffer2, 2000)); 487 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000));
479 488
480 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, 489 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, kSize, NULL, false));
481 false));
482 EXPECT_EQ(20000, entry1->GetDataSize(0)); 490 EXPECT_EQ(20000, entry1->GetDataSize(0));
483 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, sizeof(buffer2), NULL)); 491 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, kSize, NULL));
484 EXPECT_TRUE(!memcmp(buffer1, buffer2, sizeof(buffer1))); 492 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize));
485 entry1->Close(); 493 entry1->Close();
486 494
487 memset(buffer2, 0, sizeof(buffer2)); 495 memset(buffer2->data(), 0, kSize);
488 ASSERT_TRUE(cache_->CreateEntry("Second key", &entry2)); 496 ASSERT_TRUE(cache_->CreateEntry("Second key", &entry2));
489 EXPECT_EQ(10, entry2->WriteData(0, 0, buffer1, 10, NULL, false)); 497 EXPECT_EQ(10, entry2->WriteData(0, 0, buffer1, 10, NULL, false));
490 EXPECT_EQ(10, entry2->GetDataSize(0)); 498 EXPECT_EQ(10, entry2->GetDataSize(0));
491 entry2->Close(); 499 entry2->Close();
492 500
493 // Go from an internal address to a bigger block size. 501 // Go from an internal address to a bigger block size.
494 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2)); 502 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2));
495 EXPECT_EQ(2000, entry2->WriteData(0, 0, buffer1, 2000, NULL, false)); 503 EXPECT_EQ(2000, entry2->WriteData(0, 0, buffer1, 2000, NULL, false));
496 EXPECT_EQ(2000, entry2->GetDataSize(0)); 504 EXPECT_EQ(2000, entry2->GetDataSize(0));
497 EXPECT_EQ(2000, entry2->ReadData(0, 0, buffer2, 2000, NULL)); 505 EXPECT_EQ(2000, entry2->ReadData(0, 0, buffer2, 2000, NULL));
498 EXPECT_TRUE(!memcmp(buffer1, buffer2, 2000)); 506 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000));
499 entry2->Close(); 507 entry2->Close();
500 memset(buffer2, 0, sizeof(buffer2)); 508 memset(buffer2->data(), 0, kSize);
501 509
502 // Go from an internal address to an external one. 510 // Go from an internal address to an external one.
503 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2)); 511 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2));
504 EXPECT_EQ(20000, entry2->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, 512 EXPECT_EQ(20000, entry2->WriteData(0, 0, buffer1, kSize, NULL, false));
505 false));
506 EXPECT_EQ(20000, entry2->GetDataSize(0)); 513 EXPECT_EQ(20000, entry2->GetDataSize(0));
507 EXPECT_EQ(20000, entry2->ReadData(0, 0, buffer2, sizeof(buffer2), NULL)); 514 EXPECT_EQ(20000, entry2->ReadData(0, 0, buffer2, kSize, NULL));
508 EXPECT_TRUE(!memcmp(buffer1, buffer2, sizeof(buffer1))); 515 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize));
509 entry2->Close(); 516 entry2->Close();
510 } 517 }
511 518
512 TEST_F(DiskCacheEntryTest, GrowData) { 519 TEST_F(DiskCacheEntryTest, GrowData) {
513 InitCache(); 520 InitCache();
514 GrowData(); 521 GrowData();
515 } 522 }
516 523
517 TEST_F(DiskCacheEntryTest, MemoryOnlyGrowData) { 524 TEST_F(DiskCacheEntryTest, MemoryOnlyGrowData) {
518 SetMemoryOnlyMode(); 525 SetMemoryOnlyMode();
519 InitCache(); 526 InitCache();
520 GrowData(); 527 GrowData();
521 } 528 }
522 529
523 void DiskCacheEntryTest::TruncateData() { 530 void DiskCacheEntryTest::TruncateData() {
524 std::string key1("the first key"); 531 std::string key1("the first key");
525 disk_cache::Entry *entry1; 532 disk_cache::Entry *entry1;
526 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); 533 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1));
527 534
528 char buffer1[20000]; 535 const int kSize1 = 20000;
529 char buffer2[20000]; 536 const int kSize2 = 20000;
537 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
538 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
530 539
531 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); 540 CacheTestFillBuffer(buffer1->data(), kSize1, false);
532 memset(buffer2, 0, sizeof(buffer2)); 541 memset(buffer2->data(), 0, kSize2);
533 542
534 // Simple truncation: 543 // Simple truncation:
535 EXPECT_EQ(200, entry1->WriteData(0, 0, buffer1, 200, NULL, false)); 544 EXPECT_EQ(200, entry1->WriteData(0, 0, buffer1, 200, NULL, false));
536 EXPECT_EQ(200, entry1->GetDataSize(0)); 545 EXPECT_EQ(200, entry1->GetDataSize(0));
537 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, false)); 546 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, false));
538 EXPECT_EQ(200, entry1->GetDataSize(0)); 547 EXPECT_EQ(200, entry1->GetDataSize(0));
539 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, true)); 548 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, true));
540 EXPECT_EQ(100, entry1->GetDataSize(0)); 549 EXPECT_EQ(100, entry1->GetDataSize(0));
541 EXPECT_EQ(0, entry1->WriteData(0, 50, buffer1, 0, NULL, true)); 550 EXPECT_EQ(0, entry1->WriteData(0, 50, buffer1, 0, NULL, true));
542 EXPECT_EQ(50, entry1->GetDataSize(0)); 551 EXPECT_EQ(50, entry1->GetDataSize(0));
543 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true)); 552 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true));
544 EXPECT_EQ(0, entry1->GetDataSize(0)); 553 EXPECT_EQ(0, entry1->GetDataSize(0));
545 entry1->Close(); 554 entry1->Close();
546 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); 555 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1));
547 556
548 // Go to an external file. 557 // Go to an external file.
549 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true)); 558 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true));
550 EXPECT_EQ(20000, entry1->GetDataSize(0)); 559 EXPECT_EQ(20000, entry1->GetDataSize(0));
551 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, 20000, NULL)); 560 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, 20000, NULL));
552 EXPECT_TRUE(!memcmp(buffer1, buffer2, 20000)); 561 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000));
553 memset(buffer2, 0, sizeof(buffer2)); 562 memset(buffer2->data(), 0, kSize2);
554 563
555 // External file truncation 564 // External file truncation
556 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, false)); 565 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, false));
557 EXPECT_EQ(20000, entry1->GetDataSize(0)); 566 EXPECT_EQ(20000, entry1->GetDataSize(0));
558 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, true)); 567 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, true));
559 EXPECT_EQ(18000, entry1->GetDataSize(0)); 568 EXPECT_EQ(18000, entry1->GetDataSize(0));
560 EXPECT_EQ(0, entry1->WriteData(0, 17500, buffer1, 0, NULL, true)); 569 EXPECT_EQ(0, entry1->WriteData(0, 17500, buffer1, 0, NULL, true));
561 EXPECT_EQ(17500, entry1->GetDataSize(0)); 570 EXPECT_EQ(17500, entry1->GetDataSize(0));
562 571
563 // And back to an internal block. 572 // And back to an internal block.
564 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true)); 573 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true));
565 EXPECT_EQ(1600, entry1->GetDataSize(0)); 574 EXPECT_EQ(1600, entry1->GetDataSize(0));
566 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer2, 600, NULL)); 575 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer2, 600, NULL));
567 EXPECT_TRUE(!memcmp(buffer1, buffer2, 600)); 576 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 600));
568 EXPECT_EQ(1000, entry1->ReadData(0, 0, buffer2, 1000, NULL)); 577 EXPECT_EQ(1000, entry1->ReadData(0, 0, buffer2, 1000, NULL));
569 EXPECT_TRUE(!memcmp(buffer1, buffer2, 1000)) << "Preserves previous data"; 578 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 1000)) <<
579 "Preserves previous data";
570 580
571 // Go from external file to zero length. 581 // Go from external file to zero length.
572 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true)); 582 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true));
573 EXPECT_EQ(20000, entry1->GetDataSize(0)); 583 EXPECT_EQ(20000, entry1->GetDataSize(0));
574 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true)); 584 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true));
575 EXPECT_EQ(0, entry1->GetDataSize(0)); 585 EXPECT_EQ(0, entry1->GetDataSize(0));
576 586
577 entry1->Close(); 587 entry1->Close();
578 } 588 }
579 589
580 TEST_F(DiskCacheEntryTest, TruncateData) { 590 TEST_F(DiskCacheEntryTest, TruncateData) {
581 InitCache(); 591 InitCache();
582 TruncateData(); 592 TruncateData();
583 593
584 // We generate asynchronous IO that is not really tracked until completion 594 // We generate asynchronous IO that is not really tracked until completion
585 // so we just wait here before running the next test. 595 // so we just wait here before running the next test.
586 MessageLoopHelper helper; 596 MessageLoopHelper helper;
587 helper.WaitUntilCacheIoFinished(1); 597 helper.WaitUntilCacheIoFinished(1);
588 } 598 }
589 599
590 TEST_F(DiskCacheEntryTest, MemoryOnlyTruncateData) { 600 TEST_F(DiskCacheEntryTest, MemoryOnlyTruncateData) {
591 SetMemoryOnlyMode(); 601 SetMemoryOnlyMode();
592 InitCache(); 602 InitCache();
593 TruncateData(); 603 TruncateData();
594 } 604 }
595 605
606 void DiskCacheEntryTest::ZeroLengthIO() {
607 std::string key1("the first key");
608 disk_cache::Entry *entry1;
609 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1));
610
611 EXPECT_EQ(0, entry1->ReadData(0, 0, NULL, 0, NULL));
612 EXPECT_EQ(0, entry1->WriteData(0, 0, NULL, 0, NULL, false));
613
614 // This write should extend the entry.
615 EXPECT_EQ(0, entry1->WriteData(0, 1000, NULL, 0, NULL, false));
616 EXPECT_EQ(0, entry1->ReadData(0, 500, NULL, 0, NULL));
617 EXPECT_EQ(0, entry1->ReadData(0, 2000, NULL, 0, NULL));
618 EXPECT_EQ(1000, entry1->GetDataSize(0));
619 entry1->Close();
620 }
621
622 TEST_F(DiskCacheEntryTest, ZeroLengthIO) {
623 InitCache();
624 ZeroLengthIO();
625 }
626
627 TEST_F(DiskCacheEntryTest, MemoryOnlyZeroLengthIO) {
628 SetMemoryOnlyMode();
629 InitCache();
630 ZeroLengthIO();
631 }
632
596 // Write more than the total cache capacity but to a single entry. |size| is the 633 // Write more than the total cache capacity but to a single entry. |size| is the
597 // amount of bytes to write each time. 634 // amount of bytes to write each time.
598 void DiskCacheEntryTest::ReuseEntry(int size) { 635 void DiskCacheEntryTest::ReuseEntry(int size) {
599 std::string key1("the first key"); 636 std::string key1("the first key");
600 disk_cache::Entry *entry; 637 disk_cache::Entry *entry;
601 ASSERT_TRUE(cache_->CreateEntry(key1, &entry)); 638 ASSERT_TRUE(cache_->CreateEntry(key1, &entry));
602 639
603 entry->Close(); 640 entry->Close();
604 std::string key2("the second key"); 641 std::string key2("the second key");
605 ASSERT_TRUE(cache_->CreateEntry(key2, &entry)); 642 ASSERT_TRUE(cache_->CreateEntry(key2, &entry));
606 643
607 scoped_array<char> buffer(new char[size]); 644 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(size);
608 CacheTestFillBuffer(buffer.get(), size, false); 645 CacheTestFillBuffer(buffer->data(), size, false);
609 646
610 for (int i = 0; i < 15; i++) { 647 for (int i = 0; i < 15; i++) {
611 EXPECT_EQ(0, entry->WriteData(0, 0, buffer.get(), 0, NULL, true)); 648 EXPECT_EQ(0, entry->WriteData(0, 0, buffer, 0, NULL, true));
612 EXPECT_EQ(size, entry->WriteData(0, 0, buffer.get(), size, NULL, false)); 649 EXPECT_EQ(size, entry->WriteData(0, 0, buffer, size, NULL, false));
613 entry->Close(); 650 entry->Close();
614 ASSERT_TRUE(cache_->OpenEntry(key2, &entry)); 651 ASSERT_TRUE(cache_->OpenEntry(key2, &entry));
615 } 652 }
616 653
617 entry->Close(); 654 entry->Close();
618 ASSERT_TRUE(cache_->OpenEntry(key1, &entry)) << "have not evicted this entry"; 655 ASSERT_TRUE(cache_->OpenEntry(key1, &entry)) << "have not evicted this entry";
619 entry->Close(); 656 entry->Close();
620 } 657 }
621 658
622 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { 659 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) {
(...skipping 25 matching lines...) Expand all
648 InitCache(); 685 InitCache();
649 ReuseEntry(10 * 1024); 686 ReuseEntry(10 * 1024);
650 } 687 }
651 688
652 // Reading somewhere that was not written should return zeros. 689 // Reading somewhere that was not written should return zeros.
653 void DiskCacheEntryTest::InvalidData() { 690 void DiskCacheEntryTest::InvalidData() {
654 std::string key1("the first key"); 691 std::string key1("the first key");
655 disk_cache::Entry *entry1; 692 disk_cache::Entry *entry1;
656 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); 693 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1));
657 694
658 char buffer1[20000]; 695 const int kSize1 = 20000;
659 char buffer2[20000]; 696 const int kSize2 = 20000;
660 char buffer3[20000]; 697 const int kSize3 = 20000;
698 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
699 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
700 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3);
661 701
662 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); 702 CacheTestFillBuffer(buffer1->data(), kSize1, false);
663 memset(buffer2, 0, sizeof(buffer2)); 703 memset(buffer2->data(), 0, kSize2);
664 704
665 // Simple data grow: 705 // Simple data grow:
666 EXPECT_EQ(200, entry1->WriteData(0, 400, buffer1, 200, NULL, false)); 706 EXPECT_EQ(200, entry1->WriteData(0, 400, buffer1, 200, NULL, false));
667 EXPECT_EQ(600, entry1->GetDataSize(0)); 707 EXPECT_EQ(600, entry1->GetDataSize(0));
668 EXPECT_EQ(100, entry1->ReadData(0, 300, buffer3, 100, NULL)); 708 EXPECT_EQ(100, entry1->ReadData(0, 300, buffer3, 100, NULL));
669 EXPECT_TRUE(!memcmp(buffer3, buffer2, 100)); 709 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100));
670 entry1->Close(); 710 entry1->Close();
671 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); 711 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1));
672 712
673 // The entry is now on disk. Load it and extend it. 713 // The entry is now on disk. Load it and extend it.
674 EXPECT_EQ(200, entry1->WriteData(0, 800, buffer1, 200, NULL, false)); 714 EXPECT_EQ(200, entry1->WriteData(0, 800, buffer1, 200, NULL, false));
675 EXPECT_EQ(1000, entry1->GetDataSize(0)); 715 EXPECT_EQ(1000, entry1->GetDataSize(0));
676 EXPECT_EQ(100, entry1->ReadData(0, 700, buffer3, 100, NULL)); 716 EXPECT_EQ(100, entry1->ReadData(0, 700, buffer3, 100, NULL));
677 EXPECT_TRUE(!memcmp(buffer3, buffer2, 100)); 717 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100));
678 entry1->Close(); 718 entry1->Close();
679 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); 719 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1));
680 720
681 // This time using truncate. 721 // This time using truncate.
682 EXPECT_EQ(200, entry1->WriteData(0, 1800, buffer1, 200, NULL, true)); 722 EXPECT_EQ(200, entry1->WriteData(0, 1800, buffer1, 200, NULL, true));
683 EXPECT_EQ(2000, entry1->GetDataSize(0)); 723 EXPECT_EQ(2000, entry1->GetDataSize(0));
684 EXPECT_EQ(100, entry1->ReadData(0, 1500, buffer3, 100, NULL)); 724 EXPECT_EQ(100, entry1->ReadData(0, 1500, buffer3, 100, NULL));
685 EXPECT_TRUE(!memcmp(buffer3, buffer2, 100)); 725 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100));
686 726
687 // Go to an external file. 727 // Go to an external file.
688 EXPECT_EQ(200, entry1->WriteData(0, 19800, buffer1, 200, NULL, false)); 728 EXPECT_EQ(200, entry1->WriteData(0, 19800, buffer1, 200, NULL, false));
689 EXPECT_EQ(20000, entry1->GetDataSize(0)); 729 EXPECT_EQ(20000, entry1->GetDataSize(0));
690 EXPECT_EQ(4000, entry1->ReadData(0, 14000, buffer3, 4000, NULL)); 730 EXPECT_EQ(4000, entry1->ReadData(0, 14000, buffer3, 4000, NULL));
691 EXPECT_TRUE(!memcmp(buffer3, buffer2, 4000)); 731 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 4000));
692 732
693 // And back to an internal block. 733 // And back to an internal block.
694 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true)); 734 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true));
695 EXPECT_EQ(1600, entry1->GetDataSize(0)); 735 EXPECT_EQ(1600, entry1->GetDataSize(0));
696 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer3, 600, NULL)); 736 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer3, 600, NULL));
697 EXPECT_TRUE(!memcmp(buffer3, buffer1, 600)); 737 EXPECT_TRUE(!memcmp(buffer3->data(), buffer1->data(), 600));
698 738
699 // Extend it again. 739 // Extend it again.
700 EXPECT_EQ(600, entry1->WriteData(0, 2000, buffer1, 600, NULL, false)); 740 EXPECT_EQ(600, entry1->WriteData(0, 2000, buffer1, 600, NULL, false));
701 EXPECT_EQ(2600, entry1->GetDataSize(0)); 741 EXPECT_EQ(2600, entry1->GetDataSize(0));
702 EXPECT_EQ(200, entry1->ReadData(0, 1800, buffer3, 200, NULL)); 742 EXPECT_EQ(200, entry1->ReadData(0, 1800, buffer3, 200, NULL));
703 EXPECT_TRUE(!memcmp(buffer3, buffer2, 200)); 743 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200));
704 744
705 // And again (with truncation flag). 745 // And again (with truncation flag).
706 EXPECT_EQ(600, entry1->WriteData(0, 3000, buffer1, 600, NULL, true)); 746 EXPECT_EQ(600, entry1->WriteData(0, 3000, buffer1, 600, NULL, true));
707 EXPECT_EQ(3600, entry1->GetDataSize(0)); 747 EXPECT_EQ(3600, entry1->GetDataSize(0));
708 EXPECT_EQ(200, entry1->ReadData(0, 2800, buffer3, 200, NULL)); 748 EXPECT_EQ(200, entry1->ReadData(0, 2800, buffer3, 200, NULL));
709 EXPECT_TRUE(!memcmp(buffer3, buffer2, 200)); 749 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200));
710 750
711 entry1->Close(); 751 entry1->Close();
712 } 752 }
713 753
714 TEST_F(DiskCacheEntryTest, InvalidData) { 754 TEST_F(DiskCacheEntryTest, InvalidData) {
715 InitCache(); 755 InitCache();
716 InvalidData(); 756 InvalidData();
717 } 757 }
718 758
719 TEST_F(DiskCacheEntryTest, MemoryOnlyInvalidData) { 759 TEST_F(DiskCacheEntryTest, MemoryOnlyInvalidData) {
720 SetMemoryOnlyMode(); 760 SetMemoryOnlyMode();
721 InitCache(); 761 InitCache();
722 InvalidData(); 762 InvalidData();
723 } 763 }
724 764
725 void DiskCacheEntryTest::DoomEntry() { 765 void DiskCacheEntryTest::DoomEntry() {
726 std::string key1("the first key"); 766 std::string key1("the first key");
727 disk_cache::Entry *entry1; 767 disk_cache::Entry *entry1;
728 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); 768 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1));
729 entry1->Doom(); 769 entry1->Doom();
730 entry1->Close(); 770 entry1->Close();
731 771
732 char key_buffer[20000]; 772 const int kSize = 20000;
733 CacheTestFillBuffer(key_buffer, sizeof(key_buffer), true); 773 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize);
734 key_buffer[19999] = '\0'; 774 CacheTestFillBuffer(buffer->data(), kSize, true);
775 buffer->data()[19999] = '\0';
735 776
736 key1 = key_buffer; 777 key1 = buffer->data();
737 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); 778 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1));
738 EXPECT_EQ(20000, entry1->WriteData(0, 0, key_buffer, 20000, NULL, false)); 779 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer, kSize, NULL, false));
739 EXPECT_EQ(20000, entry1->WriteData(1, 0, key_buffer, 20000, NULL, false)); 780 EXPECT_EQ(20000, entry1->WriteData(1, 0, buffer, kSize, NULL, false));
740 entry1->Doom(); 781 entry1->Doom();
741 entry1->Close(); 782 entry1->Close();
742 783
743 EXPECT_EQ(0, cache_->GetEntryCount()); 784 EXPECT_EQ(0, cache_->GetEntryCount());
744 } 785 }
745 786
746 TEST_F(DiskCacheEntryTest, DoomEntry) { 787 TEST_F(DiskCacheEntryTest, DoomEntry) {
747 InitCache(); 788 InitCache();
748 DoomEntry(); 789 DoomEntry();
749 } 790 }
750 791
751 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomEntry) { 792 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomEntry) {
752 SetMemoryOnlyMode(); 793 SetMemoryOnlyMode();
753 InitCache(); 794 InitCache();
754 DoomEntry(); 795 DoomEntry();
755 } 796 }
756 797
757 // Verify that basic operations work as expected with doomed entries. 798 // Verify that basic operations work as expected with doomed entries.
758 void DiskCacheEntryTest::DoomedEntry() { 799 void DiskCacheEntryTest::DoomedEntry() {
759 std::string key("the first key"); 800 std::string key("the first key");
760 disk_cache::Entry *entry; 801 disk_cache::Entry *entry;
761 ASSERT_TRUE(cache_->CreateEntry(key, &entry)); 802 ASSERT_TRUE(cache_->CreateEntry(key, &entry));
762 entry->Doom(); 803 entry->Doom();
763 804
764 EXPECT_EQ(0, cache_->GetEntryCount()); 805 EXPECT_EQ(0, cache_->GetEntryCount());
765 Time initial = Time::Now(); 806 Time initial = Time::Now();
766 PlatformThread::Sleep(20); 807 PlatformThread::Sleep(20);
767 808
768 char buffer1[2000]; 809 const int kSize1 = 2000;
769 char buffer2[2000]; 810 const int kSize2 = 2000;
770 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); 811 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
771 memset(buffer2, 0, sizeof(buffer2)); 812 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
813 CacheTestFillBuffer(buffer1->data(), kSize1, false);
814 memset(buffer2->data(), 0, kSize2);
772 815
773 EXPECT_EQ(2000, entry->WriteData(0, 0, buffer1, 2000, NULL, false)); 816 EXPECT_EQ(2000, entry->WriteData(0, 0, buffer1, 2000, NULL, false));
774 EXPECT_EQ(2000, entry->ReadData(0, 0, buffer2, 2000, NULL)); 817 EXPECT_EQ(2000, entry->ReadData(0, 0, buffer2, 2000, NULL));
775 EXPECT_EQ(0, memcmp(buffer1, buffer2, sizeof(buffer1))); 818 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize1));
776 EXPECT_TRUE(initial < entry->GetLastModified()); 819 EXPECT_TRUE(initial < entry->GetLastModified());
777 EXPECT_TRUE(initial < entry->GetLastUsed()); 820 EXPECT_TRUE(initial < entry->GetLastUsed());
778 821
779 entry->Close(); 822 entry->Close();
780 } 823 }
781 824
782 TEST_F(DiskCacheEntryTest, DoomedEntry) { 825 TEST_F(DiskCacheEntryTest, DoomedEntry) {
783 InitCache(); 826 InitCache();
784 DoomEntry(); 827 DoomEntry();
785 } 828 }
786 829
787 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomedEntry) { 830 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomedEntry) {
788 SetMemoryOnlyMode(); 831 SetMemoryOnlyMode();
789 InitCache(); 832 InitCache();
790 DoomEntry(); 833 DoomEntry();
791 } 834 }
792 835
OLDNEW
« no previous file with comments | « net/disk_cache/entry_impl.cc ('k') | net/disk_cache/mem_entry_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698