HttpStreamPool: Update some tests
This is a preparation for making AttemptManager enter "draining" state after all jobs are notified. Some tests assumed that: - Could access AttemptManager via Group after notification. - Only one FakeServiceEndpointRequest was needed. When we make AttemptManager enter "draining" these don't always hold. Update some of these tests to remove such assumptions. Changes are: - Use the associated AttemptManager of a StreamRequester, which can be used unless the AttemptManager is destroyed. - Use the default resolution for ServiceEndpointRequest. No behavior changes. Bug: 414173943 Change-Id: I550ae7455e65aa25ba8132f2b604390a7bf5efe8 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6581796 Commit-Queue: Kenichi Ishibashi <bashi@chromium.org> Reviewed-by: Nidhi Jaju <nidhijaju@chromium.org> Cr-Commit-Position: refs/heads/main@{#1464552}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
ad1f8ec51a
commit
98463d098e
@ -2102,23 +2102,21 @@ TEST_F(HttpStreamPoolAttemptManagerTest, ReachedPoolLimit) {
|
|||||||
ASSERT_EQ(pool().TotalActiveStreamCount(), kMaxPerGroup);
|
ASSERT_EQ(pool().TotalActiveStreamCount(), kMaxPerGroup);
|
||||||
ASSERT_EQ(group_a.ActiveStreamSocketCount(), kMaxPerGroup);
|
ASSERT_EQ(group_a.ActiveStreamSocketCount(), kMaxPerGroup);
|
||||||
|
|
||||||
base::WeakPtr<FakeServiceEndpointRequest> endpoint_request =
|
resolver()
|
||||||
resolver()->AddFakeRequest();
|
->ConfigureDefaultResolution()
|
||||||
|
.add_endpoint(ServiceEndpointBuilder().add_v4("192.0.2.1").endpoint())
|
||||||
|
.CompleteStartSynchronously(OK);
|
||||||
|
|
||||||
// Create a HttpStream in group B. It should not be blocked because both
|
// Create a HttpStream in group B. It should not be blocked because both
|
||||||
// per-group and per-pool limits are not reached yet.
|
// per-group and per-pool limits are not reached yet.
|
||||||
StreamRequester requester1(key_b);
|
|
||||||
HttpStreamRequest* request1 = requester1.RequestStream(pool());
|
|
||||||
auto data1 = std::make_unique<SequencedSocketData>();
|
auto data1 = std::make_unique<SequencedSocketData>();
|
||||||
data1->set_connect_data(MockConnect(ASYNC, OK));
|
data1->set_connect_data(MockConnect(ASYNC, OK));
|
||||||
socket_factory()->AddSocketDataProvider(data1.get());
|
socket_factory()->AddSocketDataProvider(data1.get());
|
||||||
|
|
||||||
endpoint_request->add_endpoint(
|
StreamRequester requester1(key_b);
|
||||||
ServiceEndpointBuilder().add_v4("192.0.2.1").endpoint());
|
requester1.RequestStream(pool());
|
||||||
endpoint_request->CallOnServiceEndpointRequestFinished(OK);
|
requester1.WaitForResult();
|
||||||
RunUntilIdle();
|
ASSERT_TRUE(requester1.result().has_value());
|
||||||
|
|
||||||
ASSERT_TRUE(request1->completed());
|
|
||||||
|
|
||||||
// The pool reached the limit, but it doesn't have any blocked request. Group
|
// The pool reached the limit, but it doesn't have any blocked request. Group
|
||||||
// A reached the group limit. Group B doesn't reach the group limit.
|
// A reached the group limit. Group B doesn't reach the group limit.
|
||||||
@ -2139,22 +2137,24 @@ TEST_F(HttpStreamPoolAttemptManagerTest, ReachedPoolLimit) {
|
|||||||
LOAD_STATE_WAITING_FOR_STALLED_SOCKET_POOL);
|
LOAD_STATE_WAITING_FOR_STALLED_SOCKET_POOL);
|
||||||
|
|
||||||
RunUntilIdle();
|
RunUntilIdle();
|
||||||
AttemptManager* manager_b = group_b.attempt_manager();
|
|
||||||
ASSERT_FALSE(request2->completed());
|
ASSERT_FALSE(request2->completed());
|
||||||
ASSERT_TRUE(pool().ReachedMaxStreamLimit());
|
ASSERT_TRUE(pool().ReachedMaxStreamLimit());
|
||||||
ASSERT_TRUE(pool().IsPoolStalled());
|
ASSERT_TRUE(pool().IsPoolStalled());
|
||||||
ASSERT_EQ(manager_b->TcpBasedAttemptCount(), 0u);
|
ASSERT_EQ(requester2.associated_attempt_manager()->TcpBasedAttemptCount(),
|
||||||
ASSERT_EQ(manager_b->PendingRequestJobCount(), 1u);
|
0u);
|
||||||
|
ASSERT_EQ(requester2.associated_attempt_manager()->PendingRequestJobCount(),
|
||||||
|
1u);
|
||||||
|
|
||||||
// Release one HttpStream from group A. It should unblock the in-flight
|
// Release one HttpStream from group A. It should unblock the in-flight
|
||||||
// request in group B.
|
// request in group B.
|
||||||
std::unique_ptr<HttpStream> released_stream = std::move(streams_a.back());
|
std::unique_ptr<HttpStream> released_stream = std::move(streams_a.back());
|
||||||
streams_a.pop_back();
|
streams_a.pop_back();
|
||||||
released_stream.reset();
|
released_stream.reset();
|
||||||
RunUntilIdle();
|
requester2.WaitForResult();
|
||||||
|
|
||||||
ASSERT_TRUE(request2->completed());
|
ASSERT_TRUE(request2->completed());
|
||||||
ASSERT_EQ(manager_b->PendingRequestJobCount(), 0u);
|
ASSERT_EQ(requester2.associated_attempt_manager()->PendingRequestJobCount(),
|
||||||
|
0u);
|
||||||
ASSERT_TRUE(pool().ReachedMaxStreamLimit());
|
ASSERT_TRUE(pool().ReachedMaxStreamLimit());
|
||||||
ASSERT_FALSE(pool().IsPoolStalled());
|
ASSERT_FALSE(pool().IsPoolStalled());
|
||||||
}
|
}
|
||||||
@ -3867,8 +3867,8 @@ TEST_F(HttpStreamPoolAttemptManagerTest,
|
|||||||
}
|
}
|
||||||
|
|
||||||
resolver()
|
resolver()
|
||||||
->AddFakeRequest()
|
->ConfigureDefaultResolution()
|
||||||
->add_endpoint(ServiceEndpointBuilder().add_v4("192.0.2.1").endpoint())
|
.add_endpoint(ServiceEndpointBuilder().add_v4("192.0.2.1").endpoint())
|
||||||
.CompleteStartSynchronously(OK);
|
.CompleteStartSynchronously(OK);
|
||||||
|
|
||||||
// Preparation: Create an active stream.
|
// Preparation: Create an active stream.
|
||||||
@ -5196,12 +5196,10 @@ TEST_F(HttpStreamPoolAttemptManagerTest, AlternativeSerivcesDisabled) {
|
|||||||
requester.set_destination(kDefaultDestination)
|
requester.set_destination(kDefaultDestination)
|
||||||
.set_enable_alternative_services(false)
|
.set_enable_alternative_services(false)
|
||||||
.RequestStream(pool());
|
.RequestStream(pool());
|
||||||
RunUntilIdle();
|
requester.WaitForResult();
|
||||||
|
|
||||||
EXPECT_THAT(requester.result(), Optional(IsOk()));
|
EXPECT_THAT(requester.result(), Optional(IsOk()));
|
||||||
ASSERT_FALSE(pool()
|
ASSERT_FALSE(requester.associated_attempt_manager()
|
||||||
.GetOrCreateGroupForTesting(requester.GetStreamKey())
|
|
||||||
.attempt_manager()
|
|
||||||
->GetQuicAttemptResultForTesting()
|
->GetQuicAttemptResultForTesting()
|
||||||
.has_value());
|
.has_value());
|
||||||
}
|
}
|
||||||
@ -5300,14 +5298,12 @@ TEST_F(HttpStreamPoolAttemptManagerTest, QuicEndpointNotFoundNoDnsAlpn) {
|
|||||||
requester.set_destination(kDefaultDestination)
|
requester.set_destination(kDefaultDestination)
|
||||||
.set_quic_version(quic::ParsedQuicVersion::Unsupported())
|
.set_quic_version(quic::ParsedQuicVersion::Unsupported())
|
||||||
.RequestStream(pool());
|
.RequestStream(pool());
|
||||||
RunUntilIdle();
|
requester.WaitForResult();
|
||||||
|
|
||||||
EXPECT_THAT(requester.result(), Optional(IsOk()));
|
EXPECT_THAT(requester.result(), Optional(IsOk()));
|
||||||
EXPECT_THAT(pool()
|
EXPECT_THAT(
|
||||||
.GetOrCreateGroupForTesting(requester.GetStreamKey())
|
requester.associated_attempt_manager()->GetQuicAttemptResultForTesting(),
|
||||||
.attempt_manager()
|
Optional(IsError(ERR_DNS_NO_MATCHING_SUPPORTED_ALPN)));
|
||||||
->GetQuicAttemptResultForTesting(),
|
|
||||||
Optional(IsError(ERR_DNS_NO_MATCHING_SUPPORTED_ALPN)));
|
|
||||||
// No matching ALPN should not update
|
// No matching ALPN should not update
|
||||||
// `is_quic_known_to_work_on_current_network()`.
|
// `is_quic_known_to_work_on_current_network()`.
|
||||||
EXPECT_TRUE(quic_session_pool()->has_quic_ever_worked_on_current_network());
|
EXPECT_TRUE(quic_session_pool()->has_quic_ever_worked_on_current_network());
|
||||||
@ -5674,9 +5670,7 @@ TEST_F(HttpStreamPoolAttemptManagerTest, QuicMatchingIpSessionDisabled) {
|
|||||||
RunUntilIdle();
|
RunUntilIdle();
|
||||||
|
|
||||||
EXPECT_THAT(requester.result(), Optional(IsOk()));
|
EXPECT_THAT(requester.result(), Optional(IsOk()));
|
||||||
ASSERT_FALSE(pool()
|
ASSERT_FALSE(requester.associated_attempt_manager()
|
||||||
.GetOrCreateGroupForTesting(requester.GetStreamKey())
|
|
||||||
.attempt_manager()
|
|
||||||
->GetQuicAttemptResultForTesting()
|
->GetQuicAttemptResultForTesting()
|
||||||
.has_value());
|
.has_value());
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user