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

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

Issue 11439008: net: Change argument of URLRequest::set_upload from UploadData to UploadDataStream (Closed) Base URL: http://git.chromium.org/chromium/src.git@chunk
Patch Set: Fix android Created 8 years 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
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>
8
7 #include "base/file_path.h" 9 #include "base/file_path.h"
8 #include "base/file_util.h" 10 #include "base/file_util.h"
9 #include "base/time.h" 11 #include "base/time.h"
10 #include "googleurl/src/gurl.h" 12 #include "googleurl/src/gurl.h"
11 #include "net/base/upload_data.h" 13 #include "net/base/upload_bytes_element_reader.h"
14 #include "net/base/upload_data_stream.h"
15 #include "net/base/upload_file_element_reader.h"
12 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
13 #include "webkit/blob/blob_storage_controller.h" 17 #include "webkit/blob/blob_storage_controller.h"
14 18
15 using webkit_blob::BlobData; 19 using webkit_blob::BlobData;
16 using webkit_blob::BlobStorageController; 20 using webkit_blob::BlobStorageController;
17 21
18 namespace webkit_glue { 22 namespace webkit_glue {
19 23
20 TEST(ResourceRequestBodyTest, CreateUploadDataWithoutBlob) { 24 namespace {
25
26 bool AreElementsEqual(const net::UploadElementReader& reader,
27 const ResourceRequestBody::Element& element) {
28 switch(element.type()) {
29 case ResourceRequestBody::Element::TYPE_BYTES: {
30 const net::UploadBytesElementReader* bytes_reader =
31 reader.AsBytesReader();
32 return bytes_reader &&
33 element.length() == bytes_reader->length() &&
34 std::equal(element.bytes(), element.bytes() + element.length(),
35 bytes_reader->bytes());
36 }
37 case ResourceRequestBody::Element::TYPE_FILE: {
38 const net::UploadFileElementReader* file_reader = reader.AsFileReader();
39 return file_reader &&
40 file_reader->path() == element.path() &&
41 file_reader->range_offset() == element.offset() &&
42 file_reader->range_length() == element.length() &&
43 file_reader->expected_modification_time() ==
44 element.expected_modification_time();
45 break;
46 }
47 default:
48 NOTREACHED();
49 }
50 return false;
51 }
52
53 } // namespace
54
55 TEST(ResourceRequestBodyTest, CreateUploadDataStreamWithoutBlob) {
21 scoped_refptr<ResourceRequestBody> request_body = new ResourceRequestBody; 56 scoped_refptr<ResourceRequestBody> request_body = new ResourceRequestBody;
22 57
23 const char kData[] = "123"; 58 const char kData[] = "123";
24 const FilePath::StringType kFilePath = FILE_PATH_LITERAL("abc"); 59 const FilePath::StringType kFilePath = FILE_PATH_LITERAL("abc");
25 const uint64 kFileOffset = 10U; 60 const uint64 kFileOffset = 10U;
26 const uint64 kFileLength = 100U; 61 const uint64 kFileLength = 100U;
27 const base::Time kFileTime = base::Time::FromDoubleT(999); 62 const base::Time kFileTime = base::Time::FromDoubleT(999);
28 const int64 kIdentifier = 12345; 63 const int64 kIdentifier = 12345;
29 64
30 request_body->AppendBytes(kData, arraysize(kData) - 1); 65 request_body->AppendBytes(kData, arraysize(kData) - 1);
31 request_body->AppendFileRange(FilePath(kFilePath), 66 request_body->AppendFileRange(FilePath(kFilePath),
32 kFileOffset, kFileLength, kFileTime); 67 kFileOffset, kFileLength, kFileTime);
33 request_body->set_identifier(kIdentifier); 68 request_body->set_identifier(kIdentifier);
34 69
35 scoped_refptr<net::UploadData> upload = 70 scoped_ptr<net::UploadDataStream> upload(
36 request_body->ResolveElementsAndCreateUploadData(NULL); 71 request_body->ResolveElementsAndCreateUploadDataStream(NULL));
37 72
38 EXPECT_EQ(kIdentifier, upload->identifier()); 73 EXPECT_EQ(kIdentifier, upload->identifier());
39 ASSERT_EQ(request_body->elements()->size(), upload->elements().size()); 74 ASSERT_EQ(request_body->elements()->size(), upload->element_readers().size());
40 75
41 const net::UploadElement& e1 = *upload->elements()[0]; 76 const net::UploadBytesElementReader* r1 =
42 EXPECT_EQ(net::UploadElement::TYPE_BYTES, e1.type()); 77 upload->element_readers()[0]->AsBytesReader();
43 EXPECT_EQ(kData, std::string(e1.bytes(), e1.bytes_length())); 78 ASSERT_TRUE(r1);
79 EXPECT_EQ(kData, std::string(r1->bytes(), r1->length()));
44 80
45 const net::UploadElement& e2 = *upload->elements()[1]; 81 const net::UploadFileElementReader* r2 =
46 EXPECT_EQ(net::UploadElement::TYPE_FILE, e2.type()); 82 upload->element_readers()[1]->AsFileReader();
47 EXPECT_EQ(kFilePath, e2.file_path().value()); 83 ASSERT_TRUE(r2);
48 EXPECT_EQ(kFileOffset, e2.file_range_offset()); 84 EXPECT_EQ(kFilePath, r2->path().value());
49 EXPECT_EQ(kFileLength, e2.file_range_length()); 85 EXPECT_EQ(kFileOffset, r2->range_offset());
50 EXPECT_EQ(kFileTime, e2.expected_file_modification_time()); 86 EXPECT_EQ(kFileLength, r2->range_length());
87 EXPECT_EQ(kFileTime, r2->expected_modification_time());
51 } 88 }
52 89
53 TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadData) { 90 TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadDataStream) {
54 // Setup blob data for testing. 91 // Setup blob data for testing.
55 base::Time time1, time2; 92 base::Time time1, time2;
56 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); 93 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1);
57 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2); 94 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2);
58 95
59 BlobStorageController blob_storage_controller; 96 BlobStorageController blob_storage_controller;
60 scoped_refptr<BlobData> blob_data(new BlobData()); 97 scoped_refptr<BlobData> blob_data(new BlobData());
61 98
62 GURL blob_url0("blob://url_0"); 99 GURL blob_url0("blob://url_0");
63 blob_storage_controller.AddFinishedBlob(blob_url0, blob_data); 100 blob_storage_controller.AddFinishedBlob(blob_url0, blob_data);
64 101
65 blob_data->AppendData("BlobData"); 102 blob_data->AppendData("BlobData");
66 blob_data->AppendFile( 103 blob_data->AppendFile(
67 FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1); 104 FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1);
68 105
69 GURL blob_url1("blob://url_1"); 106 GURL blob_url1("blob://url_1");
70 blob_storage_controller.AddFinishedBlob(blob_url1, blob_data); 107 blob_storage_controller.AddFinishedBlob(blob_url1, blob_data);
71 108
72 GURL blob_url2("blob://url_2"); 109 GURL blob_url2("blob://url_2");
73 blob_storage_controller.CloneBlob(blob_url2, blob_url1); 110 blob_storage_controller.CloneBlob(blob_url2, blob_url1);
74 111
75 GURL blob_url3("blob://url_3"); 112 GURL blob_url3("blob://url_3");
76 blob_storage_controller.CloneBlob(blob_url3, blob_url2); 113 blob_storage_controller.CloneBlob(blob_url3, blob_url2);
77 114
78 // Setup upload data elements for comparison. 115 // Setup upload data elements for comparison.
79 net::UploadElement blob_element1, blob_element2; 116 ResourceRequestBody::Element blob_element1, blob_element2;
80 blob_element1.SetToBytes( 117 blob_element1.SetToBytes(
81 blob_data->items().at(0).bytes() + 118 blob_data->items().at(0).bytes() +
82 static_cast<int>(blob_data->items().at(0).offset()), 119 static_cast<int>(blob_data->items().at(0).offset()),
83 static_cast<int>(blob_data->items().at(0).length())); 120 static_cast<int>(blob_data->items().at(0).length()));
84 blob_element2.SetToFilePathRange( 121 blob_element2.SetToFilePathRange(
85 blob_data->items().at(1).path(), 122 blob_data->items().at(1).path(),
86 blob_data->items().at(1).offset(), 123 blob_data->items().at(1).offset(),
87 blob_data->items().at(1).length(), 124 blob_data->items().at(1).length(),
88 blob_data->items().at(1).expected_modification_time()); 125 blob_data->items().at(1).expected_modification_time());
89 126
90 net::UploadElement upload_element1, upload_element2; 127 ResourceRequestBody::Element upload_element1, upload_element2;
91 upload_element1.SetToBytes("Hello", 5); 128 upload_element1.SetToBytes("Hello", 5);
92 upload_element2.SetToFilePathRange( 129 upload_element2.SetToFilePathRange(
93 FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2); 130 FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2);
94 131
95 // Test no blob reference. 132 // Test no blob reference.
96 scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody()); 133 scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody());
97 request_body->AppendBytes( 134 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
98 upload_element1.bytes(), 135 request_body->AppendFileRange(upload_element2.path(),
99 upload_element1.bytes_length()); 136 upload_element2.offset(),
100 request_body->AppendFileRange( 137 upload_element2.length(),
101 upload_element2.file_path(), 138 upload_element2.expected_modification_time());
102 upload_element2.file_range_offset(),
103 upload_element2.file_range_length(),
104 upload_element2.expected_file_modification_time());
105 139
106 scoped_refptr<net::UploadData> upload = 140 scoped_ptr<net::UploadDataStream> upload(
107 request_body->ResolveElementsAndCreateUploadData( 141 request_body->ResolveElementsAndCreateUploadDataStream(
108 &blob_storage_controller); 142 &blob_storage_controller));
109 143
110 ASSERT_EQ(2U, upload->elements().size()); 144 ASSERT_EQ(2U, upload->element_readers().size());
111 EXPECT_TRUE(*upload->elements()[0] == upload_element1); 145 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
112 EXPECT_TRUE(*upload->elements()[1] == upload_element2); 146 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2));
113 147
114 // Test having only one blob reference that refers to empty blob data. 148 // Test having only one blob reference that refers to empty blob data.
115 request_body = new ResourceRequestBody(); 149 request_body = new ResourceRequestBody();
116 request_body->AppendBlob(blob_url0); 150 request_body->AppendBlob(blob_url0);
117 151
118 upload = request_body->ResolveElementsAndCreateUploadData( 152 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
119 &blob_storage_controller); 153 &blob_storage_controller));
120 ASSERT_EQ(0U, upload->elements().size()); 154 ASSERT_EQ(0U, upload->element_readers().size());
121 155
122 // Test having only one blob reference. 156 // Test having only one blob reference.
123 request_body = new ResourceRequestBody(); 157 request_body = new ResourceRequestBody();
124 request_body->AppendBlob(blob_url1); 158 request_body->AppendBlob(blob_url1);
125 159
126 upload = request_body->ResolveElementsAndCreateUploadData( 160 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
127 &blob_storage_controller); 161 &blob_storage_controller));
128 ASSERT_EQ(2U, upload->elements().size()); 162 ASSERT_EQ(2U, upload->element_readers().size());
129 EXPECT_TRUE(*upload->elements()[0] == blob_element1); 163 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
130 EXPECT_TRUE(*upload->elements()[1] == blob_element2); 164 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));
131 165
132 // Test having one blob reference at the beginning. 166 // Test having one blob reference at the beginning.
133 request_body = new ResourceRequestBody(); 167 request_body = new ResourceRequestBody();
134 request_body->AppendBlob(blob_url1); 168 request_body->AppendBlob(blob_url1);
135 request_body->AppendBytes( 169 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
136 upload_element1.bytes(), 170 request_body->AppendFileRange(upload_element2.path(),
137 upload_element1.bytes_length()); 171 upload_element2.offset(),
138 request_body->AppendFileRange( 172 upload_element2.length(),
139 upload_element2.file_path(), 173 upload_element2.expected_modification_time());
140 upload_element2.file_range_offset(),
141 upload_element2.file_range_length(),
142 upload_element2.expected_file_modification_time());
143 174
144 upload = request_body->ResolveElementsAndCreateUploadData( 175 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
145 &blob_storage_controller); 176 &blob_storage_controller));
146 ASSERT_EQ(4U, upload->elements().size()); 177 ASSERT_EQ(4U, upload->element_readers().size());
147 EXPECT_TRUE(*upload->elements()[0] == blob_element1); 178 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
148 EXPECT_TRUE(*upload->elements()[1] == blob_element2); 179 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));
149 EXPECT_TRUE(*upload->elements()[2] == upload_element1); 180 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1));
150 EXPECT_TRUE(*upload->elements()[3] == upload_element2); 181 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2));
151 182
152 // Test having one blob reference at the end. 183 // Test having one blob reference at the end.
153 request_body = new ResourceRequestBody(); 184 request_body = new ResourceRequestBody();
154 request_body->AppendBytes( 185 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
155 upload_element1.bytes(), 186 request_body->AppendFileRange(upload_element2.path(),
156 upload_element1.bytes_length()); 187 upload_element2.offset(),
157 request_body->AppendFileRange( 188 upload_element2.length(),
158 upload_element2.file_path(), 189 upload_element2.expected_modification_time());
159 upload_element2.file_range_offset(),
160 upload_element2.file_range_length(),
161 upload_element2.expected_file_modification_time());
162 request_body->AppendBlob(blob_url1); 190 request_body->AppendBlob(blob_url1);
163 191
164 upload = request_body->ResolveElementsAndCreateUploadData( 192 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
165 &blob_storage_controller); 193 &blob_storage_controller));
166 ASSERT_EQ(4U, upload->elements().size()); 194 ASSERT_EQ(4U, upload->element_readers().size());
167 EXPECT_TRUE(*upload->elements()[0] == upload_element1); 195 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
168 EXPECT_TRUE(*upload->elements()[1] == upload_element2); 196 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2));
169 EXPECT_TRUE(*upload->elements()[2] == blob_element1); 197 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element1));
170 EXPECT_TRUE(*upload->elements()[3] == blob_element2); 198 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element2));
171 199
172 // Test having one blob reference in the middle. 200 // Test having one blob reference in the middle.
173 request_body = new ResourceRequestBody(); 201 request_body = new ResourceRequestBody();
174 request_body->AppendBytes( 202 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
175 upload_element1.bytes(),
176 upload_element1.bytes_length());
177 request_body->AppendBlob(blob_url1); 203 request_body->AppendBlob(blob_url1);
178 request_body->AppendFileRange( 204 request_body->AppendFileRange(upload_element2.path(),
179 upload_element2.file_path(), 205 upload_element2.offset(),
180 upload_element2.file_range_offset(), 206 upload_element2.length(),
181 upload_element2.file_range_length(), 207 upload_element2.expected_modification_time());
182 upload_element2.expected_file_modification_time());
183 208
184 upload = request_body->ResolveElementsAndCreateUploadData( 209 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
185 &blob_storage_controller); 210 &blob_storage_controller));
186 ASSERT_EQ(4U, upload->elements().size()); 211 ASSERT_EQ(4U, upload->element_readers().size());
187 EXPECT_TRUE(*upload->elements()[0] == upload_element1); 212 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
188 EXPECT_TRUE(*upload->elements()[1] == blob_element1); 213 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element1));
189 EXPECT_TRUE(*upload->elements()[2] == blob_element2); 214 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element2));
190 EXPECT_TRUE(*upload->elements()[3] == upload_element2); 215 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2));
191 216
192 // Test having multiple blob references. 217 // Test having multiple blob references.
193 request_body = new ResourceRequestBody(); 218 request_body = new ResourceRequestBody();
194 request_body->AppendBlob(blob_url1); 219 request_body->AppendBlob(blob_url1);
195 request_body->AppendBytes( 220 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
196 upload_element1.bytes(),
197 upload_element1.bytes_length());
198 request_body->AppendBlob(blob_url2); 221 request_body->AppendBlob(blob_url2);
199 request_body->AppendBlob(blob_url3); 222 request_body->AppendBlob(blob_url3);
200 request_body->AppendFileRange( 223 request_body->AppendFileRange(upload_element2.path(),
201 upload_element2.file_path(), 224 upload_element2.offset(),
202 upload_element2.file_range_offset(), 225 upload_element2.length(),
203 upload_element2.file_range_length(), 226 upload_element2.expected_modification_time());
204 upload_element2.expected_file_modification_time());
205 227
206 upload = request_body->ResolveElementsAndCreateUploadData( 228 upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
207 &blob_storage_controller); 229 &blob_storage_controller));
208 ASSERT_EQ(8U, upload->elements().size()); 230 ASSERT_EQ(8U, upload->element_readers().size());
209 EXPECT_TRUE(*upload->elements()[0] == blob_element1); 231 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
210 EXPECT_TRUE(*upload->elements()[1] == blob_element2); 232 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));
211 EXPECT_TRUE(*upload->elements()[2] == upload_element1); 233 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1));
212 EXPECT_TRUE(*upload->elements()[3] == blob_element1); 234 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element1));
213 EXPECT_TRUE(*upload->elements()[4] == blob_element2); 235 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[4], blob_element2));
214 EXPECT_TRUE(*upload->elements()[5] == blob_element1); 236 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[5], blob_element1));
215 EXPECT_TRUE(*upload->elements()[6] == blob_element2); 237 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[6], blob_element2));
216 EXPECT_TRUE(*upload->elements()[7] == upload_element2); 238 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[7], upload_element2));
217 } 239 }
218 240
219 } // namespace webkit_glue 241 } // namespace webkit_glue
OLDNEW
« no previous file with comments | « webkit/glue/resource_request_body.cc ('k') | webkit/tools/test_shell/simple_resource_loader_bridge.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698