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