| Index: google_apis/drive/drive_api_requests_unittest.cc
|
| diff --git a/google_apis/drive/drive_api_requests_unittest.cc b/google_apis/drive/drive_api_requests_unittest.cc
|
| index 1acbf2f4b56b11bcd6b7f643817409b4052036b7..ab222c0b9715433083c549ec6c2d6560ea67ef4f 100644
|
| --- a/google_apis/drive/drive_api_requests_unittest.cc
|
| +++ b/google_apis/drive/drive_api_requests_unittest.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/run_loop.h"
|
| #include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/stringprintf.h"
|
| #include "base/values.h"
|
| #include "google_apis/drive/drive_api_parser.h"
|
| #include "google_apis/drive/drive_api_requests.h"
|
| @@ -100,6 +101,9 @@ class DriveApiRequestsTest : public testing::Test {
|
| test_server_.RegisterRequestHandler(
|
| base::Bind(&DriveApiRequestsTest::HandleDownloadRequest,
|
| base::Unretained(this)));
|
| + test_server_.RegisterRequestHandler(
|
| + base::Bind(&DriveApiRequestsTest::HandleBatchUploadRequest,
|
| + base::Unretained(this)));
|
|
|
| GURL test_base_url = test_util::GetBaseUrlForTesting(test_server_.port());
|
| url_generator_.reset(
|
| @@ -394,6 +398,24 @@ class DriveApiRequestsTest : public testing::Test {
|
| return response.Pass();
|
| }
|
|
|
| + scoped_ptr<net::test_server::HttpResponse> HandleBatchUploadRequest(
|
| + const net::test_server::HttpRequest& request) {
|
| + http_request_ = request;
|
| +
|
| + const GURL absolute_url = test_server_.GetURL(request.relative_url);
|
| + std::string id;
|
| + if (absolute_url.path() != "/upload/drive")
|
| + return scoped_ptr<net::test_server::HttpResponse>();
|
| +
|
| + scoped_ptr<net::test_server::BasicHttpResponse> response(
|
| + new net::test_server::BasicHttpResponse);
|
| + response->set_code(net::HTTP_OK);
|
| + response->set_content("{}");
|
| + response->set_content_type("text/plain");
|
| + // response->set_content("{\"kind\": \"drive#file\", \"id\": \"file_id\"}");
|
| + return response.Pass();
|
| + }
|
| +
|
| // These are for the current upload file status.
|
| int64 received_bytes_;
|
| int64 content_length_;
|
| @@ -1888,4 +1910,91 @@ TEST_F(DriveApiRequestsTest, PermissionsInsertRequest) {
|
| EXPECT_TRUE(base::Value::Equals(expected.get(), result.get()));
|
| }
|
|
|
| +TEST_F(DriveApiRequestsTest, BatchUploadRequest) {
|
| + // Preapre constants.
|
| + const char kTestContentType[] = "text/plain";
|
| + const std::string kTestContent(10, 'a');
|
| + const base::FilePath kTestFilePath =
|
| + temp_dir_.path().AppendASCII("upload_file.txt");
|
| + ASSERT_TRUE(test_util::WriteStringToFile(kTestFilePath, kTestContent));
|
| +
|
| + // Create batch request.
|
| + drive::BatchUploadRequest* const request = new drive::BatchUploadRequest(
|
| + request_sender_.get(), *url_generator_);
|
| + request->SetBoundaryForTesting("OUTERBOUNDARY");
|
| + request_sender_->StartRequestWithRetry(request);
|
| +
|
| + // Create child request.
|
| + DriveApiErrorCode error = DRIVE_OTHER_ERROR;
|
| + scoped_ptr<FileResource> file_resource;
|
| + base::RunLoop run_loop[2];
|
| + for (int i = 0; i < 2; ++i) {
|
| + const FileResourceCallback callback = test_util::CreateQuitCallback(
|
| + &run_loop[i],
|
| + test_util::CreateCopyResultCallback(&error, &file_resource));
|
| + drive::MultipartUploadNewFileRequest* const child_request =
|
| + new drive::MultipartUploadNewFileRequest(
|
| + request_sender_.get(),
|
| + base::StringPrintf("new file title %d", i),
|
| + "parent_resource_id",
|
| + kTestContentType,
|
| + kTestContent.size(),
|
| + base::Time(),
|
| + base::Time(),
|
| + kTestFilePath,
|
| + drive::Properties(),
|
| + *url_generator_,
|
| + callback,
|
| + ProgressCallback());
|
| + child_request->SetBoundaryForTesting("INNERBOUNDARY");
|
| + request->AddRequest(child_request);
|
| + }
|
| + request->Commit();
|
| + run_loop[0].Run();
|
| + run_loop[1].Run();
|
| +
|
| + EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
|
| + EXPECT_EQ("batch", http_request_.headers["X-Goog-Upload-Protocol"]);
|
| + EXPECT_EQ("multipart/mixed; boundary=OUTERBOUNDARY",
|
| + http_request_.headers["Content-Type"]);
|
| + EXPECT_EQ("--OUTERBOUNDARY\n"
|
| + "Content-Type: application/http\n"
|
| + "\n"
|
| + "POST /upload/drive/v2/files HTTP/1.1\n"
|
| + "Host: www.googleapis.com\n"
|
| + "X-Goog-Upload-Protocol: multipart\n"
|
| + "Content-Type: multipart/related; boundary=INNERBOUNDARY\n"
|
| + "\n"
|
| + "--INNERBOUNDARY\n"
|
| + "Content-Type: application/json\n"
|
| + "\n"
|
| + "{\"parents\":[{\"id\":\"parent_resource_id\","
|
| + "\"kind\":\"drive#fileLink\"}],\"title\":\"new file title 0\"}\n"
|
| + "--INNERBOUNDARY\n"
|
| + "Content-Type: text/plain\n"
|
| + "\n"
|
| + "aaaaaaaaaa\n"
|
| + "--INNERBOUNDARY--\n"
|
| + "--OUTERBOUNDARY\n"
|
| + "Content-Type: application/http\n"
|
| + "\n"
|
| + "POST /upload/drive/v2/files HTTP/1.1\n"
|
| + "Host: www.googleapis.com\n"
|
| + "X-Goog-Upload-Protocol: multipart\n"
|
| + "Content-Type: multipart/related; boundary=INNERBOUNDARY\n"
|
| + "\n"
|
| + "--INNERBOUNDARY\n"
|
| + "Content-Type: application/json\n"
|
| + "\n"
|
| + "{\"parents\":[{\"id\":\"parent_resource_id\","
|
| + "\"kind\":\"drive#fileLink\"}],\"title\":\"new file title 1\"}\n"
|
| + "--INNERBOUNDARY\n"
|
| + "Content-Type: text/plain\n"
|
| + "\n"
|
| + "aaaaaaaaaa\n"
|
| + "--INNERBOUNDARY--\n"
|
| + "--OUTERBOUNDARY--",
|
| + http_request_.content);
|
| +}
|
| +
|
| } // namespace google_apis
|
|
|