Skip to content

Commit fa0d23e

Browse files
author
Bret Ambrose
committed
Refactor protocol mode and refactor mqtt metrics tests
1 parent 99d8de0 commit fa0d23e

21 files changed

Lines changed: 675 additions & 488 deletions

lib/browser/mqtt.spec.ts

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55

66
import * as test_env from "@test/test_env";
77
import * as retry from "@test/retry";
8+
import * as mqtt_server from "@test/mqtt_server";
9+
import * as test_metrics from "@test/metrics";
810
import { ClientBootstrap, SocketOptions } from './io';
9-
import { MqttClient, MqttConnectionConfig } from './mqtt';
11+
import { MqttClient, MqttConnectionConfig, MqttClientConnection } from './mqtt';
1012
import { v4 as uuid } from 'uuid';
13+
import * as mqtt_shared from "../common/mqtt_shared";
1114

1215
jest.setTimeout(30000);
1316

@@ -61,3 +64,38 @@ test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt311_is_valid_ws_auth_mqtt())(
6164
await test_connection(config, new MqttClient(new ClientBootstrap()));
6265
})
6366
});
67+
68+
async function doMetricsTestConnect311(server: mqtt_server.MqttServer, disableMetrics: boolean, username?: string) {
69+
let clientConfig : MqttConnectionConfig = {
70+
client_id: "irrelevant",
71+
host_name: "localhost",
72+
port: server.getPort(),
73+
socket_options: new SocketOptions(),
74+
disable_metrics: disableMetrics,
75+
};
76+
77+
if (username !== undefined) {
78+
clientConfig.username = username;
79+
}
80+
81+
let client = new MqttClient();
82+
let connection = new MqttClientConnection(client, clientConfig);
83+
84+
await connection.connect();
85+
}
86+
87+
test('mqtt311 metrics - enabled, undefined username', async () => {
88+
await test_metrics.doMetricsUsernameTest(mqtt_shared.ProtocolMode.Mqtt311, doMetricsTestConnect311, false);
89+
});
90+
91+
test('mqtt311 metrics - disabled, undefined username', async () => {
92+
await test_metrics.doMetricsUsernameTest(mqtt_shared.ProtocolMode.Mqtt311, doMetricsTestConnect311, true);
93+
});
94+
95+
test('mqtt311 metrics - enabled, non-empty username', async () => {
96+
await test_metrics.doMetricsUsernameTest(mqtt_shared.ProtocolMode.Mqtt311, doMetricsTestConnect311, false, "squidward");
97+
});
98+
99+
test('mqtt311 metrics - disabled, non-empty username', async () => {
100+
await test_metrics.doMetricsUsernameTest(mqtt_shared.ProtocolMode.Mqtt311, doMetricsTestConnect311, true, "krustykrab");
101+
});

lib/browser/mqtt.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ export class MqttClientConnection extends BufferedEventEmitter {
295295
}
296296

