Skip to content

Remove misuse of EmbeddedEventLoop #812

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import AsyncHTTPClient
import NIO
import NIOFoundationCompat
import NIOHTTP1
import XCTest

final class HTTPClientStructuredConcurrencyTests: XCTestCase {
Expand Down
64 changes: 34 additions & 30 deletions Tests/AsyncHTTPClientTests/TransactionTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ final class TransactionTests: XCTestCase {
// therefore we create it here as a workaround which works fine
let scheduledRequestCanceled = self.expectation(description: "scheduled request canceled")
XCTAsyncTest {
let embeddedEventLoop = EmbeddedEventLoop()
defer { XCTAssertNoThrow(try embeddedEventLoop.syncShutdownGracefully()) }
let loop = NIOAsyncTestingEventLoop()
defer { XCTAssertNoThrow(try loop.syncShutdownGracefully()) }

var request = HTTPClientRequest(url: "https://localhost/")
request.method = .GET
Expand All @@ -45,7 +45,7 @@ final class TransactionTests: XCTestCase {
}
let (transaction, responseTask) = await Transaction.makeWithResultTask(
request: preparedRequest,
preferredEventLoop: embeddedEventLoop
preferredEventLoop: loop
)

let queuer = MockTaskQueuer { _ in
Expand All @@ -72,8 +72,8 @@ final class TransactionTests: XCTestCase {

func testDeadlineExceededWhileQueuedAndExecutorImmediatelyCancelsTask() {
XCTAsyncTest {
let embeddedEventLoop = EmbeddedEventLoop()
defer { XCTAssertNoThrow(try embeddedEventLoop.syncShutdownGracefully()) }
let loop = NIOAsyncTestingEventLoop()
defer { XCTAssertNoThrow(try loop.syncShutdownGracefully()) }

var request = HTTPClientRequest(url: "https://localhost/")
request.method = .GET
Expand All @@ -84,7 +84,7 @@ final class TransactionTests: XCTestCase {
}
let (transaction, responseTask) = await Transaction.makeWithResultTask(
request: preparedRequest,
preferredEventLoop: embeddedEventLoop
preferredEventLoop: loop
)

let queuer = MockTaskQueuer()
Expand Down Expand Up @@ -127,8 +127,8 @@ final class TransactionTests: XCTestCase {

func testResponseStreamingWorks() {
XCTAsyncTest {
let embeddedEventLoop = EmbeddedEventLoop()
defer { XCTAssertNoThrow(try embeddedEventLoop.syncShutdownGracefully()) }
let loop = NIOAsyncTestingEventLoop()
defer { XCTAssertNoThrow(try loop.syncShutdownGracefully()) }

var request = HTTPClientRequest(url: "https://localhost/")
request.method = .GET
Expand All @@ -140,12 +140,12 @@ final class TransactionTests: XCTestCase {
}
let (transaction, responseTask) = await Transaction.makeWithResultTask(
request: preparedRequest,
preferredEventLoop: embeddedEventLoop
preferredEventLoop: loop
)

let executor = MockRequestExecutor(
pauseRequestBodyPartStreamAfterASingleWrite: true,
eventLoop: embeddedEventLoop
eventLoop: loop
)

transaction.willExecuteRequest(executor)
Expand Down Expand Up @@ -186,8 +186,8 @@ final class TransactionTests: XCTestCase {

func testIgnoringResponseBodyWorks() {
XCTAsyncTest {
let embeddedEventLoop = EmbeddedEventLoop()
defer { XCTAssertNoThrow(try embeddedEventLoop.syncShutdownGracefully()) }
let loop = NIOAsyncTestingEventLoop()
defer { XCTAssertNoThrow(try loop.syncShutdownGracefully()) }

var request = HTTPClientRequest(url: "https://localhost/")
request.method = .GET
Expand All @@ -199,7 +199,7 @@ final class TransactionTests: XCTestCase {
}
var tuple: (Transaction, Task<HTTPClientResponse, Error>)! = await Transaction.makeWithResultTask(
request: preparedRequest,
preferredEventLoop: embeddedEventLoop
preferredEventLoop: loop
)

let transaction = tuple.0
Expand All @@ -208,9 +208,10 @@ final class TransactionTests: XCTestCase {

let executor = MockRequestExecutor(
pauseRequestBodyPartStreamAfterASingleWrite: true,
eventLoop: embeddedEventLoop
eventLoop: loop
)
executor.runRequest(transaction)
await loop.run()

let responseHead = HTTPResponseHead(version: .http1_1, status: .ok, headers: ["foo": "bar"])
XCTAssertFalse(executor.signalledDemandForResponseBody)
Expand All @@ -234,8 +235,8 @@ final class TransactionTests: XCTestCase {

func testWriteBackpressureWorks() {
XCTAsyncTest {
let embeddedEventLoop = EmbeddedEventLoop()
defer { XCTAssertNoThrow(try embeddedEventLoop.syncShutdownGracefully()) }
let loop = NIOAsyncTestingEventLoop()
defer { XCTAssertNoThrow(try loop.syncShutdownGracefully()) }

let streamWriter = AsyncSequenceWriter<ByteBuffer>()
XCTAssertFalse(streamWriter.hasDemand, "Did not expect to have a demand at this point")
Expand All @@ -251,12 +252,13 @@ final class TransactionTests: XCTestCase {
}
let (transaction, responseTask) = await Transaction.makeWithResultTask(
request: preparedRequest,
preferredEventLoop: embeddedEventLoop
preferredEventLoop: loop
)

let executor = MockRequestExecutor(eventLoop: embeddedEventLoop)
let executor = MockRequestExecutor(eventLoop: loop)

executor.runRequest(transaction)
await loop.run()

for i in 0..<100 {
XCTAssertFalse(streamWriter.hasDemand, "Did not expect to have demand yet")
Expand Down Expand Up @@ -364,8 +366,8 @@ final class TransactionTests: XCTestCase {

func testSimplePostRequest() {
XCTAsyncTest {
let embeddedEventLoop = EmbeddedEventLoop()
defer { XCTAssertNoThrow(try embeddedEventLoop.syncShutdownGracefully()) }
let loop = NIOAsyncTestingEventLoop()
defer { XCTAssertNoThrow(try loop.syncShutdownGracefully()) }

var request = HTTPClientRequest(url: "https://localhost/")
request.method = .POST
Expand All @@ -377,11 +379,12 @@ final class TransactionTests: XCTestCase {
}
let (transaction, responseTask) = await Transaction.makeWithResultTask(
request: preparedRequest,
preferredEventLoop: embeddedEventLoop
preferredEventLoop: loop
)

let executor = MockRequestExecutor(eventLoop: embeddedEventLoop)
let executor = MockRequestExecutor(eventLoop: loop)
executor.runRequest(transaction)
await loop.run()
executor.resumeRequestBodyStream()
XCTAssertNoThrow(
try executor.receiveRequestBody {
Expand All @@ -403,8 +406,8 @@ final class TransactionTests: XCTestCase {

func testPostStreamFails() {
XCTAsyncTest {
let embeddedEventLoop = EmbeddedEventLoop()
defer { XCTAssertNoThrow(try embeddedEventLoop.syncShutdownGracefully()) }
let loop = NIOAsyncTestingEventLoop()
defer { XCTAssertNoThrow(try loop.syncShutdownGracefully()) }

let writer = AsyncSequenceWriter<ByteBuffer>()

Expand All @@ -418,11 +421,12 @@ final class TransactionTests: XCTestCase {
}
let (transaction, responseTask) = await Transaction.makeWithResultTask(
request: preparedRequest,
preferredEventLoop: embeddedEventLoop
preferredEventLoop: loop
)

let executor = MockRequestExecutor(eventLoop: embeddedEventLoop)
let executor = MockRequestExecutor(eventLoop: loop)
executor.runRequest(transaction)
await loop.run()
executor.resumeRequestBodyStream()

await writer.demand()
Expand All @@ -447,8 +451,8 @@ final class TransactionTests: XCTestCase {

func testResponseStreamFails() {
XCTAsyncTest(timeout: 30) {
let embeddedEventLoop = EmbeddedEventLoop()
defer { XCTAssertNoThrow(try embeddedEventLoop.syncShutdownGracefully()) }
let loop = NIOAsyncTestingEventLoop()
defer { XCTAssertNoThrow(try loop.syncShutdownGracefully()) }

var request = HTTPClientRequest(url: "https://localhost/")
request.method = .GET
Expand All @@ -460,12 +464,12 @@ final class TransactionTests: XCTestCase {
}
let (transaction, responseTask) = await Transaction.makeWithResultTask(
request: preparedRequest,
preferredEventLoop: embeddedEventLoop
preferredEventLoop: loop
)

let executor = MockRequestExecutor(
pauseRequestBodyPartStreamAfterASingleWrite: true,
eventLoop: embeddedEventLoop
eventLoop: loop
)

transaction.willExecuteRequest(executor)
Expand Down
Loading