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

Unified Diff: net/http/http_stream_factory_impl_job_controller_unittest.cc

Issue 2332193003: JobController3: Move MarkAlternativeServiceBroken to job controller (Closed)
Patch Set: nit Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: net/http/http_stream_factory_impl_job_controller_unittest.cc
diff --git a/net/http/http_stream_factory_impl_job_controller_unittest.cc b/net/http/http_stream_factory_impl_job_controller_unittest.cc
index 63d22fb4373b9f15ba45e25ee7c24636a9417414..4ad8a9648971f177ec058c534156cc0ef55cd041 100644
--- a/net/http/http_stream_factory_impl_job_controller_unittest.cc
+++ b/net/http/http_stream_factory_impl_job_controller_unittest.cc
@@ -154,6 +154,17 @@ class HttpStreamFactoryImplJobControllerTest
server, alternative_service, expiration);
}
+ void VerifyBrokenAlternateProtocolMapping(const HttpRequestInfo& request_info,
+ bool should_mark_broken) {
+ const url::SchemeHostPort server(request_info.url);
+ const AlternativeServiceVector alternative_service_vector =
+ session_->http_server_properties()->GetAlternativeServices(server);
+ EXPECT_EQ(1u, alternative_service_vector.size());
+ EXPECT_EQ(should_mark_broken,
+ session_->http_server_properties()->IsAlternativeServiceBroken(
+ alternative_service_vector[0]));
+ }
+
// Not owned by |this|.
TestProxyDelegate* test_proxy_delegate_;
TestJobFactory job_factory_;
@@ -262,6 +273,7 @@ TEST_F(HttpStreamFactoryImplJobControllerTest, CancelJobsBeforeBinding) {
// to serve Request yet and JobController will notify the factory to delete
// itself upon completion.
request_.reset();
+ VerifyBrokenAlternateProtocolMapping(request_info, false);
EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
}
@@ -295,7 +307,6 @@ TEST_F(HttpStreamFactoryImplJobControllerTest, OnStreamFailedForBothJobs) {
// thus should not notify Request of the alternative job's failure. But should
// notify the main job to mark the alternative job failed.
EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
- EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED,
SSLConfig());
EXPECT_TRUE(!job_controller_->alternative_job());
@@ -306,10 +317,11 @@ TEST_F(HttpStreamFactoryImplJobControllerTest, OnStreamFailedForBothJobs) {
EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(1);
job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED,
SSLConfig());
+ VerifyBrokenAlternateProtocolMapping(request_info, false);
}
TEST_F(HttpStreamFactoryImplJobControllerTest,
- SecondJobFailsAfterFirstJobSucceeds) {
+ AltJobFailsAfterMainJobSucceeds) {
ProxyConfig proxy_config;
proxy_config.set_auto_detect(true);
// Use asynchronous proxy resolver.
@@ -344,8 +356,6 @@ TEST_F(HttpStreamFactoryImplJobControllerTest,
EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
.WillOnce(Invoke(DeleteHttpStreamPointer));
- EXPECT_CALL(*job_factory_.alternative_job(), MarkOtherJobComplete(_))
- .Times(1);
job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig(),
ProxyInfo());
@@ -355,13 +365,14 @@ TEST_F(HttpStreamFactoryImplJobControllerTest,
job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED,
SSLConfig());
+ VerifyBrokenAlternateProtocolMapping(request_info, true);
// Reset the request as it's been successfully served.
request_.reset();
EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
}
TEST_F(HttpStreamFactoryImplJobControllerTest,
- SecondJobSucceedsAfterFirstJobFailed) {
+ AltJobSucceedsAfterMainJobFailed) {
ProxyConfig proxy_config;
proxy_config.set_auto_detect(true);
// Use asynchronous proxy resolver.
@@ -388,10 +399,7 @@ TEST_F(HttpStreamFactoryImplJobControllerTest,
EXPECT_TRUE(job_controller_->alternative_job());
// |main_job| fails but should not report status to Request.
- // The alternative job will mark the main job complete.
EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
- EXPECT_CALL(*job_factory_.alternative_job(), MarkOtherJobComplete(_))
- .Times(1);
job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED,
SSLConfig());
@@ -405,6 +413,53 @@ TEST_F(HttpStreamFactoryImplJobControllerTest,
.WillOnce(Invoke(DeleteHttpStreamPointer));
job_controller_->OnStreamReady(job_factory_.alternative_job(), SSLConfig(),
ProxyInfo());
+ VerifyBrokenAlternateProtocolMapping(request_info, false);
+}
+
+TEST_F(HttpStreamFactoryImplJobControllerTest,
+ MainJobSucceedsAfterAltJobFailed) {
+ ProxyConfig proxy_config;
+ proxy_config.set_auto_detect(true);
+ // Use asynchronous proxy resolver.
+ MockAsyncProxyResolverFactory* proxy_resolver_factory =
+ new MockAsyncProxyResolverFactory(false);
+ session_deps_.proxy_service.reset(
+ new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config),
+ base::WrapUnique(proxy_resolver_factory), nullptr));
+ Initialize(false);
+
+ HttpRequestInfo request_info;
+ request_info.method = "GET";
+ request_info.url = GURL("https://www.google.com");
+
+ url::SchemeHostPort server(request_info.url);
+ AlternativeService alternative_service(QUIC, server.host(), 443);
+ SetAlternativeService(request_info, alternative_service);
+
+ request_.reset(
+ job_controller_->Start(request_info, &request_delegate_, nullptr,
+ BoundNetLog(), HttpStreamRequest::HTTP_STREAM,
+ DEFAULT_PRIORITY, SSLConfig(), SSLConfig()));
+ EXPECT_TRUE(job_controller_->main_job());
+ EXPECT_TRUE(job_controller_->alternative_job());
+
+ // |alternative_job| fails but should not report status to Request.
+ EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
+
+ job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED,
+ SSLConfig());
+
+ // |main_job| succeeds and should report status to Request.
+ HttpStream* http_stream =
+ new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
+ job_factory_.main_job()->SetStream(http_stream);
+
+ EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
+ .WillOnce(Invoke(DeleteHttpStreamPointer));
+ job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig(),
+ ProxyInfo());
+
+ VerifyBrokenAlternateProtocolMapping(request_info, true);
}
// Regression test for crbug/621069.
@@ -438,8 +493,6 @@ TEST_F(HttpStreamFactoryImplJobControllerTest, GetLoadStateAfterMainJobFailed) {
// |main_job| fails but should not report status to Request.
// The alternative job will mark the main job complete.
EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
- EXPECT_CALL(*job_factory_.alternative_job(), MarkOtherJobComplete(_))
- .Times(1);
job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED,
SSLConfig());
@@ -488,7 +541,6 @@ TEST_F(HttpStreamFactoryImplJobControllerTest, DoNotResumeMainJobBeforeWait) {
// Wait until OnStreamFailedCallback is executed on the alternative job.
EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(1);
- EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
base::RunLoop().RunUntilIdle();
}
@@ -514,7 +566,6 @@ TEST_F(HttpStreamFactoryImplJobControllerTest, InvalidPortForQuic) {
// Wait until OnStreamFailedCallback is executed on the alternative job.
EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1);
- EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
base::RunLoop().RunUntilIdle();
}
@@ -580,7 +631,6 @@ TEST_F(HttpStreamFactoryImplJobControllerTest,
resolver.pending_requests()[0]->CompleteNow(net::OK);
EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1);
- EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
base::RunLoop().RunUntilIdle();
}
@@ -645,7 +695,6 @@ TEST_F(HttpStreamFactoryImplJobControllerTest,
// Request shouldn't be notified as the main job is still pending status.
EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1);
- EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
base::RunLoop().RunUntilIdle();
}
@@ -839,7 +888,6 @@ TEST_F(HttpStreamFactoryImplJobControllerTest, FailAlternativeProxy) {
EXPECT_TRUE(job_controller_->alternative_job());
EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)).Times(0);
- EXPECT_CALL(*job_factory_.main_job(), MarkOtherJobComplete(_)).Times(1);
// Since the alternative proxy server job is started in the next message loop,
// the main job would remain blocked until the alternative proxy starts, and

Powered by Google App Engine
This is Rietveld 408576698