Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .github/workflows/test-authnz.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -72,22 +72,22 @@ jobs:
docker build -t mocha-test --target test .

- name: Run Suites
run: |
id: run-suites
run: |
IMAGE_TAG=$(find PACKAGES/rabbitmq-server-generic-unix-*.tar.xz | awk -F 'PACKAGES/rabbitmq-server-generic-unix-|.tar.xz' '{print $2}')
RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
${SELENIUM_DIR}/run-suites.sh full-suite-authnz-messaging
mkdir -p /tmp/full-suite-authnz-messaging
mv /tmp/selenium/* /tmp/full-suite-authnz-messaging
CONF_DIR_PREFIX="$(mktemp -d)" RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
${SELENIUM_DIR}/run-suites.sh full-suite-authnz-messaging
echo "SELENIUM_ARTIFACTS=$CONF_DIR_PREFIX" >> "$GITHUB_OUTPUT"

- name: Upload Test Artifacts
if: always()
uses: actions/upload-artifact@v4.3.2
env:
SELENIUM_ARTIFACTS: ${{ steps.run-suites.outputs.SELENIUM_ARTIFACTS }}
with:
name: test-artifacts-${{ matrix.browser }}-${{ matrix.erlang_version }}
name: test-artifacts-${{ matrix.browser }}-${{ matrix.erlang_version }}
path: |
logs/*
screens/*
/tmp/selenium/*
$SELENIUM_ARTIFACTS/*

summary-selenium:
needs:
Expand Down
13 changes: 5 additions & 8 deletions .github/workflows/test-management-ui-for-pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,19 +59,16 @@ jobs:
- name: Run short UI suites on a standalone rabbitmq server
run: |
IMAGE_TAG=$(find PACKAGES/rabbitmq-server-generic-unix-*.tar.xz | awk -F 'PACKAGES/rabbitmq-server-generic-unix-|.tar.xz' '{print $2}')
RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
CONF_DIR_PREFIX="$(mktemp -d)" RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
${SELENIUM_DIR}/run-suites.sh short-suite-management-ui

- name: Prepare logs for upload
if: ${{ failure() && steps.tests.outcome == 'failed' }}
run: |
mkdir -p /tmp/short-suite
mv /tmp/selenium/* /tmp/short-suite
echo "SELENIUM_ARTIFACTS=$CONF_DIR_PREFIX" >> "$GITHUB_OUTPUT"

- name: Upload Test Artifacts
if: ${{ failure() && steps.tests.outcome == 'failed' }}
uses: actions/upload-artifact@v4
env:
SELENIUM_ARTIFACTS: ${{ steps.run-suites.outputs.SELENIUM_ARTIFACTS }}
with:
name: test-artifacts-${{ matrix.browser }}-${{ matrix.erlang_version }}
path: |
/tmp/short-suite
$SELENIUM_ARTIFACTS/*
13 changes: 5 additions & 8 deletions .github/workflows/test-management-ui.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,19 +67,16 @@ jobs:
id: tests
run: |
IMAGE_TAG=$(find PACKAGES/rabbitmq-server-generic-unix-*.tar.xz | awk -F 'PACKAGES/rabbitmq-server-generic-unix-|.tar.xz' '{print $2}')
RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
CONF_DIR_PREFIX="$(mktemp -d)" RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
${SELENIUM_DIR}/run-suites.sh full-suite-management-ui

- name: Prepare logs for upload
if: ${{ failure() && steps.tests.outcome == 'failed' }}
run: |
mkdir -p /tmp/full-suite
mv -v /tmp/selenium/* /tmp/full-suite
echo "SELENIUM_ARTIFACTS=$CONF_DIR_PREFIX" >> "$GITHUB_OUTPUT"

- name: Upload Test Artifacts
if: ${{ failure() && steps.tests.outcome == 'failed' }}
uses: actions/upload-artifact@v4.3.2
env:
SELENIUM_ARTIFACTS: ${{ steps.run-suites.outputs.SELENIUM_ARTIFACTS }}
with:
name: test-artifacts-${{ matrix.browser }}-${{ matrix.erlang_version }}
path: |
Comment on lines +77 to 81
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You probably want to use the env var in the path to upload artefacts, right?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

absolutely. I just pushed a missing commit

/tmp/full-suite
$SELENIUM_ARTIFACTS/*
47 changes: 33 additions & 14 deletions selenium/bin/suite_template
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,12 @@ find_selenium_dir() {
SELENIUM_ROOT_FOLDER=$(find_selenium_dir $SCRIPT)
TEST_DIR=$SELENIUM_ROOT_FOLDER/test
BIN_DIR=$SELENIUM_ROOT_FOLDER/bin
SCREENS=${SELENIUM_ROOT_FOLDER}/screens/${SUITE}
CONF_DIR=${CONF_DIR_PREFIX:-/tmp}/selenium/${SUITE}
if [[ -z "${CONF_DIR_PREFIX}" ]]; then
CONF_DIR_PREFIX=$(mktemp -d)
fi
CONF_DIR=${CONF_DIR_PREFIX}/selenium/${SUITE}
SCREENS=${CONF_DIR}/screens

LOGS=${CONF_DIR}/logs
ENV_FILE=$CONF_DIR/.env
OTHER_ENV_FILE=$CONF_DIR/.other.env
Expand Down Expand Up @@ -116,6 +120,8 @@ init_suite() {

begin "Initializing suite $SUITE ..."
print "> REQUIRED_COMPONENTS: ${REQUIRED_COMPONENTS[*]}"
print "> CONF_DIR_PREFIX: ${CONF_DIR_PREFIX} "
print "> CONF_DIR: ${CONF_DIR} "
print "> TEST_CASES_DIR: ${TEST_CASES_DIR} "
print "> TEST_CONFIG_DIR: ${TEST_CONFIG_DIR} "
print "> DOCKER_NETWORK: ${DOCKER_NETWORK} "
Expand All @@ -128,8 +134,8 @@ init_suite() {
print "> COMMAND: ${COMMAND}"
end "Initialized suite"

mkdir -p ${LOGS}/${SUITE}
mkdir -p ${SCREENS}/${SUITE}
mkdir -p ${LOGS}
mkdir -p ${SCREENS}
}

build_mocha_image() {
Expand Down Expand Up @@ -356,8 +362,15 @@ _test() {
mocha_test_tag=($(md5sum $SELENIUM_ROOT_FOLDER/package.json))

generate_node_extra_ca_cert
MOUNT_NODE_EXTRA_CA_CERTS=${CONF_DIR}/node_ca_certs.pem
print "> MOUNT_NODE_EXTRA_CA_CERTS: ${MOUNT_NODE_EXTRA_CA_CERTS}"
MOUNT_NODE_EXTRA_CA_CERTS=${CONF_DIR}/node

EXTRA_ENV_VARS=""
EXTRA_MOUNTS=""
if [[ -f ${MOUNT_NODE_EXTRA_CA_CERTS}/node_ca_certs.pem ]]; then
print "> MOUNT_NODE_EXTRA_CA_CERTS: ${MOUNT_NODE_EXTRA_CA_CERTS}"
EXTRA_ENV_VARS="${EXTRA_ENV_VARS} --env NODE_EXTRA_CA_CERTS=/nodejs/node_ca_certs.pem "
EXTRA_MOUNTS="${EXTRA_MOUNTS} -v ${MOUNT_NODE_EXTRA_CA_CERTS}:/nodejs "
fi

docker run \
--rm \
Expand All @@ -373,12 +386,12 @@ _test() {
--env PROFILES="${PROFILES}" \
--env ENV_FILE="/code/.env" \
--env RABBITMQ_CERTS=/etc/rabbitmq/certs \
--env NODE_EXTRA_CA_CERTS=/nodejs/ca.pem \
-v ${MOUNT_NODE_EXTRA_CA_CERTS}:/nodejs/ca.pem \
${EXTRA_ENV_VARS} \
-v ${TEST_DIR}:/code/test \
-v ${TEST_CONFIG_DIR}/certs:/etc/rabbitmq/certs \
-v ${SCREENS}:/screens \
-v ${ENV_FILE}:/code/.env \
${EXTRA_MOUNTS} \
mocha-test:${mocha_test_tag} test /code/test${TEST_CASES_PATH}

TEST_RESULT=$?
Expand Down Expand Up @@ -674,7 +687,7 @@ test_local() {
export SELENIUM_POLLING=${SELENIUM_POLLING:-500}

generate_node_extra_ca_cert
MOUNT_NODE_EXTRA_CA_CERTS=${CONF_DIR}/node_ca_certs.pem
MOUNT_NODE_EXTRA_CA_CERTS=${CONF_DIR}/node/node_ca_certs.pem

print "> SELENIUM_TIMEOUT: ${SELENIUM_TIMEOUT}"
print "> SELENIUM_POLLING: ${SELENIUM_POLLING}"
Expand Down Expand Up @@ -738,16 +751,22 @@ save_components_logs() {
end "Finished saving logs"
}
generate_node_extra_ca_cert() {
echo "Generating ${CONF_DIR}/node_ca_certs.pem ..."
rm -f ${CONF_DIR}/node_ca_certs.pem
begin "Generating ${CONF_DIR}/node/node_ca_certs.pem ..."
mkdir -p ${CONF_DIR}/node
rm -f ${CONF_DIR}/node/node_ca_certs.pem
env | while IFS= read -r line; do
value=${line#*=}
name=${line%%=*}

if [[ $name == *NODE_EXTRA_CA_CERTS ]]
then
echo "Adding ${TEST_DIR}/${value} to ${CONF_DIR}/node_ca_certs.pem ..."
cat ${TEST_DIR}/${value} >> ${CONF_DIR}/node_ca_certs.pem
print "Adding ${TEST_DIR}/${value} to ${CONF_DIR}/node/node_ca_certs.pem ..."
cat ${TEST_DIR}/${value} >> ${CONF_DIR}/node/node_ca_certs.pem
fi
done
done
if [[ -f ${CONF_DIR}/node/node_ca_certs.pem ]]; then
end "Generated ${CONF_DIR}/node/node_ca_certs.pem"
else
end "Did not generate ${CONF_DIR}/node/node_ca_certs.pem"
fi
}
1 change: 1 addition & 0 deletions selenium/run-suites.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ while read SUITE
do
echo -e "=== Running suite (${TOTAL_SUITES}/${GREEN}${#SUCCESSFUL_SUITES[@]}/${RED}${#FAILED_SUITES[@]}${NC}) $SUITE ============================================"
echo " "

ENV_MODES="docker" $SCRIPT/suites/$SUITE
TEST_RESULT="$?"
TEST_STATUS="${GREEN}Succeeded${NC}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const { By, Key, until, Builder } = require('selenium-webdriver')
require('chromedriver')
const assert = require('assert')
const { open: openAmqp, once: onceAmqp, on: onAmqp, close: closeAmqp } = require('../../amqp')
const { buildDriver, goToHome, captureScreensFor, teardown, delay, doWhile } = require('../../utils')
const { buildDriver, goToHome, captureScreensFor, teardown, delay, doUntil } = require('../../utils')

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

await delay(5*1000) // wait until page refreshes
let sessions = await doWhile(function() { return connectionPage.getSessions() },
let sessions = await doUntil(function() { return connectionPage.getSessions() },
function(obj) { return obj != undefined })
let incomingLink = connectionPage.getIncomingLinkInfo(sessions.incoming_links, 0)
assert.equal(2, incomingLink.deliveryCount)
Expand Down
4 changes: 2 additions & 2 deletions selenium/test/exchanges/management.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const { By, Key, until, Builder } = require('selenium-webdriver')
require('chromedriver')
const assert = require('assert')
const { buildDriver, goToHome, captureScreensFor, teardown, doWhile, log } = require('../utils')
const { buildDriver, goToHome, captureScreensFor, teardown, doUntil, log } = require('../utils')

const LoginPage = require('../pageobjects/LoginPage')
const OverviewPage = require('../pageobjects/OverviewPage')
Expand Down Expand Up @@ -71,7 +71,7 @@ describe('Exchange management', function () {
it('exchange selectable columns', async function () {
await overview.clickOnOverviewTab()
await overview.clickOnExchangesTab()
await doWhile(async function() { return exchanges.getExchangesTable() },
await doUntil(async function() { return exchanges.getExchangesTable() },
function(table) {
return table.length > 0
})
Expand Down
4 changes: 2 additions & 2 deletions selenium/test/queuesAndStreams/list.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const { By, Key, until, Builder } = require('selenium-webdriver')
require('chromedriver')
const assert = require('assert')
const { buildDriver, goToHome, captureScreensFor, teardown, doWhile } = require('../utils')
const { buildDriver, goToHome, captureScreensFor, teardown, doUntil } = require('../utils')

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

await doWhile(async function() { return queuesAndStreams.getQueuesTable() },
await doUntil(async function() { return queuesAndStreams.getQueuesTable() },
function(table) {
return table.length > 0
})
Expand Down
20 changes: 10 additions & 10 deletions selenium/test/queuesAndStreams/view-qq-consumers.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const { By, Key, until, Builder } = require('selenium-webdriver')
require('chromedriver')
const assert = require('assert')
const { buildDriver, goToHome, captureScreensFor, teardown, doWhile, goToQueue,delay } = require('../utils')
const { buildDriver, goToHome, captureScreensFor, teardown, doUntil, goToQueue,delay } = require('../utils')
const { createQueue, deleteQueue, getManagementUrl, basicAuthorization } = require('../mgt-api')
const { getAmqpUrl : getAmqpUrl } = require('../amqp')
const amqplib = require('amqplib');
Expand Down Expand Up @@ -84,7 +84,7 @@ describe('Given a quorum queue configured with SAC', function () {
})

it('it should have one consumer as active', async function() {
await doWhile(async function() {
await doUntil(async function() {
await queuePage.refresh()
await queuePage.isLoaded()
return queuePage.getConsumerCount()
Expand All @@ -94,7 +94,7 @@ describe('Given a quorum queue configured with SAC', function () {
assert.equal("1", await queuePage.getConsumerCount())
assert.equal("Consumers (1)", await queuePage.getConsumersSectionTitle())
await queuePage.clickOnConsumerSection()
let consumerTable = await doWhile(async function() {
let consumerTable = await doUntil(async function() {
return queuePage.getConsumersTable()
}, function(table) {
return table[0][6].localeCompare("single active") == 0 &&
Expand All @@ -113,7 +113,7 @@ describe('Given a quorum queue configured with SAC', function () {

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

await doWhile(async function() {
await doUntil(async function() {
await queuePage.refresh()
await queuePage.isLoaded()
return queuePage.getConsumerCount()
Expand All @@ -124,7 +124,7 @@ describe('Given a quorum queue configured with SAC', function () {
assert.equal("2", await queuePage.getConsumerCount())
assert.equal("Consumers (2)", await queuePage.getConsumersSectionTitle())
await queuePage.clickOnConsumerSection()
let consumerTable = await doWhile(async function() {
let consumerTable = await doUntil(async function() {
return queuePage.getConsumersTable()
}, function(table) {
return table.length == 2 && table[0][1] != "" && table[1][1] != ""
Expand All @@ -151,7 +151,7 @@ describe('Given a quorum queue configured with SAC', function () {
error("Failed to close amqp091 connection due to " + error);
}
// ensure there are no more consumers
await doWhile(async function() {
await doUntil(async function() {
await queuePage.refresh()
await queuePage.isLoaded()
return queuePage.getConsumerCount()
Expand All @@ -178,7 +178,7 @@ describe('Given a quorum queue configured with SAC', function () {
})

it('it should have one consumer as active', async function() {
await doWhile(async function() {
await doUntil(async function() {
await queuePage.refresh()
await queuePage.isLoaded()
return queuePage.getConsumerCount()
Expand All @@ -188,7 +188,7 @@ describe('Given a quorum queue configured with SAC', function () {
assert.equal("1", await queuePage.getConsumerCount())
assert.equal("Consumers (1)", await queuePage.getConsumersSectionTitle())
await queuePage.clickOnConsumerSection()
let consumerTable = await doWhile(async function() {
let consumerTable = await doUntil(async function() {
return queuePage.getConsumersTable()
}, function(table) {
return table[0][6].localeCompare("single active") == 0 &&
Expand All @@ -207,7 +207,7 @@ describe('Given a quorum queue configured with SAC', function () {

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

await doWhile(async function() {
await doUntil(async function() {
await queuePage.refresh()
await queuePage.isLoaded()
return queuePage.getConsumerCount()
Expand All @@ -218,7 +218,7 @@ describe('Given a quorum queue configured with SAC', function () {
assert.equal("2", await queuePage.getConsumerCount())
assert.equal("Consumers (2)", await queuePage.getConsumersSectionTitle())
await queuePage.clickOnConsumerSection()
let consumerTable = await doWhile(async function() {
let consumerTable = await doUntil(async function() {
return queuePage.getConsumersTable()
}, function(table) {
return table.length == 2 && table[0][1] != "" && table[1][1] != ""
Expand Down
6 changes: 3 additions & 3 deletions selenium/test/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ module.exports = {
return new CaptureScreenshot(d.driver, require('path').basename(test))
},

doWhile: async (doCallback, booleanCallback, delayMs = 1000, message = "doWhile failed") => {
doUntil: async (doCallback, booleanCallback, delayMs = 1000, message = "doUntil failed") => {
let done = false
let attempts = 10
let ret
Expand All @@ -156,7 +156,7 @@ module.exports = {
+ ") with arg " + JSON.stringify(ret) + " ... ")
done = booleanCallback(ret)
}catch(error) {
module.exports.error("Caught " + error + " on doWhile callback...")
module.exports.error("Caught " + error + " on doUntil callback...")

}finally {
if (!done) {
Expand Down Expand Up @@ -184,7 +184,7 @@ module.exports = {
+ ") with arg " + JSON.stringify(ret) + " ... ")
done = booleanCallback(ret)
}catch(error) {
module.exports.error("Caught " + error + " on doWhile callback...")
module.exports.error("Caught " + error + " on retry callback...")

}finally {
if (!done) {
Expand Down
Loading
Loading