| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |