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

Side by Side Diff: content/browser/fileapi/blob_transport_strategy_unittest.cc

Issue 1098853003: [BlobAsync] Patch 4: Browser Classes & Logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix for template ambiguity Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "storage/browser/blob/blob_transport_strategy.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace storage {
10 namespace {
11
12 class BlobTransportStrategyTest : public testing::Test {
13 public:
14 BlobTransportStrategyTest() {}
15 ~BlobTransportStrategyTest() override {}
16
17 void ClearInfos() { infos_.clear(); }
18
19 void AddMemoryInfo(size_t length) {
20 DataElement bytes;
21 bytes.SetToSharedBytes(nullptr, length);
22 infos_.push_back(bytes);
23 }
24
25 void AddBlobItem() {
kinuko 2015/05/25 08:32:02 AddBlobInfo() of AddBlobItemInfo() to be consisten
dmurph 2015/06/13 00:13:09 Done.
26 DataElement blob;
27 blob.SetToBlob("fakeBlob");
28 infos_.push_back(blob);
29 }
30
31 std::vector<DataElement> infos_;
kinuko 2015/05/25 08:32:02 I don't feel having this as a member variable real
dmurph 2015/06/13 00:13:09 Done.
32 };
33
34 TEST_F(BlobTransportStrategyTest, TestLargeBlockToFile) {
35 BlobTransportStrategy strategy;
36
37 AddMemoryInfo(305);
38 strategy.Initialize(BlobTransportStrategy::MODE_DISK, 100, 200, 400, 300,
39 5000, 100, infos_);
40 EXPECT_EQ(BlobTransportStrategy::ERROR_NONE, strategy.error());
41
42 EXPECT_EQ(1u, strategy.file_handles().size());
43 EXPECT_EQ(305ul, strategy.file_handles().at(0));
44 EXPECT_EQ(1u, strategy.requests().size());
45
46 auto& memory_item_request = strategy.requests().at(0);
47 EXPECT_EQ(0u, memory_item_request.browser_item_index);
48 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
49 EXPECT_EQ(
50 BlobItemBytesRequest::CreateFileRequest(0u, 0u, 0ull, 305ull, 0u, 0ull),
51 memory_item_request.message);
52 }
53
54 TEST_F(BlobTransportStrategyTest, TestLargeBlockToFiles) {
55 BlobTransportStrategy strategy;
56
57 AddMemoryInfo(1000);
58 strategy.Initialize(BlobTransportStrategy::MODE_DISK, 100, 200, 400, 300,
kinuko 2015/05/25 08:32:02 nit: could we explicitly note about some important
dmurph 2015/06/13 00:13:10 Done. Added variables names and better descriptio
59 5000, 100, infos_);
60 EXPECT_EQ(BlobTransportStrategy::ERROR_NONE, strategy.error());
61
62 EXPECT_EQ(3u, strategy.file_handles().size());
63 EXPECT_EQ(400ul, strategy.file_handles().at(0));
64 EXPECT_EQ(400ul, strategy.file_handles().at(1));
65 EXPECT_EQ(200ul, strategy.file_handles().at(2));
66 EXPECT_EQ(3u, strategy.requests().size());
67
68 auto memory_item_request = strategy.requests().at(0);
69 EXPECT_EQ(0u, memory_item_request.browser_item_index);
70 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
71 EXPECT_EQ(
72 BlobItemBytesRequest::CreateFileRequest(0u, 0u, 0ull, 400ull, 0u, 0ull),
73 memory_item_request.message);
74
75 memory_item_request = strategy.requests().at(1);
76 EXPECT_EQ(1u, memory_item_request.browser_item_index);
77 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
78 EXPECT_EQ(
79 BlobItemBytesRequest::CreateFileRequest(1u, 0u, 400ull, 400ull, 1u, 0ull),
80 memory_item_request.message);
81
82 memory_item_request = strategy.requests().at(2);
83 EXPECT_EQ(2u, memory_item_request.browser_item_index);
84 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
85 EXPECT_EQ(
86 BlobItemBytesRequest::CreateFileRequest(2u, 0u, 800ull, 200ull, 2u, 0ull),
87 memory_item_request.message);
88 }
89
90 TEST_F(BlobTransportStrategyTest, TestLargeBlocksConsolidatingInFiles) {
91 BlobTransportStrategy strategy;
92
93 AddMemoryInfo(300);
94 AddBlobItem();
95 AddMemoryInfo(500);
96 // We should have 3 browser items, two files, 400 each.
97 // Browser items 1 and 2 refer to the first file, and browser item 3 is
98 // the second file.
99
100 strategy.Initialize(BlobTransportStrategy::MODE_DISK, 100, 200, 400, 300,
101 5000, 100, infos_);
102 EXPECT_EQ(BlobTransportStrategy::ERROR_NONE, strategy.error());
103
104 EXPECT_EQ(2u, strategy.file_handles().size());
105 EXPECT_EQ(400ul, strategy.file_handles().at(0));
106 EXPECT_EQ(400ul, strategy.file_handles().at(1));
107 EXPECT_EQ(3u, strategy.requests().size());
108
109 auto memory_item_request = strategy.requests().at(0);
110 EXPECT_EQ(0u, memory_item_request.browser_item_index);
111 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
112 EXPECT_EQ(
113 BlobItemBytesRequest::CreateFileRequest(0u, 0u, 0ull, 300ull, 0u, 0ull),
114 memory_item_request.message);
115
116 memory_item_request = strategy.requests().at(1);
117 EXPECT_EQ(2u, memory_item_request.browser_item_index);
118 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
119 EXPECT_EQ(
120 BlobItemBytesRequest::CreateFileRequest(1u, 2u, 0ull, 100ull, 0u, 300ull),
121 memory_item_request.message);
122
123 memory_item_request = strategy.requests().at(2);
124 EXPECT_EQ(3u, memory_item_request.browser_item_index);
125 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
126 EXPECT_EQ(
127 BlobItemBytesRequest::CreateFileRequest(2u, 2u, 100ull, 400ull, 1u, 0ull),
128 memory_item_request.message);
129 }
130
131 TEST_F(BlobTransportStrategyTest, TestSharedMemorySegmentation) {
132 BlobTransportStrategy strategy;
133
134 AddMemoryInfo(500);
135 // For transport we should have 3 shared memories, and then storage in 3
136 // browser items.
137
138 strategy.Initialize(BlobTransportStrategy::MODE_DISK, 100, 200, 300, 1000,
139 5000, 100, infos_);
140 EXPECT_EQ(BlobTransportStrategy::ERROR_NONE, strategy.error());
141
142 EXPECT_EQ(3u, strategy.shared_memory_handles().size());
143 EXPECT_EQ(200u, strategy.shared_memory_handles().at(0));
144 EXPECT_EQ(200u, strategy.shared_memory_handles().at(1));
145 EXPECT_EQ(100u, strategy.shared_memory_handles().at(2));
146 EXPECT_EQ(3u, strategy.requests().size());
147
148 auto memory_item_request = strategy.requests().at(0);
149 EXPECT_EQ(0u, memory_item_request.browser_item_index);
150 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
151 EXPECT_EQ(BlobItemBytesRequest::CreateSharedMemoryRequest(0u, 0u, 0ull,
152 200ull, 0u, 0ull),
153 memory_item_request.message);
154
155 memory_item_request = strategy.requests().at(1);
156 EXPECT_EQ(1u, memory_item_request.browser_item_index);
157 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
158 EXPECT_EQ(BlobItemBytesRequest::CreateSharedMemoryRequest(1u, 0u, 200ull,
159 200ull, 1u, 0ull),
160 memory_item_request.message);
161
162 memory_item_request = strategy.requests().at(2);
163 EXPECT_EQ(2u, memory_item_request.browser_item_index);
164 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
165 EXPECT_EQ(BlobItemBytesRequest::CreateSharedMemoryRequest(2u, 0u, 400ull,
166 100ull, 2u, 0ull),
167 memory_item_request.message);
168 }
169
170 TEST_F(BlobTransportStrategyTest, TestSharedMemorySegmentationAndStorage) {
171 BlobTransportStrategy strategy;
172
173 AddMemoryInfo(100);
174 AddBlobItem();
175 AddMemoryInfo(200);
176 // For transport, we should have 2 shared memories, where the first one
177 // have half 0 and half 3, and then the last one has half 3
178 //
179 // For storage, we should have 3 browser items that match the pre-transport
180 // version.
181
182 strategy.Initialize(BlobTransportStrategy::MODE_DISK, 100, 200, 300, 1000,
183 5000, 100, infos_);
184 EXPECT_EQ(BlobTransportStrategy::ERROR_NONE, strategy.error());
185
186 EXPECT_EQ(2u, strategy.shared_memory_handles().size());
187 EXPECT_EQ(200u, strategy.shared_memory_handles().at(0));
188 EXPECT_EQ(100u, strategy.shared_memory_handles().at(1));
189 EXPECT_EQ(3u, strategy.requests().size());
190
191 auto memory_item_request = strategy.requests().at(0);
192 EXPECT_EQ(0u, memory_item_request.browser_item_index);
193 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
194 EXPECT_EQ(BlobItemBytesRequest::CreateSharedMemoryRequest(0u, 0u, 0ull,
195 100ull, 0u, 0ull),
196 memory_item_request.message);
197
198 memory_item_request = strategy.requests().at(1);
199 EXPECT_EQ(2u, memory_item_request.browser_item_index);
200 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
201 EXPECT_EQ(BlobItemBytesRequest::CreateSharedMemoryRequest(1u, 2u, 0ull,
202 100ull, 0u, 100ull),
203 memory_item_request.message);
204
205 memory_item_request = strategy.requests().at(2);
206 EXPECT_EQ(2u, memory_item_request.browser_item_index);
207 EXPECT_EQ(100u, memory_item_request.browser_item_offset);
208 EXPECT_EQ(BlobItemBytesRequest::CreateSharedMemoryRequest(2u, 2u, 100ull,
209 100ull, 1u, 0ull),
210 memory_item_request.message);
211 }
212
213 TEST_F(BlobTransportStrategyTest, TestTooLarge) {
214 BlobTransportStrategy strategy;
215
216 AddMemoryInfo(5001);
217
218 strategy.Initialize(BlobTransportStrategy::MODE_DISK, 100, 200, 400, 300,
219 5000, 100, infos_);
220
221 EXPECT_EQ(0u, strategy.file_handles().size());
222 EXPECT_EQ(0u, strategy.shared_memory_handles().size());
223 EXPECT_EQ(0u, strategy.requests().size());
224 EXPECT_EQ(BlobTransportStrategy::ERROR_TOO_LARGE, strategy.error());
225 }
226
227 TEST_F(BlobTransportStrategyTest, TestNoDisk) {
228 BlobTransportStrategy strategy;
229
230 AddMemoryInfo(301);
231
232 strategy.Initialize(BlobTransportStrategy::MODE_NO_DISK, 100, 200, 400, 300,
233 5000, 300, infos_);
234
235 EXPECT_EQ(0u, strategy.file_handles().size());
236 EXPECT_EQ(0u, strategy.shared_memory_handles().size());
237 EXPECT_EQ(0u, strategy.requests().size());
238 EXPECT_EQ(BlobTransportStrategy::ERROR_TOO_LARGE, strategy.error());
239 }
240
241 TEST_F(BlobTransportStrategyTest, TestNoDiskFits) {
242 BlobTransportStrategy strategy;
243
244 AddMemoryInfo(301);
245
246 strategy.Initialize(BlobTransportStrategy::MODE_NO_DISK, 100, 200, 400, 300,
247 5000, 301, infos_);
248
249 EXPECT_EQ(0u, strategy.file_handles().size());
250 EXPECT_EQ(2u, strategy.shared_memory_handles().size());
251 EXPECT_EQ(2u, strategy.requests().size());
252 EXPECT_EQ(BlobTransportStrategy::ERROR_NONE, strategy.error());
253 }
254
255 TEST_F(BlobTransportStrategyTest, TestIPC) {
256 BlobTransportStrategy strategy;
257
258 AddMemoryInfo(10);
259 AddBlobItem();
260
261 strategy.Initialize(BlobTransportStrategy::MODE_DISK, 100, 200, 400, 300,
262 5000, 100, infos_);
263 EXPECT_EQ(BlobTransportStrategy::ERROR_NONE, strategy.error());
264
265 EXPECT_EQ(1u, strategy.requests().size());
266
267 auto memory_item_request = strategy.requests().at(0);
268 EXPECT_EQ(0u, memory_item_request.browser_item_index);
269 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
270 EXPECT_EQ(BlobItemBytesRequest::CreateIPCRequest(0u, 0u, 0ull, 10ull),
271 memory_item_request.message);
272
273 ClearInfos();
274 AddMemoryInfo(10);
275 AddBlobItem();
276 AddMemoryInfo(80);
277
278 strategy.Initialize(BlobTransportStrategy::MODE_DISK, 100, 200, 400, 300,
279 5000, 100, infos_);
280 EXPECT_EQ(BlobTransportStrategy::ERROR_NONE, strategy.error());
281
282 EXPECT_EQ(2u, strategy.requests().size());
283
284 memory_item_request = strategy.requests().at(0);
285 EXPECT_EQ(0u, memory_item_request.browser_item_index);
286 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
287 EXPECT_EQ(BlobItemBytesRequest::CreateIPCRequest(0u, 0u, 0ull, 10ull),
288 memory_item_request.message);
289
290 memory_item_request = strategy.requests().at(1);
291 EXPECT_EQ(2u, memory_item_request.browser_item_index);
292 EXPECT_EQ(0u, memory_item_request.browser_item_offset);
293 EXPECT_EQ(BlobItemBytesRequest::CreateIPCRequest(1u, 2u, 0ull, 80ull),
294 memory_item_request.message);
295 }
296
297 } // namespace
298 } // namespace storage
OLDNEW
« no previous file with comments | « no previous file | content/content_tests.gypi » ('j') | storage/browser/blob/blob_transport_strategy.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698