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

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

Issue 10834289: Split net::UploadData into two: for IPC and for upload handling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase + moved ResolveBlobRef from webkit_blob to webkit_glue Created 8 years, 4 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
« no previous file with comments | « webkit/glue/resource_request_body.cc ('k') | webkit/glue/webkit_glue.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "webkit/glue/resource_request_body.h"
6
7 #include "base/file_path.h"
8 #include "base/file_util.h"
9 #include "base/time.h"
10 #include "googleurl/src/gurl.h"
11 #include "net/base/upload_data.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "webkit/blob/blob_storage_controller.h"
14
15 using webkit_blob::BlobData;
16 using webkit_blob::BlobStorageController;
17
18 namespace webkit_glue {
19
20 TEST(ResourceRequestBodyTest, CreateUploadDataWithoutBlob) {
21 scoped_refptr<ResourceRequestBody> request_body = new ResourceRequestBody;
22
23 const char kData[] = "123";
24 const FilePath::StringType kFilePath = FILE_PATH_LITERAL("abc");
25 const uint64 kFileOffset = 10U;
26 const uint64 kFileLength = 100U;
27 const base::Time kFileTime = base::Time::FromDoubleT(999);
28 const int64 kIdentifier = 12345;
29
30 request_body->AppendBytes(kData, arraysize(kData) - 1);
31 request_body->AppendFileRange(FilePath(kFilePath),
32 kFileOffset, kFileLength, kFileTime);
33 request_body->set_identifier(kIdentifier);
34
35 scoped_refptr<net::UploadData> upload =
36 request_body->ResolveElementsAndCreateUploadData(NULL);
37
38 EXPECT_EQ(kIdentifier, upload->identifier());
39 ASSERT_EQ(request_body->elements()->size(), upload->elements()->size());
40
41 const net::UploadElement& e1 = upload->elements()->at(0);
42 EXPECT_EQ(net::UploadElement::TYPE_BYTES, e1.type());
43 EXPECT_EQ(kData, std::string(e1.bytes(), e1.bytes_length()));
44
45 const net::UploadElement& e2 = upload->elements()->at(1);
46 EXPECT_EQ(net::UploadElement::TYPE_FILE, e2.type());
47 EXPECT_EQ(kFilePath, e2.file_path().value());
48 EXPECT_EQ(kFileOffset, e2.file_range_offset());
49 EXPECT_EQ(kFileLength, e2.file_range_length());
50 EXPECT_EQ(kFileTime, e2.expected_file_modification_time());
51 }
52
53 TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadData) {
54 // Setup blob data for testing.
55 base::Time time1, time2;
56 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);
58
59 BlobStorageController blob_storage_controller;
60 scoped_refptr<BlobData> blob_data(new BlobData());
61
62 GURL blob_url0("blob://url_0");
63 blob_storage_controller.AddFinishedBlob(blob_url0, blob_data);
64
65 blob_data->AppendData("BlobData");
66 blob_data->AppendFile(
67 FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1);
68
69 GURL blob_url1("blob://url_1");
70 blob_storage_controller.AddFinishedBlob(blob_url1, blob_data);
71
72 GURL blob_url2("blob://url_2");
73 blob_storage_controller.CloneBlob(blob_url2, blob_url1);
74
75 GURL blob_url3("blob://url_3");
76 blob_storage_controller.CloneBlob(blob_url3, blob_url2);
77
78 // Setup upload data elements for comparison.
79 net::UploadElement blob_element1, blob_element2;
80 blob_element1.SetToBytes(
81 blob_data->items().at(0).data.c_str() +
82 static_cast<int>(blob_data->items().at(0).offset),
83 static_cast<int>(blob_data->items().at(0).length));
84 blob_element2.SetToFilePathRange(
85 blob_data->items().at(1).file_path,
86 blob_data->items().at(1).offset,
87 blob_data->items().at(1).length,
88 blob_data->items().at(1).expected_modification_time);
89
90 net::UploadElement upload_element1, upload_element2;
91 upload_element1.SetToBytes("Hello", 5);
92 upload_element2.SetToFilePathRange(
93 FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2);
94
95 // Test no blob reference.
96 scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody());
97 request_body->AppendBytes(
98 upload_element1.bytes(),
99 upload_element1.bytes_length());
100 request_body->AppendFileRange(
101 upload_element2.file_path(),
102 upload_element2.file_range_offset(),
103 upload_element2.file_range_length(),
104 upload_element2.expected_file_modification_time());
105
106 scoped_refptr<net::UploadData> upload =
107 request_body->ResolveElementsAndCreateUploadData(
108 &blob_storage_controller);
109
110 ASSERT_EQ(upload->elements()->size(), 2U);
111 EXPECT_TRUE(upload->elements()->at(0) == upload_element1);
112 EXPECT_TRUE(upload->elements()->at(1) == upload_element2);
113
114 // Test having only one blob reference that refers to empty blob data.
115 request_body = new ResourceRequestBody();
116 request_body->AppendBlob(blob_url0);
117
118 upload = request_body->ResolveElementsAndCreateUploadData(
119 &blob_storage_controller);
120 ASSERT_EQ(upload->elements()->size(), 0U);
121
122 // Test having only one blob reference.
123 request_body = new ResourceRequestBody();
124 request_body->AppendBlob(blob_url1);
125
126 upload = request_body->ResolveElementsAndCreateUploadData(
127 &blob_storage_controller);
128 ASSERT_EQ(upload->elements()->size(), 2U);
129 EXPECT_TRUE(upload->elements()->at(0) == blob_element1);
130 EXPECT_TRUE(upload->elements()->at(1) == blob_element2);
131
132 // Test having one blob reference at the beginning.
133 request_body = new ResourceRequestBody();
134 request_body->AppendBlob(blob_url1);
135 request_body->AppendBytes(
136 upload_element1.bytes(),
137 upload_element1.bytes_length());
138 request_body->AppendFileRange(
139 upload_element2.file_path(),
140 upload_element2.file_range_offset(),
141 upload_element2.file_range_length(),
142 upload_element2.expected_file_modification_time());
143
144 upload = request_body->ResolveElementsAndCreateUploadData(
145 &blob_storage_controller);
146 ASSERT_EQ(upload->elements()->size(), 4U);
147 EXPECT_TRUE(upload->elements()->at(0) == blob_element1);
148 EXPECT_TRUE(upload->elements()->at(1) == blob_element2);
149 EXPECT_TRUE(upload->elements()->at(2) == upload_element1);
150 EXPECT_TRUE(upload->elements()->at(3) == upload_element2);
151
152 // Test having one blob reference at the end.
153 request_body = new ResourceRequestBody();
154 request_body->AppendBytes(
155 upload_element1.bytes(),
156 upload_element1.bytes_length());
157 request_body->AppendFileRange(
158 upload_element2.file_path(),
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);
163
164 upload = request_body->ResolveElementsAndCreateUploadData(
165 &blob_storage_controller);
166 ASSERT_EQ(upload->elements()->size(), 4U);
167 EXPECT_TRUE(upload->elements()->at(0) == upload_element1);
168 EXPECT_TRUE(upload->elements()->at(1) == upload_element2);
169 EXPECT_TRUE(upload->elements()->at(2) == blob_element1);
170 EXPECT_TRUE(upload->elements()->at(3) == blob_element2);
171
172 // Test having one blob reference in the middle.
173 request_body = new ResourceRequestBody();
174 request_body->AppendBytes(
175 upload_element1.bytes(),
176 upload_element1.bytes_length());
177 request_body->AppendBlob(blob_url1);
178 request_body->AppendFileRange(
179 upload_element2.file_path(),
180 upload_element2.file_range_offset(),
181 upload_element2.file_range_length(),
182 upload_element2.expected_file_modification_time());
183
184 upload = request_body->ResolveElementsAndCreateUploadData(
185 &blob_storage_controller);
186 ASSERT_EQ(upload->elements()->size(), 4U);
187 EXPECT_TRUE(upload->elements()->at(0) == upload_element1);
188 EXPECT_TRUE(upload->elements()->at(1) == blob_element1);
189 EXPECT_TRUE(upload->elements()->at(2) == blob_element2);
190 EXPECT_TRUE(upload->elements()->at(3) == upload_element2);
191
192 // Test having multiple blob references.
193 request_body = new ResourceRequestBody();
194 request_body->AppendBlob(blob_url1);
195 request_body->AppendBytes(
196 upload_element1.bytes(),
197 upload_element1.bytes_length());
198 request_body->AppendBlob(blob_url2);
199 request_body->AppendBlob(blob_url3);
200 request_body->AppendFileRange(
201 upload_element2.file_path(),
202 upload_element2.file_range_offset(),
203 upload_element2.file_range_length(),
204 upload_element2.expected_file_modification_time());
205
206 upload = request_body->ResolveElementsAndCreateUploadData(
207 &blob_storage_controller);
208 ASSERT_EQ(upload->elements()->size(), 8U);
209 EXPECT_TRUE(upload->elements()->at(0) == blob_element1);
210 EXPECT_TRUE(upload->elements()->at(1) == blob_element2);
211 EXPECT_TRUE(upload->elements()->at(2) == upload_element1);
212 EXPECT_TRUE(upload->elements()->at(3) == blob_element1);
213 EXPECT_TRUE(upload->elements()->at(4) == blob_element2);
214 EXPECT_TRUE(upload->elements()->at(5) == blob_element1);
215 EXPECT_TRUE(upload->elements()->at(6) == blob_element2);
216 EXPECT_TRUE(upload->elements()->at(7) == upload_element2);
217 }
218
219 } // namespace webkit_glue
OLDNEW
« no previous file with comments | « webkit/glue/resource_request_body.cc ('k') | webkit/glue/webkit_glue.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698