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

Side by Side Diff: google_apis/drive/drive_api_requests_unittest.cc

Issue 1130183003: Notify upload progress from batch request to its child requests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments and fix msan test. Created 5 years, 7 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
« no previous file with comments | « google_apis/drive/drive_api_requests.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/files/file_path.h" 6 #include "base/files/file_path.h"
7 #include "base/files/file_util.h" 7 #include "base/files/file_util.h"
8 #include "base/files/scoped_temp_dir.h" 8 #include "base/files/scoped_temp_dir.h"
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 } 80 }
81 net::URLFetcher::RequestType GetRequestType() const override { 81 net::URLFetcher::RequestType GetRequestType() const override {
82 return net::URLFetcher::PUT; 82 return net::URLFetcher::PUT;
83 } 83 }
84 bool GetContentData(std::string* upload_content_type, 84 bool GetContentData(std::string* upload_content_type,
85 std::string* upload_content) override { 85 std::string* upload_content) override {
86 upload_content_type->assign(content_type_); 86 upload_content_type->assign(content_type_);
87 upload_content->assign(content_data_); 87 upload_content->assign(content_data_);
88 return true; 88 return true;
89 } 89 }
90 void OnURLFetchUploadProgress(const net::URLFetcher* source,
91 int64 current,
92 int64 total) override {
93 progress_values_.push_back(current);
94 }
95 const std::vector<int64>& progress_values() const { return progress_values_; }
90 96
91 private: 97 private:
92 GURL url_; 98 GURL url_;
93 std::string content_type_; 99 std::string content_type_;
94 std::string content_data_; 100 std::string content_data_;
95 base::Closure callback_; 101 base::Closure callback_;
102 std::vector<int64> progress_values_;
96 }; 103 };
97 104
105 void EmptyPreapreCallback(DriveApiErrorCode) {
106 }
107 void EmptyClosure() {
108 }
109
98 } // namespace 110 } // namespace
99 111
100 class DriveApiRequestsTest : public testing::Test { 112 class DriveApiRequestsTest : public testing::Test {
101 public: 113 public:
102 DriveApiRequestsTest() { 114 DriveApiRequestsTest() {
103 } 115 }
104 116
105 void SetUp() override { 117 void SetUp() override {
106 request_context_getter_ = new net::TestURLRequestContextGetter( 118 request_context_getter_ = new net::TestURLRequestContextGetter(
107 message_loop_.message_loop_proxy()); 119 message_loop_.message_loop_proxy());
(...skipping 1957 matching lines...) Expand 10 before | Expand all | Expand 10 after
2065 drive::BatchUploadRequest* const request = 2077 drive::BatchUploadRequest* const request =
2066 new drive::BatchUploadRequest(request_sender_.get(), *url_generator_); 2078 new drive::BatchUploadRequest(request_sender_.get(), *url_generator_);
2067 request->SetBoundaryForTesting("OUTERBOUNDARY"); 2079 request->SetBoundaryForTesting("OUTERBOUNDARY");
2068 request_sender_->StartRequestWithRetry(request); 2080 request_sender_->StartRequestWithRetry(request);
2069 2081
2070 // Create child request. 2082 // Create child request.
2071 { 2083 {
2072 base::RunLoop loop; 2084 base::RunLoop loop;
2073 TestBatchableRequest* child_request = new TestBatchableRequest( 2085 TestBatchableRequest* child_request = new TestBatchableRequest(
2074 request_sender_.get(), GURL("http://example.com/test"), 2086 request_sender_.get(), GURL("http://example.com/test"),
2075 "application/binary", 2087 "application/binary", std::string("Apple\0Orange\0", 13),
2076 std::string("Apple\0Orange\0", 13),
2077 loop.QuitClosure()); 2088 loop.QuitClosure());
2078 request->AddRequest(child_request); 2089 request->AddRequest(child_request);
2079 request->Commit(); 2090 request->Commit();
2080 loop.Run(); 2091 loop.Run();
2081 } 2092 }
2082 2093
2083 EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method); 2094 EXPECT_EQ(net::test_server::METHOD_PUT, http_request_.method);
2084 EXPECT_EQ("batch", http_request_.headers["X-Goog-Upload-Protocol"]); 2095 EXPECT_EQ("batch", http_request_.headers["X-Goog-Upload-Protocol"]);
2085 EXPECT_EQ("multipart/mixed; boundary=OUTERBOUNDARY", 2096 EXPECT_EQ("multipart/mixed; boundary=OUTERBOUNDARY",
2086 http_request_.headers["Content-Type"]); 2097 http_request_.headers["Content-Type"]);
2087 EXPECT_EQ( 2098 EXPECT_EQ(
2088 "--OUTERBOUNDARY\n" 2099 "--OUTERBOUNDARY\n"
2089 "Content-Type: application/http\n" 2100 "Content-Type: application/http\n"
2090 "\n" 2101 "\n"
2091 "PUT /test HTTP/1.1\n" 2102 "PUT /test HTTP/1.1\n"
2092 "Host: 127.0.0.1\n" 2103 "Host: 127.0.0.1\n"
2093 "X-Goog-Upload-Protocol: multipart\n" 2104 "X-Goog-Upload-Protocol: multipart\n"
2094 "Content-Type: application/binary\n" 2105 "Content-Type: application/binary\n"
2095 "\n" 2106 "\n" +
2096 + std::string("Apple\0Orange\0", 13) + "\n" 2107 std::string("Apple\0Orange\0", 13) +
2097 "--OUTERBOUNDARY--", 2108 "\n"
2109 "--OUTERBOUNDARY--",
2098 http_request_.content); 2110 http_request_.content);
2099 } 2111 }
2100 2112
2113 TEST_F(DriveApiRequestsTest, BatchUploadRequestProgress) {
2114 // Create batch request.
2115 drive::BatchUploadRequest* const request =
2116 new drive::BatchUploadRequest(request_sender_.get(), *url_generator_);
2117 TestBatchableRequest* requests[] = {
2118 new TestBatchableRequest(request_sender_.get(),
2119 GURL("http://example.com/test"),
2120 "application/binary", std::string(100, 'a'),
2121 base::Bind(&EmptyClosure)),
2122 new TestBatchableRequest(request_sender_.get(),
2123 GURL("http://example.com/test"),
2124 "application/binary", std::string(50, 'b'),
2125 base::Bind(&EmptyClosure)),
2126 new TestBatchableRequest(request_sender_.get(),
2127 GURL("http://example.com/test"),
2128 "application/binary", std::string(0, 'c'),
2129 base::Bind(&EmptyClosure))};
2130 const size_t kExpectedUploadDataPosition[] = {208, 517, 776};
2131 const size_t kExpectedUploadDataSize = 851;
2132 request->AddRequest(requests[0]);
2133 request->AddRequest(requests[1]);
2134 request->AddRequest(requests[2]);
2135 request->Commit();
2136 request->Prepare(base::Bind(&EmptyPreapreCallback));
2137
2138 request->OnURLFetchUploadProgress(nullptr, 0, kExpectedUploadDataSize);
2139 request->OnURLFetchUploadProgress(nullptr, 150, kExpectedUploadDataSize);
2140 EXPECT_EQ(0u, requests[0]->progress_values().size());
2141 EXPECT_EQ(0u, requests[1]->progress_values().size());
2142 EXPECT_EQ(0u, requests[2]->progress_values().size());
2143 request->OnURLFetchUploadProgress(nullptr, kExpectedUploadDataPosition[0],
2144 kExpectedUploadDataSize);
2145 EXPECT_EQ(1u, requests[0]->progress_values().size());
2146 EXPECT_EQ(0u, requests[1]->progress_values().size());
2147 EXPECT_EQ(0u, requests[2]->progress_values().size());
2148 request->OnURLFetchUploadProgress(
2149 nullptr, kExpectedUploadDataPosition[0] + 50, kExpectedUploadDataSize);
2150 EXPECT_EQ(2u, requests[0]->progress_values().size());
2151 EXPECT_EQ(0u, requests[1]->progress_values().size());
2152 EXPECT_EQ(0u, requests[2]->progress_values().size());
2153 request->OnURLFetchUploadProgress(
2154 nullptr, kExpectedUploadDataPosition[1] + 20, kExpectedUploadDataSize);
2155 EXPECT_EQ(3u, requests[0]->progress_values().size());
2156 EXPECT_EQ(1u, requests[1]->progress_values().size());
2157 EXPECT_EQ(0u, requests[2]->progress_values().size());
2158 request->OnURLFetchUploadProgress(nullptr, kExpectedUploadDataPosition[2],
2159 kExpectedUploadDataSize);
2160 EXPECT_EQ(3u, requests[0]->progress_values().size());
2161 EXPECT_EQ(2u, requests[1]->progress_values().size());
2162 EXPECT_EQ(1u, requests[2]->progress_values().size());
2163 request->OnURLFetchUploadProgress(nullptr, kExpectedUploadDataSize,
2164 kExpectedUploadDataSize);
2165 ASSERT_EQ(3u, requests[0]->progress_values().size());
2166 EXPECT_EQ(0, requests[0]->progress_values()[0]);
2167 EXPECT_EQ(50, requests[0]->progress_values()[1]);
2168 EXPECT_EQ(100, requests[0]->progress_values()[2]);
2169 ASSERT_EQ(2u, requests[1]->progress_values().size());
2170 EXPECT_EQ(20, requests[1]->progress_values()[0]);
2171 EXPECT_EQ(50, requests[1]->progress_values()[1]);
2172 ASSERT_EQ(1u, requests[2]->progress_values().size());
2173 EXPECT_EQ(0, requests[2]->progress_values()[0]);
2174
2175 request->Cancel();
2176 }
2177
2101 TEST(ParseMultipartResponseTest, Empty) { 2178 TEST(ParseMultipartResponseTest, Empty) {
2102 std::vector<drive::MultipartHttpResponse> parts; 2179 std::vector<drive::MultipartHttpResponse> parts;
2103 EXPECT_FALSE(drive::ParseMultipartResponse( 2180 EXPECT_FALSE(drive::ParseMultipartResponse(
2104 "multipart/mixed; boundary=BOUNDARY", "", &parts)); 2181 "multipart/mixed; boundary=BOUNDARY", "", &parts));
2105 EXPECT_FALSE(drive::ParseMultipartResponse("multipart/mixed; boundary=", 2182 EXPECT_FALSE(drive::ParseMultipartResponse("multipart/mixed; boundary=",
2106 "CONTENT", &parts)); 2183 "CONTENT", &parts));
2107 } 2184 }
2108 2185
2109 TEST(ParseMultipartResponseTest, Basic) { 2186 TEST(ParseMultipartResponseTest, Basic) {
2110 std::vector<drive::MultipartHttpResponse> parts; 2187 std::vector<drive::MultipartHttpResponse> parts;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
2199 "Header: value\r\n" 2276 "Header: value\r\n"
2200 "\r\n" 2277 "\r\n"
2201 "BODY\r\n" 2278 "BODY\r\n"
2202 "--BOUNDARY-- \t", 2279 "--BOUNDARY-- \t",
2203 &parts)); 2280 &parts));
2204 ASSERT_EQ(1u, parts.size()); 2281 ASSERT_EQ(1u, parts.size());
2205 EXPECT_EQ(HTTP_SUCCESS, parts[0].code); 2282 EXPECT_EQ(HTTP_SUCCESS, parts[0].code);
2206 EXPECT_EQ("BODY", parts[0].body); 2283 EXPECT_EQ("BODY", parts[0].body);
2207 } 2284 }
2208 } // namespace google_apis 2285 } // namespace google_apis
OLDNEW
« no previous file with comments | « google_apis/drive/drive_api_requests.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698