| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "base/bind.h" | |
| 6 #include "base/message_loop/message_loop.h" | |
| 7 #include "base/run_loop.h" | |
| 8 #include "google_apis/drive/dummy_auth_service.h" | |
| 9 #include "google_apis/drive/gdata_wapi_parser.h" | |
| 10 #include "google_apis/drive/gdata_wapi_requests.h" | |
| 11 #include "google_apis/drive/gdata_wapi_url_generator.h" | |
| 12 #include "google_apis/drive/request_sender.h" | |
| 13 #include "google_apis/drive/test_util.h" | |
| 14 #include "net/base/escape.h" | |
| 15 #include "net/test/embedded_test_server/embedded_test_server.h" | |
| 16 #include "net/test/embedded_test_server/http_request.h" | |
| 17 #include "net/test/embedded_test_server/http_response.h" | |
| 18 #include "net/url_request/url_request_test_util.h" | |
| 19 #include "testing/gtest/include/gtest/gtest.h" | |
| 20 | |
| 21 namespace google_apis { | |
| 22 | |
| 23 namespace { | |
| 24 | |
| 25 const char kTestUserAgent[] = "test-user-agent"; | |
| 26 | |
| 27 class GDataWapiRequestsTest : public testing::Test { | |
| 28 public: | |
| 29 void SetUp() override { | |
| 30 request_context_getter_ = new net::TestURLRequestContextGetter( | |
| 31 message_loop_.message_loop_proxy()); | |
| 32 | |
| 33 request_sender_.reset(new RequestSender(new DummyAuthService, | |
| 34 request_context_getter_.get(), | |
| 35 message_loop_.message_loop_proxy(), | |
| 36 kTestUserAgent)); | |
| 37 | |
| 38 ASSERT_TRUE(test_server_.InitializeAndWaitUntilReady()); | |
| 39 test_server_.RegisterRequestHandler( | |
| 40 base::Bind(&GDataWapiRequestsTest::HandleResourceFeedRequest, | |
| 41 base::Unretained(this))); | |
| 42 | |
| 43 GURL test_base_url = test_util::GetBaseUrlForTesting(test_server_.port()); | |
| 44 url_generator_.reset(new GDataWapiUrlGenerator(test_base_url)); | |
| 45 } | |
| 46 | |
| 47 protected: | |
| 48 // Handles a request for fetching a resource feed. | |
| 49 scoped_ptr<net::test_server::HttpResponse> HandleResourceFeedRequest( | |
| 50 const net::test_server::HttpRequest& request) { | |
| 51 http_request_ = request; | |
| 52 | |
| 53 const GURL absolute_url = test_server_.GetURL(request.relative_url); | |
| 54 std::string remaining_path; | |
| 55 | |
| 56 if (!test_util::RemovePrefix(absolute_url.path(), | |
| 57 "/feeds/default/private/full", | |
| 58 &remaining_path)) { | |
| 59 return nullptr; | |
| 60 } | |
| 61 | |
| 62 // Process a feed for a single resource ID. | |
| 63 const std::string resource_id = net::UnescapeURLComponent( | |
| 64 remaining_path.substr(1), net::UnescapeRule::URL_SPECIAL_CHARS); | |
| 65 if (resource_id == "file:2_file_resource_id") { | |
| 66 scoped_ptr<net::test_server::BasicHttpResponse> result( | |
| 67 test_util::CreateHttpResponseFromFile( | |
| 68 test_util::GetTestFilePath("gdata/file_entry.json"))); | |
| 69 return result.Pass(); | |
| 70 } else if (resource_id == "invalid_resource_id") { | |
| 71 // Check if this is an authorization request for an app. | |
| 72 // This emulates to return invalid formatted result from the server. | |
| 73 if (request.method == net::test_server::METHOD_PUT && | |
| 74 request.content.find("<docs:authorizedApp>") != std::string::npos) { | |
| 75 scoped_ptr<net::test_server::BasicHttpResponse> result( | |
| 76 test_util::CreateHttpResponseFromFile( | |
| 77 test_util::GetTestFilePath("drive/testfile.txt"))); | |
| 78 return result.Pass(); | |
| 79 } | |
| 80 } | |
| 81 | |
| 82 return nullptr; | |
| 83 } | |
| 84 | |
| 85 base::MessageLoopForIO message_loop_; // Test server needs IO thread. | |
| 86 net::test_server::EmbeddedTestServer test_server_; | |
| 87 scoped_ptr<RequestSender> request_sender_; | |
| 88 scoped_ptr<GDataWapiUrlGenerator> url_generator_; | |
| 89 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; | |
| 90 | |
| 91 // The incoming HTTP request is saved so tests can verify the request | |
| 92 // parameters like HTTP method (ex. some requests should use DELETE | |
| 93 // instead of GET). | |
| 94 net::test_server::HttpRequest http_request_; | |
| 95 }; | |
| 96 | |
| 97 } // namespace | |
| 98 | |
| 99 TEST_F(GDataWapiRequestsTest, GetResourceEntryRequest_ValidResourceId) { | |
| 100 GDataErrorCode result_code = GDATA_OTHER_ERROR; | |
| 101 scoped_ptr<ResourceEntry> result_data; | |
| 102 | |
| 103 { | |
| 104 base::RunLoop run_loop; | |
| 105 GetResourceEntryRequest* request = new GetResourceEntryRequest( | |
| 106 request_sender_.get(), | |
| 107 *url_generator_, | |
| 108 "file:2_file_resource_id", // resource ID | |
| 109 GURL(), // embed origin | |
| 110 test_util::CreateQuitCallback( | |
| 111 &run_loop, | |
| 112 test_util::CreateCopyResultCallback(&result_code, &result_data))); | |
| 113 request_sender_->StartRequestWithRetry(request); | |
| 114 run_loop.Run(); | |
| 115 } | |
| 116 | |
| 117 EXPECT_EQ(HTTP_SUCCESS, result_code); | |
| 118 EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method); | |
| 119 EXPECT_EQ("/feeds/default/private/full/file%3A2_file_resource_id" | |
| 120 "?v=3&alt=json&showroot=true", | |
| 121 http_request_.relative_url); | |
| 122 EXPECT_TRUE(result_data); | |
| 123 EXPECT_EQ("File 1.mp3", result_data->filename()); | |
| 124 EXPECT_EQ("3b4382ebefec6e743578c76bbd0575ce", result_data->file_md5()); | |
| 125 } | |
| 126 | |
| 127 TEST_F(GDataWapiRequestsTest, GetResourceEntryRequest_InvalidResourceId) { | |
| 128 GDataErrorCode result_code = GDATA_OTHER_ERROR; | |
| 129 scoped_ptr<ResourceEntry> result_data; | |
| 130 | |
| 131 { | |
| 132 base::RunLoop run_loop; | |
| 133 GetResourceEntryRequest* request = new GetResourceEntryRequest( | |
| 134 request_sender_.get(), | |
| 135 *url_generator_, | |
| 136 "<invalid>", // resource ID | |
| 137 GURL(), // embed origin | |
| 138 test_util::CreateQuitCallback( | |
| 139 &run_loop, | |
| 140 test_util::CreateCopyResultCallback(&result_code, &result_data))); | |
| 141 request_sender_->StartRequestWithRetry(request); | |
| 142 run_loop.Run(); | |
| 143 } | |
| 144 | |
| 145 EXPECT_EQ(HTTP_NOT_FOUND, result_code); | |
| 146 EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method); | |
| 147 EXPECT_EQ("/feeds/default/private/full/%3Cinvalid%3E?v=3&alt=json" | |
| 148 "&showroot=true", | |
| 149 http_request_.relative_url); | |
| 150 ASSERT_FALSE(result_data); | |
| 151 } | |
| 152 | |
| 153 } // namespace google_apis | |
| OLD | NEW |