mirror of
https://github.com/swift-server/async-http-client.git
synced 2026-06-02 07:37:34 +00:00
* Fix HTTP1 to HTTP2 migration while shutdown is in progress ### Motivation Calling `HTTPClient.shutdown()` may never return if connections are still starting and one new established connection results in a state migration (i.e. from HTTP1 to HTTP2 or vice versa). We forgot to migrate the shutdown state. This could result in a large dealy until `.shutdown()` returns because we wait until connections are closed because of idle timeout. Worse, it could also never return if more requests are queued because the connections would not be idle and therefore not close itself. ###Changes - Mirgrate shutdown state too - add tests for this specific case * simplify testMigrationFromHTTP1ToHTTP2WhileShuttingDown * add http2 to http1 migration test
50 lines
2.6 KiB
Swift
50 lines
2.6 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the AsyncHTTPClient open source project
|
|
//
|
|
// Copyright (c) 2018-2019 Apple Inc. and the AsyncHTTPClient project authors
|
|
// Licensed under Apache License v2.0
|
|
//
|
|
// See LICENSE.txt for license information
|
|
// See CONTRIBUTORS.txt for the list of AsyncHTTPClient project authors
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// HTTPConnectionPool+HTTP2StateMachineTests+XCTest.swift
|
|
//
|
|
import XCTest
|
|
|
|
///
|
|
/// NOTE: This file was generated by generate_linux_tests.rb
|
|
///
|
|
/// Do NOT edit this file directly as it will be regenerated automatically when needed.
|
|
///
|
|
|
|
extension HTTPConnectionPool_HTTP2StateMachineTests {
|
|
static var allTests: [(String, (HTTPConnectionPool_HTTP2StateMachineTests) -> () throws -> Void)] {
|
|
return [
|
|
("testCreatingOfConnection", testCreatingOfConnection),
|
|
("testConnectionFailureBackoff", testConnectionFailureBackoff),
|
|
("testCancelRequestWorks", testCancelRequestWorks),
|
|
("testExecuteOnShuttingDownPool", testExecuteOnShuttingDownPool),
|
|
("testHTTP1ToHTTP2MigrationAndShutdownIfFirstConnectionIsHTTP1", testHTTP1ToHTTP2MigrationAndShutdownIfFirstConnectionIsHTTP1),
|
|
("testSchedulingAndCancelingOfIdleTimeout", testSchedulingAndCancelingOfIdleTimeout),
|
|
("testConnectionTimeout", testConnectionTimeout),
|
|
("testConnectionEstablishmentFailure", testConnectionEstablishmentFailure),
|
|
("testGoAwayOnIdleConnection", testGoAwayOnIdleConnection),
|
|
("testGoAwayWithLeasedStream", testGoAwayWithLeasedStream),
|
|
("testGoAwayWithPendingRequestsStartsNewConnection", testGoAwayWithPendingRequestsStartsNewConnection),
|
|
("testMigrationFromHTTP1ToHTTP2", testMigrationFromHTTP1ToHTTP2),
|
|
("testMigrationFromHTTP1ToHTTP2WhileShuttingDown", testMigrationFromHTTP1ToHTTP2WhileShuttingDown),
|
|
("testMigrationFromHTTP1ToHTTP2WithAlreadyStartedHTTP1Connections", testMigrationFromHTTP1ToHTTP2WithAlreadyStartedHTTP1Connections),
|
|
("testHTTP2toHTTP1Migration", testHTTP2toHTTP1Migration),
|
|
("testHTTP2toHTTP1MigrationDuringShutdown", testHTTP2toHTTP1MigrationDuringShutdown),
|
|
("testConnectionIsImmediatelyCreatedAfterBackoffTimerFires", testConnectionIsImmediatelyCreatedAfterBackoffTimerFires),
|
|
("testMaxConcurrentStreamsIsRespected", testMaxConcurrentStreamsIsRespected),
|
|
("testEventsAfterConnectionIsClosed", testEventsAfterConnectionIsClosed),
|
|
]
|
|
}
|
|
}
|