import FluentKit import HummingbirdFluent import Logging import NIOCore import Testing @testable import Persistence @Suite("Probe method") struct ProbeTests { // MARK: Methods tests @Test func `reports a reachable database`() async throws { let service = Service( driver: .inMemory, logger: Logger(label: "test") ) let fluent = service() let probe = Probe(fluent: fluent) let isReachable = await probe() try await fluent.shutdown() #expect(isReachable) } @Test func `reports an unreachable database`() async throws { // Port 1 on the loopback interface has nothing listening, so the connection is refused // immediately instead of timing out. let service = Service( driver: .mysql( .init( host: "127.0.0.1", port: 1, name: "unreachable", username: "nobody", password: "nothing", tls: .off, maxConnectionsPerEventLoop: 1 ) ), logger: Logger(label: "test") ) let fluent = service() let probe = Probe(fluent: fluent) let isReachable = await probe() try await fluent.shutdown() #expect(!isReachable) } @Test func `reports a default database that is not an SQL database`() async throws { let fluent = Fluent(logger: Logger(label: "test")) fluent.databases.use( .init(make: { NotSQLConfiguration() }), as: .init(string: "not-sql"), isDefault: true ) let probe = Probe(fluent: fluent) let isReachable = await probe() try await fluent.shutdown() #expect(!isReachable) } }