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

Side by Side Diff: content/child/blob_storage/blob_transport_controller_unittest.cc

Issue 1234813004: [BlobAsync] Asynchronous Blob Construction Final Patch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@blob-protocol-change
Patch Set: comments Created 5 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "content/child/blob_storage/blob_transport_controller.h" 5 #include "content/child/blob_storage/blob_transport_controller.h"
6 6
7 #include "base/memory/shared_memory.h" 7 #include "base/memory/shared_memory.h"
8 #include "content/child/blob_storage/blob_consolidation.h" 8 #include "content/child/blob_storage/blob_consolidation.h"
9 #include "content/common/fileapi/webblob_messages.h"
10 #include "ipc/ipc_sender.h"
9 #include "storage/common/blob_storage/blob_item_bytes_request.h" 11 #include "storage/common/blob_storage/blob_item_bytes_request.h"
10 #include "storage/common/blob_storage/blob_item_bytes_response.h" 12 #include "storage/common/blob_storage/blob_item_bytes_response.h"
11 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
13 15
14 using storage::BlobItemBytesRequest; 16 using storage::BlobItemBytesRequest;
15 using storage::BlobItemBytesResponse; 17 using storage::BlobItemBytesResponse;
16 using storage::DataElement; 18 using storage::DataElement;
17 19
18 namespace content { 20 namespace content {
19 namespace { 21 namespace {
20 22
23 class MockIPCSender : public IPC::Sender {
24 public:
25 MockIPCSender() {}
26 ~MockIPCSender() override {}
27
28 MOCK_METHOD1(Send, bool(IPC::Message* msg));
29 };
30
21 BlobItemBytesResponse ResponseWithData(size_t request_number, 31 BlobItemBytesResponse ResponseWithData(size_t request_number,
22 const std::string& str) { 32 const std::string& str) {
23 BlobItemBytesResponse response(request_number); 33 BlobItemBytesResponse response(request_number);
24 response.inline_data.assign(str.begin(), str.end()); 34 response.inline_data.assign(str.begin(), str.end());
25 return response; 35 return response;
26 } 36 }
27 37
28 static DataElement MakeBlobElement(const std::string& uuid, 38 static DataElement MakeBlobElement(const std::string& uuid,
29 uint64_t offset, 39 uint64_t offset,
30 uint64_t size) { 40 uint64_t size) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 103
94 // The first two data elements should be combined. 104 // The first two data elements should be combined.
95 BlobConsolidation* consolidation = new BlobConsolidation(); 105 BlobConsolidation* consolidation = new BlobConsolidation();
96 consolidation->AddBlobItem(KRefBlobUUID, 10, 10); 106 consolidation->AddBlobItem(KRefBlobUUID, 10, 10);
97 consolidation->AddDataItem(CreateData("Hello")); 107 consolidation->AddDataItem(CreateData("Hello"));
98 consolidation->AddDataItem(CreateData("Hello2")); 108 consolidation->AddDataItem(CreateData("Hello2"));
99 consolidation->AddBlobItem(KRefBlobUUID, 0, 10); 109 consolidation->AddBlobItem(KRefBlobUUID, 0, 10);
100 consolidation->AddDataItem(CreateData("Hello3")); 110 consolidation->AddDataItem(CreateData("Hello3"));
101 // See the above test for the expected descriptions layout. 111 // See the above test for the expected descriptions layout.
102 112
103 holder->blob_storage_.insert( 113 holder->blob_storage_[kBlobUUID] = make_scoped_ptr(consolidation);
104 std::make_pair(kBlobUUID, make_scoped_ptr(consolidation)));
105 114
106 std::vector<BlobItemBytesRequest> requests; 115 std::vector<BlobItemBytesRequest> requests;
107 std::vector<base::SharedMemoryHandle> memory_handles; 116 std::vector<base::SharedMemoryHandle> memory_handles;
108 std::vector<IPC::PlatformFileForTransit> file_handles; 117 std::vector<IPC::PlatformFileForTransit> file_handles;
109 std::vector<storage::BlobItemBytesResponse> output; 118 std::vector<storage::BlobItemBytesResponse> output;
110 119
111 // Request for all of first data 120 // Request for all of first data
112 requests.push_back(BlobItemBytesRequest::CreateIPCRequest(0, 1, 0, 11)); 121 requests.push_back(BlobItemBytesRequest::CreateIPCRequest(0, 1, 0, 11));
113 EXPECT_EQ(ResponsesStatus::SUCCESS, 122 EXPECT_EQ(ResponsesStatus::SUCCESS,
114 holder->GetResponses(kBlobUUID, requests, &memory_handles, 123 holder->GetResponses(kBlobUUID, requests, &memory_handles,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 161
153 // The first two data elements should be combined. 162 // The first two data elements should be combined.
154 BlobConsolidation* consolidation = new BlobConsolidation(); 163 BlobConsolidation* consolidation = new BlobConsolidation();
155 consolidation->AddBlobItem(KRefBlobUUID, 10, 10); 164 consolidation->AddBlobItem(KRefBlobUUID, 10, 10);
156 consolidation->AddDataItem(CreateData("Hello")); 165 consolidation->AddDataItem(CreateData("Hello"));
157 consolidation->AddDataItem(CreateData("Hello2")); 166 consolidation->AddDataItem(CreateData("Hello2"));
158 consolidation->AddBlobItem(KRefBlobUUID, 0, 10); 167 consolidation->AddBlobItem(KRefBlobUUID, 0, 10);
159 consolidation->AddDataItem(CreateData("Hello3")); 168 consolidation->AddDataItem(CreateData("Hello3"));
160 // See the above test for the expected descriptions layout. 169 // See the above test for the expected descriptions layout.
161 170
162 holder->blob_storage_.insert( 171 holder->blob_storage_[kBlobUUID] = make_scoped_ptr(consolidation);
163 std::make_pair(kBlobUUID, make_scoped_ptr(consolidation)));
164 172
165 std::vector<BlobItemBytesRequest> requests; 173 std::vector<BlobItemBytesRequest> requests;
166 std::vector<base::SharedMemoryHandle> memory_handles; 174 std::vector<base::SharedMemoryHandle> memory_handles;
167 std::vector<IPC::PlatformFileForTransit> file_handles; 175 std::vector<IPC::PlatformFileForTransit> file_handles;
168 std::vector<storage::BlobItemBytesResponse> output; 176 std::vector<storage::BlobItemBytesResponse> output;
169 177
170 // Request for all data in shared memory 178 // Request for all data in shared memory
171 requests.push_back( 179 requests.push_back(
172 BlobItemBytesRequest::CreateSharedMemoryRequest(0, 1, 0, 11, 0, 0)); 180 BlobItemBytesRequest::CreateSharedMemoryRequest(0, 1, 0, 11, 0, 0));
173 requests.push_back( 181 requests.push_back(
(...skipping 17 matching lines...) Expand all
191 const char* mem_location = static_cast<const char*>(memory.memory()); 199 const char* mem_location = static_cast<const char*>(memory.memory());
192 std::vector<char> value(mem_location, mem_location + memory.requested_size()); 200 std::vector<char> value(mem_location, mem_location + memory.requested_size());
193 EXPECT_THAT(value, testing::ElementsAreArray(expected_memory.c_str(), 201 EXPECT_THAT(value, testing::ElementsAreArray(expected_memory.c_str(),
194 expected_memory.size())); 202 expected_memory.size()));
195 } 203 }
196 204
197 TEST_F(BlobTransportControllerTest, TestPublicMethods) { 205 TEST_F(BlobTransportControllerTest, TestPublicMethods) {
198 const std::string kBlobUUID = "uuid"; 206 const std::string kBlobUUID = "uuid";
199 const std::string KRefBlobUUID = "refuuid"; 207 const std::string KRefBlobUUID = "refuuid";
200 const std::string kBadBlobUUID = "uuuidBad"; 208 const std::string kBadBlobUUID = "uuuidBad";
209 MockIPCSender mock_sender;
210
201 BlobTransportController* holder = BlobTransportController::GetInstance(); 211 BlobTransportController* holder = BlobTransportController::GetInstance();
202 212
203 BlobConsolidation* consolidation = new BlobConsolidation(); 213 BlobConsolidation* consolidation = new BlobConsolidation();
204 consolidation->AddBlobItem(KRefBlobUUID, 10, 10); 214 consolidation->AddBlobItem(KRefBlobUUID, 10, 10);
215 IPC::Message* message = nullptr;
216 EXPECT_CALL(mock_sender, Send(testing::_))
217 .WillOnce(
218 testing::DoAll(testing::SaveArg<0>(&message), testing::Return(true)))
219 .RetiresOnSaturation();
205 holder->InitiateBlobTransfer(kBlobUUID, "", make_scoped_ptr(consolidation), 220 holder->InitiateBlobTransfer(kBlobUUID, "", make_scoped_ptr(consolidation),
206 nullptr); 221 &mock_sender);
222 EXPECT_NE(nullptr, message);
207 holder->OnCancel(kBlobUUID, 223 holder->OnCancel(kBlobUUID,
208 storage::IPCBlobCreationCancelCode::OUT_OF_MEMORY); 224 storage::IPCBlobCreationCancelCode::OUT_OF_MEMORY);
209 EXPECT_FALSE(holder->IsTransporting(kBlobUUID)); 225 EXPECT_FALSE(holder->IsTransporting(kBlobUUID));
226 delete ((BlobStorageMsg_StartBuildingBlob*)message);
227 message = nullptr;
210 228
211 consolidation = new BlobConsolidation(); 229 consolidation = new BlobConsolidation();
212 consolidation->AddBlobItem(KRefBlobUUID, 10, 10); 230 consolidation->AddBlobItem(KRefBlobUUID, 10, 10);
231 EXPECT_CALL(mock_sender, Send(testing::_))
232 .WillOnce(
233 testing::DoAll(testing::SaveArg<0>(&message), testing::Return(true)))
234 .RetiresOnSaturation();
213 holder->InitiateBlobTransfer(kBlobUUID, "", make_scoped_ptr(consolidation), 235 holder->InitiateBlobTransfer(kBlobUUID, "", make_scoped_ptr(consolidation),
214 nullptr); 236 &mock_sender);
237 EXPECT_NE(nullptr, message);
215 holder->OnDone(kBlobUUID); 238 holder->OnDone(kBlobUUID);
216 EXPECT_FALSE(holder->IsTransporting(kBlobUUID)); 239 EXPECT_FALSE(holder->IsTransporting(kBlobUUID));
240 delete ((BlobStorageMsg_StartBuildingBlob*)message);
217 } 241 }
218 242
219 TEST_F(BlobTransportControllerTest, ResponsesErrors) { 243 TEST_F(BlobTransportControllerTest, ResponsesErrors) {
220 using ResponsesStatus = BlobTransportController::ResponsesStatus; 244 using ResponsesStatus = BlobTransportController::ResponsesStatus;
221 const std::string kBlobUUID = "uuid"; 245 const std::string kBlobUUID = "uuid";
222 const std::string KRefBlobUUID = "refuuid"; 246 const std::string KRefBlobUUID = "refuuid";
223 const std::string kBadBlobUUID = "uuuidBad"; 247 const std::string kBadBlobUUID = "uuuidBad";
224 BlobTransportController* holder = BlobTransportController::GetInstance(); 248 BlobTransportController* holder = BlobTransportController::GetInstance();
225 249
226 BlobConsolidation* consolidation = new BlobConsolidation(); 250 BlobConsolidation* consolidation = new BlobConsolidation();
227 consolidation->AddBlobItem(KRefBlobUUID, 10, 10); 251 consolidation->AddBlobItem(KRefBlobUUID, 10, 10);
228 252
229 holder->blob_storage_.insert( 253 holder->blob_storage_[kBlobUUID] = make_scoped_ptr(consolidation);
230 std::make_pair(kBlobUUID, make_scoped_ptr(consolidation)));
231 254
232 std::vector<BlobItemBytesRequest> requests; 255 std::vector<BlobItemBytesRequest> requests;
233 std::vector<base::SharedMemoryHandle> memory_handles; 256 std::vector<base::SharedMemoryHandle> memory_handles;
234 std::vector<IPC::PlatformFileForTransit> file_handles; 257 std::vector<IPC::PlatformFileForTransit> file_handles;
235 std::vector<storage::BlobItemBytesResponse> output; 258 std::vector<storage::BlobItemBytesResponse> output;
236 259
237 // Error conditions 260 // Error conditions
238 EXPECT_EQ(ResponsesStatus::BLOB_NOT_FOUND, 261 EXPECT_EQ(ResponsesStatus::BLOB_NOT_FOUND,
239 holder->GetResponses(kBadBlobUUID, requests, &memory_handles, 262 holder->GetResponses(kBadBlobUUID, requests, &memory_handles,
240 file_handles, &output)); 263 file_handles, &output));
241 EXPECT_EQ(0u, output.size()); 264 EXPECT_EQ(0u, output.size());
242 } 265 }
243 266
244 } // namespace content 267 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698