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

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: added shared memory test, and fixed memory leak Created 4 years, 10 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
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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/memory/shared_memory.h" 10 #include "base/memory/shared_memory.h"
11 #include "base/tuple.h"
11 #include "content/child/blob_storage/blob_consolidation.h" 12 #include "content/child/blob_storage/blob_consolidation.h"
13 #include "content/common/fileapi/webblob_messages.h"
14 #include "ipc/ipc_sender.h"
15 #include "ipc/ipc_test_sink.h"
12 #include "storage/common/blob_storage/blob_item_bytes_request.h" 16 #include "storage/common/blob_storage/blob_item_bytes_request.h"
13 #include "storage/common/blob_storage/blob_item_bytes_response.h" 17 #include "storage/common/blob_storage/blob_item_bytes_response.h"
14 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
16 20
17 using storage::BlobItemBytesRequest; 21 using storage::BlobItemBytesRequest;
18 using storage::BlobItemBytesResponse; 22 using storage::BlobItemBytesResponse;
19 using storage::DataElement; 23 using storage::DataElement;
20 24
21 namespace content { 25 namespace content {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 100
97 // The first two data elements should be combined. 101 // The first two data elements should be combined.
98 BlobConsolidation* consolidation = new BlobConsolidation(); 102 BlobConsolidation* consolidation = new BlobConsolidation();
99 consolidation->AddBlobItem(KRefBlobUUID, 10, 10); 103 consolidation->AddBlobItem(KRefBlobUUID, 10, 10);
100 consolidation->AddDataItem(CreateData("Hello")); 104 consolidation->AddDataItem(CreateData("Hello"));
101 consolidation->AddDataItem(CreateData("Hello2")); 105 consolidation->AddDataItem(CreateData("Hello2"));
102 consolidation->AddBlobItem(KRefBlobUUID, 0, 10); 106 consolidation->AddBlobItem(KRefBlobUUID, 0, 10);
103 consolidation->AddDataItem(CreateData("Hello3")); 107 consolidation->AddDataItem(CreateData("Hello3"));
104 // See the above test for the expected descriptions layout. 108 // See the above test for the expected descriptions layout.
105 109
106 holder->blob_storage_.insert( 110 holder->blob_storage_[kBlobUUID] = make_scoped_ptr(consolidation);
107 std::make_pair(kBlobUUID, make_scoped_ptr(consolidation)));
108 111
109 std::vector<BlobItemBytesRequest> requests; 112 std::vector<BlobItemBytesRequest> requests;
110 std::vector<base::SharedMemoryHandle> memory_handles; 113 std::vector<base::SharedMemoryHandle> memory_handles;
111 std::vector<IPC::PlatformFileForTransit> file_handles; 114 std::vector<IPC::PlatformFileForTransit> file_handles;
112 std::vector<storage::BlobItemBytesResponse> output; 115 std::vector<storage::BlobItemBytesResponse> output;
113 116
114 // Request for all of first data 117 // Request for all of first data
115 requests.push_back(BlobItemBytesRequest::CreateIPCRequest(0, 1, 0, 11)); 118 requests.push_back(BlobItemBytesRequest::CreateIPCRequest(0, 1, 0, 11));
116 EXPECT_EQ(ResponsesStatus::SUCCESS, 119 EXPECT_EQ(ResponsesStatus::SUCCESS,
117 holder->GetResponses(kBlobUUID, requests, &memory_handles, 120 holder->GetResponses(kBlobUUID, requests, &memory_handles,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 158
156 // The first two data elements should be combined. 159 // The first two data elements should be combined.
157 BlobConsolidation* consolidation = new BlobConsolidation(); 160 BlobConsolidation* consolidation = new BlobConsolidation();
158 consolidation->AddBlobItem(KRefBlobUUID, 10, 10); 161 consolidation->AddBlobItem(KRefBlobUUID, 10, 10);
159 consolidation->AddDataItem(CreateData("Hello")); 162 consolidation->AddDataItem(CreateData("Hello"));
160 consolidation->AddDataItem(CreateData("Hello2")); 163 consolidation->AddDataItem(CreateData("Hello2"));
161 consolidation->AddBlobItem(KRefBlobUUID, 0, 10); 164 consolidation->AddBlobItem(KRefBlobUUID, 0, 10);
162 consolidation->AddDataItem(CreateData("Hello3")); 165 consolidation->AddDataItem(CreateData("Hello3"));
163 // See the above test for the expected descriptions layout. 166 // See the above test for the expected descriptions layout.
164 167
165 holder->blob_storage_.insert( 168 holder->blob_storage_[kBlobUUID] = make_scoped_ptr(consolidation);
166 std::make_pair(kBlobUUID, make_scoped_ptr(consolidation)));
167 169
168 std::vector<BlobItemBytesRequest> requests; 170 std::vector<BlobItemBytesRequest> requests;
169 std::vector<base::SharedMemoryHandle> memory_handles; 171 std::vector<base::SharedMemoryHandle> memory_handles;
170 std::vector<IPC::PlatformFileForTransit> file_handles; 172 std::vector<IPC::PlatformFileForTransit> file_handles;
171 std::vector<storage::BlobItemBytesResponse> output; 173 std::vector<storage::BlobItemBytesResponse> output;
172 174
173 // Request for all data in shared memory 175 // Request for all data in shared memory
174 requests.push_back( 176 requests.push_back(
175 BlobItemBytesRequest::CreateSharedMemoryRequest(0, 1, 0, 11, 0, 0)); 177 BlobItemBytesRequest::CreateSharedMemoryRequest(0, 1, 0, 11, 0, 0));
176 requests.push_back( 178 requests.push_back(
(...skipping 18 matching lines...) Expand all
195 std::vector<char> value(mem_location, mem_location + memory.requested_size()); 197 std::vector<char> value(mem_location, mem_location + memory.requested_size());
196 EXPECT_THAT(value, testing::ElementsAreArray(expected_memory.c_str(), 198 EXPECT_THAT(value, testing::ElementsAreArray(expected_memory.c_str(),
197 expected_memory.size())); 199 expected_memory.size()));
198 } 200 }
199 201
200 TEST_F(BlobTransportControllerTest, TestPublicMethods) { 202 TEST_F(BlobTransportControllerTest, TestPublicMethods) {
201 const std::string kBlobUUID = "uuid"; 203 const std::string kBlobUUID = "uuid";
202 const std::string KRefBlobUUID = "refuuid"; 204 const std::string KRefBlobUUID = "refuuid";
203 const std::string kBadBlobUUID = "uuuidBad"; 205 const std::string kBadBlobUUID = "uuuidBad";
204 BlobTransportController* holder = BlobTransportController::GetInstance(); 206 BlobTransportController* holder = BlobTransportController::GetInstance();
207 IPC::TestSink sink;
205 208
206 BlobConsolidation* consolidation = new BlobConsolidation(); 209 BlobConsolidation* consolidation = new BlobConsolidation();
207 consolidation->AddBlobItem(KRefBlobUUID, 10, 10); 210 consolidation->AddBlobItem(KRefBlobUUID, 10, 10);
208 holder->InitiateBlobTransfer(kBlobUUID, "", make_scoped_ptr(consolidation), 211 holder->InitiateBlobTransfer(kBlobUUID, make_scoped_ptr(consolidation),
209 nullptr); 212 &sink);
213
214 // Check that we got the correct start message.
215 const IPC::Message* message =
216 sink.GetUniqueMessageMatching(BlobStorageMsg_StartBuildingBlob::ID);
217 ASSERT_TRUE(message);
218 std::vector<DataElement> expected;
219 expected.push_back(MakeBlobElement(KRefBlobUUID, 10, 10));
220 base::Tuple<std::string, std::vector<DataElement>> message_contents;
221 BlobStorageMsg_StartBuildingBlob::Read(message, &message_contents);
222 EXPECT_EQ(kBlobUUID, base::get<0>(message_contents));
223 EXPECT_EQ(MakeBlobElement(KRefBlobUUID, 10, 10),
224 base::get<1>(message_contents)[0]);
225
210 holder->OnCancel(kBlobUUID, 226 holder->OnCancel(kBlobUUID,
211 storage::IPCBlobCreationCancelCode::OUT_OF_MEMORY); 227 storage::IPCBlobCreationCancelCode::OUT_OF_MEMORY);
212 EXPECT_FALSE(holder->IsTransporting(kBlobUUID)); 228 EXPECT_FALSE(holder->IsTransporting(kBlobUUID));
229 message = nullptr;
230 sink.ClearMessages();
213 231
214 consolidation = new BlobConsolidation(); 232 consolidation = new BlobConsolidation();
215 consolidation->AddBlobItem(KRefBlobUUID, 10, 10); 233 consolidation->AddBlobItem(KRefBlobUUID, 10, 10);
216 holder->InitiateBlobTransfer(kBlobUUID, "", make_scoped_ptr(consolidation), 234 holder->InitiateBlobTransfer(kBlobUUID, make_scoped_ptr(consolidation),
217 nullptr); 235 &sink);
236 EXPECT_TRUE(
237 sink.GetUniqueMessageMatching(BlobStorageMsg_StartBuildingBlob::ID));
218 holder->OnDone(kBlobUUID); 238 holder->OnDone(kBlobUUID);
219 EXPECT_FALSE(holder->IsTransporting(kBlobUUID)); 239 EXPECT_FALSE(holder->IsTransporting(kBlobUUID));
220 } 240 }
221 241
222 TEST_F(BlobTransportControllerTest, ResponsesErrors) { 242 TEST_F(BlobTransportControllerTest, ResponsesErrors) {
223 using ResponsesStatus = BlobTransportController::ResponsesStatus; 243 using ResponsesStatus = BlobTransportController::ResponsesStatus;
224 const std::string kBlobUUID = "uuid"; 244 const std::string kBlobUUID = "uuid";
225 const std::string KRefBlobUUID = "refuuid"; 245 const std::string KRefBlobUUID = "refuuid";
226 const std::string kBadBlobUUID = "uuuidBad"; 246 const std::string kBadBlobUUID = "uuuidBad";
227 BlobTransportController* holder = BlobTransportController::GetInstance(); 247 BlobTransportController* holder = BlobTransportController::GetInstance();
228 248
229 BlobConsolidation* consolidation = new BlobConsolidation(); 249 BlobConsolidation* consolidation = new BlobConsolidation();
230 consolidation->AddBlobItem(KRefBlobUUID, 10, 10); 250 consolidation->AddBlobItem(KRefBlobUUID, 10, 10);
231 251
232 holder->blob_storage_.insert( 252 holder->blob_storage_[kBlobUUID] = make_scoped_ptr(consolidation);
233 std::make_pair(kBlobUUID, make_scoped_ptr(consolidation)));
234 253
235 std::vector<BlobItemBytesRequest> requests; 254 std::vector<BlobItemBytesRequest> requests;
236 std::vector<base::SharedMemoryHandle> memory_handles; 255 std::vector<base::SharedMemoryHandle> memory_handles;
237 std::vector<IPC::PlatformFileForTransit> file_handles; 256 std::vector<IPC::PlatformFileForTransit> file_handles;
238 std::vector<storage::BlobItemBytesResponse> output; 257 std::vector<storage::BlobItemBytesResponse> output;
239 258
240 // Error conditions 259 // Error conditions
241 EXPECT_EQ(ResponsesStatus::BLOB_NOT_FOUND, 260 EXPECT_EQ(ResponsesStatus::BLOB_NOT_FOUND,
242 holder->GetResponses(kBadBlobUUID, requests, &memory_handles, 261 holder->GetResponses(kBadBlobUUID, requests, &memory_handles,
243 file_handles, &output)); 262 file_handles, &output));
244 EXPECT_EQ(0u, output.size()); 263 EXPECT_EQ(0u, output.size());
245 } 264 }
246 265
247 } // namespace content 266 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698