297297
let internalConfig : internal_mqtt_client.ClientConfig = {
298-
protocolVersion: internal_mqtt_client.ProtocolMode.Mqtt311,
298+
protocolVersion: mqtt_shared.ProtocolMode.Mqtt311,
299299
offlineQueuePolicy: internal_mqtt_client.OfflineQueuePolicy.PreserveQos1PlusPublishes,
300300
connectOptions: internalConnectOptions,
301301
pingTimeoutMillis: this.config.ping_timeout ? this.config.ping_timeout : 30 * 1000,

lib/browser/mqtt5.spec.ts

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import url from "url";
1111
import {HttpsProxyAgent} from "https-proxy-agent";
1212
import * as auth from "./auth";
1313
import {once} from "events";
14-
import * as model from "./mqtt_internal/model";
1514
import * as mqtt_server from "@test/mqtt_server";
15+
import * as test_metrics from "@test/metrics";
1616
import * as promise from "../common/promise";
1717
import * as mqtt_shared from "../common/mqtt_shared";
1818
import * as mqtt5_packet from "../common/mqtt5_packet";
@@ -595,7 +595,7 @@ function buildDefaultClientConfig(fixture : ClientTestFixture) : mqtt5.Mqtt5Clie
595595

596596
test('Manual Puback - Acquire', async () => {
597597
let config: mqtt_server.MqttServerConfig = {
598-
protocolVersion: model.ProtocolMode.Mqtt5
598+
protocolVersion: mqtt_shared.ProtocolMode.Mqtt5
599599
};
600600

601601
let fixture = new ClientTestFixture(config);
@@ -656,7 +656,7 @@ test('Manual Puback - Acquire', async () => {
656656

657657
test('Manual Puback - No Acquire', async () => {
658658
let config: mqtt_server.MqttServerConfig = {
659-
protocolVersion: model.ProtocolMode.Mqtt5
659+
protocolVersion: mqtt_shared.ProtocolMode.Mqtt5
660660
};
661661

662662
let fixture = new ClientTestFixture(config);
@@ -692,4 +692,47 @@ test('Manual Puback - No Acquire', async () => {
692692
await stopped;
693693

694694
fixture.getServer().stop();
695+
});
696+
697+
async function doMetricsTestConnect5(server: mqtt_server.MqttServer, disableMetrics: boolean, username?: string) {
698+
let clientConfig : mqtt5.Mqtt5ClientConfig = {
699+
hostName: "localhost",
700+
port: server.getPort(),
701+
disableMetrics: disableMetrics,
702+
websocketOptions: {
703+
urlFactoryOptions: {
704+
urlFactory: mqtt5.Mqtt5WebsocketUrlFactoryType.Ws
705+
}
706+
}
707+
};
708+
709+
if (username !== undefined) {
710+
clientConfig.connectProperties = {
711+
keepAliveIntervalSeconds: 1200,
712+
username: username
713+
};
714+
}
715+
716+
let client = new mqtt5.Mqtt5Client(clientConfig);
717+
718+
let connectionSuccess = once(client, 'connectionSuccess');
719+
client.start();
720+
721+
await connectionSuccess;
722+
}
723+
724+
test('mqtt5 metrics - enabled, undefined username', async () => {
725+
await test_metrics.doMetricsUsernameTest(mqtt_shared.ProtocolMode.Mqtt5, doMetricsTestConnect5, false);
726+
});
727+
728+
test('mqtt5 metrics - disabled, undefined username', async () => {
729+
await test_metrics.doMetricsUsernameTest(mqtt_shared.ProtocolMode.Mqtt5, doMetricsTestConnect5, true);
730+
});
731+
732+
test('mqtt5 metrics - enabled, non-empty username', async () => {
733+
await test_metrics.doMetricsUsernameTest(mqtt_shared.ProtocolMode.Mqtt5, doMetricsTestConnect5, false, "hello");
734+
});
735+
736+
test('mqtt5 metrics - disabled, non-empty username', async () => {
737+
await test_metrics.doMetricsUsernameTest(mqtt_shared.ProtocolMode.Mqtt5, doMetricsTestConnect5, true, "world");
695738
});

lib/browser/mqtt5.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ export class Mqtt5Client extends BufferedEventEmitter implements mqtt5.IMqtt5Cli
278278
};
279279

280280
let internalConfig : internal_mqtt_client.ClientConfig = {
281-
protocolVersion: internal_mqtt_client.ProtocolMode.Mqtt5,
281+
protocolVersion: mqtt_shared.ProtocolMode.Mqtt5,
282282
offlineQueuePolicy: internal_mqtt_client.OfflineQueuePolicy.PreserveQos1PlusPublishes,
283283
connectOptions: internalConnectOptions,
284284
pingTimeoutMillis: DEFAULT_MQTT_PING_TIMEOUT_MS,
@@ -341,7 +341,7 @@ export class Mqtt5Client extends BufferedEventEmitter implements mqtt5.IMqtt5Cli
341341
// trump the stop request
342342
if (disconnectPacket) {
343343
disconnectPacket.type = mqtt5_packet.PacketType.Disconnect;
344-
validate.validateInitialOutboundPacket(disconnectPacket, internal_mqtt_client.ProtocolMode.Mqtt5);
344+
validate.validateInitialOutboundPacket(disconnectPacket, mqtt_shared.ProtocolMode.Mqtt5);
345345
}
346346

347347
this.internalClient.stop(disconnectPacket);

0 commit comments

Comments
 (0)