OLD | NEW |
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 "chrome/browser/google_apis/drive_uploader.h" | 5 #include "chrome/browser/google_apis/drive_uploader.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cstdlib> | 8 #include <cstdlib> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 std::string* data) { | 45 std::string* data) { |
46 data->resize(size); | 46 data->resize(size); |
47 for (size_t i = 0; i < size; ++i) | 47 for (size_t i = 0; i < size; ++i) |
48 (*data)[i] = static_cast<char>(rand() % 256); // NOLINT | 48 (*data)[i] = static_cast<char>(rand() % 256); // NOLINT |
49 if (!file_util::CreateTemporaryFileInDir(temp_dir, path)) | 49 if (!file_util::CreateTemporaryFileInDir(temp_dir, path)) |
50 return false; | 50 return false; |
51 return file_util::WriteFile(*path, data->c_str(), static_cast<int>(size)) == | 51 return file_util::WriteFile(*path, data->c_str(), static_cast<int>(size)) == |
52 static_cast<int>(size); | 52 static_cast<int>(size); |
53 } | 53 } |
54 | 54 |
55 typedef std::pair<int64, int64> ProgressInfo; | |
56 | |
57 void AppendProgressCallbackResult(std::vector<ProgressInfo>* progress_values, | |
58 int64 progress, | |
59 int64 total) { | |
60 progress_values->push_back(ProgressInfo(progress, total)); | |
61 } | |
62 | |
63 // Mock DriveService that verifies if the uploaded content matches the preset | 55 // Mock DriveService that verifies if the uploaded content matches the preset |
64 // expectation. | 56 // expectation. |
65 class MockDriveServiceWithUploadExpectation : public DummyDriveService { | 57 class MockDriveServiceWithUploadExpectation : public DummyDriveService { |
66 public: | 58 public: |
67 // Sets up an expected upload content. InitiateUpload and ResumeUpload will | 59 // Sets up an expected upload content. InitiateUpload and ResumeUpload will |
68 // verify that the specified data is correctly uploaded. | 60 // verify that the specified data is correctly uploaded. |
69 explicit MockDriveServiceWithUploadExpectation( | 61 explicit MockDriveServiceWithUploadExpectation( |
70 const std::string& expected_upload_content) | 62 const std::string& expected_upload_content) |
71 : expected_upload_content_(expected_upload_content), | 63 : expected_upload_content_(expected_upload_content), |
72 received_bytes_(0), | 64 received_bytes_(0), |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 ASSERT_TRUE(CreateFileOfSpecifiedSize(temp_dir_.path(), 0, | 300 ASSERT_TRUE(CreateFileOfSpecifiedSize(temp_dir_.path(), 0, |
309 &local_path, &data)); | 301 &local_path, &data)); |
310 | 302 |
311 DriveUploadError error = DRIVE_UPLOAD_ERROR_ABORT; | 303 DriveUploadError error = DRIVE_UPLOAD_ERROR_ABORT; |
312 base::FilePath drive_path; | 304 base::FilePath drive_path; |
313 base::FilePath file_path; | 305 base::FilePath file_path; |
314 scoped_ptr<ResourceEntry> resource_entry; | 306 scoped_ptr<ResourceEntry> resource_entry; |
315 | 307 |
316 MockDriveServiceWithUploadExpectation mock_service(data); | 308 MockDriveServiceWithUploadExpectation mock_service(data); |
317 DriveUploader uploader(&mock_service); | 309 DriveUploader uploader(&mock_service); |
318 std::vector<ProgressInfo> upload_progress_values; | 310 std::vector<test_util::ProgressInfo> upload_progress_values; |
319 uploader.UploadExistingFile( | 311 uploader.UploadExistingFile( |
320 kTestInitiateUploadResourceId, | 312 kTestInitiateUploadResourceId, |
321 base::FilePath::FromUTF8Unsafe(kTestDrivePath), | 313 base::FilePath::FromUTF8Unsafe(kTestDrivePath), |
322 local_path, | 314 local_path, |
323 kTestMimeType, | 315 kTestMimeType, |
324 std::string(), // etag | 316 std::string(), // etag |
325 test_util::CreateCopyResultCallback( | 317 test_util::CreateCopyResultCallback( |
326 &error, &drive_path, &file_path, &resource_entry), | 318 &error, &drive_path, &file_path, &resource_entry), |
327 base::Bind(&AppendProgressCallbackResult, &upload_progress_values)); | 319 base::Bind(&test_util::AppendProgressCallbackResult, |
| 320 &upload_progress_values)); |
328 test_util::RunBlockingPoolTask(); | 321 test_util::RunBlockingPoolTask(); |
329 | 322 |
330 EXPECT_EQ(1, mock_service.resume_upload_call_count()); | 323 EXPECT_EQ(1, mock_service.resume_upload_call_count()); |
331 EXPECT_EQ(0, mock_service.received_bytes()); | 324 EXPECT_EQ(0, mock_service.received_bytes()); |
332 EXPECT_EQ(DRIVE_UPLOAD_OK, error); | 325 EXPECT_EQ(DRIVE_UPLOAD_OK, error); |
333 EXPECT_EQ(base::FilePath::FromUTF8Unsafe(kTestDrivePath), drive_path); | 326 EXPECT_EQ(base::FilePath::FromUTF8Unsafe(kTestDrivePath), drive_path); |
334 EXPECT_EQ(local_path, file_path); | 327 EXPECT_EQ(local_path, file_path); |
335 ASSERT_TRUE(resource_entry); | 328 ASSERT_TRUE(resource_entry); |
336 EXPECT_EQ(kTestDummyId, resource_entry->id()); | 329 EXPECT_EQ(kTestDummyId, resource_entry->id()); |
337 ASSERT_EQ(1U, upload_progress_values.size()); | 330 ASSERT_EQ(1U, upload_progress_values.size()); |
338 EXPECT_EQ(ProgressInfo(0, 0), upload_progress_values[0]); | 331 EXPECT_EQ(test_util::ProgressInfo(0, 0), upload_progress_values[0]); |
339 } | 332 } |
340 | 333 |
341 TEST_F(DriveUploaderTest, UploadExisting512KB) { | 334 TEST_F(DriveUploaderTest, UploadExisting512KB) { |
342 base::FilePath local_path; | 335 base::FilePath local_path; |
343 std::string data; | 336 std::string data; |
344 ASSERT_TRUE(CreateFileOfSpecifiedSize(temp_dir_.path(), 512 * 1024, | 337 ASSERT_TRUE(CreateFileOfSpecifiedSize(temp_dir_.path(), 512 * 1024, |
345 &local_path, &data)); | 338 &local_path, &data)); |
346 | 339 |
347 DriveUploadError error = DRIVE_UPLOAD_ERROR_ABORT; | 340 DriveUploadError error = DRIVE_UPLOAD_ERROR_ABORT; |
348 base::FilePath drive_path; | 341 base::FilePath drive_path; |
349 base::FilePath file_path; | 342 base::FilePath file_path; |
350 scoped_ptr<ResourceEntry> resource_entry; | 343 scoped_ptr<ResourceEntry> resource_entry; |
351 | 344 |
352 MockDriveServiceWithUploadExpectation mock_service(data); | 345 MockDriveServiceWithUploadExpectation mock_service(data); |
353 DriveUploader uploader(&mock_service); | 346 DriveUploader uploader(&mock_service); |
354 std::vector<ProgressInfo> upload_progress_values; | 347 std::vector<test_util::ProgressInfo> upload_progress_values; |
355 uploader.UploadExistingFile( | 348 uploader.UploadExistingFile( |
356 kTestInitiateUploadResourceId, | 349 kTestInitiateUploadResourceId, |
357 base::FilePath::FromUTF8Unsafe(kTestDrivePath), | 350 base::FilePath::FromUTF8Unsafe(kTestDrivePath), |
358 local_path, | 351 local_path, |
359 kTestMimeType, | 352 kTestMimeType, |
360 std::string(), // etag | 353 std::string(), // etag |
361 test_util::CreateCopyResultCallback( | 354 test_util::CreateCopyResultCallback( |
362 &error, &drive_path, &file_path, &resource_entry), | 355 &error, &drive_path, &file_path, &resource_entry), |
363 base::Bind(&AppendProgressCallbackResult, &upload_progress_values)); | 356 base::Bind(&test_util::AppendProgressCallbackResult, |
| 357 &upload_progress_values)); |
364 test_util::RunBlockingPoolTask(); | 358 test_util::RunBlockingPoolTask(); |
365 | 359 |
366 // 512KB upload should not be split into multiple chunks. | 360 // 512KB upload should not be split into multiple chunks. |
367 EXPECT_EQ(1, mock_service.resume_upload_call_count()); | 361 EXPECT_EQ(1, mock_service.resume_upload_call_count()); |
368 EXPECT_EQ(512 * 1024, mock_service.received_bytes()); | 362 EXPECT_EQ(512 * 1024, mock_service.received_bytes()); |
369 EXPECT_EQ(DRIVE_UPLOAD_OK, error); | 363 EXPECT_EQ(DRIVE_UPLOAD_OK, error); |
370 EXPECT_EQ(base::FilePath::FromUTF8Unsafe(kTestDrivePath), drive_path); | 364 EXPECT_EQ(base::FilePath::FromUTF8Unsafe(kTestDrivePath), drive_path); |
371 EXPECT_EQ(local_path, file_path); | 365 EXPECT_EQ(local_path, file_path); |
372 ASSERT_TRUE(resource_entry); | 366 ASSERT_TRUE(resource_entry); |
373 EXPECT_EQ(kTestDummyId, resource_entry->id()); | 367 EXPECT_EQ(kTestDummyId, resource_entry->id()); |
374 ASSERT_EQ(1U, upload_progress_values.size()); | 368 ASSERT_EQ(1U, upload_progress_values.size()); |
375 EXPECT_EQ(ProgressInfo(512 * 1024, 512 * 1024), upload_progress_values[0]); | 369 EXPECT_EQ(test_util::ProgressInfo(512 * 1024, 512 * 1024), |
| 370 upload_progress_values[0]); |
376 } | 371 } |
377 | 372 |
378 TEST_F(DriveUploaderTest, UploadExisting1234KB) { | 373 TEST_F(DriveUploaderTest, UploadExisting1234KB) { |
379 base::FilePath local_path; | 374 base::FilePath local_path; |
380 std::string data; | 375 std::string data; |
381 ASSERT_TRUE(CreateFileOfSpecifiedSize(temp_dir_.path(), 1234 * 1024, | 376 ASSERT_TRUE(CreateFileOfSpecifiedSize(temp_dir_.path(), 1234 * 1024, |
382 &local_path, &data)); | 377 &local_path, &data)); |
383 | 378 |
384 DriveUploadError error = DRIVE_UPLOAD_ERROR_ABORT; | 379 DriveUploadError error = DRIVE_UPLOAD_ERROR_ABORT; |
385 base::FilePath drive_path; | 380 base::FilePath drive_path; |
386 base::FilePath file_path; | 381 base::FilePath file_path; |
387 scoped_ptr<ResourceEntry> resource_entry; | 382 scoped_ptr<ResourceEntry> resource_entry; |
388 | 383 |
389 MockDriveServiceWithUploadExpectation mock_service(data); | 384 MockDriveServiceWithUploadExpectation mock_service(data); |
390 DriveUploader uploader(&mock_service); | 385 DriveUploader uploader(&mock_service); |
391 std::vector<ProgressInfo> upload_progress_values; | 386 std::vector<test_util::ProgressInfo> upload_progress_values; |
392 uploader.UploadExistingFile( | 387 uploader.UploadExistingFile( |
393 kTestInitiateUploadResourceId, | 388 kTestInitiateUploadResourceId, |
394 base::FilePath::FromUTF8Unsafe(kTestDrivePath), | 389 base::FilePath::FromUTF8Unsafe(kTestDrivePath), |
395 local_path, | 390 local_path, |
396 kTestMimeType, | 391 kTestMimeType, |
397 std::string(), // etag | 392 std::string(), // etag |
398 test_util::CreateCopyResultCallback( | 393 test_util::CreateCopyResultCallback( |
399 &error, &drive_path, &file_path, &resource_entry), | 394 &error, &drive_path, &file_path, &resource_entry), |
400 base::Bind(&AppendProgressCallbackResult, &upload_progress_values)); | 395 base::Bind(&test_util::AppendProgressCallbackResult, |
| 396 &upload_progress_values)); |
401 test_util::RunBlockingPoolTask(); | 397 test_util::RunBlockingPoolTask(); |
402 | 398 |
403 // The file should be split into 3 chunks (1234 = 512 + 512 + 210). | 399 // The file should be split into 3 chunks (1234 = 512 + 512 + 210). |
404 EXPECT_EQ(3, mock_service.resume_upload_call_count()); | 400 EXPECT_EQ(3, mock_service.resume_upload_call_count()); |
405 EXPECT_EQ(1234 * 1024, mock_service.received_bytes()); | 401 EXPECT_EQ(1234 * 1024, mock_service.received_bytes()); |
406 EXPECT_EQ(DRIVE_UPLOAD_OK, error); | 402 EXPECT_EQ(DRIVE_UPLOAD_OK, error); |
407 EXPECT_EQ(base::FilePath::FromUTF8Unsafe(kTestDrivePath), drive_path); | 403 EXPECT_EQ(base::FilePath::FromUTF8Unsafe(kTestDrivePath), drive_path); |
408 EXPECT_EQ(local_path, file_path); | 404 EXPECT_EQ(local_path, file_path); |
409 ASSERT_TRUE(resource_entry); | 405 ASSERT_TRUE(resource_entry); |
410 EXPECT_EQ(kTestDummyId, resource_entry->id()); | 406 EXPECT_EQ(kTestDummyId, resource_entry->id()); |
411 // It is the duty of DriveUploader to accumulate up the progress value. | 407 // It is the duty of DriveUploader to accumulate up the progress value. |
412 ASSERT_EQ(3U, upload_progress_values.size()); | 408 ASSERT_EQ(3U, upload_progress_values.size()); |
413 EXPECT_EQ(ProgressInfo(512 * 1024, 1234 * 1024), upload_progress_values[0]); | 409 EXPECT_EQ(test_util::ProgressInfo(512 * 1024, 1234 * 1024), |
414 EXPECT_EQ(ProgressInfo(1024 * 1024, 1234 * 1024), upload_progress_values[1]); | 410 upload_progress_values[0]); |
415 EXPECT_EQ(ProgressInfo(1234 * 1024, 1234 * 1024), upload_progress_values[2]); | 411 EXPECT_EQ(test_util::ProgressInfo(1024 * 1024, 1234 * 1024), |
| 412 upload_progress_values[1]); |
| 413 EXPECT_EQ(test_util::ProgressInfo(1234 * 1024, 1234 * 1024), |
| 414 upload_progress_values[2]); |
416 } | 415 } |
417 | 416 |
418 TEST_F(DriveUploaderTest, UploadNew1234KB) { | 417 TEST_F(DriveUploaderTest, UploadNew1234KB) { |
419 base::FilePath local_path; | 418 base::FilePath local_path; |
420 std::string data; | 419 std::string data; |
421 ASSERT_TRUE(CreateFileOfSpecifiedSize(temp_dir_.path(), 1234 * 1024, | 420 ASSERT_TRUE(CreateFileOfSpecifiedSize(temp_dir_.path(), 1234 * 1024, |
422 &local_path, &data)); | 421 &local_path, &data)); |
423 | 422 |
424 DriveUploadError error = DRIVE_UPLOAD_ERROR_ABORT; | 423 DriveUploadError error = DRIVE_UPLOAD_ERROR_ABORT; |
425 base::FilePath drive_path; | 424 base::FilePath drive_path; |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
574 test_util::CreateCopyResultCallback( | 573 test_util::CreateCopyResultCallback( |
575 &error, &drive_path, &file_path, &resource_entry), | 574 &error, &drive_path, &file_path, &resource_entry), |
576 google_apis::ProgressCallback()); | 575 google_apis::ProgressCallback()); |
577 test_util::RunBlockingPoolTask(); | 576 test_util::RunBlockingPoolTask(); |
578 | 577 |
579 // Should return failure without doing any attempt to connect to the server. | 578 // Should return failure without doing any attempt to connect to the server. |
580 EXPECT_EQ(DRIVE_UPLOAD_ERROR_NOT_FOUND, error); | 579 EXPECT_EQ(DRIVE_UPLOAD_ERROR_NOT_FOUND, error); |
581 } | 580 } |
582 | 581 |
583 } // namespace google_apis | 582 } // namespace google_apis |
OLD | NEW |