Skip to content

Commit 4bc4a9e

Browse files
Test feature flags
1 parent bbb9aea commit 4bc4a9e

File tree

7 files changed

+129
-3
lines changed

7 files changed

+129
-3
lines changed

selenium/full-suite-management-ui

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ mgt/exchanges.sh
2222
mgt/limits.sh
2323
mgt/mgt-only-exchanges.sh
2424
mgt/queuesAndStreams.sh
25+
mgt/feature-flags.sh

selenium/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"author": "",
1313
"license": "ISC",
1414
"dependencies": {
15-
"chromedriver": "^137.0",
15+
"chromedriver": "^139.0",
1616
"ejs": "^3.1.8",
1717
"express": "^4.18.2",
1818
"geckodriver": "^3.0.2",

selenium/short-suite-management-ui

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ mgt/exchanges.sh
88
mgt/queuesAndStreams.sh
99
mgt/limits.sh
1010
mgt/amqp10-connections.sh
11-
mgt/mqtt-connections.sh
11+
mgt/mqtt-connections.sh
12+
mgt/feature-flags.sh
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/usr/bin/env bash
2+
3+
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
4+
5+
TEST_CASES_PATH=/feature-flags
6+
TEST_CONFIG_PATH=/basic-auth
7+
8+
source $SCRIPT/../../bin/suite_template $@
9+
run
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
const { By, Key, until, Builder } = require('selenium-webdriver')
2+
require('chromedriver')
3+
const assert = require('assert')
4+
const { buildDriver, goToHome, captureScreensFor, teardown, findTableRow, delay } = require('../utils')
5+
6+
const LoginPage = require('../pageobjects/LoginPage')
7+
const OverviewPage = require('../pageobjects/OverviewPage')
8+
const AdminTab = require('../pageobjects/AdminTab')
9+
const FeatureFlagsAdminTab = require('../pageobjects/FeatureFlagsAdminTab')
10+
11+
describe('Feature flags in Admin tab', function () {
12+
let login
13+
let overview
14+
let ffTab
15+
let captureScreen
16+
17+
before(async function () {
18+
driver = buildDriver()
19+
await goToHome(driver)
20+
login = new LoginPage(driver)
21+
overview = new OverviewPage(driver)
22+
adminTab = new AdminTab(driver)
23+
ffTab = new FeatureFlagsAdminTab(driver)
24+
captureScreen = captureScreensFor(driver, __filename)
25+
26+
await login.login('guest', 'guest')
27+
if (!await overview.isLoaded()) {
28+
throw new Error('Failed to login')
29+
}
30+
await overview.selectRefreshOption("Do not refresh")
31+
})
32+
33+
it('it has at least one feature flag', async function () {
34+
await overview.clickOnAdminTab()
35+
await adminTab.clickOnFeatureFlags()
36+
let ffTable = await ffTab.getAll()
37+
assert(ffTable.length > 0)
38+
})
39+
it('it has khepri_db feature flag', async function () {
40+
await overview.clickOnAdminTab()
41+
await adminTab.clickOnFeatureFlags()
42+
let ffTable = await ffTab.getAll()
43+
assert(findTableRow(ffTable, function(row) {
44+
return row[0] === 'khepri_db'
45+
}))
46+
})
47+
48+
49+
after(async function () {
50+
await teardown(driver, this, captureScreen)
51+
})
52+
})

selenium/test/pageobjects/BasePage.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,14 @@ module.exports = class BasePage {
3333
this.polling = parseInt(process.env.SELENIUM_POLLING) || 500 // how frequent selenium searches for an element
3434
this.interactionDelay = parseInt(process.env.SELENIUM_INTERACTION_DELAY) || 0 // slow down interactions (when rabbit is behind a http proxy)
3535
}
36-
36+
async ensureSectionIsVisible(section) {
37+
let classes = await this.driver.findElement(section).getAttribute("class")
38+
if (classes.search('section-visible') < 0) {
39+
return this.click(section)
40+
} else {
41+
return Promise.resolve(true)
42+
}
43+
}
3744
async goTo(path) {
3845
return driver.get(d.baseUrl + path)
3946
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
const { By, Key, until, Builder } = require('selenium-webdriver')
2+
const { delay } = require('../utils')
3+
4+
const AdminTab = require('./AdminTab')
5+
6+
7+
const FEATURE_FLAGS_SECTION = By.css('div#main div#feature-flags')
8+
const FEATURE_FLAGS_TABLE = By.css('div#main div#feature-flags div#ff-table-section table')
9+
10+
const ACCEPT_ENABLE_EXPERIMENTAL_FEATURE_FLAG = By.css('p#ff-exp-ack-supported')
11+
const CONFIRM_ENABLE_EXPERIMENTAL_FEATURE_FLAG = By.css('button#ff-exp-confirm')
12+
13+
14+
module.exports = class FeatureFlagsAdminTab extends AdminTab {
15+
async isLoaded () {
16+
await this.waitForDisplayed(FEATURE_FLAGS_SECTION)
17+
}
18+
19+
async getAll() {
20+
await this.ensureSectionIsVisible(FEATURE_FLAGS_SECTION)
21+
try
22+
{
23+
return this.getTable(FEATURE_FLAGS_TABLE, 4)
24+
} catch (NoSuchElement) {
25+
return Promise.resolve([])
26+
}
27+
}
28+
29+
async enable(name) {
30+
let state = await this.getState(name)
31+
if (!await state.isSelected()) {
32+
await this.driver.findElement(this.getParentCheckboxLocator(name)).click()
33+
await delay(1000)
34+
const dialog = await this.driver.wait(
35+
until.elementLocated(By.css('dialog#ff-exp-dialog[open]')),
36+
10000 // 10 seconds timeout
37+
);
38+
39+
await dialog.findElement(ACCEPT_ENABLE_EXPERIMENTAL_FEATURE_FLAG).click()
40+
await dialog.findElement(CONFIRM_ENABLE_EXPERIMENTAL_FEATURE_FLAG).click()
41+
return delay(1000)
42+
}else {
43+
return Promise.resolve()
44+
}
45+
}
46+
getCheckboxLocator(name) {
47+
return By.css('div#ff-table-section table input#ff-checkbox-' + name)
48+
}
49+
getParentCheckboxLocator(name) {
50+
return By.css('div#ff-table-section table td#ff-td-' + name)
51+
}
52+
async getState(name) {
53+
return this.driver.findElement(this.getCheckboxLocator(name))
54+
}
55+
56+
}

0 commit comments

Comments
 (0)