| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/message_loop_proxy.h" | 5 #include "base/message_loop_proxy.h" |
| 6 #include "base/synchronization/waitable_event.h" | 6 #include "base/synchronization/waitable_event.h" |
| 7 #include "base/threading/thread.h" | 7 #include "base/threading/thread.h" |
| 8 #include "net/test/spawned_test_server/spawned_test_server.h" | 8 #include "net/test/spawned_test_server/spawned_test_server.h" |
| 9 #include "net/url_request/test_url_fetcher_factory.h" | 9 #include "net/url_request/test_url_fetcher_factory.h" |
| 10 #include "net/url_request/url_fetcher_delegate.h" | 10 #include "net/url_request/url_fetcher_delegate.h" |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 SyncHttpBridgeTest* test_; | 153 SyncHttpBridgeTest* test_; |
| 154 bool never_finishes_; | 154 bool never_finishes_; |
| 155 }; | 155 }; |
| 156 | 156 |
| 157 void SyncHttpBridgeTest::RunSyncThreadBridgeUseTest( | 157 void SyncHttpBridgeTest::RunSyncThreadBridgeUseTest( |
| 158 base::WaitableEvent* signal_when_created, | 158 base::WaitableEvent* signal_when_created, |
| 159 base::WaitableEvent* signal_when_released) { | 159 base::WaitableEvent* signal_when_released) { |
| 160 scoped_refptr<net::URLRequestContextGetter> ctx_getter( | 160 scoped_refptr<net::URLRequestContextGetter> ctx_getter( |
| 161 new net::TestURLRequestContextGetter(io_thread_.message_loop_proxy())); | 161 new net::TestURLRequestContextGetter(io_thread_.message_loop_proxy())); |
| 162 { | 162 { |
| 163 scoped_refptr<ShuntedHttpBridge> bridge(new ShuntedHttpBridge( | 163 scoped_refptr<ShuntedHttpBridge> bridge( |
| 164 ctx_getter, this, true)); | 164 new ShuntedHttpBridge(ctx_getter.get(), this, true)); |
| 165 bridge->SetURL("http://www.google.com", 9999); | 165 bridge->SetURL("http://www.google.com", 9999); |
| 166 bridge->SetPostPayload("text/plain", 2, " "); | 166 bridge->SetPostPayload("text/plain", 2, " "); |
| 167 bridge_for_race_test_ = bridge; | 167 bridge_for_race_test_ = bridge.get(); |
| 168 signal_when_created->Signal(); | 168 signal_when_created->Signal(); |
| 169 | 169 |
| 170 int os_error = 0; | 170 int os_error = 0; |
| 171 int response_code = 0; | 171 int response_code = 0; |
| 172 bridge->MakeSynchronousPost(&os_error, &response_code); | 172 bridge->MakeSynchronousPost(&os_error, &response_code); |
| 173 bridge_for_race_test_ = NULL; | 173 bridge_for_race_test_ = NULL; |
| 174 } | 174 } |
| 175 signal_when_released->Signal(); | 175 signal_when_released->Signal(); |
| 176 } | 176 } |
| 177 | 177 |
| 178 TEST_F(SyncHttpBridgeTest, TestUsesSameHttpNetworkSession) { | 178 TEST_F(SyncHttpBridgeTest, TestUsesSameHttpNetworkSession) { |
| 179 // Run this test on the IO thread because we can only call | 179 // Run this test on the IO thread because we can only call |
| 180 // URLRequestContextGetter::GetURLRequestContext on the IO thread. | 180 // URLRequestContextGetter::GetURLRequestContext on the IO thread. |
| 181 io_thread()->message_loop() | 181 io_thread()->message_loop() |
| 182 ->PostTask(FROM_HERE, | 182 ->PostTask(FROM_HERE, |
| 183 base::Bind(&SyncHttpBridgeTest::TestSameHttpNetworkSession, | 183 base::Bind(&SyncHttpBridgeTest::TestSameHttpNetworkSession, |
| 184 base::MessageLoop::current(), | 184 base::MessageLoop::current(), |
| 185 this)); | 185 this)); |
| 186 base::MessageLoop::current()->Run(); | 186 base::MessageLoop::current()->Run(); |
| 187 } | 187 } |
| 188 | 188 |
| 189 // Test the HttpBridge without actually making any network requests. | 189 // Test the HttpBridge without actually making any network requests. |
| 190 TEST_F(SyncHttpBridgeTest, TestMakeSynchronousPostShunted) { | 190 TEST_F(SyncHttpBridgeTest, TestMakeSynchronousPostShunted) { |
| 191 scoped_refptr<net::URLRequestContextGetter> ctx_getter( | 191 scoped_refptr<net::URLRequestContextGetter> ctx_getter( |
| 192 new net::TestURLRequestContextGetter(io_thread()->message_loop_proxy())); | 192 new net::TestURLRequestContextGetter(io_thread()->message_loop_proxy())); |
| 193 scoped_refptr<HttpBridge> http_bridge(new ShuntedHttpBridge( | 193 scoped_refptr<HttpBridge> http_bridge( |
| 194 ctx_getter, this, false)); | 194 new ShuntedHttpBridge(ctx_getter.get(), this, false)); |
| 195 http_bridge->SetURL("http://www.google.com", 9999); | 195 http_bridge->SetURL("http://www.google.com", 9999); |
| 196 http_bridge->SetPostPayload("text/plain", 2, " "); | 196 http_bridge->SetPostPayload("text/plain", 2, " "); |
| 197 | 197 |
| 198 int os_error = 0; | 198 int os_error = 0; |
| 199 int response_code = 0; | 199 int response_code = 0; |
| 200 bool success = http_bridge->MakeSynchronousPost(&os_error, &response_code); | 200 bool success = http_bridge->MakeSynchronousPost(&os_error, &response_code); |
| 201 EXPECT_TRUE(success); | 201 EXPECT_TRUE(success); |
| 202 EXPECT_EQ(200, response_code); | 202 EXPECT_EQ(200, response_code); |
| 203 EXPECT_EQ(0, os_error); | 203 EXPECT_EQ(0, os_error); |
| 204 | 204 |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 EXPECT_EQ(200, response_code); | 305 EXPECT_EQ(200, response_code); |
| 306 EXPECT_EQ(0, os_error); | 306 EXPECT_EQ(0, os_error); |
| 307 | 307 |
| 308 EXPECT_EQ(http_bridge->GetResponseHeaderValue("Content-type"), "text/html"); | 308 EXPECT_EQ(http_bridge->GetResponseHeaderValue("Content-type"), "text/html"); |
| 309 EXPECT_TRUE(http_bridge->GetResponseHeaderValue("invalid-header").empty()); | 309 EXPECT_TRUE(http_bridge->GetResponseHeaderValue("invalid-header").empty()); |
| 310 } | 310 } |
| 311 | 311 |
| 312 TEST_F(SyncHttpBridgeTest, Abort) { | 312 TEST_F(SyncHttpBridgeTest, Abort) { |
| 313 scoped_refptr<net::URLRequestContextGetter> ctx_getter( | 313 scoped_refptr<net::URLRequestContextGetter> ctx_getter( |
| 314 new net::TestURLRequestContextGetter(io_thread()->message_loop_proxy())); | 314 new net::TestURLRequestContextGetter(io_thread()->message_loop_proxy())); |
| 315 scoped_refptr<ShuntedHttpBridge> http_bridge(new ShuntedHttpBridge( | 315 scoped_refptr<ShuntedHttpBridge> http_bridge( |
| 316 ctx_getter, this, true)); | 316 new ShuntedHttpBridge(ctx_getter.get(), this, true)); |
| 317 http_bridge->SetURL("http://www.google.com", 9999); | 317 http_bridge->SetURL("http://www.google.com", 9999); |
| 318 http_bridge->SetPostPayload("text/plain", 2, " "); | 318 http_bridge->SetPostPayload("text/plain", 2, " "); |
| 319 | 319 |
| 320 int os_error = 0; | 320 int os_error = 0; |
| 321 int response_code = 0; | 321 int response_code = 0; |
| 322 | 322 |
| 323 io_thread()->message_loop_proxy()->PostTask( | 323 io_thread()->message_loop_proxy()->PostTask( |
| 324 FROM_HERE, | 324 FROM_HERE, |
| 325 base::Bind(&SyncHttpBridgeTest::Abort, http_bridge)); | 325 base::Bind(&SyncHttpBridgeTest::Abort, http_bridge)); |
| 326 bool success = http_bridge->MakeSynchronousPost(&os_error, &response_code); | 326 bool success = http_bridge->MakeSynchronousPost(&os_error, &response_code); |
| 327 EXPECT_FALSE(success); | 327 EXPECT_FALSE(success); |
| 328 EXPECT_EQ(net::ERR_ABORTED, os_error); | 328 EXPECT_EQ(net::ERR_ABORTED, os_error); |
| 329 } | 329 } |
| 330 | 330 |
| 331 TEST_F(SyncHttpBridgeTest, AbortLate) { | 331 TEST_F(SyncHttpBridgeTest, AbortLate) { |
| 332 scoped_refptr<net::URLRequestContextGetter> ctx_getter( | 332 scoped_refptr<net::URLRequestContextGetter> ctx_getter( |
| 333 new net::TestURLRequestContextGetter(io_thread()->message_loop_proxy())); | 333 new net::TestURLRequestContextGetter(io_thread()->message_loop_proxy())); |
| 334 scoped_refptr<ShuntedHttpBridge> http_bridge(new ShuntedHttpBridge( | 334 scoped_refptr<ShuntedHttpBridge> http_bridge( |
| 335 ctx_getter, this, false)); | 335 new ShuntedHttpBridge(ctx_getter.get(), this, false)); |
| 336 http_bridge->SetURL("http://www.google.com", 9999); | 336 http_bridge->SetURL("http://www.google.com", 9999); |
| 337 http_bridge->SetPostPayload("text/plain", 2, " "); | 337 http_bridge->SetPostPayload("text/plain", 2, " "); |
| 338 | 338 |
| 339 int os_error = 0; | 339 int os_error = 0; |
| 340 int response_code = 0; | 340 int response_code = 0; |
| 341 | 341 |
| 342 bool success = http_bridge->MakeSynchronousPost(&os_error, &response_code); | 342 bool success = http_bridge->MakeSynchronousPost(&os_error, &response_code); |
| 343 ASSERT_TRUE(success); | 343 ASSERT_TRUE(success); |
| 344 http_bridge->Abort(); | 344 http_bridge->Abort(); |
| 345 // Ensures no double-free of URLFetcher, etc. | 345 // Ensures no double-free of URLFetcher, etc. |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 399 // succeed even though we Release()d the bridge above because the call to | 399 // succeed even though we Release()d the bridge above because the call to |
| 400 // Abort should have held a reference. | 400 // Abort should have held a reference. |
| 401 io_waiter.Signal(); | 401 io_waiter.Signal(); |
| 402 | 402 |
| 403 // Done. | 403 // Done. |
| 404 sync_thread.Stop(); | 404 sync_thread.Stop(); |
| 405 io_thread()->Stop(); | 405 io_thread()->Stop(); |
| 406 } | 406 } |
| 407 | 407 |
| 408 } // namespace syncer | 408 } // namespace syncer |
| OLD | NEW |