| 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 |