Skip to content

Commit d072337

Browse files
Add selenium test
1 parent f7a238a commit d072337

File tree

1 file changed

+142
-0
lines changed

1 file changed

+142
-0
lines changed
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
const { By, Key, until, Builder } = require('selenium-webdriver')
2+
require('chromedriver')
3+
const assert = require('assert')
4+
const { buildDriver, goToHome, goToQueue, captureScreensFor, teardown, doUntil, findTableRow } = 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 ConnectionsPage = require('../pageobjects/ConnectionsPage');
13+
14+
15+
describe('Given an MQTT 5.0 connection with a qos 0 subscription with zero sessionExpiryInterval', 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+
connectionsPage = new ConnectionsPage(driver)
40+
queuesAndStreamsPage = new QueuesAndStreamsPage(driver)
41+
captureScreen = captureScreensFor(driver, __filename)
42+
43+
await login.login('management', 'guest')
44+
if (!await overview.isLoaded()) {
45+
throw new Error('Failed to login')
46+
}
47+
//await overview.selectRefreshOption("Do not refresh")
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: true,
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('can view mqtt qos0 queue', async function () {
99+
await overview.clickOnQueuesTab()
100+
101+
let table = await doUntil(function() {
102+
return queuesAndStreamsPage.getQueuesTable()
103+
}, function(t) {
104+
return findTableRow(t, function(row) {
105+
return row[2] === 'rabbit_mqtt_qos0_queue'
106+
})
107+
})
108+
let mqttQueueName = findTableRow(table, function(row) {
109+
return row[2] === 'rabbit_mqtt_qos0_queue'
110+
})[1]
111+
112+
await goToQueue(driver, "/", mqttQueueName)
113+
await queuePage.isLoaded()
114+
115+
})
116+
117+
it('when the connection is closed, the mqtt qos0 queue should be removed', async function () {
118+
119+
mqttClient.end()
120+
121+
await overview.clickOnConnectionsTab()
122+
await doUntil(async function() {
123+
return connectionsPage.getPagingSectionHeaderText()
124+
}, function(header) {
125+
return header === "All connections (0)"
126+
}, 6000)
127+
128+
await overview.clickOnQueuesTab()
129+
await doUntil(function() {
130+
return queuesAndStreamsPage.getQueuesTable()
131+
}, function(table) {
132+
return !findTableRow(table, function(row) {
133+
return row[2] === 'rabbit_mqtt_qos0_queue'
134+
})
135+
})
136+
137+
})
138+
139+
after(async function () {
140+
await teardown(driver, this, captureScreen)
141+
})
142+
})

0 commit comments

Comments
 (0)