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

Side by Side Diff: webkit/glue/resource_request_body_unittest.cc

Issue 11416382: ********** Content tests with blob hacking. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 8 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/glue/resource_request_body.h" 5 #include "webkit/glue/resource_request_body.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/message_loop_proxy.h" 12 #include "base/message_loop_proxy.h"
13 #include "base/time.h" 13 #include "base/time.h"
14 #include "googleurl/src/gurl.h" 14 #include "googleurl/src/gurl.h"
15 #include "net/base/upload_bytes_element_reader.h" 15 #include "net/base/upload_bytes_element_reader.h"
16 #include "net/base/upload_data_stream.h" 16 #include "net/base/upload_data_stream.h"
17 #include "net/base/upload_file_element_reader.h" 17 #include "net/base/upload_file_element_reader.h"
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "webkit/blob/blob_storage_controller.h" 19 #include "webkit/blob/blob_storage_context.h"
20 20
21 using webkit_blob::BlobData; 21 using webkit_blob::BlobData;
22 using webkit_blob::BlobStorageController; 22 using webkit_blob::BlobStorageContext;
23 23
24 namespace webkit_glue { 24 namespace webkit_glue {
25 25
26 namespace { 26 namespace {
27 27
28 bool AreElementsEqual(const net::UploadElementReader& reader, 28 bool AreElementsEqual(const net::UploadElementReader& reader,
29 const ResourceRequestBody::Element& element) { 29 const ResourceRequestBody::Element& element) {
30 switch(element.type()) { 30 switch(element.type()) {
31 case ResourceRequestBody::Element::TYPE_BYTES: { 31 case ResourceRequestBody::Element::TYPE_BYTES: {
32 const net::UploadBytesElementReader* bytes_reader = 32 const net::UploadBytesElementReader* bytes_reader =
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 EXPECT_EQ(kFileTime, r2->expected_modification_time()); 91 EXPECT_EQ(kFileTime, r2->expected_modification_time());
92 } 92 }
93 93
94 TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadDataStream) { 94 TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadDataStream) {
95 MessageLoop message_loop; 95 MessageLoop message_loop;
96 // Setup blob data for testing. 96 // Setup blob data for testing.
97 base::Time time1, time2; 97 base::Time time1, time2;
98 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); 98 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1);
99 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2); 99 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2);
100 100
101 BlobStorageController blob_storage_controller; 101 BlobStorageContext blob_storage_context;
102 scoped_refptr<BlobData> blob_data(new BlobData());
103 102
104 GURL blob_url0("blob://url_0"); 103 const std::string blob_id0("id-0");
105 blob_storage_controller.AddFinishedBlob(blob_url0, blob_data); 104 scoped_refptr<BlobData> blob_data(new BlobData(blob_id0));
105 blob_storage_context.AddFinishedBlob(blob_data);
106 106
107 const std::string blob_id1("id-1");
108 blob_data = new BlobData(blob_id1);
107 blob_data->AppendData("BlobData"); 109 blob_data->AppendData("BlobData");
108 blob_data->AppendFile( 110 blob_data->AppendFile(
109 base::FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1); 111 base::FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1);
110 112 blob_storage_context.AddFinishedBlob(blob_data);
111 GURL blob_url1("blob://url_1");
112 blob_storage_controller.AddFinishedBlob(blob_url1, blob_data);
113
114 GURL blob_url2("blob://url_2");
115 blob_storage_controller.CloneBlob(blob_url2, blob_url1);
116
117 GURL blob_url3("blob://url_3");
118 blob_storage_controller.CloneBlob(blob_url3, blob_url2);
119 113
120 // Setup upload data elements for comparison. 114 // Setup upload data elements for comparison.
121 ResourceRequestBody::Element blob_element1, blob_element2; 115 ResourceRequestBody::Element blob_element1, blob_element2;
122 blob_element1.SetToBytes( 116 blob_element1.SetToBytes(
123 blob_data->items().at(0).bytes() + 117 blob_data->items().at(0).bytes() +
124 static_cast<int>(blob_data->items().at(0).offset()), 118 static_cast<int>(blob_data->items().at(0).offset()),
125 static_cast<int>(blob_data->items().at(0).length())); 119 static_cast<int>(blob_data->items().at(0).length()));
126 blob_element2.SetToFilePathRange( 120 blob_element2.SetToFilePathRange(
127 blob_data->items().at(1).path(), 121 blob_data->items().at(1).path(),
128 blob_data->items().at(1).offset(), 122 blob_data->items().at(1).offset(),
129 blob_data->items().at(1).length(), 123 blob_data->items().at(1).length(),
130 blob_data->items().at(1).expected_modification_time()); 124 blob_data->items().at(1).expected_modification_time());
131 125
132 ResourceRequestBody::Element upload_element1, upload_element2; 126 ResourceRequestBody::Element upload_element1, upload_element2;
133 upload_element1.SetToBytes("Hello", 5); 127 upload_element1.SetToBytes("Hello", 5);
134 upload_element2.SetToFilePathRange( 128 upload_element2.SetToFilePathRange(
135 base::FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2); 129 base::FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2);
136 130
137 // Test no blob reference. 131 // Test no blob reference.
138 scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody()); 132 scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody());
139 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); 133 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
140 request_body->AppendFileRange(upload_element2.path(), 134 request_body->AppendFileRange(upload_element2.path(),
141 upload_element2.offset(), 135 upload_element2.offset(),
142 upload_element2.length(), 136 upload_element2.length(),
143 upload_element2.expected_modification_time()); 137 upload_element2.expected_modification_time());
144 138
145 scoped_ptr<net::UploadDataStream> upload( 139 scoped_ptr<net::UploadDataStream> upload(
146 request_body->ResolveElementsAndCreateUploadDataStream( 140 request_body->ResolveElementsAndCreateUploadDataStream(
147 &blob_storage_controller, NULL, base::MessageLoopProxy::current())); 141 &blob_storage_context, NULL, base::MessageLoopProxy::current()));
148 142
149 ASSERT_EQ(2U, upload->element_readers().size()); 143 ASSERT_EQ(2U, upload->element_readers().size());
150 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); 144 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
151 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2)); 145 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2));
152 146
153 // Test having only one blob reference that refers to empty blob data. 147 // Test having only one blob reference that refers to empty blob data.
154 request_body = new ResourceRequestBody(); 148 request_body = new ResourceRequestBody();
155 request_body->AppendBlob(blob_url0); 149 request_body->AppendBlob(blob_id0);
156 150
157 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream( 151 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
158 &blob_storage_controller, NULL, base::MessageLoopProxy::current())); 152 &blob_storage_context, NULL, base::MessageLoopProxy::current()));
159 ASSERT_EQ(0U, upload->element_readers().size()); 153 ASSERT_EQ(0U, upload->element_readers().size());
160 154
161 // Test having only one blob reference. 155 // Test having only one blob reference.
162 request_body = new ResourceRequestBody(); 156 request_body = new ResourceRequestBody();
163 request_body->AppendBlob(blob_url1); 157 request_body->AppendBlob(blob_id1);
164 158
165 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream( 159 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
166 &blob_storage_controller, NULL, base::MessageLoopProxy::current())); 160 &blob_storage_context, NULL, base::MessageLoopProxy::current()));
167 ASSERT_EQ(2U, upload->element_readers().size()); 161 ASSERT_EQ(2U, upload->element_readers().size());
168 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); 162 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
169 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); 163 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));
170 164
171 // Test having one blob reference at the beginning. 165 // Test having one blob reference at the beginning.
172 request_body = new ResourceRequestBody(); 166 request_body = new ResourceRequestBody();
173 request_body->AppendBlob(blob_url1); 167 request_body->AppendBlob(blob_id1);
174 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); 168 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
175 request_body->AppendFileRange(upload_element2.path(), 169 request_body->AppendFileRange(upload_element2.path(),
176 upload_element2.offset(), 170 upload_element2.offset(),
177 upload_element2.length(), 171 upload_element2.length(),
178 upload_element2.expected_modification_time()); 172 upload_element2.expected_modification_time());
179 173
180 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream( 174 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
181 &blob_storage_controller, NULL, base::MessageLoopProxy::current())); 175 &blob_storage_context, NULL, base::MessageLoopProxy::current()));
182 ASSERT_EQ(4U, upload->element_readers().size()); 176 ASSERT_EQ(4U, upload->element_readers().size());
183 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); 177 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
184 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); 178 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));
185 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1)); 179 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1));
186 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2)); 180 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2));
187 181
188 // Test having one blob reference at the end. 182 // Test having one blob reference at the end.
189 request_body = new ResourceRequestBody(); 183 request_body = new ResourceRequestBody();
190 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); 184 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
191 request_body->AppendFileRange(upload_element2.path(), 185 request_body->AppendFileRange(upload_element2.path(),
192 upload_element2.offset(), 186 upload_element2.offset(),
193 upload_element2.length(), 187 upload_element2.length(),
194 upload_element2.expected_modification_time()); 188 upload_element2.expected_modification_time());
195 request_body->AppendBlob(blob_url1); 189 request_body->AppendBlob(blob_id1);
196 190
197 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream( 191 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
198 &blob_storage_controller, NULL, base::MessageLoopProxy::current())); 192 &blob_storage_context, NULL, base::MessageLoopProxy::current()));
199 ASSERT_EQ(4U, upload->element_readers().size()); 193 ASSERT_EQ(4U, upload->element_readers().size());
200 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); 194 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
201 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2)); 195 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2));
202 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element1)); 196 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element1));
203 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element2)); 197 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element2));
204 198
205 // Test having one blob reference in the middle. 199 // Test having one blob reference in the middle.
206 request_body = new ResourceRequestBody(); 200 request_body = new ResourceRequestBody();
207 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); 201 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
208 request_body->AppendBlob(blob_url1); 202 request_body->AppendBlob(blob_id1);
209 request_body->AppendFileRange(upload_element2.path(), 203 request_body->AppendFileRange(upload_element2.path(),
210 upload_element2.offset(), 204 upload_element2.offset(),
211 upload_element2.length(), 205 upload_element2.length(),
212 upload_element2.expected_modification_time()); 206 upload_element2.expected_modification_time());
213 207
214 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream( 208 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
215 &blob_storage_controller, NULL, base::MessageLoopProxy::current())); 209 &blob_storage_context, NULL, base::MessageLoopProxy::current()));
216 ASSERT_EQ(4U, upload->element_readers().size()); 210 ASSERT_EQ(4U, upload->element_readers().size());
217 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); 211 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
218 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element1)); 212 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element1));
219 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element2)); 213 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element2));
220 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2)); 214 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2));
221 215
222 // Test having multiple blob references. 216 // Test having multiple blob references.
223 request_body = new ResourceRequestBody(); 217 request_body = new ResourceRequestBody();
224 request_body->AppendBlob(blob_url1); 218 request_body->AppendBlob(blob_id1);
225 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); 219 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
226 request_body->AppendBlob(blob_url2); 220 request_body->AppendBlob(blob_id1);
227 request_body->AppendBlob(blob_url3); 221 request_body->AppendBlob(blob_id1);
228 request_body->AppendFileRange(upload_element2.path(), 222 request_body->AppendFileRange(upload_element2.path(),
229 upload_element2.offset(), 223 upload_element2.offset(),
230 upload_element2.length(), 224 upload_element2.length(),
231 upload_element2.expected_modification_time()); 225 upload_element2.expected_modification_time());
232 226
233 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream( 227 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
234 &blob_storage_controller, NULL, base::MessageLoopProxy::current())); 228 &blob_storage_context, NULL, base::MessageLoopProxy::current()));
235 ASSERT_EQ(8U, upload->element_readers().size()); 229 ASSERT_EQ(8U, upload->element_readers().size());
236 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); 230 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
237 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); 231 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));
238 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1)); 232 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1));
239 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element1)); 233 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element1));
240 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[4], blob_element2)); 234 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[4], blob_element2));
241 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[5], blob_element1)); 235 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[5], blob_element1));
242 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[6], blob_element2)); 236 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[6], blob_element2));
243 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[7], upload_element2)); 237 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[7], upload_element2));
244 } 238 }
245 239
246 } // namespace webkit_glue 240 } // namespace webkit_glue
OLDNEW
« no previous file with comments | « webkit/fileapi/webfilewriter_base_unittest.cc ('k') | webkit/tools/test_shell/simple_file_system.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698