Skip to content

Commit a3720ef

Browse files
Reproduce issue rendering mqtt qos0 queue type
1 parent 8806e56 commit a3720ef

File tree

2 files changed

+136
-1
lines changed

2 files changed

+136
-1
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
[rabbitmq_management,rabbitmq_stream,rabbitmq_stream_common,rabbitmq_stream_management,
2-
rabbitmq_top,rabbitmq_tracing,rabbitmq_federation_management,rabbitmq_shovel_management].
2+
rabbitmq_top,rabbitmq_tracing,rabbitmq_federation_management,rabbitmq_shovel_management,
3+
rabbitmq_mqtt].
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
const { By, Key, until, Builder } = require('selenium-webdriver')
2+
require('chromedriver')
3+
const assert = require('assert')
4+
const { buildDriver, goToHome, captureScreensFor, teardown, doUntil, findTableRow, goToQueue } = require('../utils')
5+
const { createQueue, deleteQueue, getManagementUrl, basicAuthorization } = require('../mgt-api')
6+
const mqtt = require('mqtt')
7+
8+
const LoginPage = require('../pageobjects/LoginPage')
9+
const OverviewPage = require('../pageobjects/OverviewPage')
10+
const QueuesAndStreamsPage = require('../pageobjects/QueuesAndStreamsPage')
11+
const QueuePage = require('../pageobjects/QueuePage')
12+
const StreamPage = require('../pageobjects/StreamPage');
13+
14+
15+
describe('Given a mqtt connection and a qos 0 subscription', function () {
16+
let login
17+
let queuesAndStreams
18+
let queuePage
19+
let overview
20+
let captureScreen
21+
let queueName
22+
let mqttOptions
23+
24+
let mqttProtocol = process.env.MQTT_PROTOCOL || 'mqtt'
25+
let usemtls = process.env.MQTT_USE_MTLS || false
26+
let rabbit = process.env.RABBITMQ_HOSTNAME || 'localhost'
27+
let mqttUrl = process.env.RABBITMQ_MQTT_URL || "mqtt://" + rabbit + ":1883"
28+
let username = process.env.RABBITMQ_AMQP_USERNAME || 'management'
29+
let password = process.env.RABBITMQ_AMQP_PASSWORD || 'guest'
30+
let client_id = process.env.RABBITMQ_AMQP_USERNAME || 'selenium-client'
31+
let mqttClient
32+
33+
before(async function () {
34+
driver = buildDriver()
35+
await goToHome(driver)
36+
login = new LoginPage(driver)
37+
overview = new OverviewPage(driver)
38+
queuePage = new QueuePage(driver)
39+
queuesAndStreamsPage = new QueuesAndStreamsPage(driver)
40+
captureScreen = captureScreensFor(driver, __filename)
41+
42+
await login.login('management', 'guest')
43+
if (!await overview.isLoaded()) {
44+
throw new Error('Failed to login')
45+
}
46+
await overview.selectRefreshOption("Do not refresh")
47+
await overview.clickOnQueuesTab()
48+
49+
queueName = "test_" + Math.floor(Math.random() * 1000)
50+
createQueue(getManagementUrl(), basicAuthorization("management", "guest"),
51+
"/", queueName, {
52+
"x-queue-type": "quorum"
53+
})
54+
55+
mqttOptions = {
56+
clientId: client_id,
57+
protocolId: 'MQTT',
58+
protocol: mqttProtocol,
59+
protocolVersion: 5,
60+
keepalive: 10000,
61+
clean: false,
62+
reconnectPeriod: '1000',
63+
properties: {
64+
sessionExpiryInterval: 0
65+
}
66+
}
67+
if (mqttProtocol == 'mqtts') {
68+
mqttOptions["ca"] = [fs.readFileSync(process.env.RABBITMQ_CERTS + "/ca_rabbitmq_certificate.pem")]
69+
}
70+
if (usemtls) {
71+
mqttOptions["cert"] = fs.readFileSync(process.env.RABBITMQ_CERTS + "/client_rabbitmq_certificate.pem")
72+
mqttOptions["key"] = fs.readFileSync(process.env.RABBITMQ_CERTS + "/client_rabbitmq_key.pem")
73+
} else {
74+
mqttOptions["username"] = username
75+
mqttOptions["password"] = password
76+
}
77+
78+
mqttClient = mqtt.connect(mqttUrl, mqttOptions)
79+
let subscribed = new Promise((resolve, reject) => {
80+
mqttClient.on('error', function(err) {
81+
reject(err)
82+
assert.fail("Mqtt connection failed due to " + err)
83+
}),
84+
mqttClient.on('connect', function(err) {
85+
mqttClient.subscribe(queueName, {qos:0}, function (err2) {
86+
if (!err2) {
87+
resolve("ok")
88+
}else {
89+
reject(err2)
90+
}
91+
})
92+
})
93+
})
94+
assert.equal("ok", await subscribed)
95+
96+
})
97+
98+
it('should be an mqtt qos0 queue listed', async function () {
99+
100+
await doUntil(function() {
101+
return queuesAndStreamsPage.getQueuesTable()
102+
}, function(table) {
103+
return findTableRow(table, function(row) {
104+
return row[2] === 'rabbit_mqtt_qos0_queue'
105+
})
106+
})
107+
console.log("done")
108+
})
109+
110+
it('can view mqtt qos0 queue', async function () {
111+
112+
let table = await doUntil(function() {
113+
return queuesAndStreamsPage.getQueuesTable()
114+
}, function(t) {
115+
return findTableRow(t, function(row) {
116+
return row[2] === 'rabbit_mqtt_qos0_queue'
117+
})
118+
})
119+
let mqttQueueName = findTableRow(table, function(row) {
120+
return row[2] === 'rabbit_mqtt_qos0_queue'
121+
})[1]
122+
123+
await goToQueue(driver, "/", mqttQueueName)
124+
await queuePage.isLoaded()
125+
126+
})
127+
128+
after(async function () {
129+
await teardown(driver, this, captureScreen)
130+
if (mqttClient) mqttClient.end()
131+
deleteQueue(getManagementUrl(), basicAuthorization("management", "guest"),
132+
"/", queueName)
133+
})
134+
})

0 commit comments

Comments
 (0)