Index: chrome/browser/google_apis/gdata_wapi_requests_unittest.cc |
diff --git a/chrome/browser/google_apis/gdata_wapi_requests_unittest.cc b/chrome/browser/google_apis/gdata_wapi_requests_unittest.cc |
index 9772754d48436daa9a99eaa29187d8f06dc48a8d..cbdd2fa351d275279b854ef6aaa102ea5c37e8f5 100644 |
--- a/chrome/browser/google_apis/gdata_wapi_requests_unittest.cc |
+++ b/chrome/browser/google_apis/gdata_wapi_requests_unittest.cc |
@@ -6,6 +6,7 @@ |
#include <map> |
#include "base/bind.h" |
+#include "base/file_util.h" |
#include "base/files/file_path.h" |
#include "base/files/scoped_temp_dir.h" |
#include "base/json/json_reader.h" |
@@ -37,6 +38,7 @@ namespace { |
const char kTestGDataAuthToken[] = "testtoken"; |
const char kTestUserAgent[] = "test-user-agent"; |
const char kTestETag[] = "test_etag"; |
+const char kTestDownloadPathPrefix[] = "/download/"; |
class GDataWapiRequestsTest : public testing::Test { |
public: |
@@ -79,10 +81,13 @@ class GDataWapiRequestsTest : public testing::Test { |
test_server_.RegisterRequestHandler( |
base::Bind(&GDataWapiRequestsTest::HandleUploadRequest, |
base::Unretained(this))); |
+ test_server_.RegisterRequestHandler( |
+ base::Bind(&GDataWapiRequestsTest::HandleDownloadRequest, |
+ base::Unretained(this))); |
GURL test_base_url = test_util::GetBaseUrlForTesting(test_server_.port()); |
url_generator_.reset(new GDataWapiUrlGenerator( |
- test_base_url, test_base_url.Resolve("download/"))); |
+ test_base_url, test_base_url.Resolve(kTestDownloadPathPrefix))); |
received_bytes_ = 0; |
content_length_ = 0; |
@@ -312,6 +317,28 @@ class GDataWapiRequestsTest : public testing::Test { |
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>(); |
+ } |
+ |
content::TestBrowserThreadBundle thread_bundle_; |
net::test_server::EmbeddedTestServer test_server_; |
scoped_ptr<TestingProfile> profile_; |
@@ -1542,4 +1569,41 @@ TEST_F(GDataWapiRequestsTest, UploadExistingFileWithETagConflict) { |
EXPECT_EQ(kWrongETag, http_request_.headers["If-Match"]); |
} |
+TEST_F(GDataWapiRequestsTest, DownloadFileRequest) { |
+ const base::FilePath kDownloadedFilePath = |
+ temp_dir_.path().AppendASCII("cache_file"); |
+ const std::string kTestIdWithTypeLabel("file:dummyId"); |
+ const std::string kTestId("dummyId"); |
+ |
+ GDataErrorCode result_code = GDATA_OTHER_ERROR; |
+ base::FilePath temp_file; |
+ { |
+ base::RunLoop run_loop; |
+ DownloadFileRequest* request = new DownloadFileRequest( |
+ request_sender_.get(), |
+ *url_generator_, |
+ test_util::CreateQuitCallback( |
+ &run_loop, |
+ test_util::CreateCopyResultCallback(&result_code, &temp_file)), |
+ GetContentCallback(), |
+ ProgressCallback(), |
+ kTestIdWithTypeLabel, |
+ kDownloadedFilePath); |
+ request_sender_->StartRequestWithRetry(request); |
+ run_loop.Run(); |
+ } |
+ |
+ std::string contents; |
+ file_util::ReadFileToString(temp_file, &contents); |
+ base::Delete(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 |