Skip to content

Commit e880904

Browse files
Merge pull request #13974 from rabbitmq/mergify/bp/v4.1.x/pr-13963
Selenium: minor refactoring (backport #13963)
2 parents 938a2f5 + c36a466 commit e880904

File tree

11 files changed

+76
-62
lines changed

11 files changed

+76
-62
lines changed

.github/workflows/test-authnz.yaml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,22 +72,22 @@ jobs:
7272
docker build -t mocha-test --target test .
7373
7474
- name: Run Suites
75-
run: |
75+
id: run-suites
76+
run: |
7677
IMAGE_TAG=$(find PACKAGES/rabbitmq-server-generic-unix-*.tar.xz | awk -F 'PACKAGES/rabbitmq-server-generic-unix-|.tar.xz' '{print $2}')
77-
RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
78-
${SELENIUM_DIR}/run-suites.sh full-suite-authnz-messaging
79-
mkdir -p /tmp/full-suite-authnz-messaging
80-
mv /tmp/selenium/* /tmp/full-suite-authnz-messaging
78+
CONF_DIR_PREFIX="$(mktemp -d)" RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
79+
${SELENIUM_DIR}/run-suites.sh full-suite-authnz-messaging
80+
echo "SELENIUM_ARTIFACTS=$CONF_DIR_PREFIX" >> "$GITHUB_OUTPUT"
8181
8282
- name: Upload Test Artifacts
8383
if: always()
8484
uses: actions/[email protected]
85+
env:
86+
SELENIUM_ARTIFACTS: ${{ steps.run-suites.outputs.SELENIUM_ARTIFACTS }}
8587
with:
86-
name: test-artifacts-${{ matrix.browser }}-${{ matrix.erlang_version }}
88+
name: test-artifacts-${{ matrix.browser }}-${{ matrix.erlang_version }}
8789
path: |
88-
logs/*
89-
screens/*
90-
/tmp/selenium/*
90+
$SELENIUM_ARTIFACTS/*
9191
9292
summary-selenium:
9393
needs:

.github/workflows/test-management-ui-for-pr.yaml

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,16 @@ jobs:
5959
- name: Run short UI suites on a standalone rabbitmq server
6060
run: |
6161
IMAGE_TAG=$(find PACKAGES/rabbitmq-server-generic-unix-*.tar.xz | awk -F 'PACKAGES/rabbitmq-server-generic-unix-|.tar.xz' '{print $2}')
62-
RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
62+
CONF_DIR_PREFIX="$(mktemp -d)" RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
6363
${SELENIUM_DIR}/run-suites.sh short-suite-management-ui
64-
65-
- name: Prepare logs for upload
66-
if: ${{ failure() && steps.tests.outcome == 'failed' }}
67-
run: |
68-
mkdir -p /tmp/short-suite
69-
mv /tmp/selenium/* /tmp/short-suite
64+
echo "SELENIUM_ARTIFACTS=$CONF_DIR_PREFIX" >> "$GITHUB_OUTPUT"
7065
7166
- name: Upload Test Artifacts
7267
if: ${{ failure() && steps.tests.outcome == 'failed' }}
7368
uses: actions/upload-artifact@v4
69+
env:
70+
SELENIUM_ARTIFACTS: ${{ steps.run-suites.outputs.SELENIUM_ARTIFACTS }}
7471
with:
7572
name: test-artifacts-${{ matrix.browser }}-${{ matrix.erlang_version }}
7673
path: |
77-
/tmp/short-suite
74+
$SELENIUM_ARTIFACTS/*

.github/workflows/test-management-ui.yaml

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,16 @@ jobs:
6767
id: tests
6868
run: |
6969
IMAGE_TAG=$(find PACKAGES/rabbitmq-server-generic-unix-*.tar.xz | awk -F 'PACKAGES/rabbitmq-server-generic-unix-|.tar.xz' '{print $2}')
70-
RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
70+
CONF_DIR_PREFIX="$(mktemp -d)" RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
7171
${SELENIUM_DIR}/run-suites.sh full-suite-management-ui
72-
73-
- name: Prepare logs for upload
74-
if: ${{ failure() && steps.tests.outcome == 'failed' }}
75-
run: |
76-
mkdir -p /tmp/full-suite
77-
mv -v /tmp/selenium/* /tmp/full-suite
72+
echo "SELENIUM_ARTIFACTS=$CONF_DIR_PREFIX" >> "$GITHUB_OUTPUT"
7873
7974
- name: Upload Test Artifacts
8075
if: ${{ failure() && steps.tests.outcome == 'failed' }}
8176
uses: actions/[email protected]
77+
env:
78+
SELENIUM_ARTIFACTS: ${{ steps.run-suites.outputs.SELENIUM_ARTIFACTS }}
8279
with:
8380
name: test-artifacts-${{ matrix.browser }}-${{ matrix.erlang_version }}
8481
path: |
85-
/tmp/full-suite
82+
$SELENIUM_ARTIFACTS/*

selenium/bin/suite_template

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,12 @@ find_selenium_dir() {
3030
SELENIUM_ROOT_FOLDER=$(find_selenium_dir $SCRIPT)
3131
TEST_DIR=$SELENIUM_ROOT_FOLDER/test
3232
BIN_DIR=$SELENIUM_ROOT_FOLDER/bin
33-
SCREENS=${SELENIUM_ROOT_FOLDER}/screens/${SUITE}
34-
CONF_DIR=${CONF_DIR_PREFIX:-/tmp}/selenium/${SUITE}
33+
if [[ -z "${CONF_DIR_PREFIX}" ]]; then
34+
CONF_DIR_PREFIX=$(mktemp -d)
35+
fi
36+
CONF_DIR=${CONF_DIR_PREFIX}/selenium/${SUITE}
37+
SCREENS=${CONF_DIR}/screens
38+
3539
LOGS=${CONF_DIR}/logs
3640
ENV_FILE=$CONF_DIR/.env
3741
OTHER_ENV_FILE=$CONF_DIR/.other.env
@@ -116,6 +120,8 @@ init_suite() {
116120

117121
begin "Initializing suite $SUITE ..."
118122
print "> REQUIRED_COMPONENTS: ${REQUIRED_COMPONENTS[*]}"
123+
print "> CONF_DIR_PREFIX: ${CONF_DIR_PREFIX} "
124+
print "> CONF_DIR: ${CONF_DIR} "
119125
print "> TEST_CASES_DIR: ${TEST_CASES_DIR} "
120126
print "> TEST_CONFIG_DIR: ${TEST_CONFIG_DIR} "
121127
print "> DOCKER_NETWORK: ${DOCKER_NETWORK} "
@@ -128,8 +134,8 @@ init_suite() {
128134
print "> COMMAND: ${COMMAND}"
129135
end "Initialized suite"
130136

131-
mkdir -p ${LOGS}/${SUITE}
132-
mkdir -p ${SCREENS}/${SUITE}
137+
mkdir -p ${LOGS}
138+
mkdir -p ${SCREENS}
133139
}
134140

135141
build_mocha_image() {
@@ -356,8 +362,15 @@ _test() {
356362
mocha_test_tag=($(md5sum $SELENIUM_ROOT_FOLDER/package.json))
357363

358364
generate_node_extra_ca_cert
359-
MOUNT_NODE_EXTRA_CA_CERTS=${CONF_DIR}/node_ca_certs.pem
360-
print "> MOUNT_NODE_EXTRA_CA_CERTS: ${MOUNT_NODE_EXTRA_CA_CERTS}"
365+
MOUNT_NODE_EXTRA_CA_CERTS=${CONF_DIR}/node
366+
367+
EXTRA_ENV_VARS=""
368+
EXTRA_MOUNTS=""
369+
if [[ -f ${MOUNT_NODE_EXTRA_CA_CERTS}/node_ca_certs.pem ]]; then
370+
print "> MOUNT_NODE_EXTRA_CA_CERTS: ${MOUNT_NODE_EXTRA_CA_CERTS}"
371+
EXTRA_ENV_VARS="${EXTRA_ENV_VARS} --env NODE_EXTRA_CA_CERTS=/nodejs/node_ca_certs.pem "
372+
EXTRA_MOUNTS="${EXTRA_MOUNTS} -v ${MOUNT_NODE_EXTRA_CA_CERTS}:/nodejs "
373+
fi
361374

362375
docker run \
363376
--rm \
@@ -373,12 +386,12 @@ _test() {
373386
--env PROFILES="${PROFILES}" \
374387
--env ENV_FILE="/code/.env" \
375388
--env RABBITMQ_CERTS=/etc/rabbitmq/certs \
376-
--env NODE_EXTRA_CA_CERTS=/nodejs/ca.pem \
377-
-v ${MOUNT_NODE_EXTRA_CA_CERTS}:/nodejs/ca.pem \
389+
${EXTRA_ENV_VARS} \
378390
-v ${TEST_DIR}:/code/test \
379391
-v ${TEST_CONFIG_DIR}/certs:/etc/rabbitmq/certs \
380392
-v ${SCREENS}:/screens \
381393
-v ${ENV_FILE}:/code/.env \
394+
${EXTRA_MOUNTS} \
382395
mocha-test:${mocha_test_tag} test /code/test${TEST_CASES_PATH}
383396

384397
TEST_RESULT=$?
@@ -674,7 +687,7 @@ test_local() {
674687
export SELENIUM_POLLING=${SELENIUM_POLLING:-500}
675688

676689
generate_node_extra_ca_cert
677-
MOUNT_NODE_EXTRA_CA_CERTS=${CONF_DIR}/node_ca_certs.pem
690+
MOUNT_NODE_EXTRA_CA_CERTS=${CONF_DIR}/node/node_ca_certs.pem
678691

679692
print "> SELENIUM_TIMEOUT: ${SELENIUM_TIMEOUT}"
680693
print "> SELENIUM_POLLING: ${SELENIUM_POLLING}"
@@ -738,16 +751,22 @@ save_components_logs() {
738751
end "Finished saving logs"
739752
}
740753
generate_node_extra_ca_cert() {
741-
echo "Generating ${CONF_DIR}/node_ca_certs.pem ..."
742-
rm -f ${CONF_DIR}/node_ca_certs.pem
754+
begin "Generating ${CONF_DIR}/node/node_ca_certs.pem ..."
755+
mkdir -p ${CONF_DIR}/node
756+
rm -f ${CONF_DIR}/node/node_ca_certs.pem
743757
env | while IFS= read -r line; do
744758
value=${line#*=}
745759
name=${line%%=*}
746760

747761
if [[ $name == *NODE_EXTRA_CA_CERTS ]]
748762
then
749-
echo "Adding ${TEST_DIR}/${value} to ${CONF_DIR}/node_ca_certs.pem ..."
750-
cat ${TEST_DIR}/${value} >> ${CONF_DIR}/node_ca_certs.pem
763+
print "Adding ${TEST_DIR}/${value} to ${CONF_DIR}/node/node_ca_certs.pem ..."
764+
cat ${TEST_DIR}/${value} >> ${CONF_DIR}/node/node_ca_certs.pem
751765
fi
752-
done
766+
done
767+
if [[ -f ${CONF_DIR}/node/node_ca_certs.pem ]]; then
768+
end "Generated ${CONF_DIR}/node/node_ca_certs.pem"
769+
else
770+
end "Did not generate ${CONF_DIR}/node/node_ca_certs.pem"
771+
fi
753772
}

selenium/run-suites.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ while read SUITE
1717
do
1818
echo -e "=== Running suite (${TOTAL_SUITES}/${GREEN}${#SUCCESSFUL_SUITES[@]}/${RED}${#FAILED_SUITES[@]}${NC}) $SUITE ============================================"
1919
echo " "
20+
2021
ENV_MODES="docker" $SCRIPT/suites/$SUITE
2122
TEST_RESULT="$?"
2223
TEST_STATUS="${GREEN}Succeeded${NC}"

selenium/test/connections/amqp10/sessions-for-monitoring-user.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const { By, Key, until, Builder } = require('selenium-webdriver')
22
require('chromedriver')
33
const assert = require('assert')
44
const { open: openAmqp, once: onceAmqp, on: onAmqp, close: closeAmqp } = require('../../amqp')
5-
const { buildDriver, goToHome, captureScreensFor, teardown, delay, doWhile } = require('../../utils')
5+
const { buildDriver, goToHome, captureScreensFor, teardown, delay, doUntil } = require('../../utils')
66

77
const LoginPage = require('../../pageobjects/LoginPage')
88
const OverviewPage = require('../../pageobjects/OverviewPage')
@@ -98,7 +98,7 @@ describe('Given an amqp10 connection opened, listed and clicked on it', function
9898
assert.equal(2, receivedAmqpMessageCount)
9999

100100
await delay(5*1000) // wait until page refreshes
101-
let sessions = await doWhile(function() { return connectionPage.getSessions() },
101+
let sessions = await doUntil(function() { return connectionPage.getSessions() },
102102
function(obj) { return obj != undefined })
103103
let incomingLink = connectionPage.getIncomingLinkInfo(sessions.incoming_links, 0)
104104
assert.equal(2, incomingLink.deliveryCount)

selenium/test/exchanges/management.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const { By, Key, until, Builder } = require('selenium-webdriver')
22
require('chromedriver')
33
const assert = require('assert')
4-
const { buildDriver, goToHome, captureScreensFor, teardown, doWhile, log } = require('../utils')
4+
const { buildDriver, goToHome, captureScreensFor, teardown, doUntil, log } = require('../utils')
55

66
const LoginPage = require('../pageobjects/LoginPage')
77
const OverviewPage = require('../pageobjects/OverviewPage')
@@ -71,7 +71,7 @@ describe('Exchange management', function () {
7171
it('exchange selectable columns', async function () {
7272
await overview.clickOnOverviewTab()
7373
await overview.clickOnExchangesTab()
74-
await doWhile(async function() { return exchanges.getExchangesTable() },
74+
await doUntil(async function() { return exchanges.getExchangesTable() },
7575
function(table) {
7676
return table.length > 0
7777
})

selenium/test/queuesAndStreams/list.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const { By, Key, until, Builder } = require('selenium-webdriver')
22
require('chromedriver')
33
const assert = require('assert')
4-
const { buildDriver, goToHome, captureScreensFor, teardown, doWhile } = require('../utils')
4+
const { buildDriver, goToHome, captureScreensFor, teardown, doUntil } = require('../utils')
55

66
const LoginPage = require('../pageobjects/LoginPage')
77
const OverviewPage = require('../pageobjects/OverviewPage')
@@ -49,7 +49,7 @@ describe('Queues and Streams management', function () {
4949
let queueName = "test_" + Math.floor(Math.random() * 1000)
5050
await queuesAndStreams.fillInAddNewQueue({"name" : queueName, "type" : "classic"})
5151

52-
await doWhile(async function() { return queuesAndStreams.getQueuesTable() },
52+
await doUntil(async function() { return queuesAndStreams.getQueuesTable() },
5353
function(table) {
5454
return table.length > 0
5555
})

selenium/test/queuesAndStreams/view-qq-consumers.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const { By, Key, until, Builder } = require('selenium-webdriver')
22
require('chromedriver')
33
const assert = require('assert')
4-
const { buildDriver, goToHome, captureScreensFor, teardown, doWhile, goToQueue,delay } = require('../utils')
4+
const { buildDriver, goToHome, captureScreensFor, teardown, doUntil, goToQueue,delay } = require('../utils')
55
const { createQueue, deleteQueue, getManagementUrl, basicAuthorization } = require('../mgt-api')
66
const { getAmqpUrl : getAmqpUrl } = require('../amqp')
77
const amqplib = require('amqplib');
@@ -84,7 +84,7 @@ describe('Given a quorum queue configured with SAC', function () {
8484
})
8585

8686
it('it should have one consumer as active', async function() {
87-
await doWhile(async function() {
87+
await doUntil(async function() {
8888
await queuePage.refresh()
8989
await queuePage.isLoaded()
9090
return queuePage.getConsumerCount()
@@ -94,7 +94,7 @@ describe('Given a quorum queue configured with SAC', function () {
9494
assert.equal("1", await queuePage.getConsumerCount())
9595
assert.equal("Consumers (1)", await queuePage.getConsumersSectionTitle())
9696
await queuePage.clickOnConsumerSection()
97-
let consumerTable = await doWhile(async function() {
97+
let consumerTable = await doUntil(async function() {
9898
return queuePage.getConsumersTable()
9999
}, function(table) {
100100
return table[0][6].localeCompare("single active") == 0 &&
@@ -113,7 +113,7 @@ describe('Given a quorum queue configured with SAC', function () {
113113

114114
it('the latter consumer should be active and the former waiting', async function() {
115115

116-
await doWhile(async function() {
116+
await doUntil(async function() {
117117
await queuePage.refresh()
118118
await queuePage.isLoaded()
119119
return queuePage.getConsumerCount()
@@ -124,7 +124,7 @@ describe('Given a quorum queue configured with SAC', function () {
124124
assert.equal("2", await queuePage.getConsumerCount())
125125
assert.equal("Consumers (2)", await queuePage.getConsumersSectionTitle())
126126
await queuePage.clickOnConsumerSection()
127-
let consumerTable = await doWhile(async function() {
127+
let consumerTable = await doUntil(async function() {
128128
return queuePage.getConsumersTable()
129129
}, function(table) {
130130
return table.length == 2 && table[0][1] != "" && table[1][1] != ""
@@ -151,7 +151,7 @@ describe('Given a quorum queue configured with SAC', function () {
151151
error("Failed to close amqp091 connection due to " + error);
152152
}
153153
// ensure there are no more consumers
154-
await doWhile(async function() {
154+
await doUntil(async function() {
155155
await queuePage.refresh()
156156
await queuePage.isLoaded()
157157
return queuePage.getConsumerCount()
@@ -178,7 +178,7 @@ describe('Given a quorum queue configured with SAC', function () {
178178
})
179179

180180
it('it should have one consumer as active', async function() {
181-
await doWhile(async function() {
181+
await doUntil(async function() {
182182
await queuePage.refresh()
183183
await queuePage.isLoaded()
184184
return queuePage.getConsumerCount()
@@ -188,7 +188,7 @@ describe('Given a quorum queue configured with SAC', function () {
188188
assert.equal("1", await queuePage.getConsumerCount())
189189
assert.equal("Consumers (1)", await queuePage.getConsumersSectionTitle())
190190
await queuePage.clickOnConsumerSection()
191-
let consumerTable = await doWhile(async function() {
191+
let consumerTable = await doUntil(async function() {
192192
return queuePage.getConsumersTable()
193193
}, function(table) {
194194
return table[0][6].localeCompare("single active") == 0 &&
@@ -207,7 +207,7 @@ describe('Given a quorum queue configured with SAC', function () {
207207

208208
it('the former consumer should still be active and the latter be waiting', async function() {
209209

210-
await doWhile(async function() {
210+
await doUntil(async function() {
211211
await queuePage.refresh()
212212
await queuePage.isLoaded()
213213
return queuePage.getConsumerCount()
@@ -218,7 +218,7 @@ describe('Given a quorum queue configured with SAC', function () {
218218
assert.equal("2", await queuePage.getConsumerCount())
219219
assert.equal("Consumers (2)", await queuePage.getConsumersSectionTitle())
220220
await queuePage.clickOnConsumerSection()
221-
let consumerTable = await doWhile(async function() {
221+
let consumerTable = await doUntil(async function() {
222222
return queuePage.getConsumersTable()
223223
}, function(table) {
224224
return table.length == 2 && table[0][1] != "" && table[1][1] != ""

selenium/test/utils.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ module.exports = {
144144
return new CaptureScreenshot(d.driver, require('path').basename(test))
145145
},
146146

147-
doWhile: async (doCallback, booleanCallback, delayMs = 1000, message = "doWhile failed") => {
147+
doUntil: async (doCallback, booleanCallback, delayMs = 1000, message = "doUntil failed") => {
148148
let done = false
149149
let attempts = 10
150150
let ret
@@ -156,7 +156,7 @@ module.exports = {
156156
+ ") with arg " + JSON.stringify(ret) + " ... ")
157157
done = booleanCallback(ret)
158158
}catch(error) {
159-
module.exports.error("Caught " + error + " on doWhile callback...")
159+
module.exports.error("Caught " + error + " on doUntil callback...")
160160

161161
}finally {
162162
if (!done) {
@@ -184,7 +184,7 @@ module.exports = {
184184
+ ") with arg " + JSON.stringify(ret) + " ... ")
185185
done = booleanCallback(ret)
186186
}catch(error) {
187-
module.exports.error("Caught " + error + " on doWhile callback...")
187+
module.exports.error("Caught " + error + " on retry callback...")
188188

189189
}finally {
190190
if (!done) {

0 commit comments

Comments
 (0)