Skip to content

Commit 62350eb

Browse files
Selenium test with SAC
1 parent 5ed2fbe commit 62350eb

File tree

11 files changed

+244
-35
lines changed

11 files changed

+244
-35
lines changed

deps/rabbitmq_management/priv/www/js/tmpl/consumers.ejs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<% if (consumers.length > 0) { %>
2-
<table class="list">
2+
<table class="list" id="consumers">
33
<thead>
44
<tr>
55
<% if (mode == 'queue') { %>

deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
<% } %>
1212

1313
<h3>Details</h3>
14-
<table class="facts facts-l">
14+
<table class="facts facts-l" id="details-queue-table">
1515
<tr>
1616
<th>Features</th>
17-
<td><%= fmt_features(queue) %></td>
17+
<td id="details-queue-features"><%= fmt_features(queue) %></td>
1818
</tr>
1919
<% if(!disable_stats) { %>
2020
<tr>
@@ -77,7 +77,7 @@
7777
<% } %>
7878

7979
<% if(!disable_stats) { %>
80-
<div class="section-hidden">
80+
<div class="section-hidden" id="queue-consumers-section">
8181
<h2 class="updatable">Consumers (<%=(queue.consumer_details.length)%>) </h2>
8282
<div class="hider updatable">
8383
<%= format('consumers', {'mode': 'queue', 'consumers': queue.consumer_details}) %>

deps/rabbitmq_management/priv/www/js/tmpl/quorum-queue-stats.ejs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
1-
<table class="facts facts-l">
1+
<table class="facts facts-l" id="details-queue-stats-table">
2+
<tbody>
23
<tr>
34
<th>State</th>
45
<td><%= fmt_object_state(queue) %></td>
56
</tr>
67
<% if(queue.consumers) { %>
78
<tr>
89
<th>Consumers</th>
9-
<td><%= fmt_string(queue.consumers) %></td>
10+
<td id="consumers"><%= fmt_string(queue.consumers) %></td>
1011
</tr>
1112
<% } else if(queue.hasOwnProperty('consumer_details')) { %>
1213
<tr>
1314
<th>Consumers</th>
14-
<td><%= fmt_string(queue.consumer_details.length) %></td>
15+
<td id="consumers"><%= fmt_string(queue.consumer_details.length) %></td>
1516
</tr>
1617
<% } %>
1718
<% if(queue.hasOwnProperty('publishers')) { %>
1819
<tr>
1920
<th>Publishers</th>
20-
<td><%= fmt_string(queue.publishers) %></td>
21+
<td id="publishers"><%= fmt_string(queue.publishers) %></td>
2122
</tr>
2223
<% } %>
2324
<tr>
@@ -30,6 +31,7 @@
3031
<td><%= fmt_string(queue.delivery_limit) %></td>
3132
</tr>
3233
<% } %>
34+
</tbody>
3335
</table>
3436

3537
<table class="facts">

selenium/Dockerfile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# syntax=docker/dockerfile:1
2-
FROM atools/jdk-maven-node:mvn3-jdk11-node16 as base
1+
FROM node:18 as base
32

43
WORKDIR /code
54

selenium/test/amqp.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,22 @@ function getConnectionOptions() {
4040
}
4141
module.exports = {
4242

43-
open: () => {
43+
open: (queueName = "my-queue") => {
4444
let promise = new Promise((resolve, reject) => {
4545
container.on('connection_open', function(context) {
4646
resolve()
4747
})
4848
})
49+
console.log("Opening amqp connection using " + JSON.stringify(connectionOptions))
50+
4951
let connection = container.connect(connectionOptions)
5052
let receiver = connection.open_receiver({
51-
source: 'my-queue',
53+
source: queueName,
5254
target: 'receiver-target',
5355
name: 'receiver-link'
5456
})
5557
let sender = connection.open_sender({
56-
target: 'my-queue',
58+
target: queueName,
5759
source: 'sender-source',
5860
name: 'sender-link'
5961
})
@@ -64,6 +66,13 @@ module.exports = {
6466
'sender' : sender
6567
}
6668
},
69+
openReceiver: (handler, queueName = "my-queue") => {
70+
return handler.connection.open_receiver({
71+
source: queueName,
72+
target: 'receiver-target',
73+
name: 'receiver-link'
74+
})
75+
},
6776
close: (connection) => {
6877
if (connection != null) {
6978
connection.close()

selenium/test/mgt-api.js

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -114,18 +114,17 @@ module.exports = {
114114
throw new Error(req.responseText)
115115
}
116116
},
117-
createVhost: (url, name, description = "", tags = []) => {
117+
createVhost: (url, authorization, name, description = "", tags = []) => {
118118
let vhost = {
119119
"description": description,
120120
"tags": tags
121121
}
122122
log("Create vhost " + JSON.stringify(vhost)
123123
+ " with name " + name + " on " + url)
124124
const req = new XMLHttpRequest()
125-
let base64Credentials = btoa('administrator-only' + ":" + 'guest')
126125
let finalUrl = url + "/api/vhosts/" + encodeURIComponent(name)
127126
req.open('PUT', finalUrl, false)
128-
req.setRequestHeader("Authorization", "Basic " + base64Credentials)
127+
req.setRequestHeader("Authorization", authorization)
129128
req.setRequestHeader('Content-Type', 'application/json')
130129

131130
req.send(JSON.stringify(vhost))
@@ -158,13 +157,12 @@ module.exports = {
158157
throw new Error(req.responseText)
159158
}
160159
},
161-
deleteVhost: (url, vhost) => {
160+
deleteVhost: (url, authorization, vhost) => {
162161
log("Deleting vhost " + vhost)
163162
const req = new XMLHttpRequest()
164-
let base64Credentials = btoa('administrator-only' + ":" + 'guest')
165163
let finalUrl = url + "/api/vhosts/" + encodeURIComponent(vhost)
166164
req.open('DELETE', finalUrl, false)
167-
req.setRequestHeader("Authorization", "Basic " + base64Credentials)
165+
req.setRequestHeader("Authorization", authorization)
168166

169167
req.send()
170168
if (req.status == 200 || req.status == 204) {
@@ -194,21 +192,18 @@ module.exports = {
194192
throw new Error(req.responseText)
195193
}
196194
},
197-
createQueue: (url, name, vhost, queueType = "quorum") => {
195+
createQueue: (url, authorization, vhost, name, arguments = {}) => {
198196
log("Create queue " + JSON.stringify(name)
199197
+ " in vhost " + vhost + " on " + url)
200198
const req = new XMLHttpRequest()
201-
let base64Credentials = btoa('administrator-only' + ":" + 'guest')
202199
let finalUrl = url + "/api/queues/" + encodeURIComponent(vhost) + "/"
203200
+ encodeURIComponent(name)
204201
req.open('PUT', finalUrl, false)
205-
req.setRequestHeader("Authorization", "Basic " + base64Credentials)
202+
req.setRequestHeader("Authorization", authorization)
206203
req.setRequestHeader('Content-Type', 'application/json')
207204
let payload = {
208205
"durable": true,
209-
"arguments":{
210-
"x-queue-type" : queueType
211-
}
206+
"arguments": arguments
212207
}
213208
req.send(JSON.stringify(payload))
214209
if (req.status == 200 || req.status == 204 || req.status == 201) {
@@ -219,14 +214,13 @@ module.exports = {
219214
throw new Error(req.responseText)
220215
}
221216
},
222-
deleteQueue: (url, name, vhost) => {
217+
deleteQueue: (url, authorization, vhost, name) => {
223218
log("Deleting queue " + name + " on vhost " + vhost)
224219
const req = new XMLHttpRequest()
225-
let base64Credentials = btoa('administrator-only' + ":" + 'guest')
226220
let finalUrl = url + "/api/queues/" + encodeURIComponent(vhost) + "/"
227221
+ encodeURIComponent(name)
228222
req.open('DELETE', finalUrl, false)
229-
req.setRequestHeader("Authorization", "Basic " + base64Credentials)
223+
req.setRequestHeader("Authorization", authorization)
230224

231225
req.send()
232226
if (req.status == 200 || req.status == 204) {

selenium/test/pageobjects/BasePage.js

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,12 @@ module.exports = class BasePage {
3434
this.interactionDelay = parseInt(process.env.SELENIUM_INTERACTION_DELAY) || 0 // slow down interactions (when rabbit is behind a http proxy)
3535
}
3636

37-
37+
async goTo(path) {
38+
return driver.get(d.baseUrl + path)
39+
}
40+
async refresh() {
41+
return this.driver.navigate().refresh()
42+
}
3843
async isLoaded () {
3944
return this.waitForDisplayed(MENU_TABS)
4045
}
@@ -147,6 +152,39 @@ module.exports = class BasePage {
147152
const select = await new Select(selectable)
148153
return select.selectByValue(vhost)
149154
}
155+
async getTableMini(tableLocator) {
156+
const table = await this.waitForDisplayed(tableLocator)
157+
return this.getTableMiniUsingTableElement(table)
158+
}
159+
async getTableMiniUsingTableElement(table) {
160+
let tbody = await table.findElement(By.css('tbody'))
161+
let rows = await tbody.findElements(By.xpath("./child::*"))
162+
163+
let table_model = []
164+
for (let row of rows) {
165+
let columnName = await row.findElement(By.css('th')).getText()
166+
167+
let columnValue = await row.findElement(By.css('td'))
168+
let columnContent = await columnValue.findElement(By.xpath("./child::*"))
169+
170+
let columnType = await columnContent.getTagName()
171+
172+
switch (columnType) {
173+
case "table":
174+
table_model.push({
175+
"name": columnName,
176+
"value" : await this.getTableMiniUsingTableElement(columnValue)
177+
})
178+
break
179+
default:
180+
table_model.push({
181+
"name" : columnName,
182+
"value" : await columnContent.getText()
183+
})
184+
}
185+
}
186+
return table_model
187+
}
150188
async getTable(tableLocator, firstNColumns, rowClass) {
151189
const table = await this.waitForDisplayed(tableLocator)
152190
const rows = await table.findElements(rowClass == undefined ?

selenium/test/pageobjects/QueuePage.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,36 @@ const QUEUE_NAME = By.css('div#main h1 b')
77

88
const DELETE_SECTION = By.css('div#main div#delete')
99
const DELETE_BUTTON = By.css('div#main div#delete input[type=submit]')
10+
const FEATURES_TABLE = By.css('table#details-queue-table td#details-queue-features table.mini')
11+
const STATS_CONSUMER_COUNT = By.css('table#details-queue-stats-table td#consumers')
12+
13+
const CONSUMERS_SECTION = By.css('div#queue-consumers-section')
14+
const CONSUMERS_SECTION_TITLE = By.css('div#queue-consumers-section h2')
15+
const CONSUMERS_TABLE = By.css('div#queue-consumers-section table.list#consumers')
1016

1117
module.exports = class QueuePage extends BasePage {
1218
async isLoaded() {
1319
return this.waitForDisplayed(QUEUE_NAME)
1420
}
21+
1522
async getName() {
1623
return this.getText(QUEUE_NAME)
1724
}
25+
async getConsumerCount() {
26+
return this.getText(STATS_CONSUMER_COUNT)
27+
}
28+
async getFeatures() {
29+
return this.getTableMini(FEATURES_TABLE)
30+
}
31+
async getConsumersSectionTitle() {
32+
return this.getText(CONSUMERS_SECTION_TITLE)
33+
}
34+
async clickOnConsumerSection() {
35+
return this.click(CONSUMERS_SECTION)
36+
}
37+
async getConsumersTable() {
38+
return this.getTable(CONSUMERS_TABLE)
39+
}
1840
async ensureDeleteQueueSectionIsVisible() {
1941
await this.click(DELETE_SECTION)
2042
return this.driver.findElement(DELETE_SECTION).isDisplayed()

0 commit comments

Comments
 (0)