From 6c5115dcde7e4346c62f2ddf13d22053688b3e5a Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Sat, 9 Nov 2024 09:42:03 -0500 Subject: [PATCH] feat: Adds MQTTConnectionServiceTests --- Package.swift | 8 +++ .../MQTTConnectionServiceTests.swift | 60 +++++++++++++++++++ .../SensorsClientTests.swift | 4 +- 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 Tests/MQTTConnectionServiceTests/MQTTConnectionServiceTests.swift diff --git a/Package.swift b/Package.swift index c3ce95e..f28f3ee 100755 --- a/Package.swift +++ b/Package.swift @@ -19,6 +19,7 @@ let package = Package( .library(name: "Models", targets: ["Models"]), .library(name: "Client", targets: ["Client"]), .library(name: "ClientLive", targets: ["ClientLive"]), + .library(name: "MQTTConnectionService", targets: ["MQTTConnectionService"]), .library(name: "SensorsService", targets: ["SensorsService"]) ], dependencies: [ @@ -112,6 +113,13 @@ let package = Package( ], swiftSettings: swiftSettings ), + .testTarget( + name: "MQTTConnectionServiceTests", + dependencies: [ + "MQTTConnectionService", + .product(name: "ServiceLifecycleTestKit", package: "swift-service-lifecycle") + ] + ), .target( name: "SensorsService", dependencies: [ diff --git a/Tests/MQTTConnectionServiceTests/MQTTConnectionServiceTests.swift b/Tests/MQTTConnectionServiceTests/MQTTConnectionServiceTests.swift new file mode 100644 index 0000000..a2cc481 --- /dev/null +++ b/Tests/MQTTConnectionServiceTests/MQTTConnectionServiceTests.swift @@ -0,0 +1,60 @@ +import EnvVars +import Logging +import MQTTConnectionService +import MQTTNIO +import NIO +import ServiceLifecycleTestKit +import XCTest + +final class MQTTConnectionServiceTests: XCTestCase { + + static let hostname = ProcessInfo.processInfo.environment["MOSQUITTO_SERVER"] ?? "localhost" + + static let logger: Logger = { + var logger = Logger(label: "AsyncClientTests") + logger.logLevel = .debug + return logger + }() + + func testGracefulShutdownWorks() async throws { + let client = createClient(identifier: "testGracefulShutdown") + + try await testGracefulShutdown { trigger in + let service = MQTTConnectionService(client: client) + try await service.run() + trigger.triggerGracefulShutdown() + } + + try await Task.sleep(for: .seconds(1)) + + XCTAssertFalse(client.isActive()) + } + + func createClient(identifier: String) -> MQTTClient { + let envVars = EnvVars( + appEnv: .testing, + host: Self.hostname, + port: "1883", + identifier: identifier, + userName: nil, + password: nil + ) + let config = MQTTClient.Configuration( + version: .v3_1_1, + userName: envVars.userName, + password: envVars.password, + useSSL: false, + useWebSockets: false, + tlsConfiguration: nil, + webSocketURLPath: nil + ) + return .init( + host: Self.hostname, + identifier: identifier, + eventLoopGroupProvider: .shared(MultiThreadedEventLoopGroup(numberOfThreads: 1)), + logger: Self.logger, + configuration: config + ) + } + +} diff --git a/Tests/SensorsServiceTests/SensorsClientTests.swift b/Tests/SensorsServiceTests/SensorsClientTests.swift index 263ee63..94079f5 100755 --- a/Tests/SensorsServiceTests/SensorsClientTests.swift +++ b/Tests/SensorsServiceTests/SensorsClientTests.swift @@ -39,7 +39,7 @@ final class SensorsClientTests: XCTestCase { func testSensorService() async throws { let client = createClient(identifier: "testSensorService") let mqtt = await client.client - let sensor = TemperatureAndHumiditySensor(location: .mixedAir, units: .metric) + let sensor = TemperatureAndHumiditySensor(location: .mixedAir) let publishInfo = PublishInfoContainer(topicFilters: [ sensor.topics.dewPoint, sensor.topics.enthalpy @@ -99,7 +99,7 @@ final class SensorsClientTests: XCTestCase { func testSensorCapturesPublishedState() async throws { let client = createClient(identifier: "testSensorCapturesPublishedState") let mqtt = await client.client - let sensor = TemperatureAndHumiditySensor(location: .mixedAir, units: .metric) + let sensor = TemperatureAndHumiditySensor(location: .mixedAir) let publishInfo = PublishInfoContainer(topicFilters: [ sensor.topics.dewPoint, sensor.topics.enthalpy