@@ -207,7 +207,8 @@ class Mqtt5ClientTests: XCBaseTestCase, @unchecked Sendable {
207207 onLifecycleEventAttemptingConnectFn: testContext. onLifecycleEventAttemptingConnect,
208208 onLifecycleEventConnectionSuccessFn: testContext. onLifecycleEventConnectionSuccess,
209209 onLifecycleEventConnectionFailureFn: testContext. onLifecycleEventConnectionFailure,
210- onLifecycleEventDisconnectionFn: testContext. onLifecycleEventDisconnection)
210+ onLifecycleEventDisconnectionFn: testContext. onLifecycleEventDisconnection,
211+ enableMetrics: clientOptions. enableMetrics)
211212 } else {
212213 let elg = try EventLoopGroup ( )
213214 let resolver = try HostResolver (
@@ -407,20 +408,67 @@ class Mqtt5ClientTests: XCBaseTestCase, @unchecked Sendable {
407408 let connectOptions = MqttConnectOptions (
408409 clientId: createClientId ( ) ,
409410 username: inputUsername,
410- password: inputPassword. data ( using: . utf8)
411- )
411+ password: inputPassword. data ( using: . utf8) )
412412
413413 let clientOptions = MqttClientOptions (
414414 hostName: inputHost,
415415 port: UInt32 ( inputPort) !,
416- connectOptions: connectOptions)
416+ connectOptions: connectOptions,
417+ enableMetrics: false )
417418
418419 let testContext = MqttTestContext ( )
419420 let client = try createClient ( clientOptions: clientOptions, testContext: testContext)
420421 try await connectClient ( client: client, testContext: testContext)
421422 try await disconnectClientCleanup ( client: client, testContext: testContext)
422423 }
423424
425+ /*
426+ * [Metrics-UC2-B] Direct Connection with Basic Auth - Metrics Disabled (should succeed)
427+ *
428+ * When metrics are disabled, the username is not modified and basic authentication
429+ * works correctly.
430+ */
431+ func testMqtt5DirectConnectBasicAuthMetricsEnabled( ) async throws {
432+
433+ let inputUsername = try getEnvironmentVarOrSkipTest (
434+ environmentVarName: " AWS_TEST_MQTT5_BASIC_AUTH_USERNAME " )
435+ let inputPassword = try getEnvironmentVarOrSkipTest (
436+ environmentVarName: " AWS_TEST_MQTT5_BASIC_AUTH_PASSWORD " )
437+ let inputHost = try getEnvironmentVarOrSkipTest (
438+ environmentVarName: " AWS_TEST_MQTT5_DIRECT_MQTT_BASIC_AUTH_HOST " )
439+ let inputPort = try getEnvironmentVarOrSkipTest (
440+ environmentVarName: " AWS_TEST_MQTT5_DIRECT_MQTT_BASIC_AUTH_PORT " )
441+
442+ let connectOptions = MqttConnectOptions (
443+ clientId: createClientId ( ) ,
444+ username: inputUsername,
445+ password: inputPassword. data ( using: . utf8) )
446+
447+ // Metrics enabled
448+ let clientOptions = MqttClientOptions (
449+ hostName: inputHost,
450+ port: UInt32 ( inputPort) !,
451+ connectOptions: connectOptions,
452+ enableMetrics: true )
453+
454+ let testContext : Mqtt5ClientTests . MqttTestContext = MqttTestContext ( )
455+ let client = try createClient ( clientOptions: clientOptions, testContext: testContext)
456+
457+ try client. start ( )
458+ // The connection should fail with metrics in username
459+ await awaitExpectation ( [ testContext. connectionFailureExpectation] , 5 )
460+
461+ if let failureData = testContext. lifecycleConnectionFailureData {
462+ XCTAssertEqual (
463+ failureData. crtError. code, Int32 ( AWS_ERROR_MQTT5_CONNACK_CONNECTION_REFUSED . rawValue) )
464+ } else {
465+ XCTFail ( " lifecycleConnectionFailureData Missing " )
466+ return
467+ }
468+
469+ try await stopClient ( client: client, testContext: testContext)
470+ }
471+
424472 /*
425473 * [ConnDC-UC3] Direct Connection with TLS
426474 */
@@ -663,7 +711,8 @@ class Mqtt5ClientTests: XCBaseTestCase, @unchecked Sendable {
663711 let clientOptions = MqttClientOptions (
664712 hostName: inputHost,
665713 port: UInt32 ( inputPort) !,
666- connectOptions: connectOptions)
714+ connectOptions: connectOptions,
715+ enableMetrics: false )
667716
668717 let testContext = MqttTestContext ( )
669718 testContext. withWebsocketTransform ( isSuccess: true )
0 commit comments