Skip to content

Mosquitto

Install

1
npm install @testcontainers/mosquitto --save-dev

Examples

These examples use the following libraries:

  • mqtt
    1
    npm install mqtt
    

Choose an image from the container registry and substitute IMAGE.

Produce/consume a message (anonymous)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
await using container = await new MosquittoContainer(IMAGE).start();

expect(container.getConnectionString()).toBe(`mqtt://${container.getHost()}:${container.getPort()}`);

const mqttClient = await mqtt.connectAsync(container.getConnectionString());

const firstMessagePromise = new Promise<{ topic: string; message: Buffer }>((resolve, reject) => {
  mqttClient.once("message", (topic, message) => resolve({ topic, message }));
  mqttClient.once("error", (err) => reject(err));
});

await mqttClient.subscribeAsync("test");
await mqttClient.publishAsync("test", "Test Message");

const { message } = await firstMessagePromise;
expect(message.toString()).toEqual("Test Message");

mqttClient.end();

Produce/consume a message (with credentials)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
await using container = await new MosquittoContainer(IMAGE)
  .withUsername("testuser")
  .withPassword("testpass")
  .start();

expect(container.getConnectionString()).toBe(
  `mqtt://testuser:testpass@${container.getHost()}:${container.getPort()}`
);

const mqttClient = await mqtt.connectAsync(container.getConnectionString());

const firstMessagePromise = new Promise<{ topic: string; message: Buffer }>((resolve, reject) => {
  mqttClient.once("message", (topic, message) => resolve({ topic, message }));
  mqttClient.once("error", (err) => reject(err));
});

await mqttClient.subscribeAsync("secure");
await mqttClient.publishAsync("secure", "Secure Message");

const { message } = await firstMessagePromise;
expect(message.toString()).toEqual("Secure Message");

mqttClient.end();