Relocate temp folder from /tmp to /var

This commit is contained in:
Marcial Rosales 2025-05-28 13:01:46 +02:00
parent 924b451b73
commit 94cba43e75
11 changed files with 76 additions and 62 deletions

View File

@ -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:

View File

@ -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/*

View File

@ -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: |
/tmp/full-suite
$SELENIUM_ARTIFACTS/*

View File

@ -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
@ -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} "
@ -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() {
@ -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 \
@ -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=$?
@ -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}"
@ -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
}

View File

@ -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}"

View File

@ -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')
@ -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)

View File

@ -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')
@ -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
})

View File

@ -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')
@ -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
})

View File

@ -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');
@ -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()
@ -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 &&
@ -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()
@ -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] != ""
@ -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()
@ -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()
@ -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 &&
@ -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()
@ -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] != ""

View File

@ -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
@ -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) {
@ -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) {

View File

@ -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, delay } = require('../utils')
const { buildDriver, goToHome, captureScreensFor, teardown, doUntil, log, delay } = require('../utils')
const { getManagementUrl, basicAuthorization, createVhost, deleteVhost } = require('../mgt-api')
const LoginPage = require('../pageobjects/LoginPage')
@ -56,7 +56,7 @@ describe('Virtual Hosts in Admin tab', function () {
await adminTab.clickOnVhosts()
await vhostsTab.isLoaded()
await vhostsTab.searchForVhosts("/")
await doWhile(async function() { return vhostsTab.getVhostsTable() },
await doUntil(async function() { return vhostsTab.getVhostsTable() },
function(table) {
return table.length>0
})
@ -116,7 +116,7 @@ describe('Virtual Hosts in Admin tab', function () {
it('vhost is listed with tag', async function () {
log("Searching for vhost " + vhost)
await vhostsTab.searchForVhosts(vhost)
await doWhile(async function() { return vhostsTab.getVhostsTable()},
await doUntil(async function() { return vhostsTab.getVhostsTable()},
function(table) {
log("table: "+ JSON.stringify(table) + " table[0][0]:" + table[0][0])
return table.length==1 && table[0][0].localeCompare(vhost) == 0
@ -124,7 +124,7 @@ describe('Virtual Hosts in Admin tab', function () {
log("Found vhost " + vhost)
await vhostsTab.selectTableColumnsById(["checkbox-vhosts-tags"])
await doWhile(async function() { return vhostsTab.getVhostsTable() },
await doUntil(async function() { return vhostsTab.getVhostsTable() },
function(table) {
return table.length==1 && table[0][3].localeCompare("selenium-tag") == 0
})