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

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

Powered by Google App Engine
This is Rietveld 408576698