diff --git a/modules/integration/pom.xml b/modules/integration/pom.xml index 035ddede..d503ea18 100644 --- a/modules/integration/pom.xml +++ b/modules/integration/pom.xml @@ -33,11 +33,11 @@ pom - tests-artifacts + tests-common - tests-integration - tests-ui-integration - tests-platform + + + tests-iot-web-ui diff --git a/modules/integration/tests-common/pom.xml b/modules/integration/tests-common/pom.xml index 048d805a..a9d2d3cc 100644 --- a/modules/integration/tests-common/pom.xml +++ b/modules/integration/tests-common/pom.xml @@ -31,9 +31,9 @@ WSO2 IoT Server - Integration Test Common - admin-clients - integration-test-utils - ui-pages + + + web-ui-pages diff --git a/modules/integration/tests-common/web-ui-pages/pom.xml b/modules/integration/tests-common/web-ui-pages/pom.xml new file mode 100644 index 00000000..614d9398 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/pom.xml @@ -0,0 +1,116 @@ + + + + + + + org.wso2.iot + tests-common + 1.0.0-SNAPSHOT + ../pom.xml + + + 4.0.0 + org.wso2.carbon.iot.integration.ui.pages + jar + WSO2 IoT Server - Integration Test Common Web UI Pages + + + + org.wso2.carbon.automationutils + org.wso2.carbon.integration.common.admin.client + compile + + + org.wso2.carbon + org.wso2.carbon.user.mgt.stub + + + org.wso2.carbon + org.wso2.carbon.logging.view.stub + + + org.wso2.carbon + org.wso2.carbon.ndatasource.stub + + + org.wso2.carbon + org.wso2.carbon.server.admin.stub + + + org.wso2.carbon + org.wso2.carbon.throttle.stub + + + org.wso2.carbon + org.wso2.carbon.tenant.mgt.stub + + + org.wso2.carbon + org.wso2.carbon.application.mgt.stub + + + org.wso2.carbon + org.wso2.carbon.security.mgt.stub + + + org.wso2.carbon + org.wso2.carbon.identity.user.profile.stub + + + org.wso2.carbon + org.wso2.carbon.identity.user.profile.stub + + + org.slf4j + slf4j-api + + + + + org.wso2.carbon.automation + org.wso2.carbon.automation.extensions + compile + + + org.slf4j + slf4j-api + + + + + org.testng + testng + compile + + + org.wso2.carbon.automation + org.wso2.carbon.automation.test.utils + compile + + + org.wso2.carbon.automation + org.wso2.carbon.automation.engine + compile + + + + diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/IOTIntegrationUIBaseTestCase.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/IOTIntegrationUIBaseTestCase.java new file mode 100644 index 00000000..c2998991 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/IOTIntegrationUIBaseTestCase.java @@ -0,0 +1,57 @@ +package org.wso2.iot.integration.ui.pages; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; +import org.wso2.carbon.automation.engine.context.AutomationContext; +import org.wso2.carbon.automation.engine.context.TestUserMode; +import org.wso2.carbon.automation.test.utils.common.HomePageGenerator; +import org.wso2.carbon.integration.common.admin.client.AuthenticatorClient; + +import javax.xml.stream.XMLStreamException; +import javax.xml.xpath.XPathExpressionException; +import java.io.IOException; +import java.rmi.RemoteException; + +/** + * Created by menaka on 1/19/16. + * + */ +public class IOTIntegrationUIBaseTestCase { + + private static final Log log = LogFactory.getLog(IOTIntegrationUIBaseTestCase.class); + protected AutomationContext automationContext; + + protected void init() throws IOException, XMLStreamException, XPathExpressionException { + automationContext = new AutomationContext("IOT", "iot001", TestUserMode.SUPER_TENANT_ADMIN); + } + + protected String getBackendURL() throws XPathExpressionException { + return automationContext.getContextUrls().getBackEndUrl(); + } + + protected String getWebAppURL() throws XPathExpressionException { + return automationContext.getContextUrls().getWebAppURL(); + } + + protected String getSessionCookie(AutomationContext context) + throws RemoteException, XPathExpressionException, + LoginAuthenticationExceptionException { + AuthenticatorClient authenticationAdminClient = new AuthenticatorClient(context.getContextUrls().getBackEndUrl()); + String sessionCookie = authenticationAdminClient.login(automationContext.getSuperTenant(). + getTenantAdmin().getUserName(), automationContext.getSuperTenant(). + getTenantAdmin().getPassword(), + automationContext.getDefaultInstance().getHosts().get("default")); + + return sessionCookie; + } + + protected String getServiceURL() throws XPathExpressionException { + String serviceURL = automationContext.getContextUrls().getServiceUrl(); + return automationContext.getContextUrls().getServiceUrl(); + } + + protected String getLoginURL() throws XPathExpressionException { + return HomePageGenerator.getProductHomeURL(automationContext); + } +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/UIElementMapper.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/UIElementMapper.java new file mode 100644 index 00000000..c3840973 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/UIElementMapper.java @@ -0,0 +1,51 @@ +package org.wso2.iot.integration.ui.pages; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +/** + * Read the mapper file and load the UI elements into Properties object. + */ +public class UIElementMapper { + + public static final Properties uiPropertiies = new Properties(); + private static final Log log = LogFactory.getLog(UIElementMapper.class); + private static UIElementMapper instance; + + private UIElementMapper(){ + + } + + public static synchronized UIElementMapper getInstance() throws IOException { + if (instance == null) { + setStream(); + instance = new UIElementMapper(); + } + return instance; + } + + public static Properties setStream() throws IOException { + + InputStream inputStream = UIElementMapper.class.getResourceAsStream("/mapper.properties"); + + if (inputStream.available() > 0) { + uiPropertiies.load(inputStream); + inputStream.close(); + return uiPropertiies; + } + return null; + } + + public String getElement (String key) { + if (uiPropertiies != null) { + return uiPropertiies.getProperty(key); + } + return null; + } + + +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/enroll/EnrollDevicePage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/enroll/EnrollDevicePage.java new file mode 100644 index 00000000..43b3bbb3 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/enroll/EnrollDevicePage.java @@ -0,0 +1,23 @@ +package org.wso2.iot.integration.ui.pages.enroll; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openqa.selenium.WebDriver; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +import java.io.IOException; + +/** + * Device Enrollment page for new user + */ +public class EnrollDevicePage { + private static final Log log = LogFactory.getLog(EnrollDevicePage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public EnrollDevicePage(WebDriver driver) throws IOException{ + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + } + +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/groups/DeviceAddGroupPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/groups/DeviceAddGroupPage.java new file mode 100644 index 00000000..86e90196 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/groups/DeviceAddGroupPage.java @@ -0,0 +1,69 @@ +package org.wso2.iot.integration.ui.pages.groups; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +import java.io.IOException; + +/** + * Add group page of iot server + */ +public class DeviceAddGroupPage { + + private static final Log log = LogFactory.getLog(DeviceAddGroupPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public DeviceAddGroupPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + WebDriverWait webDriverWait = new WebDriverWait(driver, 10); + + if (!driver.findElement(By.xpath + (uiElementMapper.getElement("iot.device.group.addNewGroup.xpath"))).getText().contains("ADD NEW GROUP")){ + throw new IllegalStateException("This is not the Add Group page"); + } + } + + + public DeviceGroupsPage addNewGroup (String name, String description) throws Exception{ + + WebElement nameField = driver.findElement(By.id( + uiElementMapper.getElement("iot.device.group.addGroupForm.name.id"))); + WebElement descriptionField = driver.findElement(By.id( + uiElementMapper.getElement("iot.device.group.addGroupForm.description.id"))); + WebElement addGroupButton = driver.findElement(By.id( + uiElementMapper.getElement("iot.device.group.addGroupForm.addButton.id"))); + + nameField.sendKeys(name); + descriptionField.sendKeys(description); + + addGroupButton.click(); + + return new DeviceGroupsPage(driver); + + } + + public String submitEmptyForm() { + WebElement nameField = driver.findElement(By.id( + uiElementMapper.getElement("iot.device.group.addGroupForm.name.id"))); + WebElement descriptionField = driver.findElement(By.id( + uiElementMapper.getElement("iot.device.group.addGroupForm.description.id"))); + WebElement addGroupButton = driver.findElement(By.id( + uiElementMapper.getElement("iot.device.group.addGroupForm.addButton.id"))); + + nameField.sendKeys(""); + descriptionField.sendKeys(""); + + addGroupButton.click(); + + return driver.findElement(By.xpath( + uiElementMapper.getElement("iot.device.groups.add.emptyfrom.error"))).getText(); + } + +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/groups/DeviceGroupsPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/groups/DeviceGroupsPage.java new file mode 100644 index 00000000..89f0685b --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/groups/DeviceGroupsPage.java @@ -0,0 +1,58 @@ +package org.wso2.iot.integration.ui.pages.groups; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by menaka on 1/24/16. + * + */ +public class DeviceGroupsPage { + private static final Log log = LogFactory.getLog(DeviceGroupsPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public DeviceGroupsPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + WebDriverWait webDriverWait = new WebDriverWait(driver, 10); + + if (!webDriverWait.until(ExpectedConditions.textToBePresentInElement(driver.findElement(By.xpath( + uiElementMapper.getElement("iot.device.groups.view.header.xpath"))), "GROUPS"))) { + throw new IllegalStateException("This is not the Groups page"); + } + } + + public DeviceAddGroupPage addNewGroup() throws Exception { + WebElement addNewGroupBtn = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.device.viewGroup.empty.addGroup.xpath"))); + addNewGroupBtn.click(); + return new DeviceAddGroupPage(driver); + } + + public boolean isGroupCreated (String groupName) { + WebElement table = driver.findElement(By.id(uiElementMapper.getElement("iot.device.table.id"))); + List allGroupNames = table.findElements(By.tagName("h4")); + List groupsList = new ArrayList<>(); + + for (WebElement name : allGroupNames) { + groupsList.add(name.getText()); + + } + + return groupsList.contains(groupName); + } + + + +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTAdminDashboard.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTAdminDashboard.java new file mode 100644 index 00000000..83ff939c --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTAdminDashboard.java @@ -0,0 +1,63 @@ +package org.wso2.iot.integration.ui.pages.home; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.groups.DeviceAddGroupPage; +import org.wso2.iot.integration.ui.pages.groups.DeviceGroupsPage; +import org.wso2.iot.integration.ui.pages.login.LoginPage; +import org.wso2.iot.integration.ui.pages.uesr.AddUserPage; +import org.wso2.iot.integration.ui.pages.uesr.UserListingPage; + +import java.io.IOException; + +public class IOTAdminDashboard { + + private static final Log log = LogFactory.getLog(IOTHomePage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public IOTAdminDashboard(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + log.info(driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.dashboard.title.xpath"))). + getText()); + // Check that we're on the right page. + if (!driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.dashboard.title.xpath"))). + getText().contains("DASHBOARD")) { + throw new IllegalStateException("This is not the home page"); + } + } + + public LoginPage logout() throws IOException { + driver.findElement(By.xpath("/html/body/header/div/div[2]/a/span[1]")).click(); + WebElement logout = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.logout.link.xpath"))); + logout.click(); + return new LoginPage(driver); + } + + public DeviceAddGroupPage addGroup() throws Exception { + driver.findElement(By.xpath(uiElementMapper.getElement("iot.device.group.addButton.xpath"))).click(); + return new DeviceAddGroupPage(driver); + } + + public DeviceGroupsPage viewGroups() throws Exception { + driver.findElement(By.xpath(uiElementMapper.getElement("iot.device.group.viewButton.xpath"))).click(); + return new DeviceGroupsPage(driver); + } + + public AddUserPage addUser() throws Exception { + driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.user.addButton.xpath"))).click(); + return new AddUserPage(driver); + } + + public UserListingPage viewUser() throws Exception { + driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.user.viewButton.xpath"))).click(); + return new UserListingPage(driver); + } + + //ToDo : Need to add device and policy methods +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTHomePage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTHomePage.java new file mode 100644 index 00000000..0f81ce5c --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTHomePage.java @@ -0,0 +1,71 @@ +package org.wso2.iot.integration.ui.pages.home; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.enroll.EnrollDevicePage; +import org.wso2.iot.integration.ui.pages.groups.DeviceAddGroupPage; +import org.wso2.iot.integration.ui.pages.login.LoginPage; + +import java.io.IOException; + +/** + * In IOT server, this page is the Devices page for users. + * For admin this is the dashboard. + */ +public class IOTHomePage { + private static final Log log = LogFactory.getLog(IOTHomePage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public IOTHomePage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + WebDriverWait wait = new WebDriverWait(driver, 10); + if (!wait.until(ExpectedConditions.titleIs("Device Management | IoT Server"))) { + throw new IllegalStateException("This is not the home page"); + } + } + + public boolean checkUserName() throws Exception{ + String name = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.registered.name"))).getText(); + return name.contains(uiElementMapper.getElement("iot.user.login.username")); + } + + //To logout + public LoginPage logout() throws Exception { + driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.registered.name"))).click(); + WebElement logout = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.logout.link.xpath"))); + logout.click(); + return new LoginPage(driver); + } + + //To enroll devices as user + public EnrollDevicePage enrollNewDevice() throws Exception{ + driver.findElement(By.xpath("iot.home.page.uuf-menu.xpath")).click(); + driver.findElement(By.xpath("iot.home.page.uuf-menu.devicemgt.xpath")).click(); + driver.findElement(By.xpath("iot.home.enrollDevice.xpath")).click(); + return new EnrollDevicePage(driver); + } + + //To add new Device groups as user + + public void goToGroupMgt() throws Exception { + driver.findElement(By.xpath("iot.home.page.uuf-menu.xpath")).click(); + driver.findElement(By.xpath("iot.home.page.uuf-menu.groupmgt.xpath")).click(); + } + + public DeviceAddGroupPage addNewGroup() throws Exception { + driver.findElement(By.xpath("iot.device.viewGroup.empty.addGroup.xpath")).click(); + return new DeviceAddGroupPage(driver); + } + + //ToDo : To add policies + +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/login/LoginPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/login/LoginPage.java new file mode 100644 index 00000000..fde006cd --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/login/LoginPage.java @@ -0,0 +1,67 @@ +package org.wso2.iot.integration.ui.pages.login; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard; +import org.wso2.iot.integration.ui.pages.home.IOTHomePage; +import org.wso2.iot.integration.ui.pages.uesr.NewUserRegisterPage; + +import java.io.IOException; + +/** + * Login page of the iot server + * + */ +public class LoginPage { + private static final Log log = LogFactory.getLog(LoginPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public LoginPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + WebDriverWait webDriverWait = new WebDriverWait(driver, 10); + + if (!webDriverWait.until(ExpectedConditions.titleContains("Login | IoT Server"))) { + throw new IllegalStateException("This is not the Login page"); + } + } + + public IOTHomePage loginAsUser(String username, String password) throws IOException { + log.info("Login as " + username); + WebElement userNameField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.login.input.username.xpath"))); + WebElement passwordField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.login.input.password.xpath"))); + userNameField.sendKeys(username); + passwordField.sendKeys(password); + driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.login.button.xpath"))).click(); + return new IOTHomePage(driver); + } + + public IOTAdminDashboard loginAsAdmin(String username, String password) throws IOException { + log.info("Login as " + username); + WebElement userNameField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.login.input.username.xpath"))); + WebElement passwordField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.login.input.password.xpath"))); + userNameField.sendKeys(username); + passwordField.sendKeys(password); + driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.login.button.xpath"))).click(); + return new IOTAdminDashboard(driver); + } + + public NewUserRegisterPage registerNewUser() throws IOException { + WebElement registerLink = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.register.link.xpath"))); + registerLink.click(); + return new NewUserRegisterPage(driver); + } + +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/AddUserPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/AddUserPage.java new file mode 100644 index 00000000..e1e07241 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/AddUserPage.java @@ -0,0 +1,53 @@ +package org.wso2.iot.integration.ui.pages.uesr; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +public class AddUserPage { + private static final Log log = LogFactory.getLog(AddUserPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public AddUserPage(WebDriver driver) throws Exception { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + + WebDriverWait webDriverWait = new WebDriverWait(driver, 10); + if (!webDriverWait.until(ExpectedConditions.titleContains("User Management | IoT Server"))){ + throw new IllegalStateException("This is not the Add User page"); + } + } + + public UserAddedPage createNewUser(String userName, String firstName, String lastName, String email) throws Exception { + + WebElement userNameField = driver.findElement(By.id( + uiElementMapper.getElement("iot.admin.addUser.username.id"))); + WebElement firstNameField = driver.findElement(By.id( + uiElementMapper.getElement("iot.admin.addUser.firstName.id"))); + WebElement lastNameField = driver.findElement(By.id( + uiElementMapper.getElement("iot.admin.addUser.lastName.id"))); + WebElement emailField = driver.findElement(By.id( + uiElementMapper.getElement("iot.admin.addUser.email.id"))); + + userNameField.sendKeys(userName); + firstNameField.sendKeys(firstName); + lastNameField.sendKeys(lastName); + emailField.sendKeys(email); + + WebDriverWait wait = new WebDriverWait(driver, 10); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath( + uiElementMapper.getElement("iot.admin.addUser.add.btn.xpath")))); + + driver.findElement(By.xpath("//button[@id='add-user-btn']")).click(); + + return new UserAddedPage(driver); + } + + +} \ No newline at end of file diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/EditUserPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/EditUserPage.java new file mode 100644 index 00000000..7011cfa3 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/EditUserPage.java @@ -0,0 +1,34 @@ +package org.wso2.iot.integration.ui.pages.uesr; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +/** + * Created by menaka on 2/8/16. + * + */ +public class EditUserPage { + private static final Log log = LogFactory.getLog(EditUserPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public EditUserPage(WebDriver driver) throws Exception { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + + WebDriverWait webDriverWait = new WebDriverWait(driver, 10); + if (!webDriverWait.until(ExpectedConditions.titleContains("User Management | IoT Server"))){ + throw new IllegalStateException("This is not the Edit User page"); + } + } + + public void editUser(String password, String firstName, String lastName) { + driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.add.input.password.xpath"))); + } + +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/NewUserRegisterPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/NewUserRegisterPage.java new file mode 100644 index 00000000..7f5064c1 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/NewUserRegisterPage.java @@ -0,0 +1,58 @@ +package org.wso2.iot.integration.ui.pages.uesr; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.login.LoginPage; + +import java.io.IOException; + +/** + * Created by menaka on 1/19/16. + */ +public class NewUserRegisterPage { + private static final Log log = LogFactory.getLog(NewUserRegisterPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public NewUserRegisterPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + WebDriverWait webDriverWait = new WebDriverWait(driver, 10); + if (!webDriverWait.until(ExpectedConditions.titleContains("Register | IoT Server"))){ + throw new IllegalStateException("This is not the Register page"); + } + } + + public LoginPage addUser(String firstName, String lastName, String email, String userName, String password, + String + confirmPassword) throws IOException { + WebElement firstNameField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.firstname.xpath"))); + WebElement lastNameField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.lastname.xpath"))); + WebElement emailField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.email.xpath"))); + WebElement userNameField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.username.xpath"))); + WebElement passwordField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.password.xpath"))); + WebElement passwordConfirmationField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.confirmpassword.xpath"))); + firstNameField.sendKeys(firstName); + lastNameField.sendKeys(lastName); + emailField.sendKeys(email); + userNameField.sendKeys(userName); + passwordField.sendKeys(password); + passwordConfirmationField.sendKeys(confirmPassword); + driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.add.register.button.xpath"))).click(); + return new LoginPage(driver); + } + +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/UserAddedPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/UserAddedPage.java new file mode 100644 index 00000000..3b3149e6 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/UserAddedPage.java @@ -0,0 +1,37 @@ +package org.wso2.iot.integration.ui.pages.uesr; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +/** + * Created by menaka on 1/27/16. + * + */ +public class UserAddedPage { + private static final Log log = LogFactory.getLog(UserAddedPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public UserAddedPage(WebDriver driver) throws Exception { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + + driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.addUser.view.btn.xpath"))).click(); +// WebDriverWait webDriverWait = new WebDriverWait(driver, 10); +// if (!driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.user.added.page.subtitle.xpath"))) +// .getText().contains("User was added successfully.")){ +// throw new IllegalStateException("This is not the User Added page"); +// } + + + + } + + + +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/UserListingPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/UserListingPage.java new file mode 100644 index 00000000..1cc2a3ad --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/UserListingPage.java @@ -0,0 +1,44 @@ +package org.wso2.iot.integration.ui.pages.uesr; + +import org.apache.commons.jexl2.UnifiedJEXL; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.omg.PortableServer.THREAD_POLICY_ID; +import org.openqa.selenium.By; +import org.openqa.selenium.ElementNotVisibleException; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +public class UserListingPage { + private static final Log log = LogFactory.getLog(UserListingPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public UserListingPage(WebDriver driver) throws Exception { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + + if (!driver.findElement(By.xpath("//span[@class='page-sub-title']")) + .getText().contains("USERS")){ + throw new IllegalStateException("This is not the User Listing page"); + } + } + + public UserListingPage deleteUser() throws Exception { + WebElement deleteBtn = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.admin.deleteUser.btn.xpath"))); + if (deleteBtn!=null){ + deleteBtn.click(); + } else { + return new UserListingPage(driver); + } + driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.deleteUser.yes.link.xpath"))).click(); + Thread.sleep(1000); + driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.deleteUser.success.link.xpath"))).click(); + + return new UserListingPage(driver); + } + + +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/ViewUserPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/ViewUserPage.java new file mode 100644 index 00000000..e5c56b11 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/uesr/ViewUserPage.java @@ -0,0 +1,30 @@ +package org.wso2.iot.integration.ui.pages.uesr; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +/** + * Created by menaka on 2/8/16. + */ +public class ViewUserPage { + private static final Log log = LogFactory.getLog(ViewUserPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public ViewUserPage (WebDriver driver) throws Exception { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + + WebDriverWait webDriverWait = new WebDriverWait(driver, 10); + if (!webDriverWait.until(ExpectedConditions.titleContains("User Management | IoT Server"))){ + throw new IllegalStateException("This is not the User view page"); + } + } + + + +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/resources/mapper.properties b/modules/integration/tests-common/web-ui-pages/src/main/resources/mapper.properties new file mode 100644 index 00000000..43e319b8 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/resources/mapper.properties @@ -0,0 +1,614 @@ +# +# Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +# +# WSO2 Inc. 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. +# + +# User registration and login details----------------------------------------------------------------------------------- + +iot.user.add.firstname=firstname +iot.user.add.lastname=lastname +iot.user.add.username=username +iot.user.add.password=password +iot.user.add.email=username@wso2.com + +iot.user.login.username=username +iot.user.login.password=password + +# User registration and login ui---------------------------------------------------------------------------------------- + +iot.user.registered.name=/html/body/header/div/div[2]/a/span[1] + +iot.user.add.input.firstname.xpath=//*[@id="first_name"] +iot.user.add.input.lastname.xpath=//*[@id="last_name"] +iot.user.add.input.username.xpath=//*[@id="user_name"] +iot.user.add.input.password.xpath=//*[@id="password"] +iot.user.add.input.confirmpassword.xpath=//*[@id="password_confirmation"] +iot.user.add.input.email.xpath=//*[@id="email"] +iot.user.add.register.button.xpath=//*[@id="add-user-btn"] + + +iot.user.login.input.username.xpath=//*[@id="signInForm"]/div[1]/input +iot.user.login.input.password.xpath=//*[@id="signInForm"]/div[2]/input +iot.user.login.button.xpath=//*[@id="signInForm"]/div[3]/button + +iot.user.register.link.xpath=//*[@id="register-link-wrapper"]/a + +# Devices page elements ------------------------------------------------------------------------------------------------ + +iot.home.page.uuf-menu.xpath=//*[@id="_uuf-navmenu-button"] + +iot.home.page.uuf-menu.devicemgt.xpath=//*[@id="_uuf-navmenu-items"]/ul/li[1]/a +iot.home.page.uuf-menu.groupmgt.xpath=//*[@id="_uuf-navmenu-items"]/ul/li[2]/a +iot.home.page.uuf-menu.policymgt.xpath=//*[@id="_uuf-navmenu-items"]/ul/li[3]/a + +iot.home.page.title.xpath=/html/body/div[3]/div[1]/div/span +iot.admin.dashboard.title.xpath=/html/body/div[3]/div[1]/div/span + +iot.home.enrollDevice.xpath=//*[@id="ast-container"]/div/p/a +iot.user.logout.link.xpath=/html/body/header/div/div[2]/ul/li[3]/a + +# Register page error elements ----------------------------------------------------------------------------------------- + +iot.user.register.firstname.error=first_name-error +iot.user.register.lastname.error=last_name-error +iot.user.register.username.error=user_name-error +iot.user.register.email.error=email-error +iot.user.register.password.error=password-error +iot.user.register.confirmPassword.error=password_confirmation-error + +# Incorrect login Credentials ------------------------------------------------------------------------------------------ +iot.user.login.username.error=username-error +iot.user.login.password.error=password-error +iot.user.login.incorrect.xpath=/html/body/div/div/div/div[1] +iot.user.login.shortPassword=password-error + + +iot.dashboard.device.div.xpath=/html/body/div[3]/div[7]/div[1]/div/div/div[1] + +#Grouping --------------------------------------------------------------- + +iot.device.group.addButton.xpath=/html/body/div[3]/div[2]/div[1]/div[2]/div/div/div[2]/div[2]/span[2]/a[2] +iot.device.group.viewButton.xpath=/html/body/div[3]/div[2]/div[1]/div[2]/div/div/div[2]/div[2]/span[2]/a[1] + +iot.device.group.addNewGroup.xpath=/html/body/div[3]/div/div[1]/div/p[1] + +iot.device.viewGroup.empty.addGroup.xpath=//*[@id="ast-container"]/div/p/a + +iot.device.group.addGroupForm.name.id=name +iot.device.group.addGroupForm.description.id=description +iot.device.group.addGroupForm.addButton.id=add-group-btn + +iot.device.groups.view.header.xpath=/html/body/div[3]/div[1]/div/span + +iot.device.groups.add.emptyfrom.error=/html/body/div[3]/div/div[1]/div/span/strong + +iot.device.table.id=group-grid + +#Add user -------------------------------------------------------------------------------------------------------------- +iot.admin.user.addButton.xpath=/html/body/div[3]/div[2]/div[1]/div[3]/div/div/div[2]/div[2]/span[2]/a[2]/span/i[2] +iot.admin.user.viewButton.xpath=/html/body/div[3]/div[2]/div[1]/div[3]/div/div/div[2]/div[2]/span[2]/a[1]/span/i[2] + +iot.admin.user.added.page.subtitle.xpath="//p[@class='page-sub-title']" + + +iot.admin.addUser.username.id=username +iot.admin.addUser.firstName.id=firstname +iot.admin.addUser.lastName.id=lastname +iot.admin.addUser.email.id=emailAddress +iot.admin.addUser.roles.id=roles + +iot.admin.addUser.add.btn.xpath=//*[@id="add-user-btn"] +iot.admin.addUser.view.btn.xpath=//*[@id="user-created-msg"]/div/button + +iot.admin.deleteUser.btn.xpath=//*[@id="user1"]/td[5]/a[3]/span[1]/i[2] +iot.admin.deleteUser.yes.link.xpath=//a[@id="remove-user-yes-link"] +iot.admin.deleteUser.success.link.xpath=//a[@id="remove-user-success-link"] + +iot.admin.addUser.formError.xpath=//*[@id="user-create-error-msg"] + +#----- User view page heading ---------------------------------------- + +iot.user.view.page.heading.xpath=/html/body/div[3]/div[1]/div/label + +#----- Editing a user------------------------------------------------- + +iot.admin.viewUser.btn.xpath=//*[@id="user1"]/td[5]/a[1]/span[1]/i[2] +iot.admin.editUser.btn.xpath=//*[@id="userEditBtn"] +iot.admin.editUser.edit.btn.xpath=//*[@id="add-user-btn"] + +#----------------------------------------------------------------------------------------------------------------------- +iot.user.delete.button=//*[@id="inosh"]/td[5]/a[3] +iot.user.delete.button.confirm=remove-user-yes-link +iot.user.delete.button.success=remove-user-success-link +iot.roles.add.button=appbar-btn- +iot.roles.add.rolename.input=rolename +iot.roles.add.role.button=add-role-btn +iot.roles.add.role.created.msg.div=role-created-msg +iot.roles.update.rolename.input=rolename +iot.roles.update.role.button=add-role-btn +iot.roles.update.role.created.msg.div=role-created-msg +iot.roles.update.role.created.success.msg=ROLE WAS UPDATED SUCCESSFULLY +iot.configuration.android.tab.identifier=id('androidConfigLink') +iot.configuration.widows.tab.identifier=id('windowsConfigLink') +iot.configuration.ios.tab.identifier=id('iosConfigLink') +iot.configuration.general.tab.identifier=id('generalConfigLink') +iot.configuration.general.input.monitoringFr.identifier=id('monitoring-config-frequency') +iot.configuration.general.button.save.identifier=id('monitoring-config-frequency') +iot.configuration.saved.lable.identifier=id('record-created-msg') +iot.configuration.saved.lable.val=Please click "Go back to configurations", if you wish to save another configuration or click "Exit" to complete the process and go back to the dashboard. +iot.configuration.saved.button.back.identifier=id('btnBack') +iot.configuration.saved.button.back.val=Go back to configurations +iot.configuration.saved.button.exit.identifier=id('btnExit') +iot.configuration.saved.button.exit.val=Exit +iot.configuration.android.select.identifier=id('android-config-notifier') +iot.configuration.android.input.identifier=id('android-config-notifier-frequency') +iot.configuration.android.button.save.identifier=id('save-android-btn') +iot.configuration.windows.input.identifier=id('windows-config-notifier-frequency') +iot.configuration.windows.button.save.identifier=id('save-windows-btn') +iot.notification.bubble.identifier=notification-bubble +iot.notification.unread.identifier=unReadNotifications +iot.notification.all.identifier=allNotifications + + + + +app.sign.in.button=button.btn +app.redMine.login.button.name=login +app.redMine.issue.button=New issue +app.redMine.issue.subject=issue_subject +app.redMine.issue.description=issue_description +app.redMine.issue.submit=commit +app.AddNew.App.link=Add New Application +new.app.add.app.name=applicationName +new.app.add.app.key=applicationKey +new.app.add.app.icon=icon +new.app.add.app.Description=applicationDescription +new.app.add.app.edit.Description=appDescriptionEdit_textarea +new.app.add.app.type=applicationType +app.issue.version.id=issue_fixed_version_id +app.database.db.environment.id=rssInstances +app.database.db.environment.user=js_db_user +app.database.db.environment.template=js_db_template +new.app.add.repository.type=repositoryType +create.new.app.button=appcreation +app.homepage.search.textBox=search +app.first.element.of.home.page=/html/body/div/div/article/section/ul/li[2]/div/h2/a/b +app.overview.page.app.type.id=apptype +app.overview.page.app.description.id=description +app.overview.page.repository.type.id=repotype +app.overview.page.app.owner.id=appOwner +app.overview.page.app.key.xpath=/html/body/div/div/article/section[2]/div/div/div/p +app.add.member.link=Add Members +app.add.member.name=allUsersList +app.invite.users= btn_nvite_users +app.add.add.to.list.button=addToListBtn +app.add.branch.link=Create Branch +app.add.second.branch.xpath=(//a[contains(text(),'Branch')])[2] +app.add.branch.version=create_branchtrunk +app.add.branch.button.xpath=//input[@value='Create Branch'] +app.add.branch.two.button.xpath=(//input[@value='Create Branch'])[2] +app.navigate.Link=Repos & Builds +app.navigate.Governance.page.link=menu_governance +app.navigate.isue.page.link.id=menu_trackIssues +app.trunk.overview.xpath=/html/body/div/div/article/section[3]/div/ul/li/p/strong +app.trunk.build.status.xpath=/html/body/div/div/article/section[3]/div/ul/li[2]/p/span/strong +governance.page.firstElement.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li/div/strong +governance.page.firstElement.date.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li[2]/div[2]/form/div/input +governance.page.date.save.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li[2]/div[2]/form/div/button +governance.page.promote.key.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li[3]/div/ul/li[2]/a/span +code.completed.status=(//input[@id='registry.custom_lifecycle.checklist.option.0.item'])[last()] +code.review.status=(//input[@id='registry.custom_lifecycle.checklist.option.1.item'])[last()] +design.review.status=(//input[@id='registry.custom_lifecycle.checklist.option.2.item'])[last()] +app.application.overview.page=Overview +app.overview.page.team.details.id=userCountList +app.team.page.id=menu_userAdmin +app.add.member.page.id=btnAddMembers +app.issue.redMine.tab.link=Track Issues +app.testing.first.element.xpath=/html/body/div/div[2]/article/section/div[2]/ul[2]/li/ul/li/div/strong +app.testing.date.save.xpath=/html/body/div/div[2]/article/section/div[2]/ul[2]/li/ul/li[2]/div/form/div/button +app.testing.first.element.arrow.xpath=/html/body/div/div[2]/article/section/div[2]/ul[2]/li/ul/li[3]/div/ul/li[2]/a +app.factory.issue.total.count.xpath=/html/body/div/div[2]/article/section/section/div/ul/li[2] +app.factory.issue.item.header.id=item_list +app.factory.database.configure.page.link=Database Configurations +app.factory.new.database.link=Database +app.factory.database.name.id=databaseName +app.factory.database.password=databaseUserPassword +app.factory.database.confirm.password=confirmDatabaseUserPassword +app.factory.database.submit.button=div.buttonrow > input[name="Submit"] +app.factory.database.advance.Checkbox=advancecheckbox +app.factory.database.user.CheckBox=Username +app.factory.database.user.password=Password +app.factory.database.user.Repeat.password=repeatPassword +app.factory.database.environment.id=rssInstances +app.factory.database.user.submit.name=Submit +app.factory.database.template.name=templateName +app.factory.database.template.submit.name=Submit +app.factory.db.admin.id=menu_dbAdmin +app.factory.db.dbUser.link=DB User +app.factory.db.template.link=DB Template +app.factory.db.resources.id=dbSection +app.db.link=Db +app.db.user=wso2usr +app.db.template=wso2Temp@Development +app.factory.delete.user=Delete User +app.factory.del.template=Delete Template +app.factory.delete.Ok=Ok +app.factory.delete.db=Delete DB +app.data.source.name=datasource_name +app.data.source.description=datasource_description +app.data.source.password=datasource_password_dev +app.data.source.username=datasource_username_text_dev +app.data.source.add.button=Submit +app.property.name=property_name +app.property.type=property_type +app.property.description=property_description +app.property.value=property_value +app.factory.registry.page.link=Endpoints & Registry +app.factory.data.source.page.link=Datasources +app.db.details.id=dbSection +app.db.user.id=dbUsrSection +app.db.template.id=dbTempSection +app.factory.new.data.source.page.button=//button[@type='button'] +app.factory.api.panel.text=/html/body/div/div/article/section[3] +app.factory.sign.out.email=span.icon-chevron-down +app.factory.sing.out.text=Sign Out +app.factory.subscribe=Subscribe to APIs +app.factory.subscribe.api.element=li > div.thumbnail > a > img +app.api.select.app.name=application-list +app.api.subscribe.button=subscribe-button +app.api.api.manager.button=gotoApiManagerbtn +app.go.to.subscriptions.text=Go to My Subscriptions +app.api.manager.class.name.text=title-section +app.api.key.generate.text=Show Keys +app.api.sandbox.details.id=sandTable0 +app.api.production.details.id=prodTable0 +app.api.page.link.text=APIs +app.api.page.resource.list.id=keySection +app.factory.subscription.page=My Subscriptions +app.factory.list.view=a.icon-th-list.table_view +app.overview.link.css=/html/body/div/div[2]/article/nav/ul/li/a + + + + +login.username=username +login.password=password +login.sign.in.button=button +login.header.div=header-div + +home.dashboard.middle.text.xpath=/html/body/div[3]/div[1]/div/span +home.greg.sign.out.xpath=//*[@id="header-div"]/div[4]/div/ul/li[3]/a +home.logged.user.dev=logged-user + +jaggery.Main.tab=menu-panel-button1 +jaggery.Region1.tab=region1_manage_menu +jaggery.dashboard.middle.text=middle +add.jaggery.href=Jaggery +jaggery.war.file.upload.name=warFileName +jaggery.upload.button.name=upload +jaggery.upload.successful.message=messagebox-info +jaggery.upload.successful.button=ui-dialog-titlebar-close + + +carbon.Main.tab=menu-panel-button1 +carbon.Region1.tab=region1_manage_menu +carbon.add.href=Add +carbon.dashboard.middle.text=middle +carbon.file.upload.field=filename +carbon.upload.button=upload +carbon.upload.successful.message=messagebox-info +carbon.upload.successful.button=ui-dialog-titlebar-close + + +resource.Main.tab=menu-panel-button1 +resource.Region3.tab=region3_registry_menu +resource.browse.link=Browse +resource.dashboard.middle.text=middle +resource.detailed.view=stdView +resource.add.resource.link=Add Resource +resource.add.collection.link=Add Collection +resource.add.resource.input.field=uResourceFile +resource.add.Collection.input.field=collectionName +resource.add.Url.input.id=irFetchURL +resource.add.collection.description=colDesc +resource.add.resource.name=uResourceName +Resource.add.resource.description=description +resource.add.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td/div[2]/div[3]/div[3]/div[5]/table/tbody/tr[2]/td/form/table/tbody/tr[6]/td/input +resource.add.Url.button.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td/div[2]/div[3]/div[3]/div[5]/table/tbody/tr[3]/td/form/table/tbody/tr[6]/td/input +resource.collection.add.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td/div[2]/div[3]/div[3]/div[7]/form/table/tbody/tr[5]/td/input +resource.upload.successful.message=messagebox-info +resource.upload.successful.collection.message=messagebox-info +resource.upload.successful.button=ui-dialog-titlebar-close +resource.upload.collection.successful.close.button=/html/body/div[5]/div/div/a +resource.add.Url.Successful.close=/html/body/div[4]/div/div/a + + + +service.add.link=Service +service.dashboard.middle.text=middle +service.list.dashboard.middle.text=middle +service.add.name.id=id_Overview_Name +service.add.namespace.id=id_Overview_Namespace +service.check.save.service=Services + + +wsdl.dashboard.middle.text=middle +wsdl.list.dashboard.middle.text=middle +wsdl.add.link=WSDL +wsdl.add.url=irFetchURL +wsdl.add.name=irResourceName +wsdl.add.file.id=uResourceFile +wsdl.add.file.name.id=uResourceName + + +schema.add.link=Schema +schema.dashboard.middle.text=middle +schema.list.dashboard.middle.text=middle +schema.add.url=irFetchURL +schema.add.name=irResourceName +schema.add.schema.name.id=uResourceName + + +wsPolicy.add.link=Policy +wsPolicy.dashboard.middle.text=middle +ws.policy.list.dashboard.middle.text=middle +wsPolicy.add.url=irFetchURL +wsPolicy.add.name=irResourceName +wsPolicy.add.file.id=uResourceFile +wsPolicy.add.schema.name.id=uResourceName + + +api.add.link=API +api.dashboard.middle.text=middle +api.provider.id=id_Overview_Provider +api.name.id=id_Overview_Name +api.context.id=id_Overview_Context +api.version.id=id_Overview_Version +api.list.link=APIs + + +uri.add.link=URI +uri.add.list.id=URIs +uri.dashboard.middle.text=middle +uri.add.uri=id_Overview_URI +uri.add.uri.name=id_Overview_Name +uri.list.link=URIs + + +my.profile.region.tab.id=region5_my_identity_menu +my.profile.add.page.link=My Profiles +my.profile.dashboard.middle.text=middle +my.profile.new.profile.add.link=Add New Profile +my.profile.name.id=profile +my.profile.first.name.id=http://wso2.org/claims/givenname +my.profile.last.name.id=http://wso2.org/claims/lastname +my.profile.email.id=http://wso2.org/claims/emailaddress +my.profile.successful.save.pane=/html/body/div[3]/div/div/a + + +search.activity.link=Activities +search.activity.id=user +search.activity.name.id=path +search.activity.exists.id=activityList + + +search.page.link=Search +search.resource.name=resourcePath +search.results.id=1 +filter.search.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form[3]/table/tbody/tr/td[8]/table/tbody/tr/td/a + +users.add.new.user.link.id=Add New User +users.and.roles.link.text=Users and Roles +users.adn.roles.add.page.middle.text=middle +users.add.link.id=Users +users.add.new.user.name.id=username +users.add.new.user.password.name=password +users.add.new.user.password.retype.name=retype +users.admin.tick.name=userRoles +users.save=//input[contains(@value,'Finish')] +users.page.next.id=2 + + + + +roles.add.link.id=Roles +role.add.new.user.link.id=Add New Role +role.add.new.user.name.id=roleName +role.permission.id=ygtvspacer +role.add.user.to.role.name=org.wso2.carbon.role.assign.filter +role.search.button=td.buttonRow > input.button +role.add.ok.button.css=button[type="button"] +role.add.user.to.role.name.tick=selectedUsers +role.add.user.finish.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form[2]/table/tbody/tr[2]/td/input[2] + + +pass.word.change.link=Change My Password +pass.word.current.name=currentPassword +pass.word.new.name=newPassword +pass.word.check.name=checkPassword +pass.word.change.save.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input +password.change.dialog.xpath=/html/body/div[3]/div/div/a + + + +features.add.link=Features +repository.add.tab.text=Repository Management +repositories.table.id=_table_manage_repositories +repository.add.link.text=Add Repository +repository.url.name=_txt_repository_location_url +repository.save.id=_btn_add_repository +repository.name.id=_txt_repository_name +installed.features.tab.linkText=Installed Features +repositories.dashboard.text=middle +features.filter.id=_txt_IF_filterString +feature.checkbox.click.name=chkSelectFeaturesToUninstall +feature.uninstall.next.button.id=_btn_next_review_uninstall_features +feature.uninstall.finish.button.id=_btn_uc_finish + + + +server.shutdown.link.text=Shutdown/Restart +feature.revert.tab=Installation History +feature.find.feature.text=Available Features +feature.install.name.id=_txt_AF_filterString +feature.find.id=_btn_next_filter_repositories +feature.install.click=chkSelectFeaturesToInstall +feature.install.accept.button=_radio_af_accept_licenses + + +key.store.add.link=KeyStores +key.store.dashboard.middle.text=middle +key.store.add.new.link.text=Add New KeyStore +key.store.file.path.id=keystoreFile +key.store.password.name=ksPassword +key.store.provider.name=provider +key.store.next.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input +key.store.pass.key=keyPass +key.store.successful.xpath=/html/body/div[3]/div/div/a + + +logging.add.link=Logging +logging.dashboard.middle.text=middle +logging.update.button.id=globalLog4jUpdate +log4j.appender.update.id=appenderUpdate +log4j.global.success.xpath=/html/body/div[3]/div[2]/button +log4j.appender.sucess.xpath=/html/body/div[4]/div[2]/button + + +log4j.logger.search.id=filterText +log4j.logger.successful.button.xpath=/html/body/div[3]/div/div/a + + +notification.adding.link=Notifications +notification.dashboard.middle.text=middle +notification.add.edit.link.text=Add Subscription to Resource/Collection +notification.add.email.id=subscriptionInput + +registry.subscription.middle.text=middle +registry.subscription.path.id=subscriptionPath +registry.subscription.event.id=eventList +registry.subscription.notification.id=notificationMethodList +registry.subscription.email.id=subscriptionInput +registry.subscription.digest.id=subscriptionDigestTypeInput +registry.subscription.hsmethod.id=hierarchicalSubscriptionList +registry.subscription.subscribe.button.id=subscribeButton + + +uri.configure.add.link=URIs +uri.configure.dashboard.middle.text=middle + + + +api.configure.add.link=APIs +api.configure.dashboard.middle.text=middle + +service.configure.add.link=Services +service.configure.dashboard.middle.text=middle + +server.role.add.link=Server Roles +server.role.dashboard.middle.text=middle +server.role.add.link.text=Add New Server Role +server.role.name.id=_serverRoleName + + +add.new.tenant.link.text=Add New Tenant +tenant.role.dashboard.middle.text=middle +tenant.domain=domain +tenant.first.name=admin-firstname +tenant.last.name=admin-lastname +tenant.admin.user.name=admin +tenant.admin.password=admin-password +tenant.admin.password.repeat=admin-password-repeat +tenant.admin.email.id=admin-email +add.new.tenant.success.button=/html/body/div[3]/div/div/a +view.tenant.link=View Tenants + + + +add.new.extension.dashboard.middle.text=middle +extension.tab.id=menu-panel-button5 +extension.list.page.dashboard.middle.text=middle +extensions.add.link=Add +extension.add.text.box=uResourceFile + +life.cycle.tab.id=menu-panel-button5 +life.cycle.add.link=Lifecycles +add.new.lifecycle.dashboard.middle.text=middle +add.new.lifecycle.link.text=Add New Lifecycle +add.new.lifecycle.text.area=//*[@id="textarea"] +add.new.lifecycle.save.css=input.button.registryWriteOperation +resource.lifecycle.minimized=//*[@id="lifecycleIconMinimized"] +resource.lifecycle.add=//*[@id="lifecycleExpanded"]/div[2]/a +resource.lifecycle.add.select=//*[@id="aspect"] +resource.lifecycle.add.select.id=aspect +resource.lifecycle.add.button.add=//*[@id="add-lifecycle-div"]/form/table/tbody/tr[2]/td/input[1] +resource.lifecycle.add.button.cancel=//*[@id="add-lifecycle-div"]/form/table/tbody/tr[2]/td/input[2] + + + +artifact.add.tab.id=menu-panel-button5 +artifacts.add.link=Artifact Types +add.new.artifact.dashboard.middle.text=middle +add.new.artifact.type.link=Add new Artifact +add.new.artifact.text.area=textarea +add.new.artifact.save.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input + +add.new.artifact.dialog.box=button[type="button"] + + + +handler.add.tab.id=menu-panel-button5 +handler.add.link=Handlers +add.new.handler.dashboard.middle.text=middle +add.new.handler.link.text=Add New Handler +add.new.handler.text.area=textarea +add.new.handler.save.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input +add.new.handler.dialog.box=button[type="button"] +configure.tab.id=menu-panel-button3 + + + +manage.report.page.link=Reports +manage.report.list.dashboard.middle.text=middle +add.report.list.dashboard.middle.text=middle +add.report.name=reportName +add.report.template=reportTemplate +add.report.type=reportType +add.report.class=reportClass +report.add.link=Add Report + +life.cycle.expand.id=lifecycleIconMinimized +life.cycle.add=Add Lifecycle +life.cycle.add.option=option0 +life.cycle.add.option1=option1 +life.cycle.add.option2=option2 +life.cycle.promote=Promote +life.cycle.publish=Publish +life.cycle.stage=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td[4]/div[14]/div[3]/div[2]/table/tbody/tr/td/div[2]/table/tbody/tr[2]/td +life.cycle.promote.ok.button=button[type="\button\"] + +webapp.list.xpath=.//*[@id='menu']/ul/li[7]/ul/li[2]/ul/li[1]/a + +webapp.list.page.middle=middle +webapp.add.xpath=//*[@id="menu"]/ul/li[5]/ul/li[2]/ul/li[3]/ul/li[1]/a +webapp.add.page.middle=middle + +endpoints.tab.id=//*[@id="menu"]/ul/li[5]/ul/li[4]/ul/li[4]/a +endpoints.page.middle=middle + + +bam.dashboard.tab.id=//*[@id="menu"]/ul/li[3]/ul/li/a +bam.dashboard.signin.xpath=//*[@id="wrap"]/div[2]/div/div/h1 diff --git a/modules/integration/tests-iot-web-ui/pom.xml b/modules/integration/tests-iot-web-ui/pom.xml new file mode 100644 index 00000000..b79b49a6 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/pom.xml @@ -0,0 +1,298 @@ + + + + + org.wso2.iot + wso2iot-integration + 1.0.0-SNAPSHOT + ../pom.xml + + + 4.0.0 + WSO2 IoT Server - Integration Test UI Module + org.wso2.carbon.iot.integration.test.web.ui.integration + jar + + + + + maven-surefire-plugin + false + + + -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m + + + src/test/resources/testng-server-mgt.xml + src/test/resources/testng.xml + + + + + + + maven.test.haltafterfailure + false + + + java.io.tmpdir + ${basedir}/target/ + + + carbon.zip + + ${basedir}/../../distribution/target/wso2iots-${project.version}.zip + + + + framework.resource.location + + ${basedir}/src/test/resources/ + + + + server.list + + IOT + + + + usedefaultlisteners + false + + ${basedir}/target/security-verifier/ + ${basedir}/target/iot + ${basedir}/src/test/resources/instrumentation.txt + ${basedir}/src/test/resources/filters.txt + ${basedir}/target/iot + + ${basedir}/target + + + + maven-dependency-plugin + + + + copy-emma-dependencies + compile + + copy-dependencies + + + ${project.build.directory}/emma + jar + emma + + + + + copy-secVerifier + compile + + copy-dependencies + + + ${basedir}/target/security-verifier + aar + SecVerifier + true + + + + + unpack-mar-jks + compile + + unpack + + + + + org.wso2.iot + wso2iots + ${project.version} + zip + true + ${basedir}/target/tobeCopied/ + **/*.jks,**/*.mar,**/axis2_client.xml + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + test-jar + + + + + + maven-resources-plugin + 2.6 + + + copy-resources-jks + compile + + copy-resources + + + ${basedir}/src/test/resources/keystores/products + + + + + ${basedir}/target/tobeCopied/wso2iots-${project.version}/repository/resources/security/ + + + **/*.jks + + + + + + + copy-stratos-jks + compile + + copy-resources + + + ${basedir}/src/test/resources/keystores/stratos + + + + + ${basedir}/target/tobeCopied/wso2iots-${project.version}/repository/resources/security/ + + + **/*.jks + + + + + + + copy-axis2files + compile + + copy-resources + + + ${basedir}/src/test/resources/axis2config + + + + + ${basedir}/target/tobeCopied/wso2iots-${project.version}/repository/conf/axis2/ + + + **/*.xml + + + + + + + copy-resources-mar + compile + + copy-resources + + + ${basedir}/src/test/resources/client/modules + + + + + ${basedir}/target/tobeCopied/wso2iot-${project.version}/repository/deployment/client/modules + + + **/*.mar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.wso2.iot + org.wso2.carbon.iot.integration.ui.pages + + + org.wso2.carbon.automation + org.wso2.carbon.automation.engine + + + org.wso2.carbon.automation + org.wso2.carbon.automation.test.utils + + + org.wso2.carbon.automationutils + org.wso2.carbon.integration.common.extensions + + + + + true + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/Constants.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/Constants.java new file mode 100644 index 00000000..6db2903e --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/Constants.java @@ -0,0 +1,18 @@ +package org.wso2.carbon.iot.integration.web.ui.test; + +/** + * Created by menaka on 1/19/16. + */ +public class Constants { + public static final String IOT_LOGIN_PATH = "/devicemgt/login"; +// public static final String LOGIN_GROUP = "login-group"; +// public static final String MDM_ROLES_URL = "/mdm/roles"; + public static final String IOT_USER_REGISTER_URL = "/devicemgt/register"; + public static final String IOT_USER_ADD_URL = "/devicemgt/user/add"; + public static final String IOT_GROUP_ADD_URL = "/devicemgt/group/add"; +// public static final String MDM_USER_URL = "/mdm/users/"; +// public static final String MDM_ROLES_EDIT_URL = "/mdm/roles/edit-role/"; +// public static final String MDM_PLATFORM_CONFIG_URL = "/mdm/platform-configuration"; +// public static final String MDM_NOTIFICATION_URL = "/mdm/notification-listing"; + public static final String IOT_HOME_URL = "/devicemgt/"; +} diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/LoginUtils.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/LoginUtils.java new file mode 100644 index 00000000..3ef60003 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/LoginUtils.java @@ -0,0 +1,24 @@ +package org.wso2.carbon.iot.integration.web.ui.test; + +import org.openqa.selenium.WebDriver; +import org.wso2.carbon.automation.engine.context.AutomationContext; +import org.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.login.LoginPage; + +/** + * Login as registered user + */ +public class LoginUtils { + private static UIElementMapper uiElementMapper; + + public static void login(WebDriver driver, AutomationContext automationContext, + String webAppURL) throws Exception { + uiElementMapper = UIElementMapper.getInstance(); + driver.get(webAppURL + Constants.IOT_LOGIN_PATH); + LoginPage test = new LoginPage(driver); + test.loginAsAdmin(automationContext.getSuperTenant().getTenantAdmin().getUserName(), + automationContext.getSuperTenant().getTenantAdmin().getPassword()); + } + + +} diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/group/DeviceGroupFailTest.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/group/DeviceGroupFailTest.java new file mode 100644 index 00000000..7b3cd4b9 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/group/DeviceGroupFailTest.java @@ -0,0 +1,40 @@ +package org.wso2.carbon.iot.integration.web.ui.test.group; + +import org.junit.Assert; +import org.openqa.selenium.WebDriver; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.wso2.carbon.automation.extensions.selenium.BrowserManager; +import org.wso2.carbon.iot.integration.web.ui.test.Constants; +import org.wso2.carbon.iot.integration.web.ui.test.LoginUtils; +import org.wso2.iot.integration.ui.pages.IOTIntegrationUIBaseTestCase; +import org.wso2.iot.integration.ui.pages.groups.DeviceAddGroupPage; + +/** + * Created by menaka on 1/25/16. + * + */ +public class DeviceGroupFailTest extends IOTIntegrationUIBaseTestCase { + private WebDriver driver; + + @BeforeClass(alwaysRun = true) + public void setup() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + LoginUtils.login(driver, automationContext, getWebAppURL()); + } + + @Test(description = "Test for submitting an empty form.") + public void addNewGroupFailTest () throws Exception { + driver.get(getWebAppURL() + Constants.IOT_GROUP_ADD_URL); + DeviceAddGroupPage addGroupPage = new DeviceAddGroupPage(driver); + + Assert.assertEquals(addGroupPage.submitEmptyForm(), "Group Name is a required field. It cannot be empty."); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } +} diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/group/DeviceGroupTest.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/group/DeviceGroupTest.java new file mode 100644 index 00000000..371552a0 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/group/DeviceGroupTest.java @@ -0,0 +1,49 @@ +package org.wso2.carbon.iot.integration.web.ui.test.group; + +import org.openqa.selenium.WebDriver; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.wso2.carbon.automation.extensions.selenium.BrowserManager; +import org.wso2.carbon.iot.integration.web.ui.test.Constants; +import org.wso2.carbon.iot.integration.web.ui.test.LoginUtils; +import org.wso2.iot.integration.ui.pages.IOTIntegrationUIBaseTestCase; +import org.wso2.iot.integration.ui.pages.groups.DeviceAddGroupPage; +import org.wso2.iot.integration.ui.pages.groups.DeviceGroupsPage; +import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard; + +/** + * Test cases for grouping feature of IOT server. + */ +public class DeviceGroupTest extends IOTIntegrationUIBaseTestCase { + private WebDriver driver; + private IOTAdminDashboard adminDashboard; + + @BeforeClass(alwaysRun = true) + public void setup() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + LoginUtils.login(driver, automationContext, getWebAppURL()); + adminDashboard = new IOTAdminDashboard(driver); + } + + @Test(description = "Test for adding a new device group.") + public void addNewGroupTest () throws Exception { + DeviceAddGroupPage addGroupPage = adminDashboard.addGroup(); + addGroupPage.addNewGroup("group1", "This is test group"); + } + + @Test (description = "Check whether the created group exists", dependsOnMethods = {"addNewGroupTest"}) + public void isGroupCreatedTest () throws Exception { + driver.get(getWebAppURL() + Constants.IOT_HOME_URL); + DeviceGroupsPage groupsPage = adminDashboard.viewGroups(); + Assert.assertTrue(groupsPage.isGroupCreated("group1")); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } + +} diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/login/LoginFailTest.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/login/LoginFailTest.java new file mode 100644 index 00000000..bdf58dd9 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/login/LoginFailTest.java @@ -0,0 +1,115 @@ +package org.wso2.carbon.iot.integration.web.ui.test.login; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.wso2.carbon.automation.extensions.selenium.BrowserManager; +import org.wso2.carbon.iot.integration.web.ui.test.Constants; +import org.wso2.iot.integration.ui.pages.IOTIntegrationUIBaseTestCase; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + + +/** + * Test cases to test the incorrect login from submissions. + * Ex: + * 1. Empty form + * 2. Incorrect username or password + * 3. short password + */ +public class LoginFailTest extends IOTIntegrationUIBaseTestCase { + + private WebDriver driver; + private UIElementMapper uiElementMapper; + + WebElement userNameField; + WebElement passwordField; + WebElement loginButton; + + @BeforeClass (alwaysRun = true) + public void setup() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + clearForm(); + } + + @Test(description = "Test for empty login form submission") + public void emptyLoginFormTest() throws Exception { + userNameField.sendKeys(""); + passwordField.sendKeys(""); + + loginButton.click(); + + Assert.assertEquals(driver.findElement(By.id(uiElementMapper.getElement("iot.user.login.username.error"))) + .getText(), "Please enter a username"); + Assert.assertEquals(driver.findElement(By.id(uiElementMapper.getElement("iot.user.login.password.error"))) + .getText(), "Please provide a password"); + + } + + @Test (description = "Test for incorrect username") + public void incorrectUserNameTest() throws Exception { + + clearForm(); + + + userNameField.sendKeys("admin1"); + passwordField.sendKeys(automationContext.getSuperTenant().getTenantAdmin().getPassword()); + + loginButton.click(); + + Assert.assertEquals(driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.login.incorrect.xpath"))) + .getText(), "Incorrect username or password.!"); + + } + + @Test (description = "Test for incorrect password") + public void incorrectPasswordTest() throws Exception { + clearForm(); + + userNameField.sendKeys(automationContext.getSuperTenant().getTenantAdmin().getPassword()); + passwordField.sendKeys("admnn"); + + loginButton.click(); + + Assert.assertEquals(driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.login.incorrect.xpath"))) + .getText(), "Incorrect username or password.!"); + + } + + + @Test (description = "Test for short password") + public void shortPasswordTest() throws Exception { + + clearForm(); + + userNameField.sendKeys(automationContext.getSuperTenant().getTenantAdmin().getUserName()); + passwordField.sendKeys("ad"); + + loginButton.click(); + + Assert.assertEquals(driver.findElement(By.id(uiElementMapper.getElement("iot.user.login.password.error"))) + .getText(), "Your password must be at least 3 characters long"); + + } + + public void clearForm() throws Exception{ + driver.get(getWebAppURL() + Constants.IOT_LOGIN_PATH); + uiElementMapper = UIElementMapper.getInstance(); + + userNameField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.login.input.username.xpath"))); + passwordField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.login.input.password.xpath"))); + loginButton = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.login.button.xpath"))); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } +} diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/login/LoginTest.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/login/LoginTest.java new file mode 100644 index 00000000..8255791a --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/login/LoginTest.java @@ -0,0 +1,41 @@ +package org.wso2.carbon.iot.integration.web.ui.test.login; + +import org.openqa.selenium.WebDriver; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.wso2.carbon.automation.extensions.selenium.BrowserManager; +import org.wso2.carbon.iot.integration.web.ui.test.Constants; +import org.wso2.iot.integration.ui.pages.IOTIntegrationUIBaseTestCase; +import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard; +import org.wso2.iot.integration.ui.pages.login.LoginPage; + +/** + * Test Login as Admin + * + */ +public class LoginTest extends IOTIntegrationUIBaseTestCase { + private WebDriver driver; + + @BeforeClass (alwaysRun = true) + public void setup() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + driver.get(getWebAppURL() + Constants.IOT_LOGIN_PATH); + } + + @Test (description = "Verify login to IOT server dashboard") + public void testAdminLogin() throws Exception { + LoginPage test = new LoginPage(driver); + IOTAdminDashboard dashboard = test.loginAsAdmin( + automationContext.getSuperTenant().getTenantAdmin().getUserName(), + automationContext.getSuperTenant().getTenantAdmin().getPassword()); + dashboard.logout(); + driver.close(); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } +} diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/AddUserFormTest.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/AddUserFormTest.java new file mode 100644 index 00000000..757b1593 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/AddUserFormTest.java @@ -0,0 +1,168 @@ +package org.wso2.carbon.iot.integration.web.ui.test.user; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.wso2.carbon.automation.engine.context.AutomationContext; +import org.wso2.carbon.automation.extensions.selenium.BrowserManager; +import org.wso2.carbon.iot.integration.web.ui.test.Constants; +import org.wso2.carbon.iot.integration.web.ui.test.LoginUtils; +import org.wso2.iot.integration.ui.pages.IOTIntegrationUIBaseTestCase; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +/** + * Test cases for + * 1. Empty form submission + * 2. Short user name + * 3. Empty First Name + * 4. Empty Last Name + * 5. Empty email + * 6. Incorrect email + */ +public class AddUserFormTest extends IOTIntegrationUIBaseTestCase { + + private WebDriver driver; + UIElementMapper uiElementMapper; + + WebElement firstNameField; + WebElement lastNameField; + WebElement emailField; + WebElement userNameField; + WebElement addUserButton; + + @BeforeClass(alwaysRun = true) + public void setup() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + LoginUtils.login(driver, automationContext, getWebAppURL()); + driver.get(getWebAppURL() + Constants.IOT_USER_ADD_URL); + + uiElementMapper = UIElementMapper.getInstance(); + + + + userNameField = driver.findElement(By.id(uiElementMapper.getElement("iot.admin.addUser.username.id"))); + firstNameField = driver.findElement(By.id(uiElementMapper.getElement("iot.admin.addUser.firstName.id"))); + lastNameField = driver.findElement(By.id(uiElementMapper.getElement("iot.admin.addUser.lastName.id"))); + emailField = driver.findElement(By.id(uiElementMapper.getElement("iot.admin.addUser.email.id"))); + + addUserButton = driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.addUser.add.btn.xpath"))); + } + + @Test(description = "Test for empty form submission") + public void emptyFormTest() throws Exception { + clearForm(); + + firstNameField.sendKeys(""); + lastNameField.sendKeys(""); + emailField.sendKeys(""); + userNameField.sendKeys(""); + + addUserButton.click(); + + Assert.assertEquals(driver.findElement(By.xpath( + uiElementMapper.getElement("iot.admin.addUser.formError.xpath"))).getText(), + "Username is a required field. It cannot be empty."); + + } + + @Test(description = "Test for short user name") + public void shortUserNameTest() throws Exception { + clearForm(); + + firstNameField.sendKeys("User"); + lastNameField.sendKeys("User"); + emailField.sendKeys("user@wso2.com"); + userNameField.sendKeys("us"); + + addUserButton.click(); + + Assert.assertEquals(driver.findElement(By.xpath( + uiElementMapper.getElement("iot.admin.addUser.formError.xpath"))).getText(), + "Username must be between 3 and 30 characters long."); + + } + + @Test(description = "Test for empty first name") + public void emptyFirstNameTest() throws Exception { + clearForm(); + + firstNameField.sendKeys(""); + lastNameField.sendKeys("User"); + emailField.sendKeys("user@wso2.com"); + userNameField.sendKeys("user1"); + + addUserButton.click(); + + Assert.assertEquals(driver.findElement(By.xpath( + uiElementMapper.getElement("iot.admin.addUser.formError.xpath"))).getText(), + "Firstname is a required field. It cannot be empty."); + + } + + @Test(description = "Test for empty last name") + public void emptyLastNameTest() throws Exception { + clearForm(); + + firstNameField.sendKeys("User"); + lastNameField.sendKeys(""); + emailField.sendKeys("user@wso2.com"); + userNameField.sendKeys("user1"); + + addUserButton.click(); + Assert.assertEquals(driver.findElement(By.xpath( + uiElementMapper.getElement("iot.admin.addUser.formError.xpath"))).getText(), + "Lastname is a required field. It cannot be empty."); + + } + + @Test(description = "Test for empty email name") + public void emptyEmailTest() throws Exception { + clearForm(); + + firstNameField.sendKeys("User"); + lastNameField.sendKeys("User"); + emailField.sendKeys(""); + userNameField.sendKeys("user1"); + + addUserButton.click(); + + Assert.assertEquals(driver.findElement(By.xpath( + uiElementMapper.getElement("iot.admin.addUser.formError.xpath"))).getText(), + "Email is a required field. It cannot be empty."); + + } + + @Test(description = "Test for incorrect email") + public void incorrectEmailTest() throws Exception { + clearForm(); + + firstNameField.sendKeys("User"); + lastNameField.sendKeys("User"); + emailField.sendKeys("user.com"); + userNameField.sendKeys("user1"); + + addUserButton.click(); + + Assert.assertEquals(driver.findElement(By.xpath( + uiElementMapper.getElement("iot.admin.addUser.formError.xpath"))).getText(), + "Provided email is invalid. Please check."); + + } + public void clearForm() { + firstNameField.clear(); + lastNameField.clear(); + emailField.clear(); + userNameField.clear(); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } + +} diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/RegisterTest.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/RegisterTest.java new file mode 100644 index 00000000..89866db1 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/RegisterTest.java @@ -0,0 +1,59 @@ +package org.wso2.carbon.iot.integration.web.ui.test.user; + +import org.openqa.selenium.WebDriver; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.wso2.carbon.automation.extensions.selenium.BrowserManager; +import org.wso2.carbon.iot.integration.web.ui.test.Constants; +import org.wso2.iot.integration.ui.pages.IOTIntegrationUIBaseTestCase; +import org.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.home.IOTHomePage; +import org.wso2.iot.integration.ui.pages.login.LoginPage; +import org.wso2.iot.integration.ui.pages.uesr.NewUserRegisterPage; + +/** + * Test for registering a new user and login + * + */ +public class RegisterTest extends IOTIntegrationUIBaseTestCase { + private WebDriver driver; + UIElementMapper uiElementMapper; + + @BeforeClass(alwaysRun = true) + public void setup() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + driver.get(getWebAppURL() + Constants.IOT_LOGIN_PATH); + } + + @Test(description = "Verify new User registration") + public void testUserRegister() throws Exception { + LoginPage test = new LoginPage(driver); + uiElementMapper = UIElementMapper.getInstance(); + NewUserRegisterPage registerTest = test.registerNewUser(); + LoginPage loginPage = registerTest.addUser( + uiElementMapper.getElement("iot.user.add.firstname"), + uiElementMapper.getElement("iot.user.add.lastname"), + uiElementMapper.getElement("iot.user.add.email"), + uiElementMapper.getElement("iot.user.add.username"), + uiElementMapper.getElement("iot.user.add.password"), + uiElementMapper.getElement("iot.user.add.password")); + + IOTHomePage homePage = loginPage.loginAsUser(uiElementMapper.getElement("iot.user.add.username"), + uiElementMapper.getElement("iot.user.add.password")); + + if (!homePage.checkUserName()){ + throw new Exception("Incorrect user logged in"); + } + + homePage.logout(); + + driver.close(); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } +} diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/RegistrationFormTests.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/RegistrationFormTests.java new file mode 100644 index 00000000..9a646039 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/RegistrationFormTests.java @@ -0,0 +1,158 @@ +package org.wso2.carbon.iot.integration.web.ui.test.user; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.wso2.carbon.automation.extensions.selenium.BrowserManager; +import org.wso2.carbon.iot.integration.web.ui.test.Constants; +import org.wso2.iot.integration.ui.pages.IOTIntegrationUIBaseTestCase; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +/** + * These test cases check for following: + * - Submitting an empty form + * - Existing username + * - Non matching passwords + * - Password, username length + */ +public class RegistrationFormTests extends IOTIntegrationUIBaseTestCase{ + private WebDriver driver; + UIElementMapper uiElementMapper; + + WebElement firstNameField; + WebElement lastNameField; + WebElement emailField; + WebElement userNameField; + WebElement passwordField; + WebElement passwordConfirmationField; + WebElement registerButton; + + @BeforeClass(alwaysRun = true) + public void setup() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + driver.get(getWebAppURL() + Constants.IOT_USER_REGISTER_URL); + + uiElementMapper = UIElementMapper.getInstance(); + + WebDriverWait wait = new WebDriverWait(driver, 10); + wait.until(ExpectedConditions.titleContains("Register | IoT Server")); + + firstNameField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.firstname.xpath"))); + lastNameField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.lastname.xpath"))); + emailField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.email.xpath"))); + userNameField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.username.xpath"))); + passwordField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.password.xpath"))); + passwordConfirmationField = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.input.confirmpassword.xpath"))); + registerButton = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.user.add.register.button.xpath"))); + } + + @Test(description = "Test for submitting an empty registration form") + public void emptyFormTest() throws Exception { + clearForm(); + firstNameField.sendKeys(""); + lastNameField.sendKeys(""); + emailField.sendKeys(""); + userNameField.sendKeys(""); + passwordField.sendKeys(""); + passwordConfirmationField.sendKeys(""); + + registerButton.click(); + + Assert.assertEquals(driver.findElement(By.id( + uiElementMapper.getElement("iot.user.register.firstname.error"))).getText(), + "Firstname is a required field. This cannot be empty."); + Assert.assertEquals(driver.findElement(By.id( + uiElementMapper.getElement("iot.user.register.lastname.error"))).getText(), + "Lastname is a required field. This cannot be empty."); + Assert.assertEquals(driver.findElement(By.id( + uiElementMapper.getElement("iot.user.register.email.error"))).getText(), + "Email is a required field. This cannot be empty."); + Assert.assertEquals(driver.findElement(By.id( + uiElementMapper.getElement("iot.user.register.username.error"))).getText(), + "Username is a required field. This cannot be empty."); + Assert.assertEquals(driver.findElement(By.id( + uiElementMapper.getElement("iot.user.register.password.error"))).getText(), + "Please enter a user login password"); + Assert.assertEquals(driver.findElement(By.id( + uiElementMapper.getElement("iot.user.register.confirmPassword.error"))).getText(), + "Please enter a user login password"); + } + + @Test (description = "Test for non matching passwords") + public void nonMatchingPasswordTest() throws Exception { + clearForm(); + + firstNameField.sendKeys("User"); + lastNameField.sendKeys("User"); + emailField.sendKeys("user@user.com"); + userNameField.sendKeys("user"); + passwordField.sendKeys("user123"); + passwordConfirmationField.sendKeys("user234"); + registerButton.click(); + + Assert.assertEquals(driver.findElement(By.id( + uiElementMapper.getElement("iot.user.register.confirmPassword.error"))).getText(), + "Please enter the same password as above"); + } +// + @Test (description = "Test for email") + public void incorrectEmail() throws Exception { + clearForm(); + + firstNameField.sendKeys("User"); + lastNameField.sendKeys("User"); + emailField.sendKeys("user.com"); + registerButton.click(); + + Assert.assertEquals(driver.findElement(By.id( + uiElementMapper.getElement("iot.user.register.email.error"))).getText(), + "Email is not valid. Please enter a correct email address."); + + } +// + @Test (description = "Test for password length") + public void passwordLengthTest() throws Exception { + clearForm(); + + firstNameField.sendKeys("User"); + lastNameField.sendKeys("User"); + emailField.sendKeys("user@user.com"); + userNameField.sendKeys("user"); + passwordField.sendKeys("user"); + + registerButton.click(); + + Assert.assertEquals(driver.findElement(By.id( + uiElementMapper.getElement("iot.user.register.password.error"))).getText(), + "Password should be between 5 and 30 characters."); + + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } + + public void clearForm() { + firstNameField.clear(); + lastNameField.clear(); + emailField.clear(); + userNameField.clear(); + passwordField.clear(); + passwordConfirmationField.clear(); + } +} diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/TestAdminFunctions.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/TestAdminFunctions.java new file mode 100644 index 00000000..1cbb1e30 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/user/TestAdminFunctions.java @@ -0,0 +1,59 @@ +package org.wso2.carbon.iot.integration.web.ui.test.user; + +import org.apache.bcel.classfile.Constant; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.wso2.carbon.automation.extensions.selenium.BrowserManager; +import org.wso2.carbon.iot.integration.web.ui.test.Constants; +import org.wso2.carbon.iot.integration.web.ui.test.LoginUtils; +import org.wso2.iot.integration.ui.pages.IOTIntegrationUIBaseTestCase; +import org.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard; +import org.wso2.iot.integration.ui.pages.uesr.AddUserPage; +import org.wso2.iot.integration.ui.pages.uesr.UserListingPage; + +/** + * Test for checking admin capabilities. + * - Create a new User + * - Delete a user + * -- and more + */ +public class TestAdminFunctions extends IOTIntegrationUIBaseTestCase { + + private WebDriver driver; + + @BeforeClass(alwaysRun = true) + public void setup() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + LoginUtils.login(driver, automationContext, getWebAppURL()); + } + + @Test(description = "Test for creating a new user") + public void createUserTest() throws Exception { + IOTAdminDashboard adminDashboard = new IOTAdminDashboard(driver); + AddUserPage addUserPage = adminDashboard.addUser(); + addUserPage.createNewUser("user1", "User", "User", "user@wso2.com"); + } + + @Test(description = "Test for deleting a created user", dependsOnMethods = {"createUserTest"}) + public void deleteUserTest() throws Exception { + driver.get(getWebAppURL() + Constants.IOT_HOME_URL); + IOTAdminDashboard adminDashboard = new IOTAdminDashboard(driver); + UserListingPage userListingPage = adminDashboard.viewUser(); + userListingPage.deleteUser(); + } + + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } +} diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/automation.xml b/modules/integration/tests-iot-web-ui/src/test/resources/automation.xml new file mode 100644 index 00000000..da7025c0 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/automation.xml @@ -0,0 +1,220 @@ + + + + + + + + + 60000 + + standalone + + false + + false + + + + + + + http://10.100.2.51:4444/wd/hub/ + + + + firefox + + /home/test/name/webDriver + + + + + + + jdbc:h2:testDB + wso2carbon + wso2carbon + org.h2.Driver + + + jdbc:h2:testDB + wso2carbon + wso2carbon + org.h2.Driver + + + + + + + keystores/products/wso2carbon.jks + + JKS + + wso2carbon + + wso2carbon + + wso2carbon + + + + + client-truststore.jks + + JKS + + wso2carbon + + + + + + https://wso2.org/repo + file:///home/krishantha/test + + + + + + + + + + admin + admin + + + + + testuser11 + testuser11 + + + testuser21 + testuser21 + + + + + + + + + admin + admin + + + + + testuser11 + testuser11 + + + testuser21 + testuser21 + + + + + + + + + + + + + localhost + + + 9763 + 9443 + + + + + + + + + + + + + + + org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension + org.wso2.carbon.integration.common.extensions.usermgt.UserPopulateExtension + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/automationXMLSchema.xsd b/modules/integration/tests-iot-web-ui/src/test/resources/automationXMLSchema.xsd new file mode 100644 index 00000000..b800b2ba --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/automationXMLSchema.xsd @@ -0,0 +1,611 @@ + + + + + + + ================================================= + Parameters ================================================= + Browser type with used by framework to execute UI test, supported types + - chrome|firefox|opera|ie|htmlUnit + + + + + + + Change this to edit wait time for test + artifact deployment + + + + + + Change this to product|platform/cloud to + execute test on specific environment + + + + + + + Change this to true if you want to generate + coverage statistics + + + + + + Change this to true if you want to enable + framework dashboard + + + + + + + + + + + + + + + Change to enable remote webDriver + URL of remote webDriver server + + + + + + + + + + + + + Type of the browser selenium tests + are running" + + + + + + + + path to webDriver + executable - required only for + chrome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + KeyStore which will be used for + encrypting/decrypting passwords + and other sensitive information. + + + + + + + Keystore file location + + + + + + Keystore type (JKS/PKCS12 etc.) + + + + + + Keystore password + + + + + + Private Key alias + + + + + + Private Key password + + + + + + + + + + System wide trust-store which is used to + maintain the certificates of all + the trusted parties. + + + + + + + trust-store file location + + + + + + trust-store type (JKS/PKCS12 + etc.) + + + + + + trust-store password + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/axis2config/axis2_client.xml b/modules/integration/tests-iot-web-ui/src/test/resources/axis2config/axis2_client.xml new file mode 100644 index 00000000..a8b584d0 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/axis2config/axis2_client.xml @@ -0,0 +1,300 @@ + + + + + + + true + false + false + + + 500 + + 15000 + + + false + + + + true + + + + + + false + + + admin + axis2 + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6071 + + + + + + + + + + + + + + + + + + + + + + HTTP/1.1 + chunked + 60000 + 60000 + + + HTTP/1.1 + chunked + 60000 + 60000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/build.xml b/modules/integration/tests-iot-web-ui/src/test/resources/build.xml new file mode 100644 index 00000000..7079c026 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/build.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/addressing-1.6.1-wso2v10.mar b/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/addressing-1.6.1-wso2v10.mar new file mode 100644 index 00000000..57f85764 Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/addressing-1.6.1-wso2v10.mar differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/addressing-1.6.1-wso2v11-20140908.185829-596.mar b/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/addressing-1.6.1-wso2v11-20140908.185829-596.mar new file mode 100644 index 00000000..4ca7737a Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/addressing-1.6.1-wso2v11-20140908.185829-596.mar differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/addressing-1.6.1-wso2v15.mar b/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/addressing-1.6.1-wso2v15.mar new file mode 100644 index 00000000..68f5cbd6 Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/addressing-1.6.1-wso2v15.mar differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/rampart-1.6.1-wso2v8.mar b/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/rampart-1.6.1-wso2v8.mar new file mode 100644 index 00000000..60cd6cdf Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/client/modules/rampart-1.6.1-wso2v8.mar differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/emma.properties b/modules/integration/tests-iot-web-ui/src/test/resources/emma.properties new file mode 100644 index 00000000..9c48e81b --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/emma.properties @@ -0,0 +1,105 @@ +# ------------------------------------------------------------- +# +# for user-editable property overrides use one of these options: +# +# (1) option-specific command line overrides, e.g. +# -Dreport.txt.out.file=coverage.txt +# +# (2) '-p ' command line option, +# +# (3) 'emma.properties' resource placed somewhere in the classpath +# (e.g., in \classes directory -- note that it does +# not exist by default), +# +# (4) '-Demma.*' JVM options, e.g. +# -Demma.report.txt.out.file=coverage.txt +# +# (5) 'emma.properties' JVM option pointing to a properties file +# -Demma.properties=./myproperties.txt +# ------------------------------------------------------------- + +# ------------------------------------------------------------- +# logging properties: + +verbosity.level: none + +# classloading properties: + +#clsload.forced_delegation_filter: +#clsload.through_delegation_filter: -* + +# ------------------------------------------------------------- + +# instrumentation properties: + +instr.exclude_empty_classes: true +instr.exclude_synthetic_methods: true +instr.exclude_bridge_methods: true +instr.do_suid_compensation: true + +# ------------------------------------------------------------- + +# runtime properties: + +rt.control: false +rt.control.host: localhost +#rt.control.port: 44444 + +rt.filelock: true +#rt.filelock.portbase: 59141 +rt.filelock.maxtime: 120000 +rt.filelock.retries: 11 + +# ------------------------------------------------------------- + +# apprunner session data output properties: + +session.out.file: coverage.es +session.out.merge: true + +# ------------------------------------------------------------- + +# runtime coverage data output properties: + +coverage.out.file: coverage.ec +coverage.out.merge: true + +# ------------------------------------------------------------- + +# instr metadata output properties: + +metadata.out.file: coverage.em +metadata.out.merge: true + +# ------------------------------------------------------------- + +# common report defaults: + +report.units: instr +report.depth: method +report.columns: name, line, block, method, class +report.sort: -line,-block,-method,-class,+name +report.metrics: method:40,block:80,line:40,class:100 + +# ------------------------------------------------------------- +# txt report properties: + +report.txt.depth: all +report.txt.columns: class,method,block,line,name +report.txt.out.file: coverage.txt + +# ------------------------------------------------------------- +# html report properties: + +#report.html.out.dir: coverage +#report.html.out.file: /Users/azeez/Desktop/coverage/index.html +report.html.out.encoding: ISO-8859-1 + +# ------------------------------------------------------------- +# xml report properties: + +#report.xml.out.file: coverage.xml +report.xml.out.encoding: UTF-8 +# ------------------------------------------------------------- +# end of file + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/filters.txt b/modules/integration/tests-iot-web-ui/src/test/resources/filters.txt new file mode 100644 index 00000000..54913a22 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/filters.txt @@ -0,0 +1,17 @@ +-*.stub* +-*.stub_ +-*.stub_4.0.0 +-*.stub- +-org.eclipse.* +-*.equinox.* +-org.wso2.carbon.user.core.* +-samples.* +-*.log4j* +-*.axis2* +-*.ui* +-*.tenant* +-*.stratos* +-*.eventing* +-*transports* +-org.wso2.carbon.mediation.statistics* +-*startup* \ No newline at end of file diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/instrumentation.txt b/modules/integration/tests-iot-web-ui/src/test/resources/instrumentation.txt new file mode 100644 index 00000000..917b2bb7 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/instrumentation.txt @@ -0,0 +1,11 @@ +org.wso2.carbon.datasource_ +org.wso2.carbon.dataservices.core_ +org.wso2.carbon.transaction.manager_ +org.wso2.carbon.dataservices.sql.driver_ +org.wso2.carbon.dataservices.task_ +org.wso2.carbon.ndatasource.common_ +org.wso2.carbon.ndatasource.core_ +org.wso2.carbon.ndatasource.rdbms_ +org.wso2.carbon.ntask.common_ +org.wso2.carbon.ntask.core_ +org.wso2.carbon.ntask.solutions_ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/client-truststore.jks b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/client-truststore.jks new file mode 100644 index 00000000..ab222fdd Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/client-truststore.jks differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/wso2carbon.jks b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/wso2carbon.jks new file mode 100644 index 00000000..79784a5e Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/wso2carbon.jks differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/wso2certs.jks b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/wso2certs.jks new file mode 100644 index 00000000..eb27997d Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/wso2certs.jks differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/wso2mdm.jks b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/wso2mdm.jks new file mode 100644 index 00000000..66b68ea3 Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/products/wso2mdm.jks differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/client-truststore.jks b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/client-truststore.jks new file mode 100644 index 00000000..ab222fdd Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/client-truststore.jks differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/wso2carbon.jks b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/wso2carbon.jks new file mode 100644 index 00000000..79784a5e Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/wso2carbon.jks differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/wso2certs.jks b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/wso2certs.jks new file mode 100644 index 00000000..eb27997d Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/wso2certs.jks differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/wso2emm.jks b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/wso2emm.jks new file mode 100644 index 00000000..ae5670b0 Binary files /dev/null and b/modules/integration/tests-iot-web-ui/src/test/resources/keystores/stratos/wso2emm.jks differ diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/log4j.properties b/modules/integration/tests-iot-web-ui/src/test/resources/log4j.properties new file mode 100644 index 00000000..6fc06a7e --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/log4j.properties @@ -0,0 +1,43 @@ +# +# Copyright 2009 WSO2, Inc. (http://wso2.com) +# +# Licensed 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. +# + +# +# This is the log4j configuration file used by WSO2 Carbon +# +# IMPORTANT : Please do not remove or change the names of any +# of the Appenders defined here. The layout pattern & log file +# can be changed using the WSO2 Carbon Management Console, and those +# settings will override the settings in this file. +# + +log4j.rootLogger=INFO, console, Default + +log4j.logger.org.wso2=INFO + +#Automation file apender +log4j.appender.Default=org.apache.log4j.RollingFileAppender +log4j.appender.Default.File=logs/automation.log +log4j.appender.Default.Append=true +log4j.appender.Default.MaxFileSize=10MB +log4j.appender.Default.MaxBackupIndex=10 +log4j.appender.Default.layout=org.apache.log4j.PatternLayout +log4j.appender.Default.layout.ConversionPattern=%d{ISO8601} %-5p [%c] - %m%n + + +#Automation console apender +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%-5p [%c] - %m%n \ No newline at end of file diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario-config.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario-config.xml new file mode 100644 index 00000000..79f018ca --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario-config.xml @@ -0,0 +1,201 @@ + + + + + + + UsernameToken + Provides Authentication. Clients have Username Tokens + ut + + rampart + + UTOverTransport + basic + + + Non-repudiation + Provides Authentication and Integrity. Clients have X509 certificates + keystore + + rampart + + SigOnly + basic + + + Integrity + Provides Integrity. Clients do not have X509 certificates + keystore + + rampart + + SgnOnlyAnonymous + basic + + + Confidentiality + Provides Confidentiality. Clients do not have X509 certificates + keystore + + rampart + + EncrOnlyAnonymous + basic + + + + + Sign and encrypt - X509 Authentication + Provides Authentication, Integrity and Confidentiality. Clients have X509 certificates + + keystore + + rampart + + SigEncr + advanced + + + Sign and Encrypt - Anonymous clients + Provides Integrity and Confidentiality. + keystore + + rampart + + SgnEncrAnonymous + advanced + + + Encrypt only - Username Token Authentication + Provides Authentication and Confidentiality. Clients have Username Tokens + ut-keystore + + rampart + + EncrOnlyUsername + advanced + + + Sign and Encrypt - Username Token Authentication + Provides Authentication, Integrity and Confidentiality. Clients have Username Tokens + ut-keystore + + rampart + + SgnEncrUsername + advanced + + + SecureConversation - Sign only - Service as STS - Bootstrap policy - Sign and Encrypt , X509 + Authentication + + Provides Authentication and Integrity. Multiple message exchange.Clients have X509 certificates. + + keystore + + rampart + rahas + + SecConSignOnly + advanced + + + SecureConversation - Encrypt only - Service as STS - Bootstrap policy - + Sign and Encrypt , X509 Authentication + + Provides Confidentiality. Multiple message exchange.Clients have X509 certificates. + keystore + + rampart + rahas + + SecConEncrOnly + advanced + + + SecureConversation - Sign and Encrypt - Service as STS - Bootstrap policy - Sign and Encrypt , X509 + Authentication + + Provides Authentication, Integrity and Confidentiality. Multiple message exchange.Clients have X509 + certificates. + + keystore + + rampart + rahas + + SecConSgnEncr + advanced + + + SecureConversation - Sign Only - Service as STS - Bootstrap policy - Sign and Encrypt , Anonymous + clients + + Provides Integrity. Multiple message exchange. + keystore + + rampart + rahas + + SecConSignOnlyAnonymous + advanced + + + SecureConversation - Encrypt Only - Service as STS - Bootstrap policy - Sign and Encrypt , Anonymous + clients + + Provides Confidentiality. Multiple message exchange. + keystore + + rampart + rahas + + SecConEncrOnlyAnonymous + advanced + + + SecureConversation - Encrypt Only - Service as STS - Bootstrap policy - Sign and Encrypt , Username + Token Authentication + + Provides Authentication and Confidentiality. Multiple message exchange. Clients have Username + Tokens. + + ut-keystore + + rampart + rahas + + SecConEncrUsername + advanced + + + SecureConversation - Sign and Encrypt - Service as STS - Bootstrap policy - Sign and Encrypt , Username + Token Authentication + + Provides Authentication Integrity and Confidentiality. Multiple message exchange. Clients have + Username Tokens. + + ut-keystore + + rampart + rahas + + SecConSgnEncrUsername + advanced + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario1-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario1-policy.xml new file mode 100644 index 00000000..4a232f73 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario1-policy.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario10-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario10-policy.xml new file mode 100644 index 00000000..2d076e06 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario10-policy.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario11-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario11-policy.xml new file mode 100644 index 00000000..794d52ee --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario11-policy.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario12-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario12-policy.xml new file mode 100644 index 00000000..6ac14ecd --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario12-policy.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario13-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario13-policy.xml new file mode 100644 index 00000000..dbefeda8 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario13-policy.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario14-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario14-policy.xml new file mode 100644 index 00000000..bafd7263 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario14-policy.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario15-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario15-policy.xml new file mode 100644 index 00000000..47fb6711 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario15-policy.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario16-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario16-policy.xml new file mode 100644 index 00000000..dc383d79 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario16-policy.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ https://kirillgdev04/Security_Federation_SecurityTokenService_Indigo/Symmetric.svc/Scenario_1_IssuedTokenOverTransport_UsernameOverTransport +
+
+ + + urn:oasis:names:tc:SAML:1.0:assertion + + + http://schemas.xmlsoap.org/ws/2005/02/trust/SymmetricKey + + + 256 + + + + + +
+ + + +
+
+ + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario17-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario17-policy.xml new file mode 100644 index 00000000..637cf81d --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario17-policy.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + +
+ http://foo.bar/we/don/t/process/this/yet +
+
+ + + urn:oasis:names:tc:SAML:1.0:assertion + + + http://schemas.xmlsoap.org/ws/2005/02/trust/SymmetricKey + + 256 + + + + +
+
+
+ + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario2-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario2-policy.xml new file mode 100644 index 00000000..08a45d55 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario2-policy.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario3-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario3-policy.xml new file mode 100644 index 00000000..0bfd14eb --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario3-policy.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario4-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario4-policy.xml new file mode 100644 index 00000000..9ee47cc2 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario4-policy.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario5-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario5-policy.xml new file mode 100644 index 00000000..9454c745 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario5-policy.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario6-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario6-policy.xml new file mode 100644 index 00000000..7de14746 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario6-policy.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario7-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario7-policy.xml new file mode 100644 index 00000000..db95d371 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario7-policy.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario8-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario8-policy.xml new file mode 100644 index 00000000..1fdfd940 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario8-policy.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario9-policy.xml b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario9-policy.xml new file mode 100644 index 00000000..73fa833b --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/security/policies/scenario9-policy.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/testng-server-mgt.xml b/modules/integration/tests-iot-web-ui/src/test/resources/testng-server-mgt.xml new file mode 100644 index 00000000..b57f1223 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/testng-server-mgt.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml b/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml new file mode 100644 index 00000000..8a4cd94b --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 8e8fe903..bda62c36 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ modules/features modules/p2-profile-gen modules/distribution - + modules/integration