Skip to content

Commit

Permalink
Merge pull request #7151 from rabbitmq/mergify/bp/v3.11.x/pr-7144
Browse files Browse the repository at this point in the history
Fix issue #7142 (backport #7144)
  • Loading branch information
michaelklishin committed Feb 2, 2023
2 parents 1f10095 + de3e8cc commit 91805d0
Show file tree
Hide file tree
Showing 8 changed files with 195 additions and 8 deletions.
14 changes: 7 additions & 7 deletions deps/rabbitmq_management/priv/www/js/tmpl/limits.ejs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<h1>Limits</h1>

<div class="section">
<div class="section" id="virtual-host-limits">
<h2>Virtual host Limits</h2>
<div class="hider">
<div class="updatable">
Expand Down Expand Up @@ -49,7 +49,7 @@
</div>
</div>

<div class="section administrator-only">
<div class="section administrator-only" id="set-virtual-host-limits">
<h2>Set / update a virtual host limit</h2>
<div class="hider">
<form action="#/limits" method="put">
Expand Down Expand Up @@ -88,7 +88,7 @@
</div>
</div>

<div class="section">
<div class="section" id="user-limits">
<h2>User Limits</h2>
<div class="hider">
<div class="updatable">
Expand Down Expand Up @@ -137,7 +137,7 @@
</div>
</div>

