From 5a5794021cb1c2e1a70fb33b2aff8bf44ff215a0 Mon Sep 17 00:00:00 2001 From: Domenico Francesco Bruscino Date: Mon, 8 Feb 2021 16:48:56 +0100 Subject: [PATCH] ARTEMIS-3044 Add Artemis web console tests --- docs/hacking-guide/en/tests.md | 12 ++ tests/smoke-tests/pom.xml | 28 ++++ .../servers/console/jolokia-access.xml | 36 +++++ .../tests/smoke/console/ConsoleTest.java | 130 ++++++++++++++++++ .../tests/smoke/console/LoginTest.java | 48 +++++++ .../tests/smoke/console/QueuesTest.java | 102 ++++++++++++++ .../smoke/console/pages/ArtemisPage.java | 78 +++++++++++ .../smoke/console/pages/ConsolePage.java | 59 ++++++++ .../tests/smoke/console/pages/LoginPage.java | 54 ++++++++ .../smoke/console/pages/MessagePage.java | 33 +++++ .../tests/smoke/console/pages/QueuePage.java | 35 +++++ .../tests/smoke/console/pages/QueuesPage.java | 56 ++++++++ .../tests/smoke/console/pages/StatusPage.java | 26 ++++ 13 files changed, 697 insertions(+) create mode 100644 tests/smoke-tests/src/main/resources/servers/console/jolokia-access.xml create mode 100644 tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/ConsoleTest.java create mode 100644 tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/LoginTest.java create mode 100644 tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/QueuesTest.java create mode 100644 tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ArtemisPage.java create mode 100644 tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ConsolePage.java create mode 100644 tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/LoginPage.java create mode 100644 tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/MessagePage.java create mode 100644 tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuePage.java create mode 100644 tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuesPage.java create mode 100644 tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/StatusPage.java diff --git a/docs/hacking-guide/en/tests.md b/docs/hacking-guide/en/tests.md index 07fe73ae0c..bfac7a8ef3 100644 --- a/docs/hacking-guide/en/tests.md +++ b/docs/hacking-guide/en/tests.md @@ -39,6 +39,18 @@ This class does all the setup of a simple server automatically and provides the is an example based on `org.apache.activemq.artemis.tests.integration.SimpleTest` but extends `org.apache.activemq.artemis.tests.util.SingleServerTestBase` which eliminates all the setup and class variables which are provided by `SingleServerTestBase` itself. +## Writing Web Tests + +The broker has a web console based on [hawtio](https://github.com/hawtio/hawtio) and the `smoke-tests` are used to test it. +For instance, the [ConsoleTest](https://github.com/apache/activemq-artemis/blob/master/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/dnsswitch/ConsoleTest.java) +checks the web console using the [selenium framework](https://github.com/SeleniumHQ/selenium). +The tests can be executed using the local browsers or the [webdriver testcontainers](https://www.testcontainers.org/modules/webdriver_containers). +To use your local Google Chrome browser download the [WebDriver for Chrome](https://chromedriver.chromium.org/) and set +the `webdriver.chrome.driver` property with the WebDriver path, ie `-Dwebdriver.chrome.driver=/home/artemis/chromedriver_linux64/chromedriver`. +To use your local Firefox browser download the [WebDriver for Firefox](https://github.com/mozilla/geckodriver/) and set +the `webdriver.gecko.driver` property with the WebDriver path, ie `-Dwebdriver.gecko.driver=/home/artemis/geckodriver-linux64/geckodriver`. +To use the [webdriver testcontainers](https://www.testcontainers.org/modules/webdriver_containers) install docker. + ## Keys for writing good tests ### Use log.debug diff --git a/tests/smoke-tests/pom.xml b/tests/smoke-tests/pom.xml index f4eec12db5..3f82f34048 100644 --- a/tests/smoke-tests/pom.xml +++ b/tests/smoke-tests/pom.xml @@ -132,6 +132,18 @@ test + + org.seleniumhq.selenium + selenium-java + 3.14.0 + test + + + org.testcontainers + selenium + 1.15.1 + test + @@ -140,6 +152,22 @@ org.apache.activemq artemis-maven-plugin + + test-compile + create-create-console + + create + + + amq + admin + admin + false + false + ${basedir}/target/console + ${basedir}/target/classes/servers/console + + test-compile create0 diff --git a/tests/smoke-tests/src/main/resources/servers/console/jolokia-access.xml b/tests/smoke-tests/src/main/resources/servers/console/jolokia-access.xml new file mode 100644 index 0000000000..3b0124d6e3 --- /dev/null +++ b/tests/smoke-tests/src/main/resources/servers/console/jolokia-access.xml @@ -0,0 +1,36 @@ + + + + + + + + + *://localhost* + *://host.testcontainers.internal* + + + + + + + + \ No newline at end of file diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/ConsoleTest.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/ConsoleTest.java new file mode 100644 index 0000000000..cec3f494f7 --- /dev/null +++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/ConsoleTest.java @@ -0,0 +1,130 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.tests.smoke.console; + +import java.time.Duration; +import java.util.Arrays; +import java.util.Collection; +import java.util.function.Function; + +import org.apache.activemq.artemis.tests.smoke.common.SmokeTestBase; +import org.apache.activemq.artemis.util.ServerUtil; +import org.junit.After; +import org.junit.Assume; +import org.junit.Before; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.openqa.selenium.MutableCapabilities; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.firefox.FirefoxOptions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.testcontainers.Testcontainers; +import org.testcontainers.containers.BrowserWebDriverContainer; + +@RunWith(Parameterized.class) +public abstract class ConsoleTest extends SmokeTestBase { + protected static final String SERVER_NAME = "console"; + protected static final String SERVER_ADMIN_USERNAME = "admin"; + protected static final String SERVER_ADMIN_PASSWORD = "admin"; + + protected static final int DEFAULT_TIMEOUT = 10000; + protected static final String DEFAULT_SERVER_URL = "http://localhost:8161"; + protected static final String DEFAULT_CONTAINER_SERVER_URL = "http://host.testcontainers.internal:8161"; + protected static final String DEFAULT_CONSOLE_BRAND_IMAGE = "/activemq-branding/plugin/img/activemq.png"; + + protected WebDriver driver; + protected MutableCapabilities browserOptions; + protected String serverUrl = DEFAULT_SERVER_URL; + private BrowserWebDriverContainer browserWebDriverContainer; + + @Parameterized.Parameters(name = "browserOptions={0}") + public static Collection getParameters() { + return Arrays.asList(new Object[][]{{new ChromeOptions()}, {new FirefoxOptions()}}); + } + + public ConsoleTest(MutableCapabilities browserOptions) { + this.browserOptions = browserOptions; + } + + @Before + public void before() throws Exception { + cleanupData(SERVER_NAME); + disableCheckThread(); + startServer(SERVER_NAME, 0, 0); + ServerUtil.waitForServerToStart(0, SERVER_ADMIN_USERNAME, SERVER_ADMIN_PASSWORD, 30000); + + + // The ConsoleTest checks the web console using the selenium framework[1]. + // The tests can be executed using the local browsers or the webdriver testcontainers[2]. + // To use your local Google Chrome browser download the WebDriver for Chrome[3] and set + // the `webdriver.chrome.driver` property with the WebDriver path, ie + // -Dwebdriver.chrome.driver=/home/developer/chromedriver_linux64/chromedriver + // To use your local Firefox browser download the WebDriver for Firefox[4] and set + // the `webdriver.gecko.driver` property with the WebDriver path, ie + // -Dwebdriver.gecko.driver=/home/developer/geckodriver-v0.28.0-linux64/geckodriver + // To use the webdriver testcontainers[2] install docker. + // + // [1] https://github.com/SeleniumHQ/selenium + // [2] https://www.testcontainers.org/modules/webdriver_containers + // [3] https://chromedriver.chromium.org/ + // [4] https://github.com/mozilla/geckodriver/ + + try { + if (ChromeOptions.class.equals(browserOptions.getClass()) && + System.getProperty("webdriver.chrome.driver") != null) { + driver = new ChromeDriver((ChromeOptions)browserOptions); + } else if (FirefoxOptions.class.equals(browserOptions.getClass()) && + System.getProperty("webdriver.gecko.driver") != null) { + driver = new FirefoxDriver((FirefoxOptions)browserOptions); + } else { + serverUrl = DEFAULT_CONTAINER_SERVER_URL; + Testcontainers.exposeHostPorts(8161); + browserWebDriverContainer = new BrowserWebDriverContainer().withCapabilities(this.browserOptions); + browserWebDriverContainer.start(); + driver = browserWebDriverContainer.getWebDriver(); + } + } catch (Exception e) { + Assume.assumeNoException("Error on loading the web driver", e); + } + + // Wait for server console + WebDriverWait loadWebDriverWait = new WebDriverWait( + driver, Duration.ofMillis(30000).getSeconds()); + + loadWebDriverWait.until((Function) webDriver -> { + try { + webDriver.get(serverUrl + "/console"); + return true; + } catch (Exception ignore) { + return false; + } + }); + } + + @After + public void stopWebDriver() { + if (browserWebDriverContainer != null) { + browserWebDriverContainer.stop(); + } else if (driver != null) { + driver.close(); + } + } +} diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/LoginTest.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/LoginTest.java new file mode 100644 index 0000000000..147b5b5683 --- /dev/null +++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/LoginTest.java @@ -0,0 +1,48 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.tests.smoke.console; + +import org.apache.activemq.artemis.tests.smoke.console.pages.LoginPage; +import org.apache.activemq.artemis.tests.smoke.console.pages.StatusPage; +import org.junit.Test; +import org.openqa.selenium.MutableCapabilities; + +public class LoginTest extends ConsoleTest { + + public LoginTest(MutableCapabilities browserOptions) { + super(browserOptions); + } + + @Test + public void testLogin() { + LoginPage loginPage = new LoginPage(driver); + StatusPage statusPage = loginPage.loginValidUser( + SERVER_ADMIN_USERNAME, SERVER_ADMIN_PASSWORD, DEFAULT_TIMEOUT); + + assertEquals(SERVER_ADMIN_USERNAME, statusPage.getUser()); + } + + @Test + public void testLoginBrand() { + String expectedBrandImage = serverUrl + System.getProperty( + "artemis.console.brand.image", DEFAULT_CONSOLE_BRAND_IMAGE); + + LoginPage loginPage = new LoginPage(driver); + assertEquals(expectedBrandImage, loginPage.getBrandImage(DEFAULT_TIMEOUT)); + } +} diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/QueuesTest.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/QueuesTest.java new file mode 100644 index 0000000000..185ccd6003 --- /dev/null +++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/QueuesTest.java @@ -0,0 +1,102 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.tests.smoke.console; + +import org.apache.activemq.artemis.cli.commands.ActionContext; +import org.apache.activemq.artemis.cli.commands.messages.Consumer; +import org.apache.activemq.artemis.cli.commands.messages.Producer; +import org.apache.activemq.artemis.tests.smoke.console.pages.LoginPage; +import org.apache.activemq.artemis.tests.smoke.console.pages.MessagePage; +import org.apache.activemq.artemis.tests.smoke.console.pages.QueuePage; +import org.apache.activemq.artemis.tests.smoke.console.pages.QueuesPage; +import org.apache.activemq.artemis.tests.smoke.console.pages.StatusPage; +import org.apache.activemq.artemis.utils.Wait; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.openqa.selenium.MutableCapabilities; + +@RunWith(Parameterized.class) +public class QueuesTest extends ConsoleTest { + + public QueuesTest(MutableCapabilities browserOptions) { + super(browserOptions); + } + + @Test + public void testDefaultQueues() throws Exception { + LoginPage loginPage = new LoginPage(driver); + StatusPage statusPage = loginPage.loginValidUser( + SERVER_ADMIN_USERNAME, SERVER_ADMIN_PASSWORD, DEFAULT_TIMEOUT); + QueuesPage queuesPage = statusPage.getQueuesPage(DEFAULT_TIMEOUT); + + Wait.assertEquals(1, () -> queuesPage.countQueue("DLQ")); + assertEquals(0, queuesPage.getMessagesCount("DLQ")); + + Wait.assertEquals(1, () -> queuesPage.countQueue("ExpiryQueue")); + assertEquals(0, queuesPage.getMessagesCount("ExpiryQueue")); + } + + @Test + public void testAutoCreatedQueue() throws Exception { + final int messages = 1; + final String queueName = "TEST"; + final String messageText = "TEST"; + + LoginPage loginPage = new LoginPage(driver); + StatusPage statusPage = loginPage.loginValidUser( + SERVER_ADMIN_USERNAME, SERVER_ADMIN_PASSWORD, DEFAULT_TIMEOUT); + QueuesPage beforeQueuesPage = statusPage.getQueuesPage(DEFAULT_TIMEOUT); + Wait.assertEquals(1, () -> beforeQueuesPage.countQueue("DLQ")); + Wait.assertEquals(0, () -> beforeQueuesPage.countQueue(queueName)); + + Producer producer = new Producer(); + producer.setUser(SERVER_ADMIN_USERNAME); + producer.setPassword(SERVER_ADMIN_PASSWORD); + producer.setDestination(queueName); + producer.setMessageCount(messages); + producer.setMessage(messageText); + producer.setSilentInput(true); + producer.execute(new ActionContext()); + + beforeQueuesPage.refresh(DEFAULT_TIMEOUT); + Wait.assertEquals(1, () -> beforeQueuesPage.countQueue("DLQ")); + Wait.assertEquals(1, () -> beforeQueuesPage.countQueue(queueName)); + assertEquals(messages, beforeQueuesPage.getMessagesCount(queueName)); + + QueuePage queuePage = beforeQueuesPage.getQueuePage(queueName, DEFAULT_TIMEOUT); + MessagePage messagePage = queuePage.getMessagePage(0, DEFAULT_TIMEOUT); + assertEquals(messageText, messagePage.getMessageText()); + + Consumer consumer = new Consumer(); + consumer.setUser(SERVER_ADMIN_USERNAME); + consumer.setPassword(SERVER_ADMIN_PASSWORD); + consumer.setDestination(queueName); + consumer.setMessageCount(messages); + consumer.setSilentInput(true); + consumer.setReceiveTimeout(2000); + consumer.setBreakOnNull(true); + int consumed = (int)consumer.execute(new ActionContext()); + + assertEquals(messages, consumed); + + QueuesPage afterQueuesPage = messagePage.getQueuesPage(DEFAULT_TIMEOUT); + Wait.assertEquals(1, () -> afterQueuesPage.countQueue("DLQ")); + Wait.assertEquals(0, () -> afterQueuesPage.countQueue(queueName)); + } +} diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ArtemisPage.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ArtemisPage.java new file mode 100644 index 0000000000..26ac432be3 --- /dev/null +++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ArtemisPage.java @@ -0,0 +1,78 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.tests.smoke.console.pages; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public abstract class ArtemisPage extends ConsolePage { + private By logoutLocator = By.cssSelector("a[ng-focus='authService.logout()']"); + private By dropdownMenuLocator = By.id("moreDropdown"); + private By userDropdownMenuLocator = By.id("userDropdownMenu"); + private By queuesMenuItemLocator = By.xpath("//a[contains(text(),'Queues')]"); + + public ArtemisPage(WebDriver driver) { + super(driver); + } + + public String getUser() { + WebElement logoutWebElement = driver.findElement(logoutLocator); + WebElement userDropdownMenuWebElement = driver.findElement(userDropdownMenuLocator); + + if (!logoutWebElement.isDisplayed()) { + userDropdownMenuWebElement.click(); + } + + String logoutText = logoutWebElement.getText(); + Pattern pattern = Pattern.compile("Logout \\(([^\\)]+)\\)"); + Matcher matcher = pattern.matcher(logoutText); + + userDropdownMenuWebElement.click(); + + if (matcher.find()) { + return matcher.group(1); + } + + return null; + } + + public QueuesPage getQueuesPage(int timeout) { + WebElement queuesMenuItem = driver.findElement(queuesMenuItemLocator); + + if (!queuesMenuItem.isDisplayed()) { + List dropdownMenu = driver.findElements(dropdownMenuLocator); + + if (dropdownMenu.size() > 0) { + dropdownMenu.get(0).click(); + } else { + waitForElementToBeVisible(queuesMenuItemLocator, timeout); + } + } + + queuesMenuItem.click(); + + waitForElementToBeVisible(By.xpath("//h1[contains(text(),'Browse Queues')]"), timeout); + + return new QueuesPage(driver); + } +} diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ConsolePage.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ConsolePage.java new file mode 100644 index 0000000000..5eefe6f57a --- /dev/null +++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ConsolePage.java @@ -0,0 +1,59 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.tests.smoke.console.pages; + +import java.time.Duration; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +public abstract class ConsolePage { + protected WebDriver driver; + + private By titleLocator = By.tagName("h1"); + + public ConsolePage(WebDriver driver) { + this.driver = driver; + } + + public void refresh(int timeout) { + driver.navigate().refresh(); + + waitForLoading(timeout); + } + + public void waitForLoading(int timeout) { + waitForElementToBeVisible(titleLocator, timeout); + } + + public void waitForElementToBeVisible(final By elementLocator, int timeout) { + WebDriverWait loadWebDriverWait = new WebDriverWait( + driver, Duration.ofMillis(timeout).getSeconds()); + + loadWebDriverWait.until(ExpectedConditions.visibilityOfElementLocated(elementLocator)); + } + + public void waitForElementToBeClickable(final By elementLocator, int timeout) { + WebDriverWait loadWebDriverWait = new WebDriverWait( + driver, Duration.ofMillis(timeout).getSeconds()); + + loadWebDriverWait.until(ExpectedConditions.elementToBeClickable(elementLocator)); + } +} diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/LoginPage.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/LoginPage.java new file mode 100644 index 0000000000..fd88a212cf --- /dev/null +++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/LoginPage.java @@ -0,0 +1,54 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.tests.smoke.console.pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; + +public class LoginPage extends ConsolePage { + private By brandLocator = By.xpath("//img[@class='pf-c-brand']"); + private By usernameLocator = By.id("username"); + private By passwordLocator = By.id("password"); + private By loginButtonLocator = By.xpath("//button[@type='submit']"); + private By userDropdownMenuLocator = By.id("userDropdownMenu"); + + public LoginPage(WebDriver driver) { + super(driver); + } + + public String getBrandImage(int timeout) { + waitForElementToBeVisible(brandLocator, timeout); + + return driver.findElement(brandLocator).getAttribute("src"); + } + + public StatusPage loginValidUser(String username, String password, int timeout) { + waitForElementToBeVisible(usernameLocator, timeout); + waitForElementToBeVisible(passwordLocator, timeout); + waitForElementToBeClickable(loginButtonLocator, timeout); + + driver.findElement(usernameLocator).sendKeys(username); + driver.findElement(passwordLocator).sendKeys(password); + driver.findElement(loginButtonLocator).click(); + + waitForElementToBeVisible(userDropdownMenuLocator, timeout); + waitForElementToBeVisible(By.xpath("//a[contains(text(),'Status')]"), timeout); + + return new StatusPage(driver); + } +} diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/MessagePage.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/MessagePage.java new file mode 100644 index 0000000000..6f623c58aa --- /dev/null +++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/MessagePage.java @@ -0,0 +1,33 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.tests.smoke.console.pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; + +public class MessagePage extends ArtemisPage { + private By messageTextLocator = By.cssSelector("span[role='presentation']"); + + public MessagePage(WebDriver driver) { + super(driver); + } + + public String getMessageText() { + return driver.findElement(messageTextLocator).getText(); + } +} diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuePage.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuePage.java new file mode 100644 index 0000000000..30d2e6dc89 --- /dev/null +++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuePage.java @@ -0,0 +1,35 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.tests.smoke.console.pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; + +public class QueuePage extends ArtemisPage { + public QueuePage(WebDriver driver) { + super(driver); + } + + public MessagePage getMessagePage(int index, int timeout) { + driver.findElements(By.cssSelector("button[title='Show message']")).get(index).click(); + + waitForElementToBeVisible(By.cssSelector("span[role='presentation']"), timeout); + + return new MessagePage(driver); + } +} diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuesPage.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuesPage.java new file mode 100644 index 0000000000..2bd8b85b77 --- /dev/null +++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuesPage.java @@ -0,0 +1,56 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.tests.smoke.console.pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public class QueuesPage extends ArtemisPage { + private static final int MESSAGES_COUNT_COLUMN = 10; + + public QueuesPage(WebDriver driver) { + super(driver); + } + + public QueuePage getQueuePage(String name, int timeout) { + WebElement messagesCountWebElement = driver.findElement(getQueueLocator(name)). + findElements(By.tagName("td")).get(MESSAGES_COUNT_COLUMN); + + messagesCountWebElement.findElement(By.tagName("a")).click(); + + waitForElementToBeVisible(By.xpath("//h1[contains(text(),'Browse Queue')]"), timeout); + + return new QueuePage(driver); + } + + public int countQueue(String name) { + return driver.findElements(getQueueLocator(name)).size(); + } + + public int getMessagesCount(String name) { + WebElement messagesCountWebElement = driver.findElement(getQueueLocator(name)). + findElements(By.tagName("td")).get(MESSAGES_COUNT_COLUMN); + + return Integer.parseInt(messagesCountWebElement.findElement(By.tagName("a")).getText()); + } + + private By getQueueLocator(String name) { + return By.xpath("//tr[td/span/a='" + name + "']"); + } +} diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/StatusPage.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/StatusPage.java new file mode 100644 index 0000000000..293b7027e6 --- /dev/null +++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/StatusPage.java @@ -0,0 +1,26 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.tests.smoke.console.pages; + +import org.openqa.selenium.WebDriver; + +public class StatusPage extends ArtemisPage { + public StatusPage(WebDriver driver) { + super(driver); + } +}