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

Side by Side Diff: webkit/blob/blob_storage_controller_unittest.cc

Issue 7974011: Break large blobs into multiple ipcs during creation. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/file_path.h" 5 #include "base/file_path.h"
6 #include "base/memory/ref_counted.h" 6 #include "base/memory/ref_counted.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/time.h" 8 #include "base/time.h"
9 #include "net/base/upload_data.h" 9 #include "net/base/upload_data.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "webkit/blob/blob_data.h" 11 #include "webkit/blob/blob_data.h"
12 #include "webkit/blob/blob_storage_controller.h" 12 #include "webkit/blob/blob_storage_controller.h"
13 13
14 using net::UploadData; 14 using net::UploadData;
15 15
16 namespace webkit_blob { 16 namespace webkit_blob {
17 17
18 namespace {
19
20 void RegisterBlobUrl(BlobStorageController* controller,
21 const GURL& url, const BlobData* data) {
22 controller->RegisterUnfinalizedBlobUrl(url);
23 for (std::vector<BlobData::Item>::const_iterator iter =
24 data->items().begin();
25 iter != data->items().end(); ++iter) {
26 controller->AppendBlobDataItem(url, *iter);
27 }
28 controller->FinalizeBlob(url, data->content_type());
29 }
30
31 }
32
18 TEST(BlobStorageControllerTest, RegisterBlobUrl) { 33 TEST(BlobStorageControllerTest, RegisterBlobUrl) {
19 // Setup a set of blob data for testing. 34 // Setup a set of blob data for testing.
20 base::Time time1, time2; 35 base::Time time1, time2;
21 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); 36 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1);
22 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2); 37 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2);
23 38
24 scoped_refptr<BlobData> blob_data1(new BlobData()); 39 scoped_refptr<BlobData> blob_data1(new BlobData());
25 blob_data1->AppendData("Data1"); 40 blob_data1->AppendData("Data1");
26 blob_data1->AppendData("Data2"); 41 blob_data1->AppendData("Data2");
27 blob_data1->AppendFile(FilePath(FILE_PATH_LITERAL("File1.txt")), 42 blob_data1->AppendFile(FilePath(FILE_PATH_LITERAL("File1.txt")),
28 10, 1024, time1); 43 10, 1024, time1);
29 44
30 scoped_refptr<BlobData> blob_data2(new BlobData()); 45 scoped_refptr<BlobData> blob_data2(new BlobData());
31 blob_data2->AppendData("Data3"); 46 blob_data2->AppendData("Data3");
32 blob_data2->AppendBlob(GURL("blob://url_1"), 8, 100); 47 blob_data2->AppendBlob(GURL("blob://url_1"), 8, 100);
33 blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File2.txt")), 48 blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File2.txt")),
34 0, 20, time2); 49 0, 20, time2);
35 50
36 scoped_refptr<BlobData> canonicalized_blob_data2(new BlobData()); 51 scoped_refptr<BlobData> canonicalized_blob_data2(new BlobData());
37 canonicalized_blob_data2->AppendData("Data3"); 52 canonicalized_blob_data2->AppendData("Data3");
38 canonicalized_blob_data2->AppendData("Data2", 3, 2); 53 canonicalized_blob_data2->AppendData("Data2", 3, 2);
39 canonicalized_blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File1.txt")), 54 canonicalized_blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File1.txt")),
40 10, 98, time1); 55 10, 98, time1);
41 canonicalized_blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File2.txt")), 56 canonicalized_blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File2.txt")),
42 0, 20, time2); 57 0, 20, time2);
43 58
44 scoped_ptr<BlobStorageController> blob_storage_controller( 59 BlobStorageController blob_storage_controller;
45 new BlobStorageController());
46 60
47 // Test registering a blob URL referring to the blob data containing only 61 // Test registering a blob URL referring to the blob data containing only
48 // data and file. 62 // data and file.
49 GURL blob_url1("blob://url_1"); 63 GURL blob_url1("blob://url_1");
50 blob_storage_controller->RegisterBlobUrl(blob_url1, blob_data1); 64 RegisterBlobUrl(&blob_storage_controller, blob_url1, blob_data1);
51 65
52 BlobData* blob_data_found = 66 BlobData* blob_data_found =
53 blob_storage_controller->GetBlobDataFromUrl(blob_url1); 67 blob_storage_controller.GetBlobDataFromUrl(blob_url1);
54 ASSERT_TRUE(blob_data_found != NULL); 68 ASSERT_TRUE(blob_data_found != NULL);
55 EXPECT_TRUE(*blob_data_found == *blob_data1); 69 EXPECT_TRUE(*blob_data_found == *blob_data1);
56 70
57 // Test registering a blob URL referring to the blob data containing data, 71 // Test registering a blob URL referring to the blob data containing data,
58 // file and blob. 72 // file and blob.
59 GURL blob_url2("blob://url_2"); 73 GURL blob_url2("blob://url_2");
60 blob_storage_controller->RegisterBlobUrl(blob_url2, blob_data2); 74 RegisterBlobUrl(&blob_storage_controller, blob_url2, blob_data2);
61 75
62 blob_data_found = blob_storage_controller->GetBlobDataFromUrl(blob_url2); 76 blob_data_found = blob_storage_controller.GetBlobDataFromUrl(blob_url2);
63 ASSERT_TRUE(blob_data_found != NULL); 77 ASSERT_TRUE(blob_data_found != NULL);
64 EXPECT_TRUE(*blob_data_found == *canonicalized_blob_data2); 78 EXPECT_TRUE(*blob_data_found == *canonicalized_blob_data2);
65 79
66 // Test registering a blob URL referring to existent blob URL. 80 // Test registering a blob URL referring to existent blob URL.
67 GURL blob_url3("blob://url_3"); 81 GURL blob_url3("blob://url_3");
68 blob_storage_controller->RegisterBlobUrlFrom(blob_url3, blob_url1); 82 blob_storage_controller.RegisterBlobUrlFrom(blob_url3, blob_url1);
69 83
70 blob_data_found = blob_storage_controller->GetBlobDataFromUrl(blob_url3); 84 blob_data_found = blob_storage_controller.GetBlobDataFromUrl(blob_url3);
71 ASSERT_TRUE(blob_data_found != NULL); 85 ASSERT_TRUE(blob_data_found != NULL);
72 EXPECT_TRUE(*blob_data_found == *blob_data1); 86 EXPECT_TRUE(*blob_data_found == *blob_data1);
73 87
74 // Test unregistering a blob URL. 88 // Test unregistering a blob URL.
75 blob_storage_controller->UnregisterBlobUrl(blob_url3); 89 blob_storage_controller.UnregisterBlobUrl(blob_url3);
76 blob_data_found = blob_storage_controller->GetBlobDataFromUrl(blob_url3); 90 blob_data_found = blob_storage_controller.GetBlobDataFromUrl(blob_url3);
77 EXPECT_TRUE(!blob_data_found); 91 EXPECT_TRUE(!blob_data_found);
78 } 92 }
79 93
80 TEST(BlobStorageControllerTest, ResolveBlobReferencesInUploadData) { 94 TEST(BlobStorageControllerTest, ResolveBlobReferencesInUploadData) {
81 // Setup blob data for testing. 95 // Setup blob data for testing.
82 base::Time time1, time2; 96 base::Time time1, time2;
83 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); 97 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1);
84 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2); 98 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2);
85 99
86 scoped_ptr<BlobStorageController> blob_storage_controller( 100 BlobStorageController blob_storage_controller;
87 new BlobStorageController());
88
89 scoped_refptr<BlobData> blob_data(new BlobData()); 101 scoped_refptr<BlobData> blob_data(new BlobData());
90 102
91 GURL blob_url0("blob://url_0"); 103 GURL blob_url0("blob://url_0");
92 blob_storage_controller->RegisterBlobUrl(blob_url0, blob_data); 104 RegisterBlobUrl(&blob_storage_controller, blob_url0, blob_data);
93 105
94 blob_data->AppendData("BlobData"); 106 blob_data->AppendData("BlobData");
95 blob_data->AppendFile( 107 blob_data->AppendFile(
96 FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1); 108 FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1);
97 109
98 GURL blob_url1("blob://url_1"); 110 GURL blob_url1("blob://url_1");
99 blob_storage_controller->RegisterBlobUrl(blob_url1, blob_data); 111 RegisterBlobUrl(&blob_storage_controller, blob_url1, blob_data);
100 112
101 GURL blob_url2("blob://url_2"); 113 GURL blob_url2("blob://url_2");
102 blob_storage_controller->RegisterBlobUrlFrom(blob_url2, blob_url1); 114 blob_storage_controller.RegisterBlobUrlFrom(blob_url2, blob_url1);
103 115
104 GURL blob_url3("blob://url_3"); 116 GURL blob_url3("blob://url_3");
105 blob_storage_controller->RegisterBlobUrlFrom(blob_url3, blob_url2); 117 blob_storage_controller.RegisterBlobUrlFrom(blob_url3, blob_url2);
106 118
107 // Setup upload data elements for comparison. 119 // Setup upload data elements for comparison.
108 UploadData::Element blob_element1, blob_element2; 120 UploadData::Element blob_element1, blob_element2;
109 blob_element1.SetToBytes( 121 blob_element1.SetToBytes(
110 blob_data->items().at(0).data().c_str() + 122 blob_data->items().at(0).data().c_str() +
111 static_cast<int>(blob_data->items().at(0).offset()), 123 static_cast<int>(blob_data->items().at(0).offset()),
112 static_cast<int>(blob_data->items().at(0).length())); 124 static_cast<int>(blob_data->items().at(0).length()));
113 blob_element2.SetToFilePathRange( 125 blob_element2.SetToFilePathRange(
114 blob_data->items().at(1).file_path(), 126 blob_data->items().at(1).file_path(),
115 blob_data->items().at(1).offset(), 127 blob_data->items().at(1).offset(),
116 blob_data->items().at(1).length(), 128 blob_data->items().at(1).length(),
117 blob_data->items().at(1).expected_modification_time()); 129 blob_data->items().at(1).expected_modification_time());
118 130
119 UploadData::Element upload_element1, upload_element2; 131 UploadData::Element upload_element1, upload_element2;
120 upload_element1.SetToBytes("Hello", 5); 132 upload_element1.SetToBytes("Hello", 5);
121 upload_element2.SetToFilePathRange( 133 upload_element2.SetToFilePathRange(
122 FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2); 134 FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2);
123 135
124 // Test no blob reference. 136 // Test no blob reference.
125 scoped_refptr<UploadData> upload_data(new UploadData()); 137 scoped_refptr<UploadData> upload_data(new UploadData());
126 upload_data->AppendBytes( 138 upload_data->AppendBytes(
127 &upload_element1.bytes().at(0), 139 &upload_element1.bytes().at(0),
128 upload_element1.bytes().size()); 140 upload_element1.bytes().size());
129 upload_data->AppendFileRange( 141 upload_data->AppendFileRange(
130 upload_element2.file_path(), 142 upload_element2.file_path(),
131 upload_element2.file_range_offset(), 143 upload_element2.file_range_offset(),
132 upload_element2.file_range_length(), 144 upload_element2.file_range_length(),
133 upload_element2.expected_file_modification_time()); 145 upload_element2.expected_file_modification_time());
134 146
135 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 147 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
136 ASSERT_EQ(upload_data->elements()->size(), 2U); 148 ASSERT_EQ(upload_data->elements()->size(), 2U);
137 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1); 149 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1);
138 EXPECT_TRUE(upload_data->elements()->at(1) == upload_element2); 150 EXPECT_TRUE(upload_data->elements()->at(1) == upload_element2);
139 151
140 // Test having only one blob reference that refers to empty blob data. 152 // Test having only one blob reference that refers to empty blob data.
141 upload_data = new UploadData(); 153 upload_data = new UploadData();
142 upload_data->AppendBlob(blob_url0); 154 upload_data->AppendBlob(blob_url0);
143 155
144 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 156 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
145 ASSERT_EQ(upload_data->elements()->size(), 0U); 157 ASSERT_EQ(upload_data->elements()->size(), 0U);
146 158
147 // Test having only one blob reference. 159 // Test having only one blob reference.
148 upload_data = new UploadData(); 160 upload_data = new UploadData();
149 upload_data->AppendBlob(blob_url1); 161 upload_data->AppendBlob(blob_url1);
150 162
151 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 163 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
152 ASSERT_EQ(upload_data->elements()->size(), 2U); 164 ASSERT_EQ(upload_data->elements()->size(), 2U);
153 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1); 165 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1);
154 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2); 166 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2);
155 167
156 // Test having one blob reference at the beginning. 168 // Test having one blob reference at the beginning.
157 upload_data = new UploadData(); 169 upload_data = new UploadData();
158 upload_data->AppendBlob(blob_url1); 170 upload_data->AppendBlob(blob_url1);
159 upload_data->AppendBytes( 171 upload_data->AppendBytes(
160 &upload_element1.bytes().at(0), 172 &upload_element1.bytes().at(0),
161 upload_element1.bytes().size()); 173 upload_element1.bytes().size());
162 upload_data->AppendFileRange( 174 upload_data->AppendFileRange(
163 upload_element2.file_path(), 175 upload_element2.file_path(),
164 upload_element2.file_range_offset(), 176 upload_element2.file_range_offset(),
165 upload_element2.file_range_length(), 177 upload_element2.file_range_length(),
166 upload_element2.expected_file_modification_time()); 178 upload_element2.expected_file_modification_time());
167 179
168 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 180 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
169 ASSERT_EQ(upload_data->elements()->size(), 4U); 181 ASSERT_EQ(upload_data->elements()->size(), 4U);
170 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1); 182 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1);
171 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2); 183 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2);
172 EXPECT_TRUE(upload_data->elements()->at(2) == upload_element1); 184 EXPECT_TRUE(upload_data->elements()->at(2) == upload_element1);
173 EXPECT_TRUE(upload_data->elements()->at(3) == upload_element2); 185 EXPECT_TRUE(upload_data->elements()->at(3) == upload_element2);
174 186
175 // Test having one blob reference at the end. 187 // Test having one blob reference at the end.
176 upload_data = new UploadData(); 188 upload_data = new UploadData();
177 upload_data->AppendBytes( 189 upload_data->AppendBytes(
178 &upload_element1.bytes().at(0), 190 &upload_element1.bytes().at(0),
179 upload_element1.bytes().size()); 191 upload_element1.bytes().size());
180 upload_data->AppendFileRange( 192 upload_data->AppendFileRange(
181 upload_element2.file_path(), 193 upload_element2.file_path(),
182 upload_element2.file_range_offset(), 194 upload_element2.file_range_offset(),
183 upload_element2.file_range_length(), 195 upload_element2.file_range_length(),
184 upload_element2.expected_file_modification_time()); 196 upload_element2.expected_file_modification_time());
185 upload_data->AppendBlob(blob_url1); 197 upload_data->AppendBlob(blob_url1);
186 198
187 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 199 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
188 ASSERT_EQ(upload_data->elements()->size(), 4U); 200 ASSERT_EQ(upload_data->elements()->size(), 4U);
189 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1); 201 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1);
190 EXPECT_TRUE(upload_data->elements()->at(1) == upload_element2); 202 EXPECT_TRUE(upload_data->elements()->at(1) == upload_element2);
191 EXPECT_TRUE(upload_data->elements()->at(2) == blob_element1); 203 EXPECT_TRUE(upload_data->elements()->at(2) == blob_element1);
192 EXPECT_TRUE(upload_data->elements()->at(3) == blob_element2); 204 EXPECT_TRUE(upload_data->elements()->at(3) == blob_element2);
193 205
194 // Test having one blob reference in the middle. 206 // Test having one blob reference in the middle.
195 upload_data = new UploadData(); 207 upload_data = new UploadData();
196 upload_data->AppendBytes( 208 upload_data->AppendBytes(
197 &upload_element1.bytes().at(0), 209 &upload_element1.bytes().at(0),
198 upload_element1.bytes().size()); 210 upload_element1.bytes().size());
199 upload_data->AppendBlob(blob_url1); 211 upload_data->AppendBlob(blob_url1);
200 upload_data->AppendFileRange( 212 upload_data->AppendFileRange(
201 upload_element2.file_path(), 213 upload_element2.file_path(),
202 upload_element2.file_range_offset(), 214 upload_element2.file_range_offset(),
203 upload_element2.file_range_length(), 215 upload_element2.file_range_length(),
204 upload_element2.expected_file_modification_time()); 216 upload_element2.expected_file_modification_time());
205 217
206 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 218 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
207 ASSERT_EQ(upload_data->elements()->size(), 4U); 219 ASSERT_EQ(upload_data->elements()->size(), 4U);
208 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1); 220 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1);
209 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element1); 221 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element1);
210 EXPECT_TRUE(upload_data->elements()->at(2) == blob_element2); 222 EXPECT_TRUE(upload_data->elements()->at(2) == blob_element2);
211 EXPECT_TRUE(upload_data->elements()->at(3) == upload_element2); 223 EXPECT_TRUE(upload_data->elements()->at(3) == upload_element2);
212 224
213 // Test having multiple blob references. 225 // Test having multiple blob references.
214 upload_data = new UploadData(); 226 upload_data = new UploadData();
215 upload_data->AppendBlob(blob_url1); 227 upload_data->AppendBlob(blob_url1);
216 upload_data->AppendBytes( 228 upload_data->AppendBytes(
217 &upload_element1.bytes().at(0), 229 &upload_element1.bytes().at(0),
218 upload_element1.bytes().size()); 230 upload_element1.bytes().size());
219 upload_data->AppendBlob(blob_url2); 231 upload_data->AppendBlob(blob_url2);
220 upload_data->AppendBlob(blob_url3); 232 upload_data->AppendBlob(blob_url3);
221 upload_data->AppendFileRange( 233 upload_data->AppendFileRange(
222 upload_element2.file_path(), 234 upload_element2.file_path(),
223 upload_element2.file_range_offset(), 235 upload_element2.file_range_offset(),
224 upload_element2.file_range_length(), 236 upload_element2.file_range_length(),
225 upload_element2.expected_file_modification_time()); 237 upload_element2.expected_file_modification_time());
226 238
227 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 239 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
228 ASSERT_EQ(upload_data->elements()->size(), 8U); 240 ASSERT_EQ(upload_data->elements()->size(), 8U);
229 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1); 241 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1);
230 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2); 242 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2);
231 EXPECT_TRUE(upload_data->elements()->at(2) == upload_element1); 243 EXPECT_TRUE(upload_data->elements()->at(2) == upload_element1);
232 EXPECT_TRUE(upload_data->elements()->at(3) == blob_element1); 244 EXPECT_TRUE(upload_data->elements()->at(3) == blob_element1);
233 EXPECT_TRUE(upload_data->elements()->at(4) == blob_element2); 245 EXPECT_TRUE(upload_data->elements()->at(4) == blob_element2);
234 EXPECT_TRUE(upload_data->elements()->at(5) == blob_element1); 246 EXPECT_TRUE(upload_data->elements()->at(5) == blob_element1);
235 EXPECT_TRUE(upload_data->elements()->at(6) == blob_element2); 247 EXPECT_TRUE(upload_data->elements()->at(6) == blob_element2);
236 EXPECT_TRUE(upload_data->elements()->at(7) == upload_element2); 248 EXPECT_TRUE(upload_data->elements()->at(7) == upload_element2);
237 } 249 }
238 250
239 } // namespace webkit_blob 251 } // namespace webkit_blob
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698