<div class="section administrator-only">
<div class="section administrator-only" id="set-user-limits">
<h2>Set / update a user limit</h2>
<div class="hider">
<form action="#/user-limits" method="put">
Expand All @@ -146,9 +146,9 @@
<th><label>User:</label></th>
<td>
<select name="user">
<% for (var i = 0; i < users.items.length; i++) { %>
<option value="<%= fmt_string(users.items[i].name) %>">
<%= fmt_string(users.items[i].name) %>
<% for (var i = 0; i < users.length; i++) { %>
<option value="<%= fmt_string(users[i].name) %>">
<%= fmt_string(users[i].name) %>
</option>
<% } %>
</select>
Expand Down
24 changes: 24 additions & 0 deletions deps/rabbitmq_management/selenium/suites/limits.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/usr/bin/env bash

SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Name of the suite used to generate log and screen folders
SUITE=$( basename "${BASH_SOURCE[0]}" .sh)

# Path to the test cases this suite should run. It is relative to the selenium/test folder
TEST_CASES_PATH=/limits
# Path to the folder where all configuration file reside. It is relative to the selenim/test folder
TEST_CONFIG_PATH=/basic-auth

source $SCRIPT/suite_template

_setup () {
start_rabbitmq
}
_save_logs() {
save_container_logs rabbitmq
}
_teardown() {
kill_container_if_exist rabbitmq
}
run
6 changes: 6 additions & 0 deletions deps/rabbitmq_management/selenium/test/definitions/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,11 @@ RABBITMQ_SERVER_ROOT = ../../../../../
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

start-rabbitmq: ## Start RabbitMQ
@(docker kill rabbitmq >/dev/null 2>&1 && docker rm rabbitmq)
@(gmake --directory=${RABBITMQ_SERVER_ROOT} run-broker \
RABBITMQ_ENABLED_PLUGINS="rabbitmq_management" \
RABBITMQ_CONFIG_FILE=deps/rabbitmq_management/selenium/test/basic-auth/rabbitmq.config)

test: ## Run tests interactively e.g. make test [TEST=landing.js]
@(RABBITMQ_URL=http://localhost:15672 RUN_LOCAL=true SCREENSHOTS_DIR=${PWD}/../../screens npm test $(PWD)/$(TEST))
20 changes: 20 additions & 0 deletions deps/rabbitmq_management/selenium/test/limits/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
.ONESHELL:# single shell invocation for all lines in the recipe
SHELL = bash# we depend on bash expansion for e.g. queue patterns

.DEFAULT_GOAL = help
RABBITMQ_SERVER_ROOT = ../../../../../


### TARGETS ###

help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

start-rabbitmq: ## Start RabbitMQ
@(docker kill rabbitmq >/dev/null 2>&1 && docker rm rabbitmq)
@(gmake --directory=${RABBITMQ_SERVER_ROOT} run-broker \
RABBITMQ_ENABLED_PLUGINS="rabbitmq_management" \
RABBITMQ_CONFIG_FILE=deps/rabbitmq_management/selenium/test/basic-auth/rabbitmq.config)

test: ## Run tests interactively e.g. make test [TEST=landing.js]
@(RABBITMQ_URL=http://localhost:15672 RUN_LOCAL=true SCREENSHOTS_DIR=${PWD}/../../screens npm test $(PWD)/$(TEST))
42 changes: 42 additions & 0 deletions deps/rabbitmq_management/selenium/test/limits/users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
const { By, Key, until, Builder } = require('selenium-webdriver')
require('chromedriver')
const assert = require('assert')
const { buildDriver, goToHome, captureScreensFor, teardown, delay } = require('../utils')

const LoginPage = require('../pageobjects/LoginPage')
const OverviewPage = require('../pageobjects/OverviewPage')
const AdminTab = require('../pageobjects/AdminTab')
const LimitsAdminTab = require('../pageobjects/LimitsAdminTab')

describe('user_limits', function () {
let login
let overview
let captureScreen

before(async function () {
driver = buildDriver()
await goToHome(driver)
login = new LoginPage(driver)
overview = new OverviewPage(driver)
adminTab = new AdminTab(driver)
limitsSection = new LimitsAdminTab(driver)
captureScreen = captureScreensFor(driver, __filename)

await login.login('guest', 'guest')
if (!await overview.isLoaded()) {
throw new Error('Failed to login')
}

})

it('when there are no limits', async function () {
await overview.clickOnAdminTab()
await adminTab.clickOnLimits()
assert.equal(0, (await limitsSection.list_user_limits()).length)
})


after(async function () {
await teardown(driver, this, captureScreen)
})
})
43 changes: 43 additions & 0 deletions deps/rabbitmq_management/selenium/test/limits/virtual-hosts.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const { By, Key, until, Builder } = require('selenium-webdriver')
require('chromedriver')
const assert = require('assert')
const { buildDriver, goToHome, captureScreensFor, teardown, delay } = require('../utils')

const LoginPage = require('../pageobjects/LoginPage')
const OverviewPage = require('../pageobjects/OverviewPage')
const AdminTab = require('../pageobjects/AdminTab')
const LimitsAdminTab = require('../pageobjects/LimitsAdminTab')

describe('virtual_host_limits', function () {
let login
let overview
let captureScreen

before(async function () {
driver = buildDriver()
await goToHome(driver)
login = new LoginPage(driver)
overview = new OverviewPage(driver)
adminTab = new AdminTab(driver)
limitsSection = new LimitsAdminTab(driver)
captureScreen = captureScreensFor(driver, __filename)

await login.login('guest', 'guest')
if (!await overview.isLoaded()) {
throw new Error('Failed to login')
}

})

it('when there are no limits', async function () {
await overview.clickOnAdminTab()
await adminTab.clickOnLimits()
assert.equal(0, (await limitsSection.list_virtual_host_limits()).length)

})


after(async function () {
await teardown(driver, this, captureScreen)
})
})
15 changes: 14 additions & 1 deletion deps/rabbitmq_management/selenium/test/pageobjects/AdminTab.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,28 @@ const { By, Key, until, Builder } = require('selenium-webdriver')

const OverviewPage = require('./OverviewPage')

const SELECTED_ADMIN_TAB = By.css('div#menu ul#tabs li a.selected[href="#/users"]')

const ALL_USERS_SECTION = By.css('div#users-section')
const USER_LINK = By.css('div#menu ul#tabs li a[href="#/connections"]')

const FILTER_USER = By.css('input#users-name')
const CHECKBOX_REGEX = By.css('input#filter-regex-mode')
const FILTERED_USER = By.css('span.filter-highlight')

// RHM : RIGHT HAND MENU
const USERS_ON_RHM = By.css('div#rhs ul li a[href="#/users"]')
const LIMITS_ON_RHM = By.css('div#rhs ul li a[href="#/limits"]')

module.exports = class AdminTab extends OverviewPage {
async isLoaded () {
await this.waitForDisplayed(ADMIN_TAB)
await this.waitForDisplayed(SELECTED_ADMIN_TAB)
}
async clickOnUsers() {
await this.click(USERS_ON_RHM)
}
async clickOnLimits() {
await this.click(LIMITS_ON_RHM)
}

async searchForUser(user, regex = false) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const { By, Key, until, Builder } = require('selenium-webdriver')

const AdminTab = require('./AdminTab')

const SELECTED_LIMITS_ON_RHM = By.css('div#rhs ul li a[href="#/limits"]')

const VIRTUAL_HOST_LIMITS_SECTION = By.css('div#main div#virtual-host-limits')
const USER_LIMITS_SECTION = By.css('div#main div#user-limits')

const VIRTUAL_HOST_LIMITS_TABLE_ROWS = By.css('div#main div#virtual-host-limits table.list tbody tr')
const USER_LIMITS_TABLE_ROWS = By.css('div#main div#user-limits table.list tbody tr')

module.exports = class LimitsAdminTab extends AdminTab {
async isLoaded () {
await this.waitForDisplayed(SELECTED_LIMITS_ON_RHM)
}

async list_virtual_host_limits() {
await this.click(VIRTUAL_HOST_LIMITS_SECTION)
try
{
rows = driver.findElements(VIRTUAL_HOST_LIMITS_TABLE_ROWS)
return rows
} catch (NoSuchElement) {
return Promise.resolve([])
}
}
async list_user_limits() {
await this.click(USER_LIMITS_SECTION)
try
{
rows = driver.findElements(VIRTUAL_HOST_LIMITS_TABLE_ROWS)
return rows
} catch (NoSuchElement) {
return Promise.resolve([])
}
}

}

0 comments on commit 91805d0

Please sign in to comment.