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

Unified Diff: chrome/browser/google_apis/drive_api_requests_unittest.cc

Issue 96413002: Move c/b/google_apis to google_apis/drive. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/google_apis/drive_api_requests_unittest.cc
diff --git a/chrome/browser/google_apis/drive_api_requests_unittest.cc b/chrome/browser/google_apis/drive_api_requests_unittest.cc
deleted file mode 100644
index 9a7c72c9a4942072268d2d424372b27d270bebd6..0000000000000000000000000000000000000000
--- a/chrome/browser/google_apis/drive_api_requests_unittest.cc
+++ /dev/null
@@ -1,1600 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/bind.h"
-#include "base/file_util.h"
-#include "base/files/file_path.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/values.h"
-#include "chrome/browser/google_apis/drive_api_parser.h"
-#include "chrome/browser/google_apis/drive_api_requests.h"
-#include "chrome/browser/google_apis/drive_api_url_generator.h"
-#include "chrome/browser/google_apis/dummy_auth_service.h"
-#include "chrome/browser/google_apis/request_sender.h"
-#include "chrome/browser/google_apis/test_util.h"
-#include "net/test/embedded_test_server/embedded_test_server.h"
-#include "net/test/embedded_test_server/http_request.h"
-#include "net/test/embedded_test_server/http_response.h"
-#include "net/url_request/url_request_test_util.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace google_apis {
-
-namespace {
-
-const char kTestETag[] = "test_etag";
-const char kTestUserAgent[] = "test-user-agent";
-
-const char kTestChildrenResponse[] =
- "{\n"
- "\"kind\": \"drive#childReference\",\n"
- "\"id\": \"resource_id\",\n"
- "\"selfLink\": \"self_link\",\n"
- "\"childLink\": \"child_link\",\n"
- "}\n";
-
-const char kTestUploadExistingFilePath[] = "/upload/existingfile/path";
-const char kTestUploadNewFilePath[] = "/upload/newfile/path";
-const char kTestDownloadPathPrefix[] = "/download/";
-
-// Used as a GetContentCallback.
-void AppendContent(std::string* out,
- GDataErrorCode error,
- scoped_ptr<std::string> content) {
- EXPECT_EQ(HTTP_SUCCESS, error);
- out->append(*content);
-}
-
-} // namespace
-
-class DriveApiRequestsTest : public testing::Test {
- public:
- DriveApiRequestsTest() {
- }
-
- virtual void SetUp() OVERRIDE {
- request_context_getter_ = new net::TestURLRequestContextGetter(
- message_loop_.message_loop_proxy());
-
- request_sender_.reset(new RequestSender(new DummyAuthService,
- request_context_getter_.get(),
- message_loop_.message_loop_proxy(),
- kTestUserAgent));
-
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-
- ASSERT_TRUE(test_server_.InitializeAndWaitUntilReady());
- test_server_.RegisterRequestHandler(
- base::Bind(&DriveApiRequestsTest::HandleChildrenDeleteRequest,
- base::Unretained(this)));
- test_server_.RegisterRequestHandler(
- base::Bind(&DriveApiRequestsTest::HandleDataFileRequest,
- base::Unretained(this)));
- test_server_.RegisterRequestHandler(
- base::Bind(&DriveApiRequestsTest::HandlePreconditionFailedRequest,
- base::Unretained(this)));
- test_server_.RegisterRequestHandler(
- base::Bind(&DriveApiRequestsTest::HandleResumeUploadRequest,
- base::Unretained(this)));
- test_server_.RegisterRequestHandler(
- base::Bind(&DriveApiRequestsTest::HandleInitiateUploadRequest,
- base::Unretained(this)));
- test_server_.RegisterRequestHandler(
- base::Bind(&DriveApiRequestsTest::HandleContentResponse,
- base::Unretained(this)));
- test_server_.RegisterRequestHandler(
- base::Bind(&DriveApiRequestsTest::HandleDownloadRequest,
- base::Unretained(this)));
-
- GURL test_base_url = test_util::GetBaseUrlForTesting(test_server_.port());
- url_generator_.reset(new DriveApiUrlGenerator(
- test_base_url, test_base_url.Resolve(kTestDownloadPathPrefix)));
-
- // Reset the server's expected behavior just in case.
- ResetExpectedResponse();
- received_bytes_ = 0;
- content_length_ = 0;
- }
-
- base::MessageLoopForIO message_loop_; // Test server needs IO thread.
- net::test_server::EmbeddedTestServer test_server_;
- scoped_ptr<RequestSender> request_sender_;
- scoped_ptr<DriveApiUrlGenerator> url_generator_;
- scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_;
- base::ScopedTempDir temp_dir_;
-
- // This is a path to the file which contains expected response from
- // the server. See also HandleDataFileRequest below.
- base::FilePath expected_data_file_path_;
-
- // This is a path string in the expected response header from the server
- // for initiating file uploading.
- std::string expected_upload_path_;
-
- // This is a path to the file which contains expected response for
- // PRECONDITION_FAILED response.
- base::FilePath expected_precondition_failed_file_path_;
-
- // These are content and its type in the expected response from the server.
- // See also HandleContentResponse below.
- std::string expected_content_type_;
- std::string expected_content_;
-
- // The incoming HTTP request is saved so tests can verify the request
- // parameters like HTTP method (ex. some requests should use DELETE
- // instead of GET).
- net::test_server::HttpRequest http_request_;
-
- private:
- void ResetExpectedResponse() {
- expected_data_file_path_.clear();
- expected_upload_path_.clear();
- expected_content_type_.clear();
- expected_content_.clear();
- }
-
- // For "Children: delete" request, the server will return "204 No Content"
- // response meaning "success".
- scoped_ptr<net::test_server::HttpResponse> HandleChildrenDeleteRequest(
- const net::test_server::HttpRequest& request) {
- if (request.method != net::test_server::METHOD_DELETE ||
- request.relative_url.find("/children/") == string::npos) {
- // The request is not the "Children: delete" request. Delegate the
- // processing to the next handler.
- return scoped_ptr<net::test_server::HttpResponse>();
- }
-
- http_request_ = request;
-
- // Return the response with just "204 No Content" status code.
- scoped_ptr<net::test_server::BasicHttpResponse> http_response(
- new net::test_server::BasicHttpResponse);
- http_response->set_code(net::HTTP_NO_CONTENT);
- return http_response.PassAs<net::test_server::HttpResponse>();
- }
-
- // Reads the data file of |expected_data_file_path_| and returns its content
- // for the request.
- // To use this method, it is necessary to set |expected_data_file_path_|
- // to the appropriate file path before sending the request to the server.
- scoped_ptr<net::test_server::HttpResponse> HandleDataFileRequest(
- const net::test_server::HttpRequest& request) {
- if (expected_data_file_path_.empty()) {
- // The file is not specified. Delegate the processing to the next
- // handler.
- return scoped_ptr<net::test_server::HttpResponse>();
- }
-
- http_request_ = request;
-
- // Return the response from the data file.
- return test_util::CreateHttpResponseFromFile(
- expected_data_file_path_).PassAs<net::test_server::HttpResponse>();
- }
-
- // Returns PRECONDITION_FAILED response for ETag mismatching with error JSON
- // content specified by |expected_precondition_failed_file_path_|.
- // To use this method, it is necessary to set the variable to the appropriate
- // file path before sending the request to the server.
- scoped_ptr<net::test_server::HttpResponse> HandlePreconditionFailedRequest(
- const net::test_server::HttpRequest& request) {
- if (expected_precondition_failed_file_path_.empty()) {
- // The file is not specified. Delegate the process to the next handler.
- return scoped_ptr<net::test_server::HttpResponse>();
- }
-
- http_request_ = request;
-
- scoped_ptr<net::test_server::BasicHttpResponse> response(
- new net::test_server::BasicHttpResponse);
- response->set_code(net::HTTP_PRECONDITION_FAILED);
-
- std::string content;
- if (base::ReadFileToString(expected_precondition_failed_file_path_,
- &content)) {
- response->set_content(content);
- response->set_content_type("application/json");
- }
-
- return response.PassAs<net::test_server::HttpResponse>();
- }
-
- // Returns the response based on set expected upload url.
- // The response contains the url in its "Location: " header. Also, it doesn't
- // have any content.
- // To use this method, it is necessary to set |expected_upload_path_|
- // to the string representation of the url to be returned.
- scoped_ptr<net::test_server::HttpResponse> HandleInitiateUploadRequest(
- const net::test_server::HttpRequest& request) {
- if (request.relative_url == expected_upload_path_ ||
- expected_upload_path_.empty()) {
- // The request is for resume uploading or the expected upload url is not
- // set. Delegate the processing to the next handler.
- return scoped_ptr<net::test_server::HttpResponse>();
- }
-
- http_request_ = request;
-
- scoped_ptr<net::test_server::BasicHttpResponse> response(
- new net::test_server::BasicHttpResponse);
-
- // Check if the X-Upload-Content-Length is present. If yes, store the
- // length of the file.
- std::map<std::string, std::string>::const_iterator found =
- request.headers.find("X-Upload-Content-Length");
- if (found == request.headers.end() ||
- !base::StringToInt64(found->second, &content_length_)) {
- return scoped_ptr<net::test_server::HttpResponse>();
- }
- received_bytes_ = 0;
-
- response->set_code(net::HTTP_OK);
- response->AddCustomHeader(
- "Location",
- test_server_.base_url().Resolve(expected_upload_path_).spec());
- return response.PassAs<net::test_server::HttpResponse>();
- }
-
- scoped_ptr<net::test_server::HttpResponse> HandleResumeUploadRequest(
- const net::test_server::HttpRequest& request) {
- if (request.relative_url != expected_upload_path_) {
- // The request path is different from the expected path for uploading.
- // Delegate the processing to the next handler.
- return scoped_ptr<net::test_server::HttpResponse>();
- }
-
- http_request_ = request;
-
- if (!request.content.empty()) {
- std::map<std::string, std::string>::const_iterator iter =
- request.headers.find("Content-Range");
- if (iter == request.headers.end()) {
- // The range must be set.
- return scoped_ptr<net::test_server::HttpResponse>();
- }
-
- int64 length = 0;
- int64 start_position = 0;
- int64 end_position = 0;
- if (!test_util::ParseContentRangeHeader(
- iter->second, &start_position, &end_position, &length)) {
- // Invalid "Content-Range" value.
- return scoped_ptr<net::test_server::HttpResponse>();
- }
-
- EXPECT_EQ(start_position, received_bytes_);
- EXPECT_EQ(length, content_length_);
-
- // end_position is inclusive, but so +1 to change the range to byte size.
- received_bytes_ = end_position + 1;
- }
-
- if (received_bytes_ < content_length_) {
- scoped_ptr<net::test_server::BasicHttpResponse> response(
- new net::test_server::BasicHttpResponse);
- // Set RESUME INCOMPLETE (308) status code.
- response->set_code(static_cast<net::HttpStatusCode>(308));
-
- // Add Range header to the response, based on the values of
- // Content-Range header in the request.
- // The header is annotated only when at least one byte is received.
- if (received_bytes_ > 0) {
- response->AddCustomHeader(
- "Range", "bytes=0-" + base::Int64ToString(received_bytes_ - 1));
- }
-
- return response.PassAs<net::test_server::HttpResponse>();
- }
-
- // All bytes are received. Return the "success" response with the file's
- // (dummy) metadata.
- scoped_ptr<net::test_server::BasicHttpResponse> response =
- test_util::CreateHttpResponseFromFile(
- test_util::GetTestFilePath("drive/file_entry.json"));
-
- // The response code is CREATED if it is new file uploading.
- if (http_request_.relative_url == kTestUploadNewFilePath) {
- response->set_code(net::HTTP_CREATED);
- }
-
- return response.PassAs<net::test_server::HttpResponse>();
- }
-
- // Returns the response based on set expected content and its type.
- // To use this method, both |expected_content_type_| and |expected_content_|
- // must be set in advance.
- scoped_ptr<net::test_server::HttpResponse> HandleContentResponse(
- const net::test_server::HttpRequest& request) {
- if (expected_content_type_.empty() || expected_content_.empty()) {
- // Expected content is not set. Delegate the processing to the next
- // handler.
- return scoped_ptr<net::test_server::HttpResponse>();
- }
-
- http_request_ = request;
-
- scoped_ptr<net::test_server::BasicHttpResponse> response(
- new net::test_server::BasicHttpResponse);
- response->set_code(net::HTTP_OK);
- response->set_content_type(expected_content_type_);
- response->set_content(expected_content_);
- return response.PassAs<net::test_server::HttpResponse>();
- }
-
- // Handles a request for downloading a file.
- scoped_ptr<net::test_server::HttpResponse> HandleDownloadRequest(
- const net::test_server::HttpRequest& request) {
- http_request_ = request;
-
- const GURL absolute_url = test_server_.GetURL(request.relative_url);
- std::string id;
- if (!test_util::RemovePrefix(absolute_url.path(),
- kTestDownloadPathPrefix,
- &id)) {
- return scoped_ptr<net::test_server::HttpResponse>();
- }
-
- // For testing, returns a text with |id| repeated 3 times.
- scoped_ptr<net::test_server::BasicHttpResponse> response(
- new net::test_server::BasicHttpResponse);
- response->set_code(net::HTTP_OK);
- response->set_content(id + id + id);
- response->set_content_type("text/plain");
- return response.PassAs<net::test_server::HttpResponse>();
- }
-
- // These are for the current upload file status.
- int64 received_bytes_;
- int64 content_length_;
-};
-
-TEST_F(DriveApiRequestsTest, DriveApiDataRequest_Fields) {
- // Make sure that "fields" query param is supported by using its subclass,
- // AboutGetRequest.
-
- // Set an expected data file containing valid result.
- expected_data_file_path_ = test_util::GetTestFilePath(
- "drive/about.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<AboutResource> about_resource;
-
- {
- base::RunLoop run_loop;
- drive::AboutGetRequest* request = new drive::AboutGetRequest(
- request_sender_.get(),
- *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &about_resource)));
- request->set_fields(
- "kind,quotaBytesTotal,quotaBytesUsed,largestChangeId,rootFolderId");
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
- EXPECT_EQ("/drive/v2/about?"
- "fields=kind%2CquotaBytesTotal%2CquotaBytesUsed%2C"
- "largestChangeId%2CrootFolderId",
- http_request_.relative_url);
-
- scoped_ptr<AboutResource> expected(
- AboutResource::CreateFrom(
- *test_util::LoadJSONFile("drive/about.json")));
- ASSERT_TRUE(about_resource.get());
- EXPECT_EQ(expected->largest_change_id(), about_resource->largest_change_id());
- EXPECT_EQ(expected->quota_bytes_total(), about_resource->quota_bytes_total());
- EXPECT_EQ(expected->quota_bytes_used(), about_resource->quota_bytes_used());
- EXPECT_EQ(expected->root_folder_id(), about_resource->root_folder_id());
-}
-
-TEST_F(DriveApiRequestsTest, FilesInsertRequest) {
- // Set an expected data file containing the directory's entry data.
- expected_data_file_path_ =
- test_util::GetTestFilePath("drive/directory_entry.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<FileResource> file_resource;
-
- // Create "new directory" in the root directory.
- {
- base::RunLoop run_loop;
- drive::FilesInsertRequest* request = new drive::FilesInsertRequest(
- request_sender_.get(),
- *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &file_resource)));
- request->set_mime_type("application/vnd.google-apps.folder");
- request->add_parent("root");
- request->set_title("new directory");
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_POST, http_request_.method);
- EXPECT_EQ("/drive/v2/files", http_request_.relative_url);
- EXPECT_EQ("application/json", http_request_.headers["Content-Type"]);
-
- EXPECT_TRUE(http_request_.has_content);
-
- scoped_ptr<FileResource> expected(
- FileResource::CreateFrom(
- *test_util::LoadJSONFile("drive/directory_entry.json")));
-
- // Sanity check.
- ASSERT_TRUE(file_resource.get());
-
- EXPECT_EQ(expected->file_id(), file_resource->file_id());
- EXPECT_EQ(expected->title(), file_resource->title());
- EXPECT_EQ(expected->mime_type(), file_resource->mime_type());
- EXPECT_EQ(expected->parents().size(), file_resource->parents().size());
-}
-
-TEST_F(DriveApiRequestsTest, FilesPatchRequest) {
- const base::Time::Exploded kModifiedDate = {2012, 7, 0, 19, 15, 59, 13, 123};
- const base::Time::Exploded kLastViewedByMeDate =
- {2013, 7, 0, 19, 15, 59, 13, 123};
-
- // Set an expected data file containing valid result.
- expected_data_file_path_ =
- test_util::GetTestFilePath("drive/file_entry.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<FileResource> file_resource;
-
- {
- base::RunLoop run_loop;
- drive::FilesPatchRequest* request = new drive::FilesPatchRequest(
- request_sender_.get(),
- *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &file_resource)));
- request->set_file_id("resource_id");
- request->set_set_modified_date(true);
- request->set_update_viewed_date(false);
-
- request->set_title("new title");
- request->set_modified_date(base::Time::FromUTCExploded(kModifiedDate));
- request->set_last_viewed_by_me_date(
- base::Time::FromUTCExploded(kLastViewedByMeDate));
- request->add_parent("parent_resource_id");
-
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_PATCH, http_request_.method);
- EXPECT_EQ("/drive/v2/files/resource_id"
- "?setModifiedDate=true&updateViewedDate=false",
- http_request_.relative_url);
-
- EXPECT_EQ("application/json", http_request_.headers["Content-Type"]);
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ("{\"lastViewedByMeDate\":\"2013-07-19T15:59:13.123Z\","
- "\"modifiedDate\":\"2012-07-19T15:59:13.123Z\","
- "\"parents\":[{\"id\":\"parent_resource_id\"}],"
- "\"title\":\"new title\"}",
- http_request_.content);
- EXPECT_TRUE(file_resource);
-}
-
-TEST_F(DriveApiRequestsTest, AboutGetRequest_ValidJson) {
- // Set an expected data file containing valid result.
- expected_data_file_path_ = test_util::GetTestFilePath(
- "drive/about.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<AboutResource> about_resource;
-
- {
- base::RunLoop run_loop;
- drive::AboutGetRequest* request = new drive::AboutGetRequest(
- request_sender_.get(),
- *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &about_resource)));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
- EXPECT_EQ("/drive/v2/about", http_request_.relative_url);
-
- scoped_ptr<AboutResource> expected(
- AboutResource::CreateFrom(
- *test_util::LoadJSONFile("drive/about.json")));
- ASSERT_TRUE(about_resource.get());
- EXPECT_EQ(expected->largest_change_id(), about_resource->largest_change_id());
- EXPECT_EQ(expected->quota_bytes_total(), about_resource->quota_bytes_total());
- EXPECT_EQ(expected->quota_bytes_used(), about_resource->quota_bytes_used());
- EXPECT_EQ(expected->root_folder_id(), about_resource->root_folder_id());
-}
-
-TEST_F(DriveApiRequestsTest, AboutGetRequest_InvalidJson) {
- // Set an expected data file containing invalid result.
- expected_data_file_path_ = test_util::GetTestFilePath(
- "gdata/testfile.txt");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<AboutResource> about_resource;
-
- {
- base::RunLoop run_loop;
- drive::AboutGetRequest* request = new drive::AboutGetRequest(
- request_sender_.get(),
- *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &about_resource)));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- // "parse error" should be returned, and the about resource should be NULL.
- EXPECT_EQ(GDATA_PARSE_ERROR, error);
- EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
- EXPECT_EQ("/drive/v2/about", http_request_.relative_url);
- EXPECT_FALSE(about_resource);
-}
-
-TEST_F(DriveApiRequestsTest, AppsListRequest) {
- // Set an expected data file containing valid result.
- expected_data_file_path_ = test_util::GetTestFilePath(
- "drive/applist.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<AppList> app_list;
-
- {
- base::RunLoop run_loop;
- drive::AppsListRequest* request = new drive::AppsListRequest(
- request_sender_.get(),
- *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &app_list)));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
- EXPECT_EQ("/drive/v2/apps", http_request_.relative_url);
- EXPECT_TRUE(app_list);
-}
-
-TEST_F(DriveApiRequestsTest, ChangesListRequest) {
- // Set an expected data file containing valid result.
- expected_data_file_path_ = test_util::GetTestFilePath(
- "drive/changelist.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<ChangeList> result;
-
- {
- base::RunLoop run_loop;
- drive::ChangesListRequest* request = new drive::ChangesListRequest(
- request_sender_.get(), *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &result)));
- request->set_include_deleted(true);
- request->set_start_change_id(100);
- request->set_max_results(500);
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
- EXPECT_EQ("/drive/v2/changes?maxResults=500&startChangeId=100",
- http_request_.relative_url);
- EXPECT_TRUE(result);
-}
-
-TEST_F(DriveApiRequestsTest, ChangesListNextPageRequest) {
- // Set an expected data file containing valid result.
- expected_data_file_path_ = test_util::GetTestFilePath(
- "drive/changelist.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<ChangeList> result;
-
- {
- base::RunLoop run_loop;
- drive::ChangesListNextPageRequest* request =
- new drive::ChangesListNextPageRequest(
- request_sender_.get(),
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &result)));
- request->set_next_link(test_server_.GetURL("/continue/get/change/list"));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
- EXPECT_EQ("/continue/get/change/list", http_request_.relative_url);
- EXPECT_TRUE(result);
-}
-
-TEST_F(DriveApiRequestsTest, FilesCopyRequest) {
- const base::Time::Exploded kModifiedDate = {2012, 7, 0, 19, 15, 59, 13, 123};
-
- // Set an expected data file containing the dummy file entry data.
- // It'd be returned if we copy a file.
- expected_data_file_path_ =
- test_util::GetTestFilePath("drive/file_entry.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<FileResource> file_resource;
-
- // Copy the file to a new file named "new title".
- {
- base::RunLoop run_loop;
- drive::FilesCopyRequest* request = new drive::FilesCopyRequest(
- request_sender_.get(),
- *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &file_resource)));
- request->set_file_id("resource_id");
- request->set_modified_date(base::Time::FromUTCExploded(kModifiedDate));
- request->add_parent("parent_resource_id");
- request->set_title("new title");
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_POST, http_request_.method);
- EXPECT_EQ("/drive/v2/files/resource_id/copy", http_request_.relative_url);
- EXPECT_EQ("application/json", http_request_.headers["Content-Type"]);
-
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ(
- "{\"modifiedDate\":\"2012-07-19T15:59:13.123Z\","
- "\"parents\":[{\"id\":\"parent_resource_id\"}],\"title\":\"new title\"}",
- http_request_.content);
- EXPECT_TRUE(file_resource);
-}
-
-TEST_F(DriveApiRequestsTest, FilesCopyRequest_EmptyParentResourceId) {
- // Set an expected data file containing the dummy file entry data.
- // It'd be returned if we copy a file.
- expected_data_file_path_ =
- test_util::GetTestFilePath("drive/file_entry.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<FileResource> file_resource;
-
- // Copy the file to a new file named "new title".
- {
- base::RunLoop run_loop;
- drive::FilesCopyRequest* request = new drive::FilesCopyRequest(
- request_sender_.get(),
- *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &file_resource)));
- request->set_file_id("resource_id");
- request->set_title("new title");
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_POST, http_request_.method);
- EXPECT_EQ("/drive/v2/files/resource_id/copy", http_request_.relative_url);
- EXPECT_EQ("application/json", http_request_.headers["Content-Type"]);
-
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ("{\"title\":\"new title\"}", http_request_.content);
- EXPECT_TRUE(file_resource);
-}
-
-TEST_F(DriveApiRequestsTest, FilesListRequest) {
- // Set an expected data file containing valid result.
- expected_data_file_path_ = test_util::GetTestFilePath(
- "drive/filelist.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<FileList> result;
-
- {
- base::RunLoop run_loop;
- drive::FilesListRequest* request = new drive::FilesListRequest(
- request_sender_.get(), *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &result)));
- request->set_max_results(50);
- request->set_q("\"abcde\" in parents");
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
- EXPECT_EQ("/drive/v2/files?maxResults=50&q=%22abcde%22+in+parents",
- http_request_.relative_url);
- EXPECT_TRUE(result);
-}
-
-TEST_F(DriveApiRequestsTest, FilesListNextPageRequest) {
- // Set an expected data file containing valid result.
- expected_data_file_path_ = test_util::GetTestFilePath(
- "drive/filelist.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<FileList> result;
-
- {
- base::RunLoop run_loop;
- drive::FilesListNextPageRequest* request =
- new drive::FilesListNextPageRequest(
- request_sender_.get(),
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &result)));
- request->set_next_link(test_server_.GetURL("/continue/get/file/list"));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
- EXPECT_EQ("/continue/get/file/list", http_request_.relative_url);
- EXPECT_TRUE(result);
-}
-
-TEST_F(DriveApiRequestsTest, FilesTrashRequest) {
- // Set data for the expected result. Directory entry should be returned
- // if the trashing entry is a directory, so using it here should be fine.
- expected_data_file_path_ =
- test_util::GetTestFilePath("drive/directory_entry.json");
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- scoped_ptr<FileResource> file_resource;
-
- // Trash a resource with the given resource id.
- {
- base::RunLoop run_loop;
- drive::FilesTrashRequest* request = new drive::FilesTrashRequest(
- request_sender_.get(),
- *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &file_resource)));
- request->set_file_id("resource_id");
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_POST, http_request_.method);
- EXPECT_EQ("/drive/v2/files/resource_id/trash", http_request_.relative_url);
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_TRUE(http_request_.content.empty());
-}
-
-TEST_F(DriveApiRequestsTest, ChildrenInsertRequest) {
- // Set an expected data file containing the children entry.
- expected_content_type_ = "application/json";
- expected_content_ = kTestChildrenResponse;
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
-
- // Add a resource with "resource_id" to a directory with
- // "parent_resource_id".
- {
- base::RunLoop run_loop;
- drive::ChildrenInsertRequest* request = new drive::ChildrenInsertRequest(
- request_sender_.get(),
- *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error)));
- request->set_folder_id("parent_resource_id");
- request->set_id("resource_id");
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(net::test_server::METHOD_POST, http_request_.method);
- EXPECT_EQ("/drive/v2/files/parent_resource_id/children",
- http_request_.relative_url);
- EXPECT_EQ("application/json", http_request_.headers["Content-Type"]);
-
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ("{\"id\":\"resource_id\"}", http_request_.content);
-}
-
-TEST_F(DriveApiRequestsTest, ChildrenDeleteRequest) {
- GDataErrorCode error = GDATA_OTHER_ERROR;
-
- // Remove a resource with "resource_id" from a directory with
- // "parent_resource_id".
- {
- base::RunLoop run_loop;
- drive::ChildrenDeleteRequest* request = new drive::ChildrenDeleteRequest(
- request_sender_.get(),
- *url_generator_,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error)));
- request->set_child_id("resource_id");
- request->set_folder_id("parent_resource_id");
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_NO_CONTENT, error);
- EXPECT_EQ(net::test_server::METHOD_DELETE, http_request_.method);
- EXPECT_EQ("/drive/v2/files/parent_resource_id/children/resource_id",
- http_request_.relative_url);
- EXPECT_FALSE(http_request_.has_content);
-}
-
-TEST_F(DriveApiRequestsTest, UploadNewFileRequest) {
- // Set an expected url for uploading.
- expected_upload_path_ = kTestUploadNewFilePath;
-
- const char kTestContentType[] = "text/plain";
- const std::string kTestContent(100, 'a');
- const base::FilePath kTestFilePath =
- temp_dir_.path().AppendASCII("upload_file.txt");
- ASSERT_TRUE(test_util::WriteStringToFile(kTestFilePath, kTestContent));
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- GURL upload_url;
-
- // Initiate uploading a new file to the directory with
- // "parent_resource_id".
- {
- base::RunLoop run_loop;
- drive::InitiateUploadNewFileRequest* request =
- new drive::InitiateUploadNewFileRequest(
- request_sender_.get(),
- *url_generator_,
- kTestContentType,
- kTestContent.size(),
- "parent_resource_id", // The resource id of the parent directory.
- "new file title", // The title of the file being uploaded.
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &upload_url)));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(kTestUploadNewFilePath, upload_url.path());
- EXPECT_EQ(kTestContentType, http_request_.headers["X-Upload-Content-Type"]);
- EXPECT_EQ(base::Int64ToString(kTestContent.size()),
- http_request_.headers["X-Upload-Content-Length"]);
-
- EXPECT_EQ(net::test_server::METHOD_POST, http_request_.method);
- EXPECT_EQ("/upload/drive/v2/files?uploadType=resumable",
- http_request_.relative_url);
- EXPECT_EQ("application/json", http_request_.headers["Content-Type"]);
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ("{\"parents\":[{"
- "\"id\":\"parent_resource_id\","
- "\"kind\":\"drive#fileLink\""
- "}],"
- "\"title\":\"new file title\"}",
- http_request_.content);
-
- // Upload the content to the upload URL.
- UploadRangeResponse response;
- scoped_ptr<FileResource> new_entry;
-
- {
- base::RunLoop run_loop;
- drive::ResumeUploadRequest* resume_request =
- new drive::ResumeUploadRequest(
- request_sender_.get(),
- upload_url,
- 0, // start_position
- kTestContent.size(), // end_position (exclusive)
- kTestContent.size(), // content_length,
- kTestContentType,
- kTestFilePath,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&response, &new_entry)),
- ProgressCallback());
- request_sender_->StartRequestWithRetry(resume_request);
- run_loop.Run();
- }
-
- // METHOD_PUT should be used to upload data.
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- // Request should go to the upload URL.
- EXPECT_EQ(upload_url.path(), http_request_.relative_url);
- // Content-Range header should be added.
- EXPECT_EQ("bytes 0-" +
- base::Int64ToString(kTestContent.size() - 1) + "/" +
- base::Int64ToString(kTestContent.size()),
- http_request_.headers["Content-Range"]);
- // The upload content should be set in the HTTP request.
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ(kTestContent, http_request_.content);
-
- // Check the response.
- EXPECT_EQ(HTTP_CREATED, response.code); // Because it's a new file
- // The start and end positions should be set to -1, if an upload is complete.
- EXPECT_EQ(-1, response.start_position_received);
- EXPECT_EQ(-1, response.end_position_received);
-}
-
-TEST_F(DriveApiRequestsTest, UploadNewEmptyFileRequest) {
- // Set an expected url for uploading.
- expected_upload_path_ = kTestUploadNewFilePath;
-
- const char kTestContentType[] = "text/plain";
- const char kTestContent[] = "";
- const base::FilePath kTestFilePath =
- temp_dir_.path().AppendASCII("empty_file.txt");
- ASSERT_TRUE(test_util::WriteStringToFile(kTestFilePath, kTestContent));
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- GURL upload_url;
-
- // Initiate uploading a new file to the directory with "parent_resource_id".
- {
- base::RunLoop run_loop;
- drive::InitiateUploadNewFileRequest* request =
- new drive::InitiateUploadNewFileRequest(
- request_sender_.get(),
- *url_generator_,
- kTestContentType,
- 0,
- "parent_resource_id", // The resource id of the parent directory.
- "new file title", // The title of the file being uploaded.
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &upload_url)));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(kTestUploadNewFilePath, upload_url.path());
- EXPECT_EQ(kTestContentType, http_request_.headers["X-Upload-Content-Type"]);
- EXPECT_EQ("0", http_request_.headers["X-Upload-Content-Length"]);
-
- EXPECT_EQ(net::test_server::METHOD_POST, http_request_.method);
- EXPECT_EQ("/upload/drive/v2/files?uploadType=resumable",
- http_request_.relative_url);
- EXPECT_EQ("application/json", http_request_.headers["Content-Type"]);
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ("{\"parents\":[{"
- "\"id\":\"parent_resource_id\","
- "\"kind\":\"drive#fileLink\""
- "}],"
- "\"title\":\"new file title\"}",
- http_request_.content);
-
- // Upload the content to the upload URL.
- UploadRangeResponse response;
- scoped_ptr<FileResource> new_entry;
-
- {
- base::RunLoop run_loop;
- drive::ResumeUploadRequest* resume_request =
- new drive::ResumeUploadRequest(
- request_sender_.get(),
- upload_url,
- 0, // start_position
- 0, // end_position (exclusive)
- 0, // content_length,
- kTestContentType,
- kTestFilePath,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&response, &new_entry)),
- ProgressCallback());
- request_sender_->StartRequestWithRetry(resume_request);
- run_loop.Run();
- }
-
- // METHOD_PUT should be used to upload data.
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- // Request should go to the upload URL.
- EXPECT_EQ(upload_url.path(), http_request_.relative_url);
- // Content-Range header should NOT be added.
- EXPECT_EQ(0U, http_request_.headers.count("Content-Range"));
- // The upload content should be set in the HTTP request.
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ(kTestContent, http_request_.content);
-
- // Check the response.
- EXPECT_EQ(HTTP_CREATED, response.code); // Because it's a new file
- // The start and end positions should be set to -1, if an upload is complete.
- EXPECT_EQ(-1, response.start_position_received);
- EXPECT_EQ(-1, response.end_position_received);
-}
-
-TEST_F(DriveApiRequestsTest, UploadNewLargeFileRequest) {
- // Set an expected url for uploading.
- expected_upload_path_ = kTestUploadNewFilePath;
-
- const char kTestContentType[] = "text/plain";
- const size_t kNumChunkBytes = 10; // Num bytes in a chunk.
- const std::string kTestContent(100, 'a');
- const base::FilePath kTestFilePath =
- temp_dir_.path().AppendASCII("upload_file.txt");
- ASSERT_TRUE(test_util::WriteStringToFile(kTestFilePath, kTestContent));
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- GURL upload_url;
-
- // Initiate uploading a new file to the directory with "parent_resource_id".
- {
- base::RunLoop run_loop;
- drive::InitiateUploadNewFileRequest* request =
- new drive::InitiateUploadNewFileRequest(
- request_sender_.get(),
- *url_generator_,
- kTestContentType,
- kTestContent.size(),
- "parent_resource_id", // The resource id of the parent directory.
- "new file title", // The title of the file being uploaded.
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &upload_url)));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(kTestUploadNewFilePath, upload_url.path());
- EXPECT_EQ(kTestContentType, http_request_.headers["X-Upload-Content-Type"]);
- EXPECT_EQ(base::Int64ToString(kTestContent.size()),
- http_request_.headers["X-Upload-Content-Length"]);
-
- EXPECT_EQ(net::test_server::METHOD_POST, http_request_.method);
- EXPECT_EQ("/upload/drive/v2/files?uploadType=resumable",
- http_request_.relative_url);
- EXPECT_EQ("application/json", http_request_.headers["Content-Type"]);
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ("{\"parents\":[{"
- "\"id\":\"parent_resource_id\","
- "\"kind\":\"drive#fileLink\""
- "}],"
- "\"title\":\"new file title\"}",
- http_request_.content);
-
- // Before sending any data, check the current status.
- // This is an edge case test for GetUploadStatusRequest.
- {
- UploadRangeResponse response;
- scoped_ptr<FileResource> new_entry;
-
- // Check the response by GetUploadStatusRequest.
- {
- base::RunLoop run_loop;
- drive::GetUploadStatusRequest* get_upload_status_request =
- new drive::GetUploadStatusRequest(
- request_sender_.get(),
- upload_url,
- kTestContent.size(),
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&response, &new_entry)));
- request_sender_->StartRequestWithRetry(get_upload_status_request);
- run_loop.Run();
- }
-
- // METHOD_PUT should be used to upload data.
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- // Request should go to the upload URL.
- EXPECT_EQ(upload_url.path(), http_request_.relative_url);
- // Content-Range header should be added.
- EXPECT_EQ("bytes */" + base::Int64ToString(kTestContent.size()),
- http_request_.headers["Content-Range"]);
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_TRUE(http_request_.content.empty());
-
- // Check the response.
- EXPECT_EQ(HTTP_RESUME_INCOMPLETE, response.code);
- EXPECT_EQ(0, response.start_position_received);
- EXPECT_EQ(0, response.end_position_received);
- }
-
- // Upload the content to the upload URL.
- for (size_t start_position = 0; start_position < kTestContent.size();
- start_position += kNumChunkBytes) {
- const std::string payload = kTestContent.substr(
- start_position,
- std::min(kNumChunkBytes, kTestContent.size() - start_position));
- const size_t end_position = start_position + payload.size();
-
- UploadRangeResponse response;
- scoped_ptr<FileResource> new_entry;
-
- {
- base::RunLoop run_loop;
- drive::ResumeUploadRequest* resume_request =
- new drive::ResumeUploadRequest(
- request_sender_.get(),
- upload_url,
- start_position,
- end_position,
- kTestContent.size(), // content_length,
- kTestContentType,
- kTestFilePath,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&response, &new_entry)),
- ProgressCallback());
- request_sender_->StartRequestWithRetry(resume_request);
- run_loop.Run();
- }
-
- // METHOD_PUT should be used to upload data.
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- // Request should go to the upload URL.
- EXPECT_EQ(upload_url.path(), http_request_.relative_url);
- // Content-Range header should be added.
- EXPECT_EQ("bytes " +
- base::Int64ToString(start_position) + "-" +
- base::Int64ToString(end_position - 1) + "/" +
- base::Int64ToString(kTestContent.size()),
- http_request_.headers["Content-Range"]);
- // The upload content should be set in the HTTP request.
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ(payload, http_request_.content);
-
- if (end_position == kTestContent.size()) {
- // Check the response.
- EXPECT_EQ(HTTP_CREATED, response.code); // Because it's a new file
- // The start and end positions should be set to -1, if an upload is
- // complete.
- EXPECT_EQ(-1, response.start_position_received);
- EXPECT_EQ(-1, response.end_position_received);
- break;
- }
-
- // Check the response.
- EXPECT_EQ(HTTP_RESUME_INCOMPLETE, response.code);
- EXPECT_EQ(0, response.start_position_received);
- EXPECT_EQ(static_cast<int64>(end_position), response.end_position_received);
-
- // Check the response by GetUploadStatusRequest.
- {
- base::RunLoop run_loop;
- drive::GetUploadStatusRequest* get_upload_status_request =
- new drive::GetUploadStatusRequest(
- request_sender_.get(),
- upload_url,
- kTestContent.size(),
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&response, &new_entry)));
- request_sender_->StartRequestWithRetry(get_upload_status_request);
- run_loop.Run();
- }
-
- // METHOD_PUT should be used to upload data.
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- // Request should go to the upload URL.
- EXPECT_EQ(upload_url.path(), http_request_.relative_url);
- // Content-Range header should be added.
- EXPECT_EQ("bytes */" + base::Int64ToString(kTestContent.size()),
- http_request_.headers["Content-Range"]);
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_TRUE(http_request_.content.empty());
-
- // Check the response.
- EXPECT_EQ(HTTP_RESUME_INCOMPLETE, response.code);
- EXPECT_EQ(0, response.start_position_received);
- EXPECT_EQ(static_cast<int64>(end_position),
- response.end_position_received);
- }
-}
-
-TEST_F(DriveApiRequestsTest, UploadExistingFileRequest) {
- // Set an expected url for uploading.
- expected_upload_path_ = kTestUploadExistingFilePath;
-
- const char kTestContentType[] = "text/plain";
- const std::string kTestContent(100, 'a');
- const base::FilePath kTestFilePath =
- temp_dir_.path().AppendASCII("upload_file.txt");
- ASSERT_TRUE(test_util::WriteStringToFile(kTestFilePath, kTestContent));
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- GURL upload_url;
-
- // Initiate uploading a new file to the directory with "parent_resource_id".
- {
- base::RunLoop run_loop;
- drive::InitiateUploadExistingFileRequest* request =
- new drive::InitiateUploadExistingFileRequest(
- request_sender_.get(),
- *url_generator_,
- kTestContentType,
- kTestContent.size(),
- "resource_id", // The resource id of the file to be overwritten.
- std::string(), // No etag.
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &upload_url)));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(kTestUploadExistingFilePath, upload_url.path());
- EXPECT_EQ(kTestContentType, http_request_.headers["X-Upload-Content-Type"]);
- EXPECT_EQ(base::Int64ToString(kTestContent.size()),
- http_request_.headers["X-Upload-Content-Length"]);
- EXPECT_EQ("*", http_request_.headers["If-Match"]);
-
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- EXPECT_EQ("/upload/drive/v2/files/resource_id?uploadType=resumable",
- http_request_.relative_url);
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_TRUE(http_request_.content.empty());
-
- // Upload the content to the upload URL.
- UploadRangeResponse response;
- scoped_ptr<FileResource> new_entry;
-
- {
- base::RunLoop run_loop;
- drive::ResumeUploadRequest* resume_request =
- new drive::ResumeUploadRequest(
- request_sender_.get(),
- upload_url,
- 0, // start_position
- kTestContent.size(), // end_position (exclusive)
- kTestContent.size(), // content_length,
- kTestContentType,
- kTestFilePath,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&response, &new_entry)),
- ProgressCallback());
- request_sender_->StartRequestWithRetry(resume_request);
- run_loop.Run();
- }
-
- // METHOD_PUT should be used to upload data.
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- // Request should go to the upload URL.
- EXPECT_EQ(upload_url.path(), http_request_.relative_url);
- // Content-Range header should be added.
- EXPECT_EQ("bytes 0-" +
- base::Int64ToString(kTestContent.size() - 1) + "/" +
- base::Int64ToString(kTestContent.size()),
- http_request_.headers["Content-Range"]);
- // The upload content should be set in the HTTP request.
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ(kTestContent, http_request_.content);
-
- // Check the response.
- EXPECT_EQ(HTTP_SUCCESS, response.code); // Because it's an existing file
- // The start and end positions should be set to -1, if an upload is complete.
- EXPECT_EQ(-1, response.start_position_received);
- EXPECT_EQ(-1, response.end_position_received);
-}
-
-TEST_F(DriveApiRequestsTest, UploadExistingFileRequestWithETag) {
- // Set an expected url for uploading.
- expected_upload_path_ = kTestUploadExistingFilePath;
-
- const char kTestContentType[] = "text/plain";
- const std::string kTestContent(100, 'a');
- const base::FilePath kTestFilePath =
- temp_dir_.path().AppendASCII("upload_file.txt");
- ASSERT_TRUE(test_util::WriteStringToFile(kTestFilePath, kTestContent));
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- GURL upload_url;
-
- // Initiate uploading a new file to the directory with "parent_resource_id".
- {
- base::RunLoop run_loop;
- drive::InitiateUploadExistingFileRequest* request =
- new drive::InitiateUploadExistingFileRequest(
- request_sender_.get(),
- *url_generator_,
- kTestContentType,
- kTestContent.size(),
- "resource_id", // The resource id of the file to be overwritten.
- kTestETag,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &upload_url)));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(kTestUploadExistingFilePath, upload_url.path());
- EXPECT_EQ(kTestContentType, http_request_.headers["X-Upload-Content-Type"]);
- EXPECT_EQ(base::Int64ToString(kTestContent.size()),
- http_request_.headers["X-Upload-Content-Length"]);
- EXPECT_EQ(kTestETag, http_request_.headers["If-Match"]);
-
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- EXPECT_EQ("/upload/drive/v2/files/resource_id?uploadType=resumable",
- http_request_.relative_url);
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_TRUE(http_request_.content.empty());
-
- // Upload the content to the upload URL.
- UploadRangeResponse response;
- scoped_ptr<FileResource> new_entry;
-
- {
- base::RunLoop run_loop;
- drive::ResumeUploadRequest* resume_request =
- new drive::ResumeUploadRequest(
- request_sender_.get(),
- upload_url,
- 0, // start_position
- kTestContent.size(), // end_position (exclusive)
- kTestContent.size(), // content_length,
- kTestContentType,
- kTestFilePath,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&response, &new_entry)),
- ProgressCallback());
- request_sender_->StartRequestWithRetry(resume_request);
- run_loop.Run();
- }
-
- // METHOD_PUT should be used to upload data.
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- // Request should go to the upload URL.
- EXPECT_EQ(upload_url.path(), http_request_.relative_url);
- // Content-Range header should be added.
- EXPECT_EQ("bytes 0-" +
- base::Int64ToString(kTestContent.size() - 1) + "/" +
- base::Int64ToString(kTestContent.size()),
- http_request_.headers["Content-Range"]);
- // The upload content should be set in the HTTP request.
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ(kTestContent, http_request_.content);
-
- // Check the response.
- EXPECT_EQ(HTTP_SUCCESS, response.code); // Because it's an existing file
- // The start and end positions should be set to -1, if an upload is complete.
- EXPECT_EQ(-1, response.start_position_received);
- EXPECT_EQ(-1, response.end_position_received);
-}
-
-TEST_F(DriveApiRequestsTest, UploadExistingFileRequestWithETagConflicting) {
- // Set an expected url for uploading.
- expected_upload_path_ = kTestUploadExistingFilePath;
-
- // If it turned out that the etag is conflicting, PRECONDITION_FAILED should
- // be returned.
- expected_precondition_failed_file_path_ =
- test_util::GetTestFilePath("drive/error.json");
-
- const char kTestContentType[] = "text/plain";
- const std::string kTestContent(100, 'a');
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- GURL upload_url;
-
- // Initiate uploading a new file to the directory with "parent_resource_id".
- {
- base::RunLoop run_loop;
- drive::InitiateUploadExistingFileRequest* request =
- new drive::InitiateUploadExistingFileRequest(
- request_sender_.get(),
- *url_generator_,
- kTestContentType,
- kTestContent.size(),
- "resource_id", // The resource id of the file to be overwritten.
- "Conflicting-etag",
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &upload_url)));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_PRECONDITION, error);
- EXPECT_EQ(kTestContentType, http_request_.headers["X-Upload-Content-Type"]);
- EXPECT_EQ(base::Int64ToString(kTestContent.size()),
- http_request_.headers["X-Upload-Content-Length"]);
- EXPECT_EQ("Conflicting-etag", http_request_.headers["If-Match"]);
-
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- EXPECT_EQ("/upload/drive/v2/files/resource_id?uploadType=resumable",
- http_request_.relative_url);
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_TRUE(http_request_.content.empty());
-}
-
-TEST_F(DriveApiRequestsTest,
- UploadExistingFileRequestWithETagConflictOnResumeUpload) {
- // Set an expected url for uploading.
- expected_upload_path_ = kTestUploadExistingFilePath;
-
- const char kTestContentType[] = "text/plain";
- const std::string kTestContent(100, 'a');
- const base::FilePath kTestFilePath =
- temp_dir_.path().AppendASCII("upload_file.txt");
- ASSERT_TRUE(test_util::WriteStringToFile(kTestFilePath, kTestContent));
-
- GDataErrorCode error = GDATA_OTHER_ERROR;
- GURL upload_url;
-
- // Initiate uploading a new file to the directory with "parent_resource_id".
- {
- base::RunLoop run_loop;
- drive::InitiateUploadExistingFileRequest* request =
- new drive::InitiateUploadExistingFileRequest(
- request_sender_.get(),
- *url_generator_,
- kTestContentType,
- kTestContent.size(),
- "resource_id", // The resource id of the file to be overwritten.
- kTestETag,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&error, &upload_url)));
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- EXPECT_EQ(HTTP_SUCCESS, error);
- EXPECT_EQ(kTestUploadExistingFilePath, upload_url.path());
- EXPECT_EQ(kTestContentType, http_request_.headers["X-Upload-Content-Type"]);
- EXPECT_EQ(base::Int64ToString(kTestContent.size()),
- http_request_.headers["X-Upload-Content-Length"]);
- EXPECT_EQ(kTestETag, http_request_.headers["If-Match"]);
-
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- EXPECT_EQ("/upload/drive/v2/files/resource_id?uploadType=resumable",
- http_request_.relative_url);
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_TRUE(http_request_.content.empty());
-
- // Set PRECONDITION_FAILED to the server. This is the emulation of the
- // confliction during uploading.
- expected_precondition_failed_file_path_ =
- test_util::GetTestFilePath("drive/error.json");
-
- // Upload the content to the upload URL.
- UploadRangeResponse response;
- scoped_ptr<FileResource> new_entry;
-
- {
- base::RunLoop run_loop;
- drive::ResumeUploadRequest* resume_request =
- new drive::ResumeUploadRequest(
- request_sender_.get(),
- upload_url,
- 0, // start_position
- kTestContent.size(), // end_position (exclusive)
- kTestContent.size(), // content_length,
- kTestContentType,
- kTestFilePath,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&response, &new_entry)),
- ProgressCallback());
- request_sender_->StartRequestWithRetry(resume_request);
- run_loop.Run();
- }
-
- // METHOD_PUT should be used to upload data.
- EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
- // Request should go to the upload URL.
- EXPECT_EQ(upload_url.path(), http_request_.relative_url);
- // Content-Range header should be added.
- EXPECT_EQ("bytes 0-" +
- base::Int64ToString(kTestContent.size() - 1) + "/" +
- base::Int64ToString(kTestContent.size()),
- http_request_.headers["Content-Range"]);
- // The upload content should be set in the HTTP request.
- EXPECT_TRUE(http_request_.has_content);
- EXPECT_EQ(kTestContent, http_request_.content);
-
- // Check the response.
- EXPECT_EQ(HTTP_PRECONDITION, response.code);
- // The start and end positions should be set to -1 for error.
- EXPECT_EQ(-1, response.start_position_received);
- EXPECT_EQ(-1, response.end_position_received);
-
- // New entry should be NULL.
- EXPECT_FALSE(new_entry.get());
-}
-
-TEST_F(DriveApiRequestsTest, DownloadFileRequest) {
- const base::FilePath kDownloadedFilePath =
- temp_dir_.path().AppendASCII("cache_file");
- const std::string kTestId("dummyId");
-
- GDataErrorCode result_code = GDATA_OTHER_ERROR;
- base::FilePath temp_file;
- {
- base::RunLoop run_loop;
- drive::DownloadFileRequest* request = new drive::DownloadFileRequest(
- request_sender_.get(),
- *url_generator_,
- kTestId,
- kDownloadedFilePath,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&result_code, &temp_file)),
- GetContentCallback(),
- ProgressCallback());
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- std::string contents;
- base::ReadFileToString(temp_file, &contents);
- base::DeleteFile(temp_file, false);
-
- EXPECT_EQ(HTTP_SUCCESS, result_code);
- EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
- EXPECT_EQ(kTestDownloadPathPrefix + kTestId, http_request_.relative_url);
- EXPECT_EQ(kDownloadedFilePath, temp_file);
-
- const std::string expected_contents = kTestId + kTestId + kTestId;
- EXPECT_EQ(expected_contents, contents);
-}
-
-TEST_F(DriveApiRequestsTest, DownloadFileRequest_GetContentCallback) {
- const base::FilePath kDownloadedFilePath =
- temp_dir_.path().AppendASCII("cache_file");
- const std::string kTestId("dummyId");
-
- GDataErrorCode result_code = GDATA_OTHER_ERROR;
- base::FilePath temp_file;
- std::string contents;
- {
- base::RunLoop run_loop;
- drive::DownloadFileRequest* request = new drive::DownloadFileRequest(
- request_sender_.get(),
- *url_generator_,
- kTestId,
- kDownloadedFilePath,
- test_util::CreateQuitCallback(
- &run_loop,
- test_util::CreateCopyResultCallback(&result_code, &temp_file)),
- base::Bind(&AppendContent, &contents),
- ProgressCallback());
- request_sender_->StartRequestWithRetry(request);
- run_loop.Run();
- }
-
- base::DeleteFile(temp_file, false);
-
- EXPECT_EQ(HTTP_SUCCESS, result_code);
- EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
- EXPECT_EQ(kTestDownloadPathPrefix + kTestId, http_request_.relative_url);
- EXPECT_EQ(kDownloadedFilePath, temp_file);
-
- const std::string expected_contents = kTestId + kTestId + kTestId;
- EXPECT_EQ(expected_contents, contents);
-}
-
-} // namespace google_apis
« no previous file with comments | « chrome/browser/google_apis/drive_api_requests.cc ('k') | chrome/browser/google_apis/drive_api_url_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698