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
2 changes: 1 addition & 1 deletion deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@
</div>
<% } %>

<div class="section-hidden">
<div class="section-hidden" id="delete">
<h2>Delete</h2>
<div class="hider">
<form action="#/queues" method="delete" class="confirm-queue inline-form">
Expand Down
6 changes: 3 additions & 3 deletions deps/rabbitmq_management/priv/www/js/tmpl/queues.ejs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@

<h1>Queues</h1>
<div class="section">
<div class="section" id="queues-paging-section">
<%= paginate_ui(queues, 'queues') %>
</div>
<div class="updatable">
<div class="updatable" id="queues-table-section">
<% if (queues.items.length > 0) { %>
<table class="list">
<thead>
Expand Down Expand Up @@ -222,7 +222,7 @@
</div>

<% if (ac.canAccessVhosts()) { %>
<div class="section-hidden">
<div class="section-hidden" id="add-new-queue">
<h2>Add a new queue</h2>
<div class="hider">
<form action="#/queues" method="put">
Expand Down
1 change: 1 addition & 0 deletions selenium/full-suite-management-ui
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ mgt/definitions.sh
mgt/exchanges.sh
mgt/limits.sh
mgt/mgt-only-exchanges.sh
mgt/queuesAndStreams.sh
1 change: 1 addition & 0 deletions selenium/short-suite-management-ui
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ authnz-mgt/oauth-with-uaa.sh
authnz-mgt/oauth-idp-initiated-with-uaa-and-prefix.sh
mgt/vhosts.sh
mgt/exchanges.sh
mgt/queuesAndStreams.sh
mgt/limits.sh
mgt/amqp10-connections.sh
9 changes: 9 additions & 0 deletions selenium/suites/mgt/queuesAndStreams.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/usr/bin/env bash

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

TEST_CASES_PATH=/queuesAndStreams
TEST_CONFIG_PATH=/basic-auth

source $SCRIPT/../../bin/suite_template $@
run
16 changes: 16 additions & 0 deletions selenium/test/pageobjects/BasePage.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ module.exports = class BasePage {
async selectRefreshOption(option) {
return this.selectOption(SELECT_REFRESH, option)
}

async waitForOverviewTab() {
await this.driver.sleep(250)
return this.waitForDisplayed(OVERVIEW_TAB)
Expand Down Expand Up @@ -119,6 +120,11 @@ module.exports = class BasePage {
const select = await new Select(selectable)
return select.selectByVisibleText(text)
}
async selectOptionByValue(locator, value) {
let selectable = await this.waitForDisplayed(locator)
const select = await new Select(selectable)
return select.selectByValue(value)
}

async getSelectableVhosts() {
const table_model = await this.getSelectableOptions(SELECT_VHOSTS)
Expand Down Expand Up @@ -152,6 +158,16 @@ module.exports = class BasePage {
} catch(e) {
return Promise.resolve(false)
}
/*
let element = await driver.findElement(FORM_POPUP)
return this.driver.wait(until.elementIsVisible(element), this.timeout / 2,
'Timed out after [timeout=' + this.timeout + ';polling=' + this.polling + '] awaiting till visible ' + element,
this.polling / 2).then(function onWarningVisible(e) {
return Promise.resolve(true)
}, function onError(e) {
return Promise.resolve(false)
})
*/
}

async isPopupWarningNotDisplayed() {
Expand Down
26 changes: 26 additions & 0 deletions selenium/test/pageobjects/QueuePage.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
const { By, Key, until, Builder } = require('selenium-webdriver')

const BasePage = require('./BasePage')


const QUEUE_NAME = By.css('div#main h1 b')

const DELETE_SECTION = By.css('div#main div#delete')
const DELETE_BUTTON = By.css('div#main div#delete input[type=submit]')

module.exports = class QueuePage extends BasePage {
async isLoaded() {
return this.waitForDisplayed(QUEUE_NAME)
}
async getName() {
return this.getText(QUEUE_NAME)
}
async ensureDeleteQueueSectionIsVisible() {
await this.click(DELETE_SECTION)
return driver.findElement(DELETE_SECTION).isDisplayed()
}
async deleteQueue() {
await this.click(DELETE_BUTTON)
return this.acceptAlert()
}
}
50 changes: 50 additions & 0 deletions selenium/test/pageobjects/QueuesAndStreamsPage.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
const { By, Key, until, Builder } = require('selenium-webdriver')

const { delay } = require('../utils')

const BasePage = require('./BasePage')


const PAGING_SECTION = By.css('div#queues-paging-section')
const PAGING_SECTION_HEADER = By.css('div#queues-paging-section h2')
const ADD_NEW_QUEUE_SECTION = By.css('div#add-new-queue')
const FILTER_BY_QUEUE_NAME = By.css('div.filter input#queues-name')

const TABLE_SECTION = By.css('div#queues-table-section table')
const FORM_QUEUE_NAME = By.css('div#add-new-queue form input[name="name"]')
const FORM_QUEUE_TYPE = By.css('div#add-new-queue form select[name="queuetype"]')
const ADD_BUTTON = By.css('div#add-new-queue form input[type=submit]')

module.exports = class QueuesAndStreamsPage extends BasePage {
async isLoaded () {
return this.waitForDisplayed(PAGING_SECTION)
}
async getPagingSectionHeaderText() {
return this.getText(PAGING_SECTION_HEADER)
}
async getQueuesTable(firstNColumns) {
return this.getTable(TABLE_SECTION, firstNColumns)
}
async clickOnQueue(vhost, name) {
return this.click(By.css(
"div#queues-table-section table.list tbody tr td a[href='#/queues/" + vhost + "/" + name + "']"))
}
async ensureAddQueueSectionIsVisible() {
await this.click(ADD_NEW_QUEUE_SECTION)
return driver.findElement(ADD_NEW_QUEUE_SECTION).isDisplayed()
}
async ensureAllQueuesSectionIsVisible() {
await this.click(PAGING_SECTION)
return driver.findElement(PAGING_SECTION).isDisplayed()
}
async fillInAddNewQueue(queueDetails) {
await this.selectOptionByValue(FORM_QUEUE_TYPE, queueDetails.type)
await delay(1000)
await this.sendKeys(FORM_QUEUE_NAME, queueDetails.name)
return this.click(ADD_BUTTON)
}
async filterQueues(filterValue) {
await this.waitForDisplayed(FILTER_BY_QUEUE_NAME)
return this.sendKeys(FILTER_BY_QUEUE_NAME, filterValue + Key.RETURN)
}
}
26 changes: 26 additions & 0 deletions selenium/test/pageobjects/StreamPage.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
const { By, Key, until, Builder } = require('selenium-webdriver')

const BasePage = require('./BasePage')


const STREAM_NAME = By.css('div#main h1 b')
const DELETE_SECTION = By.css('div#main div#delete')
const DELETE_BUTTON = By.css('div#main div#delete input[type=submit]')


module.exports = class StreamPage extends BasePage {
async isLoaded() {
return this.waitForDisplayed(STREAM_NAME)
}
async getName() {
return this.getText(STREAM_NAME)
}
async ensureDeleteQueueSectionIsVisible() {
await this.click(DELETE_SECTION)
return driver.findElement(DELETE_SECTION).isDisplayed()
}
async deleteStream() {
await this.click(DELETE_BUTTON)
return this.acceptAlert()
}
}
67 changes: 67 additions & 0 deletions selenium/test/queuesAndStreams/add-classic.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
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 QueuesAndStreamsPage = require('../pageobjects/QueuesAndStreamsPage')
const QueuePage = require('../pageobjects/QueuePage')
const StreamPage = require('../pageobjects/StreamPage')

describe('Classic queues', function () {
let login
let queuesAndStreams
let queue
let stream
let overview
let captureScreen
let queueName

before(async function () {
driver = buildDriver()
await goToHome(driver)
login = new LoginPage(driver)
overview = new OverviewPage(driver)
queuesAndStreams = new QueuesAndStreamsPage(driver)
queue = new QueuePage(driver)
stream = new StreamPage(driver)
captureScreen = captureScreensFor(driver, __filename)

await login.login('management', 'guest')
if (!await overview.isLoaded()) {
throw new Error('Failed to login')
}
await overview.selectRefreshOption("Do not refresh")
await overview.clickOnQueuesTab()

queueName = "test_" + Math.floor(Math.random() * 1000)
})

it('add classic queue and view it', async function () {
await queuesAndStreams.ensureAddQueueSectionIsVisible()

await queuesAndStreams.fillInAddNewQueue({"name" : queueName, "type" : "classic"})
await delay(5000)
await queuesAndStreams.filterQueues(queueName)
await delay(2000)
let table = await queuesAndStreams.getQueuesTable(5)
assert.equal(1, table.length)
assert.equal(table[0][0], '/')
assert.equal(table[0][1], queueName)
assert.equal(table[0][2], 'classic')
assert.equal(table[0][4], 'running')

await queuesAndStreams.clickOnQueue("%2F", queueName)
await queue.isLoaded()
assert.equal(queueName, await queue.getName())

})

after(async function () {
await queue.ensureDeleteQueueSectionIsVisible()
await queue.deleteQueue()

await teardown(driver, this, captureScreen)
})
})
64 changes: 64 additions & 0 deletions selenium/test/queuesAndStreams/add-quorum.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
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 QueuesAndStreamsPage = require('../pageobjects/QueuesAndStreamsPage')
const QueuePage = require('../pageobjects/QueuePage')
const StreamPage = require('../pageobjects/StreamPage')

describe('Quorum queues', function () {
let login
let queuesAndStreams
let queue
let stream
let overview
let captureScreen

before(async function () {
driver = buildDriver()
await goToHome(driver)
login = new LoginPage(driver)
overview = new OverviewPage(driver)
queuesAndStreams = new QueuesAndStreamsPage(driver)
queue = new QueuePage(driver)
stream = new StreamPage(driver)
captureScreen = captureScreensFor(driver, __filename)

await login.login('management', 'guest')
if (!await overview.isLoaded()) {
throw new Error('Failed to login')
}
await overview.selectRefreshOption("Do not refresh")
await overview.clickOnQueuesTab()

})
it('add quorum queue and view it', async function () {
await queuesAndStreams.ensureAddQueueSectionIsVisible()
let queueName = "test_" + Math.floor(Math.random() * 1000)
await queuesAndStreams.fillInAddNewQueue({"name" : queueName, "type" : "quorum"})
await delay(5000)
await queuesAndStreams.filterQueues(queueName)
await delay(2000)
let table = await queuesAndStreams.getQueuesTable(5)
assert.equal(1, table.length)
assert.equal(table[0][0], '/')
assert.equal(table[0][1], queueName)
assert.equal(table[0][2], 'quorum')
assert.equal(table[0][4], 'running')

await queuesAndStreams.clickOnQueue("%2F", queueName)
await queue.isLoaded()
assert.equal(queueName, await queue.getName())

})

after(async function () {
await queue.ensureDeleteQueueSectionIsVisible()
await queue.deleteQueue()

await teardown(driver, this, captureScreen)
})
})
65 changes: 65 additions & 0 deletions selenium/test/queuesAndStreams/add-stream.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
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 QueuesAndStreamsPage = require('../pageobjects/QueuesAndStreamsPage')
const QueuePage = require('../pageobjects/QueuePage')
const StreamPage = require('../pageobjects/StreamPage')

describe('Streams', function () {
let login
let queuesAndStreams
let queue
let stream
let overview
let captureScreen

before(async function () {
driver = buildDriver()
await goToHome(driver)
login = new LoginPage(driver)
overview = new OverviewPage(driver)
queuesAndStreams = new QueuesAndStreamsPage(driver)
queue = new QueuePage(driver)
stream = new StreamPage(driver)
captureScreen = captureScreensFor(driver, __filename)

await login.login('management', 'guest')
if (!await overview.isLoaded()) {
throw new Error('Failed to login')
}
await overview.selectRefreshOption("Do not refresh")
await overview.clickOnQueuesTab()

})
it('add stream and view it', async function () {
await queuesAndStreams.ensureAddQueueSectionIsVisible()
let queueName = "test_" + Math.floor(Math.random() * 1000)
await queuesAndStreams.fillInAddNewQueue({"name" : queueName, "type" : "stream"})
await delay(5000)
await queuesAndStreams.filterQueues(queueName)
await delay(2000)
let table = await queuesAndStreams.getQueuesTable(5)
assert.equal(1, table.length)
assert.equal(table[0][0], '/')
assert.equal(table[0][1], queueName)
assert.equal(table[0][2], 'stream')
assert.equal(table[0][4], 'running')

await queuesAndStreams.clickOnQueue("%2F", queueName)
await stream.isLoaded()
assert.equal(queueName, await stream.getName())

})


after(async function () {
await stream.ensureDeleteQueueSectionIsVisible()
await stream.deleteStream()

await teardown(driver, this, captureScreen)
})
})
Loading
Loading