diff --git a/Tests/AsyncDNSResolverTests/c-ares/CAresDNSResolverTests.swift b/Tests/AsyncDNSResolverTests/c-ares/CAresDNSResolverTests.swift index c64452c..ba2c3d3 100644 --- a/Tests/AsyncDNSResolverTests/c-ares/CAresDNSResolverTests.swift +++ b/Tests/AsyncDNSResolverTests/c-ares/CAresDNSResolverTests.swift @@ -122,79 +122,95 @@ final class CAresDNSResolverTests: XCTestCase { } func test_concurrency() async throws { + let verbose = self.verbose + func run( + _ name: String, times: Int = 100, _ query: @Sendable @escaping (_ index: Int) async throws -> Void ) async throws { - try await withThrowingTaskGroup(of: Void.self) { group in - for i in 1...times { - group.addTask { - try await query(i) + let start = Date.now + defer { + if verbose { + print("Test of \(name) took \(Int64(start.timeIntervalSinceNow * -1000)) ms.") + } + } + do { + try await withThrowingTaskGroup(of: Void.self) { group in + for i in 1...times { + group.addTask { + try await query(i) + } } + for try await _ in group {} + } + } catch { + if verbose { + print("Test of \(name) is throwing an error.") } - for try await _ in group {} + throw error } } let resolver = self.resolver! - let verbose = self.verbose - try await run { i in + try await run("queryA") { i in let reply = try await resolver.queryA(name: "apple.com") if verbose { print("[A] run #\(i) result: \(reply)") } } - try await run { i in + try await run("queryAAAA") { i in let reply = try await resolver.queryAAAA(name: "apple.com") if verbose { print("[AAAA] run #\(i) result: \(reply)") } } - try await run { i in + try await run("queryNS") { i in let reply = try await resolver.queryNS(name: "apple.com") if verbose { print("[NS] run #\(i) result: \(reply)") } } - try await run { i in + try await run("queryCNAME") { i in let reply = try await resolver.queryCNAME(name: "www.apple.com") if verbose { print("[CNAME] run #\(i) result: \(String(describing: reply))") } } - try await run { i in + try await run("querySOA") { i in let reply = try await resolver.querySOA(name: "apple.com") if verbose { print("[SOA] run #\(i) result: \(String(describing: reply))") } } - try await run { i in + try await run("queryPTR") { i in let reply = try await resolver.queryPTR(name: "47.224.172.17.in-addr.arpa") if verbose { print("[PTR] run #\(i) result: \(reply)") } } - try await run { i in + try await run("queryMX") { i in let reply = try await resolver.queryMX(name: "apple.com") if verbose { print("[MX] run #\(i) result: \(reply)") } } - try await run { i in + // TXT lookups are very slow in CI and lead to timeouts. + try await run("queryTXT", times: 5) { i in let reply = try await resolver.queryTXT(name: "apple.com") if verbose { print("[TXT] run #\(i) result: \(reply)") } } - try await run { i in + try await run("querySRV") { i in let reply = try await resolver.querySRV(name: "_caldavs._tcp.google.com") if verbose { print("[SRV] run #\(i) result: \(reply)")