0

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:
Kenichi Ishibashi
2025-05-22 21:12:07 -07:00
committed by Chromium LUCI CQ
parent ad1f8ec51a
commit 98463d098e

@ -2102,23 +2102,21 @@ TEST_F(HttpStreamPoolAttemptManagerTest, ReachedPoolLimit) {
ASSERT_EQ(pool().TotalActiveStreamCount(), kMaxPerGroup);
ASSERT_EQ(group_a.ActiveStreamSocketCount(), kMaxPerGroup);
base::WeakPtr<FakeServiceEndpointRequest> endpoint_request =
resolver()->AddFakeRequest();
resolver()
->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
// 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>();
data1->set_connect_data(MockConnect(ASYNC, OK));
socket_factory()->AddSocketDataProvider(data1.get());
endpoint_request->add_endpoint(
ServiceEndpointBuilder().add_v4("192.0.2.1").endpoint());
endpoint_request->CallOnServiceEndpointRequestFinished(OK);
RunUntilIdle();
ASSERT_TRUE(request1->completed());
StreamRequester requester1(key_b);
requester1.RequestStream(pool());
requester1.WaitForResult();
ASSERT_TRUE(requester1.result().has_value());
// 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.
@ -2139,22 +2137,24 @@ TEST_F(HttpStreamPoolAttemptManagerTest, ReachedPoolLimit) {
LOAD_STATE_WAITING_FOR_STALLED_SOCKET_POOL);
RunUntilIdle();
AttemptManager* manager_b = group_b.attempt_manager();
ASSERT_FALSE(request2->completed());
ASSERT_TRUE(pool().ReachedMaxStreamLimit());
ASSERT_TRUE(pool().IsPoolStalled());
ASSERT_EQ(manager_b->TcpBasedAttemptCount(), 0u);
ASSERT_EQ(manager_b->PendingRequestJobCount(), 1u);
ASSERT_EQ(requester2.associated_attempt_manager()->TcpBasedAttemptCount(),
0u);
ASSERT_EQ(requester2.associated_attempt_manager()->PendingRequestJobCount(),
1u);
// Release one HttpStream from group A. It should unblock the in-flight
// request in group B.
std::unique_ptr<HttpStream> released_stream = std::move(streams_a.back());
streams_a.pop_back();
released_stream.reset();
RunUntilIdle();
requester2.WaitForResult();
ASSERT_TRUE(request2->completed());
ASSERT_EQ(manager_b->PendingRequestJobCount(), 0u);
ASSERT_EQ(requester2.associated_attempt_manager()->PendingRequestJobCount(),
0u);
ASSERT_TRUE(pool().ReachedMaxStreamLimit());
ASSERT_FALSE(pool().IsPoolStalled());
}
@ -3867,8 +3867,8 @@ TEST_F(HttpStreamPoolAttemptManagerTest,
}
resolver()
->AddFakeRequest()
->add_endpoint(ServiceEndpointBuilder().add_v4("192.0.2.1").endpoint())
->ConfigureDefaultResolution()
.add_endpoint(ServiceEndpointBuilder().add_v4("192.0.2.1").endpoint())
.CompleteStartSynchronously(OK);
// Preparation: Create an active stream.
@ -5196,12 +5196,10 @@ TEST_F(HttpStreamPoolAttemptManagerTest, AlternativeSerivcesDisabled) {
requester.set_destination(kDefaultDestination)
.set_enable_alternative_services(false)
.RequestStream(pool());
RunUntilIdle();
requester.WaitForResult();
EXPECT_THAT(requester.result(), Optional(IsOk()));
ASSERT_FALSE(pool()
.GetOrCreateGroupForTesting(requester.GetStreamKey())
.attempt_manager()
ASSERT_FALSE(requester.associated_attempt_manager()
->GetQuicAttemptResultForTesting()
.has_value());
}
@ -5300,14 +5298,12 @@ TEST_F(HttpStreamPoolAttemptManagerTest, QuicEndpointNotFoundNoDnsAlpn) {
requester.set_destination(kDefaultDestination)
.set_quic_version(quic::ParsedQuicVersion::Unsupported())
.RequestStream(pool());
RunUntilIdle();
requester.WaitForResult();
EXPECT_THAT(requester.result(), Optional(IsOk()));
EXPECT_THAT(pool()
.GetOrCreateGroupForTesting(requester.GetStreamKey())
.attempt_manager()
->GetQuicAttemptResultForTesting(),
Optional(IsError(ERR_DNS_NO_MATCHING_SUPPORTED_ALPN)));
EXPECT_THAT(
requester.associated_attempt_manager()->GetQuicAttemptResultForTesting(),
Optional(IsError(ERR_DNS_NO_MATCHING_SUPPORTED_ALPN)));
// No matching ALPN should not update
// `is_quic_known_to_work_on_current_network()`.
EXPECT_TRUE(quic_session_pool()->has_quic_ever_worked_on_current_network());
@ -5674,9 +5670,7 @@ TEST_F(HttpStreamPoolAttemptManagerTest, QuicMatchingIpSessionDisabled) {
RunUntilIdle();
EXPECT_THAT(requester.result(), Optional(IsOk()));
ASSERT_FALSE(pool()
.GetOrCreateGroupForTesting(requester.GetStreamKey())
.attempt_manager()
ASSERT_FALSE(requester.associated_attempt_manager()
->GetQuicAttemptResultForTesting()
.has_value());
}