From 030938e83e9b2805ee5404cabfed632299cf8e09 Mon Sep 17 00:00:00 2001 From: Ayyoob Hamza Date: Tue, 24 Jan 2017 11:48:53 +0530 Subject: [PATCH] Revert "Re-Enabling backend integration tests." --- modules/integration/pom.xml | 9 +- modules/integration/tests-artifacts/pom.xml | 2 +- .../integration-test-utils/pom.xml | 2 +- modules/integration/tests-common/pom.xml | 2 +- .../integration/tests-common/ui-pages/pom.xml | 116 ++++ .../pages/EMMIntegrationUiBaseTestCase.java | 71 ++ .../pages/Notification/NotificationView.java | 57 ++ .../integration/ui/pages/UIElementMapper.java | 65 ++ .../integration/ui/pages/home/HomePage.java | 64 ++ .../ui/pages/home/MDMHomePage.java | 49 ++ .../ui/pages/login/MDMLoginPage.java | 63 ++ .../login/ManagementConsoleLoginPage.java | 68 ++ .../PlatformConfiguration.java | 76 +++ .../ui/pages/role/AddRolePage.java | 55 ++ .../ui/pages/role/EditRolePage.java | 55 ++ .../ui/pages/role/RoleListPage.java | 52 ++ .../ui/pages/user/AddUserPage.java | 55 ++ .../ui/pages/user/UserAddedPage.java | 39 ++ .../ui/pages/user/UserEditPage.java | 51 ++ .../ui/pages/user/UserListPage.java | 51 ++ .../src/main/resources/mapper.properties | 512 +++++++++++++++ .../tests-common/web-ui-pages/pom.xml | 2 +- .../integration/tests-integration-old/pom.xml | 266 ++++++++ .../mdm}/integration/common/AssertUtil.java | 2 +- .../mdm}/integration/common/Constants.java | 2 +- .../integration/common/MDMHttpClient.java} | 67 +- .../mdm/integration/common/MDMResponse.java} | 4 +- .../mdm}/integration/common/OAuthUtil.java | 2 +- .../integration/common/PayloadGenerator.java | 2 +- .../mdm}/integration/common/RestClient.java | 3 +- .../mdm}/integration/common/TestBase.java | 2 +- .../ConfigurationManagement.java | 6 +- .../AndroidConfigurationManagement.java | 6 +- .../device/enrollment/AndroidEnrollment.java | 6 +- .../device/enrollment/WindowsEnrollment.java | 12 +- .../device/mgt/AndroidDeviceManagement.java | 5 +- .../device/operation/AndroidOperation.java | 6 +- .../device/policy/AndroidPolicy.java | 8 +- .../feature/FeatureManagement.java | 9 +- .../license/LicenseManagement.java | 6 +- .../mobileDevice/MobileDeviceManagement.java | 18 +- .../MobileDeviceManagementWithNoDevices.java | 14 +- .../notification/NotificationManagement.java | 4 +- .../operation/OperationManagement.java | 16 +- .../integration/policy/PolicyManagement.java | 18 +- .../mdm}/integration/role/RoleManagement.java | 17 +- .../mdm}/integration/user/UserManagement.java | 6 +- .../src/test/resources/automation.xml | 233 +++++++ .../src/test/resources/automationSchema.xsd | 0 .../src/test/resources/filters.txt | 23 + .../src/test/resources/instrumentation.txt | 41 ++ .../keystores/products}/client-truststore.jks | Bin .../keystores/products}/wso2carbon.jks | Bin .../keystores/products}/wso2certs.jks | Bin .../src/test/resources/log4j.properties | 45 ++ .../android-config-response-payloads.json | 0 .../android-configuration-payloads.json | 0 .../android-device-mgt-response-payloads.json | 0 .../payloads/android-enrollment-payloads.json | 0 .../android-enrollment-response-payloads.json | 0 .../payloads/android-operation-payloads.json | 0 .../android-policy-response-payloads.json | 0 .../payloads/configuration-payloads.json | 0 .../configuration-response-payloads.json | 0 .../get-notifications-response-payloads.json | 0 .../payloads/license-response-payloads.json | 0 ...t-view-device-types-response-payloads.json | 0 .../payloads/notification-payloads.json | 0 .../notification-response-payloads.json | 0 .../resources/payloads/policy-payloads.json | 0 .../payloads/policy-response-payloads.json | 0 .../resources/payloads/role-payloads.json | 0 .../resources/payloads/user-payloads.json | 0 .../payloads/user-response-payloads.json | 0 .../src/test/resources/testng-server-mgt.xml | 23 + .../src/test/resources/testng.xml | 112 ++++ .../enrollment/additional_device_info.xml | Bin .../windows/enrollment/discovery-post.xml | 0 .../windows/enrollment/inital_device_info.xml | Bin .../resources/windows/enrollment/ms_xcep.xml | 0 .../resources/windows/enrollment/wstep.xml | 0 modules/integration/tests-integration/pom.xml | 214 +++--- .../extensions/AnalyticsServerExtension.java | 89 --- .../extensions/BrokerServerExtension.java | 89 --- .../extensions/CustomTestServerManager.java | 147 ----- .../extensions/IOTServerExtension.java | 89 --- .../src/test/resources/automation.xml | 49 +- .../src/test/resources/instrumentation.txt | 52 +- .../resources/keystores/products/wso2mdm.jks | Bin 9485 -> 0 bytes .../src/test/resources/testng.xml | 94 +-- modules/integration/tests-iot-web-ui/pom.xml | 2 +- .../integration/tests-ui-integration/pom.xml | 274 ++++++++ .../emm/ui/integration/test/Constants.java | 31 + .../test/GeneralConfigurationTestCases.java | 65 ++ .../emm/ui/integration/test/LoginUtils.java | 45 ++ .../test/NotificationValidationTestCase.java | 58 ++ .../ui/integration/test/RoleTestCases.java | 64 ++ .../emm/ui/integration/test/UserTestCase.java | 63 ++ .../test/login/MDMLoginTestCase.java | 54 ++ .../login/ManagementConsoleLoginTestCase.java | 54 ++ .../src/test/resources/automation.xml | 222 +++++++ .../test/resources/automationXMLSchema.xsd | 611 ++++++++++++++++++ .../resources/axis2config/axis2_client.xml | 300 +++++++++ .../modules/addressing-1.6.1-wso2v10.mar | Bin 0 -> 31350 bytes ...sing-1.6.1-wso2v11-20140908.185829-596.mar | Bin 0 -> 31367 bytes .../modules/addressing-1.6.1-wso2v15.mar | Bin 0 -> 31343 bytes .../client/modules/rampart-1.6.1-wso2v8.mar | Bin 0 -> 9708 bytes .../src/test/resources/emma.properties | 105 +++ .../src/test/resources/filters.txt | 17 + .../src/test/resources/instrumentation.txt | 11 + .../keystores/products/client-truststore.jks | Bin 0 -> 36522 bytes .../keystores/products/wso2carbon.jks | Bin 0 -> 33260 bytes .../resources/keystores/products}/wso2emm.jks | Bin .../keystores/stratos/client-truststore.jks | Bin 0 -> 103867 bytes .../keystores/stratos/wso2carbon.jks | Bin 0 -> 35863 bytes .../resources/keystores/stratos/wso2certs.jks | Bin 0 -> 14185 bytes .../resources/keystores/stratos/wso2emm.jks | Bin 0 -> 4993 bytes .../src/test/resources/log4j.properties | 43 ++ .../security/policies/scenario-config.xml | 201 ++++++ .../security/policies/scenario1-policy.xml | 51 ++ .../security/policies/scenario10-policy.xml | 127 ++++ .../security/policies/scenario11-policy.xml | 128 ++++ .../security/policies/scenario12-policy.xml | 123 ++++ .../security/policies/scenario13-policy.xml | 126 ++++ .../security/policies/scenario14-policy.xml | 133 ++++ .../security/policies/scenario15-policy.xml | 136 ++++ .../security/policies/scenario16-policy.xml | 87 +++ .../security/policies/scenario17-policy.xml | 93 +++ .../security/policies/scenario2-policy.xml | 74 +++ .../security/policies/scenario3-policy.xml | 72 +++ .../security/policies/scenario4-policy.xml | 72 +++ .../security/policies/scenario5-policy.xml | 82 +++ .../security/policies/scenario6-policy.xml | 75 +++ .../security/policies/scenario7-policy.xml | 82 +++ .../security/policies/scenario8-policy.xml | 85 +++ .../security/policies/scenario9-policy.xml | 127 ++++ .../src/test/resources/testng-server-mgt.xml | 35 + .../src/test/resources/testng.xml | 39 ++ 138 files changed, 6495 insertions(+), 795 deletions(-) create mode 100644 modules/integration/tests-common/ui-pages/pom.xml create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/EMMIntegrationUiBaseTestCase.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/Notification/NotificationView.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/UIElementMapper.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/HomePage.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/MDMHomePage.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/login/MDMLoginPage.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/login/ManagementConsoleLoginPage.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/platformConfiguration/PlatformConfiguration.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/AddRolePage.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/EditRolePage.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/RoleListPage.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/AddUserPage.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserAddedPage.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserEditPage.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserListPage.java create mode 100644 modules/integration/tests-common/ui-pages/src/main/resources/mapper.properties create mode 100644 modules/integration/tests-integration-old/pom.xml rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/common/AssertUtil.java (97%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/common/Constants.java (99%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot/integration/common/IOTHttpClient.java => tests-integration-old/src/test/java/org/wso2/mdm/integration/common/MDMHttpClient.java} (74%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot/integration/common/IOTResponse.java => tests-integration-old/src/test/java/org/wso2/mdm/integration/common/MDMResponse.java} (93%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/common/OAuthUtil.java (98%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/common/PayloadGenerator.java (97%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/common/RestClient.java (98%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/common/TestBase.java (98%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/configuration/ConfigurationManagement.java (93%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/device/configuration/AndroidConfigurationManagement.java (95%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/device/enrollment/AndroidEnrollment.java (96%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/device/enrollment/WindowsEnrollment.java (94%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/device/mgt/AndroidDeviceManagement.java (98%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/device/operation/AndroidOperation.java (98%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/device/policy/AndroidPolicy.java (88%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/feature/FeatureManagement.java (83%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/license/LicenseManagement.java (91%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/mobileDevice/MobileDeviceManagement.java (85%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/mobileDevice/MobileDeviceManagementWithNoDevices.java (82%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/notification/NotificationManagement.java (97%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/operation/OperationManagement.java (89%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/policy/PolicyManagement.java (86%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/role/RoleManagement.java (82%) rename modules/integration/{tests-integration/src/test/java/org/wso2/iot => tests-integration-old/src/test/java/org/wso2/mdm}/integration/user/UserManagement.java (96%) create mode 100644 modules/integration/tests-integration-old/src/test/resources/automation.xml rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/automationSchema.xsd (100%) create mode 100644 modules/integration/tests-integration-old/src/test/resources/filters.txt create mode 100644 modules/integration/tests-integration-old/src/test/resources/instrumentation.txt rename modules/integration/{tests-integration/src/test/resources/keystores/stratos => tests-integration-old/src/test/resources/keystores/products}/client-truststore.jks (100%) rename modules/integration/{tests-integration/src/test/resources/keystores/stratos => tests-integration-old/src/test/resources/keystores/products}/wso2carbon.jks (100%) rename modules/integration/{tests-integration/src/test/resources/keystores/stratos => tests-integration-old/src/test/resources/keystores/products}/wso2certs.jks (100%) create mode 100644 modules/integration/tests-integration-old/src/test/resources/log4j.properties rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/android-config-response-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/android-configuration-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/android-device-mgt-response-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/android-enrollment-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/android-enrollment-response-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/android-operation-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/android-policy-response-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/configuration-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/configuration-response-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/get-notifications-response-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/license-response-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/mobile-device-mgt-view-device-types-response-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/notification-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/notification-response-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/policy-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/policy-response-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/role-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/user-payloads.json (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/payloads/user-response-payloads.json (100%) create mode 100644 modules/integration/tests-integration-old/src/test/resources/testng-server-mgt.xml create mode 100644 modules/integration/tests-integration-old/src/test/resources/testng.xml rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/windows/enrollment/additional_device_info.xml (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/windows/enrollment/discovery-post.xml (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/windows/enrollment/inital_device_info.xml (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/windows/enrollment/ms_xcep.xml (100%) rename modules/integration/{tests-integration => tests-integration-old}/src/test/resources/windows/enrollment/wstep.xml (100%) delete mode 100644 modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/AnalyticsServerExtension.java delete mode 100644 modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/BrokerServerExtension.java delete mode 100644 modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/CustomTestServerManager.java delete mode 100644 modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/IOTServerExtension.java delete mode 100644 modules/integration/tests-integration/src/test/resources/keystores/products/wso2mdm.jks create mode 100644 modules/integration/tests-ui-integration/pom.xml create mode 100644 modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/Constants.java create mode 100644 modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/GeneralConfigurationTestCases.java create mode 100644 modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/LoginUtils.java create mode 100644 modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/NotificationValidationTestCase.java create mode 100644 modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/RoleTestCases.java create mode 100644 modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/UserTestCase.java create mode 100644 modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/login/MDMLoginTestCase.java create mode 100644 modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/login/ManagementConsoleLoginTestCase.java create mode 100644 modules/integration/tests-ui-integration/src/test/resources/automation.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/automationXMLSchema.xsd create mode 100644 modules/integration/tests-ui-integration/src/test/resources/axis2config/axis2_client.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v10.mar create mode 100644 modules/integration/tests-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v11-20140908.185829-596.mar create mode 100644 modules/integration/tests-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v15.mar create mode 100644 modules/integration/tests-ui-integration/src/test/resources/client/modules/rampart-1.6.1-wso2v8.mar create mode 100644 modules/integration/tests-ui-integration/src/test/resources/emma.properties create mode 100644 modules/integration/tests-ui-integration/src/test/resources/filters.txt create mode 100644 modules/integration/tests-ui-integration/src/test/resources/instrumentation.txt create mode 100644 modules/integration/tests-ui-integration/src/test/resources/keystores/products/client-truststore.jks create mode 100644 modules/integration/tests-ui-integration/src/test/resources/keystores/products/wso2carbon.jks rename modules/integration/{tests-integration/src/test/resources/keystores/stratos => tests-ui-integration/src/test/resources/keystores/products}/wso2emm.jks (100%) create mode 100644 modules/integration/tests-ui-integration/src/test/resources/keystores/stratos/client-truststore.jks create mode 100644 modules/integration/tests-ui-integration/src/test/resources/keystores/stratos/wso2carbon.jks create mode 100644 modules/integration/tests-ui-integration/src/test/resources/keystores/stratos/wso2certs.jks create mode 100644 modules/integration/tests-ui-integration/src/test/resources/keystores/stratos/wso2emm.jks create mode 100644 modules/integration/tests-ui-integration/src/test/resources/log4j.properties create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario-config.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario1-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario10-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario11-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario12-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario13-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario14-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario15-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario16-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario17-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario2-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario3-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario4-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario5-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario6-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario7-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario8-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario9-policy.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/testng-server-mgt.xml create mode 100644 modules/integration/tests-ui-integration/src/test/resources/testng.xml diff --git a/modules/integration/pom.xml b/modules/integration/pom.xml index 0356182d..c82420df 100644 --- a/modules/integration/pom.xml +++ b/modules/integration/pom.xml @@ -1,6 +1,6 @@ + tests-iot-web-ui diff --git a/modules/integration/tests-artifacts/pom.xml b/modules/integration/tests-artifacts/pom.xml index b82a7758..1abe51e1 100644 --- a/modules/integration/tests-artifacts/pom.xml +++ b/modules/integration/tests-artifacts/pom.xml @@ -21,7 +21,7 @@ org.wso2.iot wso2iot-integration - 3.1.0-SNAPSHOT + 3.0.0-SNAPSHOT ../pom.xml diff --git a/modules/integration/tests-common/integration-test-utils/pom.xml b/modules/integration/tests-common/integration-test-utils/pom.xml index d188db50..cc62f18c 100644 --- a/modules/integration/tests-common/integration-test-utils/pom.xml +++ b/modules/integration/tests-common/integration-test-utils/pom.xml @@ -36,6 +36,6 @@ Apache License Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 - + diff --git a/modules/integration/tests-common/pom.xml b/modules/integration/tests-common/pom.xml index 027bb14a..4692faac 100644 --- a/modules/integration/tests-common/pom.xml +++ b/modules/integration/tests-common/pom.xml @@ -21,7 +21,7 @@ org.wso2.iot wso2iot-integration - 3.1.0-SNAPSHOT + 3.0.0-SNAPSHOT ../pom.xml diff --git a/modules/integration/tests-common/ui-pages/pom.xml b/modules/integration/tests-common/ui-pages/pom.xml new file mode 100644 index 00000000..13d5dcd2 --- /dev/null +++ b/modules/integration/tests-common/ui-pages/pom.xml @@ -0,0 +1,116 @@ + + + + + + + org.wso2.iot + tests-common + 3.0.0-SNAPSHOT + ../pom.xml + + + 4.0.0 + org.wso2.carbon.iot.core.integration.ui.pages + jar + WSO2 IoT - Integration Test Common 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/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/EMMIntegrationUiBaseTestCase.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/EMMIntegrationUiBaseTestCase.java new file mode 100644 index 00000000..14f29c52 --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/EMMIntegrationUiBaseTestCase.java @@ -0,0 +1,71 @@ +/* + * 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. + */ + +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; + +public class EMMIntegrationUiBaseTestCase { + + private static final Log log = LogFactory.getLog(EMMIntegrationUiBaseTestCase.class); + protected AutomationContext automationContext; + + protected void init() throws IOException, XMLStreamException, XPathExpressionException { + automationContext = new AutomationContext("EMM", "emm001", 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/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/Notification/NotificationView.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/Notification/NotificationView.java new file mode 100644 index 00000000..c226e59a --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/Notification/NotificationView.java @@ -0,0 +1,57 @@ +/* + * 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. + */ +package org.wso2.iot.integration.ui.pages.Notification; + + +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 java.io.IOException; + +public class NotificationView { + private static final Log log = LogFactory.getLog(NotificationView.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public NotificationView(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + if (!(driver.getCurrentUrl().contains("notification-listing"))) { + throw new IllegalStateException("This is not the notification-listing page"); + } + } + + public void viewNotification() { + WebElement unReadNotificationTab = driver.findElement(By.id(uiElementMapper. + getElement("emm.notification.unread.identifier"))); + WebElement notificationTab = driver.findElement(By.id(uiElementMapper. + getElement("emm.notification.all.identifier"))); + + if (!unReadNotificationTab.isDisplayed()) { + throw new IllegalStateException("Notification View must be having two tabs"); + } + if (!notificationTab.isDisplayed()) { + throw new IllegalStateException("Notification View must be having two tabs"); + } + } +} diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/UIElementMapper.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/UIElementMapper.java new file mode 100644 index 00000000..77170f9d --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/UIElementMapper.java @@ -0,0 +1,65 @@ +/* + * 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. + */ + +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 mapper.properties file and load it's uiElements into Properties object. + */ +public class UIElementMapper { + public static final Properties uiProperties = 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) { + uiProperties.load(inputStream); + inputStream.close(); + return uiProperties; + } + return null; + } + + public String getElement(String key) { + if (uiProperties != null) { + return uiProperties.getProperty(key); + } + return null; + } +} diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/HomePage.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/HomePage.java new file mode 100644 index 00000000..bf4331e5 --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/HomePage.java @@ -0,0 +1,64 @@ +/* + * 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. + */ + +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 java.io.IOException; + +import org.wso2.iot.integration.ui.pages.login.ManagementConsoleLoginPage; + +/** + * Home page class holds the information of product page you got once login + * It also contain sign-out method as well. + */ +public class HomePage { + + private static final Log log = LogFactory.getLog(HomePage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public HomePage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + if (!driver.findElement(By.id(uiElementMapper.getElement("home.dashboard.middle.text"))). + getText().contains("Home")) { + throw new IllegalStateException("This is not the home page"); + } + } + + public ManagementConsoleLoginPage logout() throws IOException { + driver.findElement(By.xpath(uiElementMapper.getElement("home.greg.sign.out.xpath"))).click(); + return new ManagementConsoleLoginPage(driver); + } + + public void checkNotificationCount(String value) { + WebElement notificationBubble = driver.findElement(By.id(uiElementMapper. + getElement("emm.notification.bubble.identifier"))); + if (!notificationBubble.getText().contains(value)) { + throw new IllegalStateException("Invalid amount of notification in home page"); + } + } +} diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/MDMHomePage.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/MDMHomePage.java new file mode 100644 index 00000000..c0262c22 --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/MDMHomePage.java @@ -0,0 +1,49 @@ +/* + * 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. + */ + +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.wso2.iot.integration.ui.pages.UIElementMapper; + +import java.io.IOException; + +public class MDMHomePage { + + private static final Log log = LogFactory.getLog(MDMHomePage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public MDMHomePage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + if (!driver.findElement(By.xpath(uiElementMapper.getElement("emm.dashboard.device.div.xpath"))).getText() + .contains("DEVICES")) { + throw new IllegalStateException("This is not the home page"); + } + } + + // public MDMLoginPage logout() throws IOException { + // driver.findElement(By.xpath("/html/body/div[3]/header/div/div[2]/div/div/div[3]/a")).click(); + // return new MDMLoginPage(driver); + // } +} diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/login/MDMLoginPage.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/login/MDMLoginPage.java new file mode 100644 index 00000000..d09d52b1 --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/login/MDMLoginPage.java @@ -0,0 +1,63 @@ +/* + * 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. + */ + +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.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.home.MDMHomePage; + +import java.io.IOException; + +public class MDMLoginPage { + + private static final Log log = LogFactory.getLog(MDMLoginPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public MDMLoginPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + if (!(driver.getCurrentUrl().contains("mdm/login"))) { + // Alternatively, we could navigate to the login page, perhaps logging out first + throw new IllegalStateException("This is not the login page"); + } + } + + /** + * Provide facility to log into the products using user credentials + * + * @param userName login user name + * @param password login password + * @return reference to Home page + * @throws java.io.IOException if mapper.properties file not found + */ + public MDMHomePage loginAs(String userName, String password) throws IOException { + WebElement userNameField = driver.findElement(By.name(uiElementMapper.getElement("emm.login.username"))); + WebElement passwordField = driver.findElement(By.name(uiElementMapper.getElement("emm.login.password"))); + userNameField.sendKeys(userName); + passwordField.sendKeys(password); + driver.findElement(By.xpath(uiElementMapper.getElement("emm.login.button.xpath"))).click(); + return new MDMHomePage(driver); + } +} diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/login/ManagementConsoleLoginPage.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/login/ManagementConsoleLoginPage.java new file mode 100644 index 00000000..13b2d4fe --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/login/ManagementConsoleLoginPage.java @@ -0,0 +1,68 @@ +/* + * 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. + */ + +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.wso2.iot.integration.ui.pages.UIElementMapper; + +import java.io.IOException; + +import org.wso2.iot.integration.ui.pages.home.HomePage; + +/** + * Login page class - contains methods to login to wso2 products. + */ +public class ManagementConsoleLoginPage { + private static final Log log = LogFactory.getLog(ManagementConsoleLoginPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public ManagementConsoleLoginPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + if (!(driver.getCurrentUrl().contains("login.jsp"))) { + // Alternatively, we could navigate to the login page, perhaps logging out first + throw new IllegalStateException("This is not the login page"); + } + } + + /** + * Provide facility to log into the products using user credentials + * + * @param userName login user name + * @param password login password + * @return reference to Home page + * @throws java.io.IOException if mapper.properties file not found + */ + public HomePage loginAs(String userName, String password) throws IOException { + log.info("Login as " + userName); + WebElement userNameField = driver.findElement(By.name(uiElementMapper.getElement("login.username"))); + WebElement passwordField = driver.findElement(By.name(uiElementMapper.getElement("login.password"))); + userNameField.sendKeys(userName); + passwordField.sendKeys(password); + driver.findElement(By.className(uiElementMapper.getElement("login.sign.in.button"))).click(); + return new HomePage(driver); + } + +} diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/platformConfiguration/PlatformConfiguration.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/platformConfiguration/PlatformConfiguration.java new file mode 100644 index 00000000..6a60a262 --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/platformConfiguration/PlatformConfiguration.java @@ -0,0 +1,76 @@ +/* + * 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. + */ + +package org.wso2.iot.integration.ui.pages.platformConfiguration; + +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 java.io.IOException; + +public class PlatformConfiguration { + + private static final Log log = LogFactory.getLog(PlatformConfiguration.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public PlatformConfiguration(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + if (!(driver.getCurrentUrl().contains("platform-configuration"))) { + throw new IllegalStateException("This is not the platform-configuration page"); + } + } + + public void changeGeneralConfig(String value) { + WebElement generalConfigButton = driver.findElement(By.xpath((uiElementMapper.getElement("emm.configuration.general.tab.identifier")))); + WebElement inputGeneralConfig = driver.findElement(By.xpath((uiElementMapper.getElement("emm.configuration.general.input.monitoringFr.identifier")))); + WebElement buttonSaveConfig = driver.findElement(By.xpath((uiElementMapper.getElement("emm.configuration.general.button.save.identifier")))); + + generalConfigButton.click(); + inputGeneralConfig.sendKeys(value); + buttonSaveConfig.click(); + } + + public void changeAndroidConfig(String value) { + WebElement androidConfigButton = driver.findElement(By.xpath((uiElementMapper.getElement("emm.configuration.android.tab.identifier")))); + WebElement inputAndroidConfig = driver.findElement(By.xpath((uiElementMapper.getElement("emm.configuration.android.input.identifier")))); + WebElement buttonSaveConfig = driver.findElement(By.xpath((uiElementMapper.getElement("emm.configuration.android.button.save.identifier")))); + + androidConfigButton.click(); + inputAndroidConfig.sendKeys(value); + buttonSaveConfig.click(); + + } + + public void changeWindowsConfig(String value) { + WebElement windowsConfigButton = driver.findElement(By.xpath((uiElementMapper.getElement("emm.configuration.widows.tab.identifier")))); + WebElement inputWindowsConfig = driver.findElement(By.xpath((uiElementMapper.getElement("emm.configuration.windows.input.identifier")))); + WebElement buttonSaveConfig = driver.findElement(By.xpath((uiElementMapper.getElement("emm.configuration.windows.button.save.identifier")))); + + windowsConfigButton.click(); + inputWindowsConfig.sendKeys(value); + buttonSaveConfig.click(); + + } +} diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/AddRolePage.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/AddRolePage.java new file mode 100644 index 00000000..4e31f2c1 --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/AddRolePage.java @@ -0,0 +1,55 @@ +/* + * 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. + */ + +package org.wso2.iot.integration.ui.pages.role; + +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 java.io.IOException; + +public class AddRolePage { + private static final Log log = LogFactory.getLog(RoleListPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public AddRolePage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + if (!(driver.getCurrentUrl().contains("roles/add-role"))) { + throw new IllegalStateException("This is not the add role page"); + } + } + + public void addRole(String role) { + WebElement roleName = driver.findElement(By.id(uiElementMapper.getElement("emm.roles.add.rolename.input"))); + roleName.sendKeys(role); + WebElement addRoleButton = driver.findElement(By.id(uiElementMapper.getElement("emm.roles.add.role.button"))); + addRoleButton.click(); + String resultText = driver.findElement(By.id(uiElementMapper.getElement("emm.roles.add.role.created.msg.div") + )).getText(); + if (!resultText.contains("ROLE WAS ADDED SUCCESSFULLY")) { + throw new IllegalStateException("Role was not added"); + } + } +} diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/EditRolePage.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/EditRolePage.java new file mode 100644 index 00000000..acb28ae2 --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/EditRolePage.java @@ -0,0 +1,55 @@ +/* + * 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. + */ + +package org.wso2.iot.integration.ui.pages.role; + +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 java.io.IOException; + +public class EditRolePage { + private static final Log log = LogFactory.getLog(RoleListPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public EditRolePage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + if (!(driver.getCurrentUrl().contains("roles/edit-role"))) { + throw new IllegalStateException("This is not the edit role page"); + } + } + + public void editRole(String role) { + WebElement roleName = driver.findElement(By.id(uiElementMapper.getElement("emm.roles.update.rolename.input"))); + roleName.sendKeys(role); + WebElement addRoleButton = driver.findElement(By.id(uiElementMapper.getElement("emm.roles.update.role.button"))); + addRoleButton.click(); + String resultText = driver.findElement(By.id(uiElementMapper.getElement("emm.roles.update.role.created.msg.div") + )).getText(); + if (!resultText.contains("ROLE WAS UPDATED SUCCESSFULLY")) { + throw new IllegalStateException("Role was not edited"); + } + } +} diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/RoleListPage.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/RoleListPage.java new file mode 100644 index 00000000..479c576d --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/role/RoleListPage.java @@ -0,0 +1,52 @@ +/* + * 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. + */ + +package org.wso2.iot.integration.ui.pages.role; + +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 java.io.IOException; + +public class RoleListPage { + + private static final Log log = LogFactory.getLog(RoleListPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public RoleListPage(WebDriver driver, String url) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + if (!(driver.getCurrentUrl().contains(url))) { + throw new IllegalStateException("This is not the roles list page"); + } + } + + public void addRole(String role) throws Exception { + WebElement addButton = driver.findElement(By.id(uiElementMapper.getElement("emm.roles.add.button"))); + addButton.click(); + AddRolePage rolePage = new AddRolePage(driver); + rolePage.addRole(role); + } + +} diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/AddUserPage.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/AddUserPage.java new file mode 100644 index 00000000..69c09f05 --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/AddUserPage.java @@ -0,0 +1,55 @@ +/* + * 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. + */ + +package org.wso2.iot.integration.ui.pages.user; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +import java.io.IOException; + +public class AddUserPage { + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public AddUserPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + if (driver.findElement(By.id(uiElementMapper.getElement("emm.user.add.button"))).getText() == null) { + throw new IllegalStateException("This is not the add user page"); + } + } + + public UserAddedPage addUser(String username, String firstName, String lastName, + String email) throws IOException { + WebElement usernameField = driver.findElement(By.id(uiElementMapper.getElement("emm.add.user.username"))); + WebElement firstNameField = driver.findElement(By.id(uiElementMapper.getElement("emm.add.user.firstname"))); + WebElement lastNameField = driver.findElement(By.id(uiElementMapper.getElement("emm.add.user.lastname"))); + WebElement emailField = driver.findElement(By.id(uiElementMapper.getElement("emm.add.user.email"))); + usernameField.sendKeys(username); + firstNameField.sendKeys(firstName); + lastNameField.sendKeys(lastName); + emailField.sendKeys(email); + driver.findElement(By.id(uiElementMapper.getElement("emm.user.add.button"))).click(); + return new UserAddedPage(driver); + } + +} \ No newline at end of file diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserAddedPage.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserAddedPage.java new file mode 100644 index 00000000..ff762c9b --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserAddedPage.java @@ -0,0 +1,39 @@ +/* + * 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. + */ + +package org.wso2.iot.integration.ui.pages.user; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.wso2.iot.integration.ui.pages.UIElementMapper; + +import java.io.IOException; + +public class UserAddedPage { + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public UserAddedPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + // Check that we're on the right page. + if (driver.findElement(By.tagName("canvas")) == null) { + throw new IllegalStateException("This is not the user added success page"); + } + } +} diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserEditPage.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserEditPage.java new file mode 100644 index 00000000..df0dd504 --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserEditPage.java @@ -0,0 +1,51 @@ +/* + * 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. + */ + +package org.wso2.iot.integration.ui.pages.user; + +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 java.io.IOException; + +public class UserEditPage { + private static final Log log = LogFactory.getLog(UserListPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public UserEditPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + //Check that we're on the right page. + if (driver.findElement(By.id(uiElementMapper.getElement("emm.user.add.button"))).getText() == null) { + throw new IllegalStateException("This is not the add edit page"); + } + } + + public void editUser() throws IOException { + WebElement deleteButton = driver.findElement(By.xpath(uiElementMapper.getElement("emm.user.delete.button"))); + deleteButton.click(); + WebElement deleteConfirmButton = driver.findElement(By.id(uiElementMapper.getElement("emm.user.delete.button" + + ".confirm"))); + deleteConfirmButton.click(); + } +} \ No newline at end of file diff --git a/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserListPage.java b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserListPage.java new file mode 100644 index 00000000..decf570a --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/user/UserListPage.java @@ -0,0 +1,51 @@ +/* + * 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. + */ + +package org.wso2.iot.integration.ui.pages.user; + +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 java.io.IOException; + +public class UserListPage { + private static final Log log = LogFactory.getLog(UserListPage.class); + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public UserListPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + if (!(driver.getCurrentUrl().contains("mdm/users"))) { + // Alternatively, we could navigate to the login page, perhaps logging out first + throw new IllegalStateException("This is not the list users page"); + } + } + + public void deleteUser() throws IOException { + WebElement deleteButton = driver.findElement(By.xpath(uiElementMapper.getElement("emm.user.delete.button"))); + deleteButton.click(); + WebElement deleteConfirmButton = driver.findElement(By.id(uiElementMapper.getElement("emm.user.delete.button" + + ".confirm"))); + deleteConfirmButton.click(); + } +} diff --git a/modules/integration/tests-common/ui-pages/src/main/resources/mapper.properties b/modules/integration/tests-common/ui-pages/src/main/resources/mapper.properties new file mode 100644 index 00000000..00598f6e --- /dev/null +++ b/modules/integration/tests-common/ui-pages/src/main/resources/mapper.properties @@ -0,0 +1,512 @@ +# +# 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. +# + +emm.login.username=username +emm.login.password=password +emm.dashboard.device.div.xpath=/html/body/div[3]/div[7]/div[1]/div/div/div[1] +emm.login.button.xpath=/html/body/div[3]/div[3]/div/button +emm.user.add.button = add-user-btn +emm.add.user.username=username +emm.add.user.firstname=firstname +emm.add.user.lastname=lastname +emm.add.user.email=emailAddress +emm.user.delete.button=//*[@id="inosh"]/td[5]/a[3] +emm.user.delete.button.confirm=remove-user-yes-link +emm.user.delete.button.success=remove-user-success-link +emm.roles.add.button=appbar-btn- +emm.roles.add.rolename.input=rolename +emm.roles.add.role.button=add-role-btn +emm.roles.add.role.created.msg.div=role-created-msg +emm.roles.update.rolename.input=rolename +emm.roles.update.role.button=add-role-btn +emm.roles.update.role.created.msg.div=role-created-msg +emm.roles.update.role.created.success.msg=ROLE WAS UPDATED SUCCESSFULLY +emm.configuration.android.tab.identifier=id('androidConfigLink') +emm.configuration.widows.tab.identifier=id('windowsConfigLink') +emm.configuration.ios.tab.identifier=id('iosConfigLink') +emm.configuration.general.tab.identifier=id('generalConfigLink') +emm.configuration.general.input.monitoringFr.identifier=id('monitoring-config-frequency') +emm.configuration.general.button.save.identifier=id('monitoring-config-frequency') +emm.configuration.saved.lable.identifier=id('record-created-msg') +emm.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. +emm.configuration.saved.button.back.identifier=id('btnBack') +emm.configuration.saved.button.back.val=Go back to configurations +emm.configuration.saved.button.exit.identifier=id('btnExit') +emm.configuration.saved.button.exit.val=Exit +emm.configuration.android.select.identifier=id('android-config-notifier') +emm.configuration.android.input.identifier=id('android-config-notifier-frequency') +emm.configuration.android.button.save.identifier=id('save-android-btn') +emm.configuration.windows.input.identifier=id('windows-config-notifier-frequency') +emm.configuration.windows.button.save.identifier=id('save-windows-btn') +emm.configuration.android.button.save.identifier=id('save-android-btn') +emm.notification.bubble.identifier=notification-bubble +emm.notification.unread.identifier=unReadNotifications +emm.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=middle +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 + +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-common/web-ui-pages/pom.xml b/modules/integration/tests-common/web-ui-pages/pom.xml index 7dcce232..0dbd7992 100644 --- a/modules/integration/tests-common/web-ui-pages/pom.xml +++ b/modules/integration/tests-common/web-ui-pages/pom.xml @@ -22,7 +22,7 @@ org.wso2.iot tests-common - 3.1.0-SNAPSHOT + 3.0.0-SNAPSHOT ../pom.xml diff --git a/modules/integration/tests-integration-old/pom.xml b/modules/integration/tests-integration-old/pom.xml new file mode 100644 index 00000000..aa4d7c95 --- /dev/null +++ b/modules/integration/tests-integration-old/pom.xml @@ -0,0 +1,266 @@ + + + + + + org.wso2.iot + wso2iot-integration + 3.0.0-SNAPSHOT + ../pom.xml + + + 4.0.0 + tests-integration + jar + WSO2 IoT - Backend Integration Tests + + + + + maven-surefire-plugin + false + 2.12.4 + + -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m + false + + src/test/resources/testng-server-mgt.xml + src/test/resources/testng.xml + + + + + maven.test.haltafterfailure + false + + + carbon.zip + + ${basedir}/../../distribution/target/wso2iot-${product.iot.version}.zip + + + + framework.resource.location + + ${basedir}/src/test/resources/ + + + + usedefaultlisteners + false + + ${basedir}/target/security-verifier/ + ${basedir}/src/test/resources/instrumentation.txt + ${basedir}/src/test/resources/filters.txt + + ${basedir}/target + false + + + + maven-dependency-plugin + + + + + copy-jacoco-dependencies + compile + + copy-dependencies + + + ${project.build.directory}/jacoco + jar + org.jacoco.agent + + + + + + copy-secVerifier + compile + + copy-dependencies + + + ${basedir}/target/security-verifier + aar + SecVerifier + true + + + + + unpack-jks + compile + + unpack + + + + + org.wso2.iot + wso2iot + ${product.iot.version} + zip + true + ${basedir}/target/tobeCopied/ + **/*.jks + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + test-jar + + + + + + org.apache.maven.plugins + maven-surefire-report-plugin + 2.7.1 + + ${basedir}/target/report + registry-api-test + + + + integration-test + + report-only + + + + + + + maven-resources-plugin + 2.6 + + + copy-resources-jks + compile + + copy-resources + + + ${basedir}/src/test/resources/keystores/products + + + + + ${basedir}/target/tobeCopied/wso2iot-${product.iot.version}/repository/resources/security/ + + + **/*.jks + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + test-jar + + + + + + + + + + + + org.wso2.carbon.automation + org.wso2.carbon.automation.engine + compile + + + org.wso2.carbon.automation + org.wso2.carbon.automation.extensions + compile + + + org.wso2.carbon.automation + org.wso2.carbon.automation.test.utils + compile + + + org.wso2.carbon.automationutils + org.wso2.carbon.integration.common.utils + compile + + + org.wso2.carbon.automationutils + org.wso2.carbon.integration.common.extensions + compile + + + com.google.code.gson + gson + compile + + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.core + compile + + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.common + compile + + + org.wso2.carbon.devicemgt + org.wso2.carbon.policy.mgt.common + compile + + + org.wso2.carbon.devicemgt + org.wso2.carbon.policy.mgt.core + compile + + + org.wso2.carbon.devicemgt + org.wso2.carbon.certificate.mgt.core + compile + + + + + diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/AssertUtil.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/AssertUtil.java similarity index 97% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/AssertUtil.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/AssertUtil.java index 5a7874b1..18f088c4 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/AssertUtil.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/AssertUtil.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.common; +package org.wso2.mdm.integration.common; import com.google.gson.JsonElement; import com.google.gson.JsonObject; diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/Constants.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/Constants.java similarity index 99% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/Constants.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/Constants.java index 537c9538..787a14cf 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/Constants.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/Constants.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.common; +package org.wso2.mdm.integration.common; import java.io.File; diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/IOTHttpClient.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/MDMHttpClient.java similarity index 74% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/IOTHttpClient.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/MDMHttpClient.java index 404175e6..01142195 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/IOTHttpClient.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/MDMHttpClient.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.common; +package org.wso2.mdm.integration.common; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; @@ -27,24 +27,27 @@ import org.apache.commons.httpclient.protocol.Protocol; import org.apache.commons.httpclient.protocol.ProtocolSocketFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.automation.engine.context.AutomationContext; +import org.wso2.carbon.automation.engine.context.TestUserMode; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; /** * This class creates a customised Http Client Class */ -public class IOTHttpClient { +public class MDMHttpClient { private static final String AUTHORIZATION = "Authorization"; - private static Log log = LogFactory.getLog(IOTHttpClient.class); + private static Log log = LogFactory.getLog(MDMHttpClient.class); private String backEndUrl; private String authrizationString; private Map requestHeaders = new HashMap(); - public IOTHttpClient(String backEndUrl, String contentType, String authorization) { + public MDMHttpClient(String backEndUrl, String contentType, String authorization) { this.backEndUrl = backEndUrl; this.requestHeaders.put(Constants.CONTENT_TYPE, contentType); @@ -74,7 +77,7 @@ public class IOTHttpClient { this.requestHeaders.remove(headerName); } - public IOTResponse post(String endpoint, String body) { + public MDMResponse post(String endpoint, String body) { HttpClient client = new HttpClient(); try { ProtocolSocketFactory socketFactory = new EasySSLProtocolSocketFactory(); @@ -86,20 +89,20 @@ public class IOTHttpClient { StringRequestEntity requestEntity = new StringRequestEntity(body, requestHeaders.get(Constants.CONTENT_TYPE), Constants.UTF8); method.setRequestEntity(requestEntity); - IOTResponse iotResponse = new IOTResponse(); - iotResponse.setStatus(client.executeMethod(method)); - iotResponse.setBody(method.getResponseBodyAsString()); - return iotResponse; + MDMResponse mdmResponse = new MDMResponse(); + mdmResponse.setStatus(client.executeMethod(method)); + mdmResponse.setBody(method.getResponseBodyAsString()); + return mdmResponse; } catch (GeneralSecurityException e) { - log.error("Failure occurred at IOTResponse post for GeneralSecurityException", e); + log.error("Failure occurred at MDMResponse post for GeneralSecurityException", e); } catch (IOException e) { - log.error("Failure occured at IOTResponse post for IOException", e); + log.error("Failure occured at MDMResponse post for IOException", e); } return null; } - public IOTResponse put(String endpoint, String body) { + public MDMResponse put(String endpoint, String body) { HttpClient client = new HttpClient(); try { ProtocolSocketFactory socketFactory = new EasySSLProtocolSocketFactory(); @@ -111,20 +114,20 @@ public class IOTHttpClient { StringRequestEntity requestEntity = new StringRequestEntity( body, requestHeaders.get(Constants.CONTENT_TYPE), Constants.UTF8); method.setRequestEntity(requestEntity); - IOTResponse iotResponse = new IOTResponse(); - iotResponse.setStatus(client.executeMethod(method)); - iotResponse.setBody(method.getResponseBodyAsString()); - return iotResponse; + MDMResponse mdmResponse = new MDMResponse(); + mdmResponse.setStatus(client.executeMethod(method)); + mdmResponse.setBody(method.getResponseBodyAsString()); + return mdmResponse; } catch (GeneralSecurityException e) { - log.error("Failure occurred at IOTResponse put for GeneralSecurityException", e); + log.error("Failure occurred at MDMResponse put for GeneralSecurityException", e); } catch (IOException e) { - log.error("Failure occurred at IOTResponse put for IO Exception", e); + log.error("Failure occurred at MDMResponse put for IO Exception", e); } return null; } - public IOTResponse get(String endpoint) { + public MDMResponse get(String endpoint) { HttpClient client = new HttpClient(); try { ProtocolSocketFactory socketFactory = new EasySSLProtocolSocketFactory(); @@ -136,21 +139,21 @@ public class IOTHttpClient { method.setRequestHeader(AUTHORIZATION, authrizationString); method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); - IOTResponse iotResponse = new IOTResponse(); - iotResponse.setStatus(client.executeMethod(method)); - iotResponse.setBody(new String(method.getResponseBody())); - return iotResponse; + MDMResponse mdmResponse = new MDMResponse(); + mdmResponse.setStatus(client.executeMethod(method)); + mdmResponse.setBody(new String(method.getResponseBody())); + return mdmResponse; } catch (GeneralSecurityException e) { - log.error("Failure occurred at IOTResponse get for GeneralSecurityException", e); + log.error("Failure occurred at MDMResponse get for GeneralSecurityException", e); } catch (IOException e) { - log.error("Failure occurred at IOTResponse get for IOException", e); + log.error("Failure occurred at MDMResponse get for IOException", e); } return null; } - public IOTResponse delete(String endpoint) { + public MDMResponse delete(String endpoint) { HttpClient client = new HttpClient(); @@ -167,15 +170,15 @@ public class IOTHttpClient { method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); - IOTResponse iotResponse = new IOTResponse(); - iotResponse.setStatus(client.executeMethod(method)); - iotResponse.setBody(method.getResponseBodyAsString()); - return iotResponse; + MDMResponse mdmResponse = new MDMResponse(); + mdmResponse.setStatus(client.executeMethod(method)); + mdmResponse.setBody(method.getResponseBodyAsString()); + return mdmResponse; } catch (GeneralSecurityException e) { - log.error("Failure occurred at IOTResponse delete for GeneralSecurityException", e); + log.error("Failure occurred at MDMResponse delete for GeneralSecurityException", e); } catch (IOException e) { - log.error("Failure occurred at IOTResponse delete for IOException", e); + log.error("Failure occurred at MDMResponse delete for IOException", e); } return null; } diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/IOTResponse.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/MDMResponse.java similarity index 93% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/IOTResponse.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/MDMResponse.java index 8affc40a..8380a8a1 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/IOTResponse.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/MDMResponse.java @@ -15,12 +15,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.common; +package org.wso2.mdm.integration.common; /** * This class contains the functions to handle a HTTP Response */ -public class IOTResponse { +public class MDMResponse { private int status; private String body; diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/OAuthUtil.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/OAuthUtil.java similarity index 98% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/OAuthUtil.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/OAuthUtil.java index bfa54cdb..95665a75 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/OAuthUtil.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/OAuthUtil.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.iot.integration.common; +package org.wso2.mdm.integration.common; import org.apache.commons.net.util.Base64; import org.json.JSONObject; diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/PayloadGenerator.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/PayloadGenerator.java similarity index 97% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/PayloadGenerator.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/PayloadGenerator.java index 74c26f46..5999297c 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/PayloadGenerator.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/PayloadGenerator.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.iot.integration.common; +package org.wso2.mdm.integration.common; import com.google.gson.JsonObject; import com.google.gson.JsonParser; diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/RestClient.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/RestClient.java similarity index 98% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/RestClient.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/RestClient.java index 620d59b6..a6b4e7de 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/RestClient.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/RestClient.java @@ -15,8 +15,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.common; +package org.wso2.mdm.integration.common; +import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException; import org.wso2.carbon.automation.test.utils.http.client.HttpRequestUtil; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/TestBase.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/TestBase.java similarity index 98% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/TestBase.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/TestBase.java index 6883e190..1e91f6b4 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/common/TestBase.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/common/TestBase.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.common; +package org.wso2.mdm.integration.common; import org.wso2.carbon.automation.engine.context.AutomationContext; import org.wso2.carbon.automation.engine.context.TestUserMode; diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/configuration/ConfigurationManagement.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/configuration/ConfigurationManagement.java similarity index 93% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/configuration/ConfigurationManagement.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/configuration/ConfigurationManagement.java index 0fe0525d..f44dde62 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/configuration/ConfigurationManagement.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/configuration/ConfigurationManagement.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.iot.integration.configuration; +package org.wso2.mdm.integration.configuration; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; @@ -24,7 +24,7 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; /** * This class contains integration tests for configuration management backend services. @@ -33,7 +33,7 @@ public class ConfigurationManagement extends TestBase { private RestClient client; - @BeforeClass(alwaysRun = true, groups = { Constants.ConfigurationManagement.CONFIGURATION_MANAGEMENT_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.ConfigurationManagement.CONFIGURATION_MANAGEMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL); diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/configuration/AndroidConfigurationManagement.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/configuration/AndroidConfigurationManagement.java similarity index 95% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/configuration/AndroidConfigurationManagement.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/configuration/AndroidConfigurationManagement.java index 11d8ca8a..b7a7a325 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/configuration/AndroidConfigurationManagement.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/configuration/AndroidConfigurationManagement.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.iot.integration.device.configuration; +package org.wso2.mdm.integration.device.configuration; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; @@ -24,7 +24,7 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; /** * This class contains integration tests for Android configuration management backend services. @@ -33,7 +33,7 @@ public class AndroidConfigurationManagement extends TestBase { private RestClient client; - @BeforeClass(alwaysRun = true, groups = { Constants.AndroidConfigurationManagement.DEVICE_CONFIGURATION_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.AndroidConfigurationManagement.DEVICE_CONFIGURATION_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL); diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/enrollment/AndroidEnrollment.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/enrollment/AndroidEnrollment.java similarity index 96% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/enrollment/AndroidEnrollment.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/enrollment/AndroidEnrollment.java index b2205cee..7f01d7ce 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/enrollment/AndroidEnrollment.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/enrollment/AndroidEnrollment.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.device.enrollment; +package org.wso2.mdm.integration.device.enrollment; import com.google.gson.JsonObject; import junit.framework.Assert; @@ -24,7 +24,7 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; /** * This contains testing of Android device enrollment which is necessary to run prior to all other Android related @@ -33,7 +33,7 @@ import org.wso2.iot.integration.common.*; public class AndroidEnrollment extends TestBase { private RestClient client; - @BeforeClass(alwaysRun = true, groups = { Constants.AndroidEnrollment.ENROLLMENT_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.AndroidEnrollment.ENROLLMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL); diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/enrollment/WindowsEnrollment.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/enrollment/WindowsEnrollment.java similarity index 94% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/enrollment/WindowsEnrollment.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/enrollment/WindowsEnrollment.java index fe465ae4..24a53d95 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/enrollment/WindowsEnrollment.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/enrollment/WindowsEnrollment.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.device.enrollment; +package org.wso2.mdm.integration.device.enrollment; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; @@ -25,10 +25,10 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.Constants; -import org.wso2.iot.integration.common.OAuthUtil; -import org.wso2.iot.integration.common.RestClient; -import org.wso2.iot.integration.common.TestBase; +import org.wso2.mdm.integration.common.Constants; +import org.wso2.mdm.integration.common.OAuthUtil; +import org.wso2.mdm.integration.common.RestClient; +import org.wso2.mdm.integration.common.TestBase; import java.io.File; import java.net.URL; @@ -42,7 +42,7 @@ public class WindowsEnrollment extends TestBase { private static String bsd; private RestClient client; - @BeforeClass(alwaysRun = true, groups = { Constants.WindowsEnrollment.WINDOWS_ENROLLMENT_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.WindowsEnrollment.WINDOWS_ENROLLMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL); diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/mgt/AndroidDeviceManagement.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/mgt/AndroidDeviceManagement.java similarity index 98% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/mgt/AndroidDeviceManagement.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/mgt/AndroidDeviceManagement.java index 5b20f691..58f18ae1 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/mgt/AndroidDeviceManagement.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/mgt/AndroidDeviceManagement.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.iot.integration.device.mgt; +package org.wso2.mdm.integration.device.mgt; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @@ -27,7 +27,8 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; + /** * This class contains integration tests for Android device management backend services. diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/operation/AndroidOperation.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/operation/AndroidOperation.java similarity index 98% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/operation/AndroidOperation.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/operation/AndroidOperation.java index fdb46a6e..dcf980c0 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/operation/AndroidOperation.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/operation/AndroidOperation.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.device.operation; +package org.wso2.mdm.integration.device.operation; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @@ -26,7 +26,7 @@ import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; /** * This contain tests to check operations supported by Android. Test are executed against a previously enrolled device @@ -34,7 +34,7 @@ import org.wso2.iot.integration.common.*; public class AndroidOperation extends TestBase { private RestClient client; - @BeforeTest(alwaysRun = true, groups = { Constants.AndroidEnrollment.ENROLLMENT_GROUP}) + @BeforeTest(alwaysRun = true, groups = {Constants.AndroidEnrollment.ENROLLMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL); diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/policy/AndroidPolicy.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/policy/AndroidPolicy.java similarity index 88% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/policy/AndroidPolicy.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/policy/AndroidPolicy.java index ab3d6ea1..a112e819 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/policy/AndroidPolicy.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/device/policy/AndroidPolicy.java @@ -16,13 +16,15 @@ * under the License. */ -package org.wso2.iot.integration.device.policy; +package org.wso2.mdm.integration.device.policy; +import junit.framework.Assert; +import org.apache.commons.httpclient.HttpStatus; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; /** * This contain tests to check policy endpoints supported by Android. @@ -32,7 +34,7 @@ public class AndroidPolicy extends TestBase { private RestClient client; - @BeforeTest(alwaysRun = true, groups = { Constants.AndroidEnrollment.ENROLLMENT_GROUP}) + @BeforeTest(alwaysRun = true, groups = {Constants.AndroidEnrollment.ENROLLMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL); diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/feature/FeatureManagement.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/feature/FeatureManagement.java similarity index 83% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/feature/FeatureManagement.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/feature/FeatureManagement.java index 64511e45..415cfb1c 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/feature/FeatureManagement.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/feature/FeatureManagement.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.feature; +package org.wso2.mdm.integration.feature; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; @@ -23,10 +23,7 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.Constants; -import org.wso2.iot.integration.common.OAuthUtil; -import org.wso2.iot.integration.common.RestClient; -import org.wso2.iot.integration.common.TestBase; +import org.wso2.mdm.integration.common.*; /** * This class contains integration tests for feature management backend services. @@ -35,7 +32,7 @@ public class FeatureManagement extends TestBase { private RestClient client; - @BeforeClass(alwaysRun = true, groups = { Constants.FeatureManagement.FEATURE_MANAGEMENT_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.FeatureManagement.FEATURE_MANAGEMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL); diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/license/LicenseManagement.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/license/LicenseManagement.java similarity index 91% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/license/LicenseManagement.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/license/LicenseManagement.java index a96e2abd..3aae4a03 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/license/LicenseManagement.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/license/LicenseManagement.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.license; +package org.wso2.mdm.integration.license; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; @@ -23,7 +23,7 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; /** * This class contains integration tests for license management backend services. @@ -32,7 +32,7 @@ public class LicenseManagement extends TestBase { private RestClient client; - @BeforeClass(alwaysRun = true, groups = { Constants.LicenseManagement.LICENSE_MANAGEMENT_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.LicenseManagement.LICENSE_MANAGEMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL); diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/mobileDevice/MobileDeviceManagement.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/mobileDevice/MobileDeviceManagement.java similarity index 85% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/mobileDevice/MobileDeviceManagement.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/mobileDevice/MobileDeviceManagement.java index caf575f6..762fec4e 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/mobileDevice/MobileDeviceManagement.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/mobileDevice/MobileDeviceManagement.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.mobileDevice; +package org.wso2.mdm.integration.mobileDevice; import com.google.gson.JsonObject; import junit.framework.Assert; @@ -23,19 +23,19 @@ import org.apache.commons.httpclient.HttpStatus; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; /** * This class contains integration tests for API Device management backend services. */ public class MobileDeviceManagement extends TestBase { - private IOTHttpClient client; + private MDMHttpClient client; - @BeforeClass(alwaysRun = true, groups = { Constants.MobileDeviceManagement.MOBILE_DEVICE_MANAGEMENT_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.MobileDeviceManagement.MOBILE_DEVICE_MANAGEMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL); - this.client = new IOTHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); + this.client = new MDMHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); } @Test(description = "Add an Android device.") @@ -44,7 +44,7 @@ public class MobileDeviceManagement extends TestBase { Constants.AndroidEnrollment.ENROLLMENT_PAYLOAD_FILE_NAME, Constants.HTTP_METHOD_POST); enrollmentData.addProperty(Constants.DEVICE_IDENTIFIER_KEY, Constants.DEVICE_ID); - IOTResponse response = client.post(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT, enrollmentData.toString()); + MDMResponse response = client.post(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT, enrollmentData.toString()); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload( Constants.AndroidEnrollment.ENROLLMENT_RESPONSE_PAYLOAD_FILE_NAME, @@ -53,7 +53,7 @@ public class MobileDeviceManagement extends TestBase { @Test(dependsOnMethods = {"addEnrollment"}, description = "Test count devices") public void testCountDevices() throws Exception { - IOTResponse response = client.get(Constants.MobileDeviceManagement.GET_DEVICE_COUNT_ENDPOINT); + MDMResponse response = client.get(Constants.MobileDeviceManagement.GET_DEVICE_COUNT_ENDPOINT); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); Assert.assertTrue(response.getBody().toString().equals(Constants.MobileDeviceManagement.NO_OF_DEVICES)); @@ -61,13 +61,13 @@ public class MobileDeviceManagement extends TestBase { @Test(dependsOnMethods = {"addEnrollment"}, description = "Test view devices") public void testViewDevices() throws Exception { - IOTResponse response = client.get(Constants.MobileDeviceManagement.GET_ALL_DEVICES_ENDPOINT); + MDMResponse response = client.get(Constants.MobileDeviceManagement.GET_ALL_DEVICES_ENDPOINT); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); } @Test(dependsOnMethods = {"addEnrollment"}, description = "Test view device types") public void testViewDeviceTypes() throws Exception { - IOTResponse response = client.get(Constants.MobileDeviceManagement.VIEW_DEVICE_TYPES_ENDPOINT); + MDMResponse response = client.get(Constants.MobileDeviceManagement.VIEW_DEVICE_TYPES_ENDPOINT); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); Assert.assertEquals(PayloadGenerator.getJsonPayloadToString (Constants.MobileDeviceManagement.VIEW_DEVICE_RESPONSE_PAYLOAD_FILE_NAME), response.getBody()); diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/mobileDevice/MobileDeviceManagementWithNoDevices.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/mobileDevice/MobileDeviceManagementWithNoDevices.java similarity index 82% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/mobileDevice/MobileDeviceManagementWithNoDevices.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/mobileDevice/MobileDeviceManagementWithNoDevices.java index 2f32fe27..6e3ea8e2 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/mobileDevice/MobileDeviceManagementWithNoDevices.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/mobileDevice/MobileDeviceManagementWithNoDevices.java @@ -16,38 +16,38 @@ * under the License. */ -package org.wso2.iot.integration.mobileDevice; +package org.wso2.mdm.integration.mobileDevice; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; /** * This class contains integration tests for API Mobile Device Management with No Devices Enrolled. */ public class MobileDeviceManagementWithNoDevices extends TestBase { - private IOTHttpClient client; + private MDMHttpClient client; - @BeforeClass(alwaysRun = true, groups = { Constants.MobileDeviceManagement.MOBILE_DEVICE_MANAGEMENT_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.MobileDeviceManagement.MOBILE_DEVICE_MANAGEMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL); - this.client = new IOTHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); + this.client = new MDMHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); } @Test(description = "Test count devices with no added devices") public void testCountDevicesWithNoDevices() throws Exception { - IOTResponse response = client.get(Constants.MobileDeviceManagement.GET_DEVICE_COUNT_ENDPOINT); + MDMResponse response = client.get(Constants.MobileDeviceManagement.GET_DEVICE_COUNT_ENDPOINT); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); Assert.assertEquals(Constants.ZERO, response.getBody()); } @Test(description = "Test view devices with no added devices") public void testViewDevicesWithNoDevices() throws Exception { - IOTResponse response = client.get(Constants.MobileDeviceManagement.GET_ALL_DEVICES_ENDPOINT); + MDMResponse response = client.get(Constants.MobileDeviceManagement.GET_ALL_DEVICES_ENDPOINT); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); Assert.assertEquals(response.getBody(), Constants.NULL); } diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/notification/NotificationManagement.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/notification/NotificationManagement.java similarity index 97% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/notification/NotificationManagement.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/notification/NotificationManagement.java index 9056f8a0..b0d5fe8b 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/notification/NotificationManagement.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/notification/NotificationManagement.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.notification; +package org.wso2.mdm.integration.notification; import com.google.gson.JsonObject; import junit.framework.Assert; @@ -24,7 +24,7 @@ import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; /** * This class contains integration tests for notification management backend services. diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/operation/OperationManagement.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/operation/OperationManagement.java similarity index 89% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/operation/OperationManagement.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/operation/OperationManagement.java index a7e39941..833e229f 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/operation/OperationManagement.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/operation/OperationManagement.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.iot.integration.operation; +package org.wso2.mdm.integration.operation; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @@ -25,7 +25,7 @@ import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -35,14 +35,14 @@ import org.testng.annotations.Test; public class OperationManagement extends TestBase { private JsonObject device; - private IOTHttpClient client; + private MDMHttpClient client; private RestClient rclient; - @BeforeClass(alwaysRun = true, groups = { Constants.OperationManagement.OPERATION_MANAGEMENT_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.OperationManagement.OPERATION_MANAGEMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL); - this.client = new IOTHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); + this.client = new MDMHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); this.rclient = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); } @@ -52,7 +52,7 @@ public class OperationManagement extends TestBase { Constants.AndroidEnrollment.ENROLLMENT_PAYLOAD_FILE_NAME, Constants.HTTP_METHOD_POST); enrollmentData.addProperty(Constants.DEVICE_IDENTIFIER_KEY, Constants.DEVICE_ID); - IOTResponse response = client.post(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT, enrollmentData.toString()); + MDMResponse response = client.post(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT, enrollmentData.toString()); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload( Constants.AndroidEnrollment.ENROLLMENT_RESPONSE_PAYLOAD_FILE_NAME, @@ -75,7 +75,7 @@ public class OperationManagement extends TestBase { @Test(dependsOnMethods = {"testInstallApps"}, description = "Test get device apps with wrong Device ID") public void testGetDeviceAppsWithWrongDeviceID() throws Exception { - IOTResponse response = client.get(Constants.OperationManagement.GET_DEVICE_APPS_ENDPOINT + + MDMResponse response = client.get(Constants.OperationManagement.GET_DEVICE_APPS_ENDPOINT + Constants.NUMBER_NOT_EQUAL_TO_DEVICE_ID + Constants.OperationManagement.PATH_APPS); Assert.assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, response.getStatus()); @@ -83,7 +83,7 @@ public class OperationManagement extends TestBase { @Test(dependsOnMethods = {"testInstallApps"}, description = "Test get operations for device with wrong Device ID") public void testGetDeviceOperationsWithWrongDeviceID() throws Exception { - IOTResponse response = client.get(Constants.OperationManagement.GET_DEVICE_OPERATIONS_ENDPOINT + Constants.DEVICE_IMEI); + MDMResponse response = client.get(Constants.OperationManagement.GET_DEVICE_OPERATIONS_ENDPOINT + Constants.DEVICE_IMEI); Assert.assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, response.getStatus()); } } \ No newline at end of file diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/policy/PolicyManagement.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/policy/PolicyManagement.java similarity index 86% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/policy/PolicyManagement.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/policy/PolicyManagement.java index 70ec513a..f7b338f9 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/policy/PolicyManagement.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/policy/PolicyManagement.java @@ -15,33 +15,33 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.policy; +package org.wso2.mdm.integration.policy; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; /** * This class contains integration tests for policy management backend services. */ public class PolicyManagement extends TestBase { - private IOTHttpClient client; + private MDMHttpClient client; - @BeforeClass(alwaysRun = true, groups = { Constants.PolicyManagement.POLICY_MANAGEMENT_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.PolicyManagement.POLICY_MANAGEMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL); - this.client = new IOTHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); + this.client = new MDMHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); } @Test(description = "Test add policy.") public void testAddPolicy() throws Exception { - IOTResponse response = client.post(Constants.PolicyManagement.ADD_POLICY_ENDPOINT, + MDMResponse response = client.post(Constants.PolicyManagement.ADD_POLICY_ENDPOINT, PayloadGenerator.getJsonPayload(Constants.PolicyManagement.POLICY_PAYLOAD_FILE_NAME, Constants.HTTP_METHOD_POST).toString()); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); @@ -52,7 +52,7 @@ public class PolicyManagement extends TestBase { @Test(description = "Test view policy list.", dependsOnMethods = {"testAddPolicy"}) public void testViewPolicyList() throws Exception { - IOTResponse response = client.get(Constants.PolicyManagement.VIEW_POLICY_LIST_ENDPOINT); + MDMResponse response = client.get(Constants.PolicyManagement.VIEW_POLICY_LIST_ENDPOINT); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); } @@ -60,7 +60,7 @@ public class PolicyManagement extends TestBase { @Test(description = "Test update policy.", dependsOnMethods = {"testViewPolicyList"}) public void testUpdatePolicy() throws Exception { - IOTResponse response = client.put(Constants.PolicyManagement.UPDATE_POLICY_ENDPOINT, + MDMResponse response = client.put(Constants.PolicyManagement.UPDATE_POLICY_ENDPOINT, PayloadGenerator.getJsonPayload( Constants.PolicyManagement.POLICY_PAYLOAD_FILE_NAME, Constants.HTTP_METHOD_PUT).toString()); @@ -72,7 +72,7 @@ public class PolicyManagement extends TestBase { @Test(description = "Test remove policy.", dependsOnMethods = {"testUpdatePolicy"}) public void testRemovePolicy() throws Exception { - IOTResponse response = client.post(Constants.PolicyManagement.REMOVE_POLICY_ENDPOINT, + MDMResponse response = client.post(Constants.PolicyManagement.REMOVE_POLICY_ENDPOINT, Constants.PolicyManagement.REMOVE_POLICY_PAYLOAD_FILE_NAME); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); Assert.assertEquals(PayloadGenerator.getJsonPayload(Constants.PolicyManagement.POLICY_RESPONSE_PAYLOAD_FILE_NAME, diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/role/RoleManagement.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/role/RoleManagement.java similarity index 82% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/role/RoleManagement.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/role/RoleManagement.java index 185bca4c..999f888f 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/role/RoleManagement.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/role/RoleManagement.java @@ -15,32 +15,33 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.iot.integration.role; +package org.wso2.mdm.integration.role; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.iot.integration.common.*; +import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; +import org.wso2.mdm.integration.common.*; /** * This class contains integration tests for role management backend services. */ public class RoleManagement extends TestBase { - private IOTHttpClient client; + private MDMHttpClient client; - @BeforeClass(alwaysRun = true, groups = { Constants.RoleManagement.ROLE_MANAGEMENT_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.RoleManagement.ROLE_MANAGEMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL); - this.client = new IOTHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); + this.client = new MDMHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); } @Test(description = "Test add role.") public void testAddRole() throws Exception { - IOTResponse response = client.post(Constants.RoleManagement.ADD_ROLE_ENDPOINT, + MDMResponse response = client.post(Constants.RoleManagement.ADD_ROLE_ENDPOINT, PayloadGenerator.getJsonPayload(Constants.RoleManagement.ROLE_PAYLOAD_FILE_NAME, Constants.HTTP_METHOD_POST).toString()); Assert.assertEquals(HttpStatus.SC_CREATED, response.getStatus()); @@ -48,7 +49,7 @@ public class RoleManagement extends TestBase { @Test(description = "Test update permission role.", dependsOnMethods = {"testAddRole"}) public void testUpdateRolePermission() throws Exception { - IOTResponse response = client.put(Constants.RoleManagement.UPDATE_ROLE_PERMISSION_ENDPOINT, + MDMResponse response = client.put(Constants.RoleManagement.UPDATE_ROLE_PERMISSION_ENDPOINT, PayloadGenerator.getJsonPayload(Constants.RoleManagement.UPDATE_ROLE_PERMISSION_PAYLOAD_FILE_NAME, Constants.HTTP_METHOD_PUT).toString()); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); @@ -56,7 +57,7 @@ public class RoleManagement extends TestBase { @Test(description = "Test remove user.", dependsOnMethods = {"testUpdateRolePermission"}) public void testRemoveRole() throws Exception { - IOTResponse response = client.delete(Constants.RoleManagement.REMOVE_ROLE_ENDPOINT); + MDMResponse response = client.delete(Constants.RoleManagement.REMOVE_ROLE_ENDPOINT); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); } } \ No newline at end of file diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/user/UserManagement.java b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/user/UserManagement.java similarity index 96% rename from modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/user/UserManagement.java rename to modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/user/UserManagement.java index debc6222..dcd5ed48 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/user/UserManagement.java +++ b/modules/integration/tests-integration-old/src/test/java/org/wso2/mdm/integration/user/UserManagement.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.iot.integration.user; +package org.wso2.mdm.integration.user; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; @@ -24,7 +24,7 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.mdm.integration.common.*; /** * This class contains integration tests for user management backend services. @@ -33,7 +33,7 @@ public class UserManagement extends TestBase { private RestClient client; - @BeforeClass(alwaysRun = true, groups = { Constants.UserManagement.USER_MANAGEMENT_GROUP}) + @BeforeClass(alwaysRun = true, groups = {Constants.UserManagement.USER_MANAGEMENT_GROUP}) public void initTest() throws Exception { super.init(TestUserMode.SUPER_TENANT_ADMIN); String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL); diff --git a/modules/integration/tests-integration-old/src/test/resources/automation.xml b/modules/integration/tests-integration-old/src/test/resources/automation.xml new file mode 100644 index 00000000..c36ffbd8 --- /dev/null +++ b/modules/integration/tests-integration-old/src/test/resources/automation.xml @@ -0,0 +1,233 @@ + + + + + + + + + + 60000 + + standalone + + false + + 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 + + + 10863 + 10543 + + + + + + + + + + + + + + + + org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension + + + + + + + org.wso2.carbon.integration.common.extensions.usermgt.UserPopulateExtension + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-integration/src/test/resources/automationSchema.xsd b/modules/integration/tests-integration-old/src/test/resources/automationSchema.xsd similarity index 100% rename from modules/integration/tests-integration/src/test/resources/automationSchema.xsd rename to modules/integration/tests-integration-old/src/test/resources/automationSchema.xsd diff --git a/modules/integration/tests-integration-old/src/test/resources/filters.txt b/modules/integration/tests-integration-old/src/test/resources/filters.txt new file mode 100644 index 00000000..8813e634 --- /dev/null +++ b/modules/integration/tests-integration-old/src/test/resources/filters.txt @@ -0,0 +1,23 @@ +-org.wso2.carbon.caching.core.identity.* +-org.wso2.carbon.caching.core.permissiontree.* +-org.wso2.carbon.caching.infinispan.* +-org.wso2.carbon.event.core.internal.delivery.jms.* +-org.wso2.carbon.event.core.qpid.* +-org.wso2.carbon.registry.synchronization.* +-*.stub* +-*.stub_ +-*.stub_4.0.0 +-*.stub- +-org.eclipse.* +-*.equinox.* +-org.wso2.carbon.user.core.* +-samples.* +-*.log4j* +-*.axis2* +-*.ui* +-*.tenant* +-*.stratos* +-*.eventing* +-*tests-transports* +-org.wso2.carbon.mediation.statistics* +-*startup* diff --git a/modules/integration/tests-integration-old/src/test/resources/instrumentation.txt b/modules/integration/tests-integration-old/src/test/resources/instrumentation.txt new file mode 100644 index 00000000..f9f1894a --- /dev/null +++ b/modules/integration/tests-integration-old/src/test/resources/instrumentation.txt @@ -0,0 +1,41 @@ +org.wso2.carbon.caching.core_ +org.wso2.carbon.discovery.core_ +org.wso2.carbon.discovery.proxy_ +org.wso2.carbon.email.verification_ +org.wso2.carbon.event.core_ +org.wso2.carbon.governance.custom.lifecycles.checklist_ +org.wso2.carbon.governance.gadgets.impactanalysis_ +org.wso2.carbon.governance.gadgetsource_ +org.wso2.carbon.governance.gadgets.resourceimpact_ +org.wso2.carbon.governance.generic_ +org.wso2.carbon.governance.lcm_ +org.wso2.carbon.governance.list_ +org.wso2.carbon.governance.platform.extensions_ +org.wso2.carbon.governance.registry.eventing_ +org.wso2.carbon.governance.registry.extensions_ +org.wso2.carbon.governance.services_ +org.wso2.carbon.identity.user.profile_ +org.wso2.carbon.mashup.javascript.hostobjects.registry_ +org.wso2.carbon.registry.activities_ +org.wso2.carbon.registry.common_ +org.wso2.carbon.registry.core_ +org.wso2.carbon.registry.eventing_ +org.wso2.carbon.registry.extensions_ +org.wso2.carbon.registry.handler_ +org.wso2.carbon.registry.indexing_ +org.wso2.carbon.registry.info_ +org.wso2.carbon.registry.profiles_ +org.wso2.carbon.registry.properties_ +org.wso2.carbon.registry.relations_ +org.wso2.carbon.registry.reporting_ +org.wso2.carbon.registry.resource_ +org.wso2.carbon.registry.search_ +org.wso2.carbon.registry.server_ +org.wso2.carbon.registry.servlet_ +org.wso2.carbon.registry.task_ +org.wso2.carbon.registry.uddi_ +org.wso2.carbon.registry.webdav_ +org.wso2.carbon.registry.ws.api_ +org.wso2.carbon.reporting.api_ +org.wso2.carbon.reporting.core_ +org.wso2.carbon.reporting.util_ diff --git a/modules/integration/tests-integration/src/test/resources/keystores/stratos/client-truststore.jks b/modules/integration/tests-integration-old/src/test/resources/keystores/products/client-truststore.jks similarity index 100% rename from modules/integration/tests-integration/src/test/resources/keystores/stratos/client-truststore.jks rename to modules/integration/tests-integration-old/src/test/resources/keystores/products/client-truststore.jks diff --git a/modules/integration/tests-integration/src/test/resources/keystores/stratos/wso2carbon.jks b/modules/integration/tests-integration-old/src/test/resources/keystores/products/wso2carbon.jks similarity index 100% rename from modules/integration/tests-integration/src/test/resources/keystores/stratos/wso2carbon.jks rename to modules/integration/tests-integration-old/src/test/resources/keystores/products/wso2carbon.jks diff --git a/modules/integration/tests-integration/src/test/resources/keystores/stratos/wso2certs.jks b/modules/integration/tests-integration-old/src/test/resources/keystores/products/wso2certs.jks similarity index 100% rename from modules/integration/tests-integration/src/test/resources/keystores/stratos/wso2certs.jks rename to modules/integration/tests-integration-old/src/test/resources/keystores/products/wso2certs.jks diff --git a/modules/integration/tests-integration-old/src/test/resources/log4j.properties b/modules/integration/tests-integration-old/src/test/resources/log4j.properties new file mode 100644 index 00000000..bc395345 --- /dev/null +++ b/modules/integration/tests-integration-old/src/test/resources/log4j.properties @@ -0,0 +1,45 @@ +# +# 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. +# + +# +# 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 +log4j.logger.org.apache.axis2.deployment.ModuleDeployer=ERROR +#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 diff --git a/modules/integration/tests-integration/src/test/resources/payloads/android-config-response-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/android-config-response-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/android-config-response-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/android-config-response-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/android-configuration-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/android-configuration-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/android-configuration-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/android-configuration-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/android-device-mgt-response-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/android-device-mgt-response-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/android-device-mgt-response-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/android-device-mgt-response-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/android-enrollment-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/android-enrollment-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/android-enrollment-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/android-enrollment-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/android-enrollment-response-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/android-enrollment-response-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/android-enrollment-response-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/android-enrollment-response-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/android-operation-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/android-operation-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/android-operation-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/android-operation-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/android-policy-response-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/android-policy-response-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/android-policy-response-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/android-policy-response-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/configuration-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/configuration-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/configuration-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/configuration-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/configuration-response-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/configuration-response-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/configuration-response-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/configuration-response-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/get-notifications-response-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/get-notifications-response-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/get-notifications-response-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/get-notifications-response-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/license-response-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/license-response-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/license-response-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/license-response-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/mobile-device-mgt-view-device-types-response-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/mobile-device-mgt-view-device-types-response-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/mobile-device-mgt-view-device-types-response-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/mobile-device-mgt-view-device-types-response-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/notification-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/notification-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/notification-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/notification-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/notification-response-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/notification-response-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/notification-response-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/notification-response-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/policy-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/policy-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/policy-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/policy-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/policy-response-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/policy-response-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/policy-response-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/policy-response-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/role-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/role-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/role-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/role-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/user-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/user-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/user-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/user-payloads.json diff --git a/modules/integration/tests-integration/src/test/resources/payloads/user-response-payloads.json b/modules/integration/tests-integration-old/src/test/resources/payloads/user-response-payloads.json similarity index 100% rename from modules/integration/tests-integration/src/test/resources/payloads/user-response-payloads.json rename to modules/integration/tests-integration-old/src/test/resources/payloads/user-response-payloads.json diff --git a/modules/integration/tests-integration-old/src/test/resources/testng-server-mgt.xml b/modules/integration/tests-integration-old/src/test/resources/testng-server-mgt.xml new file mode 100644 index 00000000..fa3a3fa7 --- /dev/null +++ b/modules/integration/tests-integration-old/src/test/resources/testng-server-mgt.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-integration-old/src/test/resources/testng.xml b/modules/integration/tests-integration-old/src/test/resources/testng.xml new file mode 100644 index 00000000..00843078 --- /dev/null +++ b/modules/integration/tests-integration-old/src/test/resources/testng.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-integration/src/test/resources/windows/enrollment/additional_device_info.xml b/modules/integration/tests-integration-old/src/test/resources/windows/enrollment/additional_device_info.xml similarity index 100% rename from modules/integration/tests-integration/src/test/resources/windows/enrollment/additional_device_info.xml rename to modules/integration/tests-integration-old/src/test/resources/windows/enrollment/additional_device_info.xml diff --git a/modules/integration/tests-integration/src/test/resources/windows/enrollment/discovery-post.xml b/modules/integration/tests-integration-old/src/test/resources/windows/enrollment/discovery-post.xml similarity index 100% rename from modules/integration/tests-integration/src/test/resources/windows/enrollment/discovery-post.xml rename to modules/integration/tests-integration-old/src/test/resources/windows/enrollment/discovery-post.xml diff --git a/modules/integration/tests-integration/src/test/resources/windows/enrollment/inital_device_info.xml b/modules/integration/tests-integration-old/src/test/resources/windows/enrollment/inital_device_info.xml similarity index 100% rename from modules/integration/tests-integration/src/test/resources/windows/enrollment/inital_device_info.xml rename to modules/integration/tests-integration-old/src/test/resources/windows/enrollment/inital_device_info.xml diff --git a/modules/integration/tests-integration/src/test/resources/windows/enrollment/ms_xcep.xml b/modules/integration/tests-integration-old/src/test/resources/windows/enrollment/ms_xcep.xml similarity index 100% rename from modules/integration/tests-integration/src/test/resources/windows/enrollment/ms_xcep.xml rename to modules/integration/tests-integration-old/src/test/resources/windows/enrollment/ms_xcep.xml diff --git a/modules/integration/tests-integration/src/test/resources/windows/enrollment/wstep.xml b/modules/integration/tests-integration-old/src/test/resources/windows/enrollment/wstep.xml similarity index 100% rename from modules/integration/tests-integration/src/test/resources/windows/enrollment/wstep.xml rename to modules/integration/tests-integration-old/src/test/resources/windows/enrollment/wstep.xml diff --git a/modules/integration/tests-integration/pom.xml b/modules/integration/tests-integration/pom.xml index 380a6f17..aa4d7c95 100644 --- a/modules/integration/tests-integration/pom.xml +++ b/modules/integration/tests-integration/pom.xml @@ -1,47 +1,46 @@ - - + ~ 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. + --> + + + org.wso2.iot wso2iot-integration - 3.1.0-SNAPSHOT + 3.0.0-SNAPSHOT ../pom.xml 4.0.0 - org.wso2.carbon.iot.test.integration - WSO2 IOT - Integration Test Module - Backend Integration Tests for WSO2 IOT Server. + tests-integration jar + WSO2 IoT - Backend Integration Tests maven-surefire-plugin false + 2.12.4 - -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m - + false src/test/resources/testng-server-mgt.xml src/test/resources/testng.xml @@ -52,14 +51,10 @@ maven.test.haltafterfailure false - - java.io.tmpdir - ${basedir}/target/ - carbon.zip - ${basedir}/../../distribution/target/wso2iot-${project.version}.zip + ${basedir}/../../distribution/target/wso2iot-${product.iot.version}.zip @@ -68,42 +63,37 @@ ${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 + false maven-dependency-plugin + - copy-emma-dependencies + copy-jacoco-dependencies compile copy-dependencies - ${project.build.directory}/emma + ${project.build.directory}/jacoco jar - emma + org.jacoco.agent + copy-secVerifier compile @@ -119,7 +109,7 @@ - unpack-mar-jks + unpack-jks compile unpack @@ -129,11 +119,11 @@ org.wso2.iot wso2iot - ${project.version} + ${product.iot.version} zip true ${basedir}/target/tobeCopied/ - **/*.jks,**/*.mar,**/axis2_client.xml + **/*.jks @@ -153,43 +143,40 @@ - maven-resources-plugin - 2.6 + org.apache.maven.plugins + maven-surefire-report-plugin + 2.7.1 + + ${basedir}/target/report + registry-api-test + - copy-resources-jks - compile + integration-test - copy-resources + report-only - - ${basedir}/src/test/resources/keystores/products - - - - - ${basedir}/target/tobeCopied/wso2iot-${project.version}/repository/resources/security/ - - - **/*.jks - - - - + + + + + maven-resources-plugin + 2.6 + - copy-stratos-jks + copy-resources-jks compile copy-resources - ${basedir}/src/test/resources/keystores/stratos + ${basedir}/src/test/resources/keystores/products - ${basedir}/target/tobeCopied/wso2iot-${project.version}/repository/resources/security/ + ${basedir}/target/tobeCopied/wso2iot-${product.iot.version}/repository/resources/security/ **/*.jks @@ -198,73 +185,82 @@ + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + - copy-axis2files - compile - - copy-resources - - - ${basedir}/src/test/resources/axis2config - - - - - ${basedir}/target/tobeCopied/wso2iot-${project.version}/repository/conf/axis2/ - - - **/*.xml - - - - - - - copy-resources-mar - compile - copy-resources + test-jar - - ${basedir}/src/test/resources/client/modules - - - - - ${basedir}/target/tobeCopied/wso2iot-${project.version}/repository/deployment/client/modules - - - **/*.mar - - - - + + - org.wso2.iot - org.wso2.carbon.iot.core.integration.ui.pages + org.wso2.carbon.automation + org.wso2.carbon.automation.engine + compile org.wso2.carbon.automation - org.wso2.carbon.automation.engine + org.wso2.carbon.automation.extensions + compile org.wso2.carbon.automation org.wso2.carbon.automation.test.utils + compile + + + org.wso2.carbon.automationutils + org.wso2.carbon.integration.common.utils + compile org.wso2.carbon.automationutils org.wso2.carbon.integration.common.extensions + compile com.google.code.gson gson + compile + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.core + compile + + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.common + compile + + + org.wso2.carbon.devicemgt + org.wso2.carbon.policy.mgt.common + compile + + + org.wso2.carbon.devicemgt + org.wso2.carbon.policy.mgt.core + compile + + + org.wso2.carbon.devicemgt + org.wso2.carbon.certificate.mgt.core + compile + + + diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/AnalyticsServerExtension.java b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/AnalyticsServerExtension.java deleted file mode 100644 index a4248b10..00000000 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/AnalyticsServerExtension.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2017, 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. - */ -package org.wso2.iot.integration.extensions; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.automation.engine.annotations.ExecutionEnvironment; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.ContextXpathConstants; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException; -import org.wso2.carbon.automation.engine.extensions.ExecutionListenerExtension; -import org.wso2.carbon.automation.extensions.ExtensionConstants; -import org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension; - -import javax.xml.xpath.XPathExpressionException; - -/** - * Test Automation server extension to start the DAS. - * This will set the carbon_home to {carbonHome}/core and port offset : 2 - */ -public class AnalyticsServerExtension extends ExecutionListenerExtension { - - private CustomTestServerManager serverManager; - private static final Log log = LogFactory.getLog(CarbonServerExtension.class); - private String executionEnvironment; - private AutomationContext automationContext; - - - @Override - public void initiate() throws AutomationFrameworkException { - try { - automationContext = new AutomationContext("IOT", TestUserMode.SUPER_TENANT_USER); - if(getParameters().get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND) == null) { - getParameters().put(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND, "2"); - } - serverManager = new CustomTestServerManager(getAutomationContext(), null, getParameters()); - executionEnvironment = - automationContext.getConfigurationValue(ContextXpathConstants.EXECUTION_ENVIRONMENT); - - } catch (XPathExpressionException e) { - handleException("Error while initiating test environment", e); - } - } - - @Override - public void onExecutionStart() throws AutomationFrameworkException { - try { - if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) { - String carbonHome = serverManager.startServer("analytics"); - log.info(carbonHome); - System.setProperty(ExtensionConstants.CARBON_HOME, carbonHome); - } - } catch (Exception e) { - handleException("Fail to start carbon server ", e); - } - } - - @Override - public void onExecutionFinish() throws AutomationFrameworkException { - try { - if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) { - serverManager.stopServer(); - } - } catch (Exception e) { - handleException("Fail to stop carbon server ", e); - } - } - - private static void handleException(String msg, Exception e) { - log.error(msg, e); - throw new RuntimeException(msg, e); - } -} diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/BrokerServerExtension.java b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/BrokerServerExtension.java deleted file mode 100644 index 2bb86d87..00000000 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/BrokerServerExtension.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2017, 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. - */ -package org.wso2.iot.integration.extensions; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.automation.engine.annotations.ExecutionEnvironment; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.ContextXpathConstants; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException; -import org.wso2.carbon.automation.engine.extensions.ExecutionListenerExtension; -import org.wso2.carbon.automation.extensions.ExtensionConstants; -import org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension; - -import javax.xml.xpath.XPathExpressionException; - -/** - * Test Automation server extension to start the Broker. - * This will set the carbon_home to {carbonHome}/core and port offset : 3 - */ -public class BrokerServerExtension extends ExecutionListenerExtension { - - private CustomTestServerManager serverManager; - private static final Log log = LogFactory.getLog(CarbonServerExtension.class); - private String executionEnvironment; - private AutomationContext automationContext; - - - @Override - public void initiate() throws AutomationFrameworkException { - try { - automationContext = new AutomationContext("IOT", TestUserMode.SUPER_TENANT_USER); - if(getParameters().get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND) == null) { - getParameters().put(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND, "3"); - } - serverManager = new CustomTestServerManager(getAutomationContext(), null, getParameters()); - executionEnvironment = - automationContext.getConfigurationValue(ContextXpathConstants.EXECUTION_ENVIRONMENT); - - } catch (XPathExpressionException e) { - handleException("Error while initiating test environment", e); - } - } - - @Override - public void onExecutionStart() throws AutomationFrameworkException { - try { - if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) { - String carbonHome = serverManager.startServer("broker"); - log.info(carbonHome); - System.setProperty(ExtensionConstants.CARBON_HOME, carbonHome); - } - } catch (Exception e) { - handleException("Fail to start carbon server ", e); - } - } - - @Override - public void onExecutionFinish() throws AutomationFrameworkException { - try { - if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) { - serverManager.stopServer(); - } - } catch (Exception e) { - handleException("Fail to stop carbon server ", e); - } - } - - private static void handleException(String msg, Exception e) { - log.error(msg, e); - throw new RuntimeException(msg, e); - } -} diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/CustomTestServerManager.java b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/CustomTestServerManager.java deleted file mode 100644 index 7f383780..00000000 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/CustomTestServerManager.java +++ /dev/null @@ -1,147 +0,0 @@ -/* -* Copyright (c) 2005-2017, 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. -*/ -package org.wso2.iot.integration.extensions; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.automation.engine.FrameworkConstants; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException; -import org.wso2.carbon.automation.extensions.ExtensionConstants; -import org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerManager; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -public class CustomTestServerManager { - protected CarbonServerManager carbonServer; - protected String carbonZip; - protected int portOffset; - protected Map commandMap = new HashMap(); - private static final Log log = LogFactory.getLog(CustomTestServerManager.class); - protected String carbonHome; - - public CustomTestServerManager(AutomationContext context) { - carbonServer = new CarbonServerManager(context); - } - - public CustomTestServerManager(AutomationContext context, String carbonZip) { - carbonServer = new CarbonServerManager(context); - this.carbonZip = carbonZip; - } - - public CustomTestServerManager(AutomationContext context, int portOffset) { - carbonServer = new CarbonServerManager(context); - this.portOffset = portOffset; - commandMap.put(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND, String.valueOf(portOffset)); - } - - public CustomTestServerManager(AutomationContext context, String carbonZip, - Map commandMap) { - carbonServer = new CarbonServerManager(context); - this.carbonZip = carbonZip; - if (commandMap.get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND) != null) { - this.portOffset = Integer.parseInt(commandMap.get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND)); - } else { - throw new IllegalArgumentException("portOffset value must be set in command list"); - } - this.commandMap = commandMap; - } - - public String getCarbonZip() { - return carbonZip; - } - - public String getCarbonHome() { - return carbonHome; - } - - public int getPortOffset() { - return portOffset; - } - - public void configureServer() throws AutomationFrameworkException { - - } - - - public Map getCommands() { - return commandMap; - } - - /** - * This method is called for starting a Carbon server in preparation for execution of a - * TestSuite - *

- * Add the @BeforeSuite TestNG annotation in the method overriding this method - * @param server : The server which needs to be start. - * @return The CARBON_HOME - * @throws IOException If an error occurs while copying the deployment artifacts into the - * Carbon server - */ - public String startServer(String server) - throws AutomationFrameworkException, IOException, XPathExpressionException { - if(carbonHome == null) { - if (carbonZip == null) { - carbonZip = System.getProperty(FrameworkConstants.SYSTEM_PROPERTY_CARBON_ZIP_LOCATION); - } - if (carbonZip == null) { - throw new IllegalArgumentException("carbon zip file cannot find in the given location"); - } - carbonHome = carbonServer.setUpCarbonHome(carbonZip) + "/" + server; - configureServer(); - } - log.info("Carbon Home - " + carbonHome ); - if (commandMap.get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND) != null) { - this.portOffset = Integer.parseInt(commandMap.get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND)); - } else { - this.portOffset = 0; - } - carbonServer.startServerUsingCarbonHome(carbonHome, commandMap); - return carbonHome; - } - - /** - * Restarting server already started by the method startServer - * @throws AutomationFrameworkException - */ - public void restartGracefully() throws AutomationFrameworkException { - if(carbonHome == null) { - throw new AutomationFrameworkException("No Running Server found to restart. " + - "Please make sure whether server is started"); - } - carbonServer.restartGracefully(); - } - - /** - * This method is called for stopping a Carbon server - *

- * Add the @AfterSuite annotation in the method overriding this method - * - * @throws AutomationFrameworkException If an error occurs while shutting down the server - */ - public void stopServer() throws AutomationFrameworkException { - carbonServer.serverShutdown(portOffset); - } - - - - -} diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/IOTServerExtension.java b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/IOTServerExtension.java deleted file mode 100644 index e8df4bad..00000000 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/extensions/IOTServerExtension.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2017, 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. - */ -package org.wso2.iot.integration.extensions; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.automation.engine.annotations.ExecutionEnvironment; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.ContextXpathConstants; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException; -import org.wso2.carbon.automation.engine.extensions.ExecutionListenerExtension; -import org.wso2.carbon.automation.extensions.ExtensionConstants; -import org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension; - -import javax.xml.xpath.XPathExpressionException; - -/** - * Test Automation server extension to start the IOT core. - * This will set the carbon_home to {carbonHome}/core and port offset : 0 - */ -public class IOTServerExtension extends ExecutionListenerExtension { - - private CustomTestServerManager serverManager; - private static final Log log = LogFactory.getLog(CarbonServerExtension.class); - private String executionEnvironment; - private AutomationContext automationContext; - - - @Override - public void initiate() throws AutomationFrameworkException { - try { - automationContext = new AutomationContext("IOT", TestUserMode.SUPER_TENANT_USER); - if(getParameters().get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND) == null) { - getParameters().put(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND, "0"); - } - serverManager = new CustomTestServerManager(getAutomationContext(), null, getParameters()); - executionEnvironment = - automationContext.getConfigurationValue(ContextXpathConstants.EXECUTION_ENVIRONMENT); - - } catch (XPathExpressionException e) { - handleException("Error while initiating test environment", e); - } - } - - @Override - public void onExecutionStart() throws AutomationFrameworkException { - try { - if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) { - String carbonHome = serverManager.startServer("core"); - log.info(carbonHome); - System.setProperty(ExtensionConstants.CARBON_HOME, carbonHome); - } - } catch (Exception e) { - handleException("Fail to start carbon server ", e); - } - } - - @Override - public void onExecutionFinish() throws AutomationFrameworkException { - try { - if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) { - serverManager.stopServer(); - } - } catch (Exception e) { - handleException("Fail to stop carbon server ", e); - } - } - - private static void handleException(String msg, Exception e) { - log.error(msg, e); - throw new RuntimeException(msg, e); - } -} diff --git a/modules/integration/tests-integration/src/test/resources/automation.xml b/modules/integration/tests-integration/src/test/resources/automation.xml index 09c68d76..c36ffbd8 100644 --- a/modules/integration/tests-integration/src/test/resources/automation.xml +++ b/modules/integration/tests-integration/src/test/resources/automation.xml @@ -1,6 +1,6 @@ - + + @@ -24,11 +25,15 @@ - 300000 + 60000 standalone + + false @@ -45,7 +50,7 @@ - http://10.100.2.51:4444/wd/hub/ + http://10.100.2.51:4444/wd/hub/ @@ -164,35 +169,39 @@ - + - + localhost - 9763 - 9446 - 9443 - 9445 + 10863 + 10543 - - + - + + - org.wso2.iot.integration.extensions.BrokerServerExtension - org.wso2.iot.integration.extensions.IOTServerExtension - org.wso2.iot.integration.extensions.AnalyticsServerExtension - org.wso2.carbon.integration.common.extensions.usermgt.UserPopulateExtension + + org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension + + + + + + + org.wso2.carbon.integration.common.extensions.usermgt.UserPopulateExtension + @@ -200,13 +209,13 @@ - + - + diff --git a/modules/integration/tests-integration/src/test/resources/instrumentation.txt b/modules/integration/tests-integration/src/test/resources/instrumentation.txt index f9f1894a..917b2bb7 100644 --- a/modules/integration/tests-integration/src/test/resources/instrumentation.txt +++ b/modules/integration/tests-integration/src/test/resources/instrumentation.txt @@ -1,41 +1,11 @@ -org.wso2.carbon.caching.core_ -org.wso2.carbon.discovery.core_ -org.wso2.carbon.discovery.proxy_ -org.wso2.carbon.email.verification_ -org.wso2.carbon.event.core_ -org.wso2.carbon.governance.custom.lifecycles.checklist_ -org.wso2.carbon.governance.gadgets.impactanalysis_ -org.wso2.carbon.governance.gadgetsource_ -org.wso2.carbon.governance.gadgets.resourceimpact_ -org.wso2.carbon.governance.generic_ -org.wso2.carbon.governance.lcm_ -org.wso2.carbon.governance.list_ -org.wso2.carbon.governance.platform.extensions_ -org.wso2.carbon.governance.registry.eventing_ -org.wso2.carbon.governance.registry.extensions_ -org.wso2.carbon.governance.services_ -org.wso2.carbon.identity.user.profile_ -org.wso2.carbon.mashup.javascript.hostobjects.registry_ -org.wso2.carbon.registry.activities_ -org.wso2.carbon.registry.common_ -org.wso2.carbon.registry.core_ -org.wso2.carbon.registry.eventing_ -org.wso2.carbon.registry.extensions_ -org.wso2.carbon.registry.handler_ -org.wso2.carbon.registry.indexing_ -org.wso2.carbon.registry.info_ -org.wso2.carbon.registry.profiles_ -org.wso2.carbon.registry.properties_ -org.wso2.carbon.registry.relations_ -org.wso2.carbon.registry.reporting_ -org.wso2.carbon.registry.resource_ -org.wso2.carbon.registry.search_ -org.wso2.carbon.registry.server_ -org.wso2.carbon.registry.servlet_ -org.wso2.carbon.registry.task_ -org.wso2.carbon.registry.uddi_ -org.wso2.carbon.registry.webdav_ -org.wso2.carbon.registry.ws.api_ -org.wso2.carbon.reporting.api_ -org.wso2.carbon.reporting.core_ -org.wso2.carbon.reporting.util_ +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-integration/src/test/resources/keystores/products/wso2mdm.jks b/modules/integration/tests-integration/src/test/resources/keystores/products/wso2mdm.jks deleted file mode 100644 index 66b68ea395562b9716c8c579b944ae19b5dbf296..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9485 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 W`0v%-2|WuF22km0Do6xx&3^&4V5S-X diff --git a/modules/integration/tests-integration/src/test/resources/testng.xml b/modules/integration/tests-integration/src/test/resources/testng.xml index 41878cf0..2cfc4734 100644 --- a/modules/integration/tests-integration/src/test/resources/testng.xml +++ b/modules/integration/tests-integration/src/test/resources/testng.xml @@ -1,5 +1,5 @@ + + + org.wso2.iot + wso2iot-integration + 3.0.0-SNAPSHOT + ../pom.xml + + + 4.0.0 + WSO2 IoT - Integration Test UI Module + org.wso2.carbon.iot.core.integration.test.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 + + + ${skipUiTests} + + + + maven.test.haltafterfailure + false + + + java.io.tmpdir + ${basedir}/target/ + + + carbon.zip + + ${basedir}/../../distribution/target/wso2iot-${project.version}.zip + + + + framework.resource.location + + ${basedir}/src/test/resources/ + + + + server.list + + EMM + + + + usedefaultlisteners + false + + ${basedir}/target/security-verifier/ + ${basedir}/target/emma + ${basedir}/src/test/resources/instrumentation.txt + ${basedir}/src/test/resources/filters.txt + ${basedir}/target/emma + + ${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 + wso2iot + ${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/wso2emm-${project.version}/repository/resources/security/ + + + **/*.jks + + + + + + + copy-stratos-jks + compile + + copy-resources + + + ${basedir}/src/test/resources/keystores/stratos + + + + + ${basedir}/target/tobeCopied/wso2iot-${project.version}/repository/resources/security/ + + + **/*.jks + + + + + + + copy-axis2files + compile + + copy-resources + + + ${basedir}/src/test/resources/axis2config + + + + + ${basedir}/target/tobeCopied/wso2iot-${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.core.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-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/Constants.java b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/Constants.java new file mode 100644 index 00000000..9cbfaacd --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/Constants.java @@ -0,0 +1,31 @@ +/* + * 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. + */ + +package org.wso2.emm.ui.integration.test; + +public class Constants { + public static final String MDM_LOGIN_PATH = "/mdm/login"; + public static final String LOGIN_GROUP = "login-group"; + public static final String MDM_ROLES_URL = "/mdm/roles"; + public static final String MDM_USER_ADD_URL = "/mdm/users/add-user"; + 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 MDM_HOME_URL = "/mdm"; +} diff --git a/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/GeneralConfigurationTestCases.java b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/GeneralConfigurationTestCases.java new file mode 100644 index 00000000..57677181 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/GeneralConfigurationTestCases.java @@ -0,0 +1,65 @@ +/* + * 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. + */ +package org.wso2.emm.ui.integration.test; + +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.iot.integration.ui.pages.EMMIntegrationUiBaseTestCase; +import org.wso2.iot.integration.ui.pages.platformConfiguration.PlatformConfiguration; + + +public class GeneralConfigurationTestCases extends EMMIntegrationUiBaseTestCase { + private static String configValue = "3600"; + private WebDriver driver; + + @BeforeClass(alwaysRun = true) + public void setUp() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + LoginUtils.login(driver, automationContext, getWebAppURL()); + } + + @Test(description = "verify updating general platform configuration in emm") + public void testChangeGeneralConfig() throws Exception { + driver.get(getWebAppURL() + Constants.MDM_PLATFORM_CONFIG_URL); + PlatformConfiguration platformConfiguration = new PlatformConfiguration(driver); + platformConfiguration.changeGeneralConfig(configValue); + } + + @Test(description = "verify updating android platform configuration in emm") + public void testChangeAndroidConfig() throws Exception { + driver.get(getWebAppURL() + Constants.MDM_PLATFORM_CONFIG_URL); + PlatformConfiguration platformConfiguration = new PlatformConfiguration(driver); + platformConfiguration.changeAndroidConfig(configValue); + } + + @Test(description = "verify updating windows platform configuration in emm") + public void testChangeWindowsConfig() throws Exception { + driver.get(getWebAppURL() + Constants.MDM_PLATFORM_CONFIG_URL); + PlatformConfiguration platformConfiguration = new PlatformConfiguration(driver); + platformConfiguration.changeWindowsConfig(configValue); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } +} diff --git a/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/LoginUtils.java b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/LoginUtils.java new file mode 100644 index 00000000..fbedbd30 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/LoginUtils.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package org.wso2.emm.ui.integration.test; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.wso2.carbon.automation.engine.context.AutomationContext; +import org.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.login.MDMLoginPage; + +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.MDM_LOGIN_PATH); + MDMLoginPage test = new MDMLoginPage(driver); + WebElement + userNameField = driver.findElement(By.name(uiElementMapper.getElement("emm.login.username"))); + WebElement passwordField = driver.findElement(By.name(uiElementMapper.getElement("emm.login.password"))); + userNameField + .sendKeys(new CharSequence[]{automationContext.getSuperTenant().getTenantAdmin().getUserName()}); + passwordField.sendKeys(new CharSequence[]{ + automationContext.getSuperTenant().getTenantAdmin().getPassword()}); + driver.findElement(By.xpath(uiElementMapper.getElement("emm.login.button.xpath"))).click(); + } +} diff --git a/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/NotificationValidationTestCase.java b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/NotificationValidationTestCase.java new file mode 100644 index 00000000..6fe06dbd --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/NotificationValidationTestCase.java @@ -0,0 +1,58 @@ +/* + * 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. + */ +package org.wso2.emm.ui.integration.test; + + +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.iot.integration.ui.pages.EMMIntegrationUiBaseTestCase; +import org.wso2.iot.integration.ui.pages.Notification.NotificationView; + +public class NotificationValidationTestCase extends EMMIntegrationUiBaseTestCase { + private static String notificationValue = "0"; + private WebDriver driver; + + @BeforeClass(alwaysRun = true) + public void setUp() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + LoginUtils.login(driver, automationContext, getWebAppURL()); + } + +// @Test(description = "verify notification count in emm") +// public void viewNotificationCount() throws Exception { +// driver.get(getWebAppURL() + Constants.MDM_HOME_URL); +// HomePage homePage = new HomePage(driver); +// homePage.checkNotificationCount(notificationValue); +// } + + @Test(description = "verify notification visibility in emm") + public void verifyNotificationView() throws Exception { + driver.get(getWebAppURL() + Constants.MDM_NOTIFICATION_URL); + NotificationView notificationView = new NotificationView(driver); + notificationView.viewNotification(); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } +} diff --git a/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/RoleTestCases.java b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/RoleTestCases.java new file mode 100644 index 00000000..8e55569f --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/RoleTestCases.java @@ -0,0 +1,64 @@ +/* + * 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. + */ + +package org.wso2.emm.ui.integration.test; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +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.iot.integration.ui.pages.EMMIntegrationUiBaseTestCase; +import org.wso2.iot.integration.ui.pages.role.EditRolePage; +import org.wso2.iot.integration.ui.pages.role.RoleListPage; + +public class RoleTestCases extends EMMIntegrationUiBaseTestCase { + + private static final Log log = LogFactory.getLog(RoleTestCases.class); + private static String roleName = "role-manager"; + private static String roleNameEdit = "role-wso2-manager"; + private WebDriver driver; + + @BeforeClass(alwaysRun = true) + public void setUp() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + LoginUtils.login(driver, automationContext, getWebAppURL()); + } + + @Test(description = "verify add role to emm") + public void testAddRole() throws Exception { + driver.get(getWebAppURL() + Constants.MDM_ROLES_URL); + RoleListPage roleListPage = new RoleListPage(driver, Constants.MDM_ROLES_URL); + roleListPage.addRole(roleName); + } + + @Test(description = "verify edit role to emm", dependsOnMethods = {"testAddRole"}) + public void testEditRole() throws Exception { + driver.get(getWebAppURL() + Constants.MDM_ROLES_EDIT_URL + roleName); + EditRolePage rolePage = new EditRolePage(driver); + rolePage.editRole(roleNameEdit); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } +} diff --git a/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/UserTestCase.java b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/UserTestCase.java new file mode 100644 index 00000000..5966f8b3 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/UserTestCase.java @@ -0,0 +1,63 @@ +/* + * 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. + */ + +package org.wso2.emm.ui.integration.test; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +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.iot.integration.ui.pages.EMMIntegrationUiBaseTestCase; +import org.wso2.iot.integration.ui.pages.user.AddUserPage; +import org.wso2.iot.integration.ui.pages.user.UserListPage; + +public class UserTestCase extends EMMIntegrationUiBaseTestCase { + + private static final Log log = LogFactory.getLog(UserTestCase.class); + private WebDriver driver; + + @BeforeClass(alwaysRun = true) + public void setUp() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + LoginUtils.login(driver, automationContext, getWebAppURL()); + } + + @Test(description = "verify add user to emm console") + public void testAddUser() throws Exception { + driver.get(getWebAppURL() + Constants.MDM_USER_ADD_URL); + AddUserPage addUserPage = new AddUserPage(driver); + addUserPage.addUser("inosh", "Inosh", "Perera", "inosh@wso2.com"); + } + + @Test(description = "verify delete user to emm console", dependsOnMethods = {"testAddUser"}) + public void testDeleteUser() throws Exception { + driver.get(getWebAppURL() + Constants.MDM_USER_URL); + UserListPage userListPage = new UserListPage(driver); + userListPage.deleteUser(); + driver.close(); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } +} diff --git a/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/login/MDMLoginTestCase.java b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/login/MDMLoginTestCase.java new file mode 100644 index 00000000..274848bc --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/login/MDMLoginTestCase.java @@ -0,0 +1,54 @@ +/* + * 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. + */ + +package org.wso2.emm.ui.integration.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.iot.integration.ui.pages.EMMIntegrationUiBaseTestCase; +import org.wso2.iot.integration.ui.pages.home.MDMHomePage; +import org.wso2.iot.integration.ui.pages.login.MDMLoginPage; +import org.wso2.emm.ui.integration.test.Constants; + +public class MDMLoginTestCase extends EMMIntegrationUiBaseTestCase { + + private WebDriver driver; + + @BeforeClass(alwaysRun = true, groups = {Constants.LOGIN_GROUP}) + public void setUp() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + driver.get(getWebAppURL() + Constants.MDM_LOGIN_PATH); + } + + @Test(groups = {Constants.LOGIN_GROUP}, description = "verify login to emm console") + public void testLogin() throws Exception { + MDMLoginPage test = new MDMLoginPage(driver); + MDMHomePage home = test.loginAs(automationContext.getSuperTenant().getTenantAdmin().getUserName(), + automationContext.getSuperTenant().getTenantAdmin().getPassword()); + driver.close(); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } +} diff --git a/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/login/ManagementConsoleLoginTestCase.java b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/login/ManagementConsoleLoginTestCase.java new file mode 100644 index 00000000..12675813 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/java/org/wso2/emm/ui/integration/test/login/ManagementConsoleLoginTestCase.java @@ -0,0 +1,54 @@ +/* + * 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. + */ + +package org.wso2.emm.ui.integration.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.iot.integration.ui.pages.EMMIntegrationUiBaseTestCase; +import org.wso2.iot.integration.ui.pages.home.HomePage; +import org.wso2.iot.integration.ui.pages.login.ManagementConsoleLoginPage; + +public class ManagementConsoleLoginTestCase extends EMMIntegrationUiBaseTestCase { + + private WebDriver driver; + + @BeforeClass(alwaysRun = true) + public void setUp() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + driver.get(getLoginURL()); + } + + @Test(groups = "wso2.emm", description = "verify login to emm server's management console") + public void testLogin() throws Exception { + ManagementConsoleLoginPage test = new ManagementConsoleLoginPage(driver); + HomePage home = test.loginAs(automationContext.getSuperTenant().getTenantAdmin().getUserName(), + automationContext.getSuperTenant().getTenantAdmin().getPassword()); + home.logout(); + driver.close(); + } + + @AfterClass(alwaysRun = true) + public void tearDown() throws Exception { + driver.quit(); + } +} diff --git a/modules/integration/tests-ui-integration/src/test/resources/automation.xml b/modules/integration/tests-ui-integration/src/test/resources/automation.xml new file mode 100644 index 00000000..d29cbab1 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/automation.xml @@ -0,0 +1,222 @@ + + + + + + + + + 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-ui-integration/src/test/resources/automationXMLSchema.xsd b/modules/integration/tests-ui-integration/src/test/resources/automationXMLSchema.xsd new file mode 100644 index 00000000..b800b2ba --- /dev/null +++ b/modules/integration/tests-ui-integration/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-ui-integration/src/test/resources/axis2config/axis2_client.xml b/modules/integration/tests-ui-integration/src/test/resources/axis2config/axis2_client.xml new file mode 100644 index 00000000..a8b584d0 --- /dev/null +++ b/modules/integration/tests-ui-integration/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-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v10.mar b/modules/integration/tests-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v10.mar new file mode 100644 index 0000000000000000000000000000000000000000..57f857642523329ef13c8bf2e2f440a8b0c7480c GIT binary patch literal 31350 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 TaEM>7P~U&_e|>WPb@cxLBN-UW literal 0 HcmV?d00001 diff --git a/modules/integration/tests-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v11-20140908.185829-596.mar b/modules/integration/tests-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v11-20140908.185829-596.mar new file mode 100644 index 0000000000000000000000000000000000000000..4ca7737a6e76fee83b452384465db57ea1e3d981 GIT binary patch literal 31367 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 X+7zTg!G2Mpd^`+3z9G8&`t^SR2-5-g literal 0 HcmV?d00001 diff --git a/modules/integration/tests-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v15.mar b/modules/integration/tests-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v15.mar new file mode 100644 index 0000000000000000000000000000000000000000..68f5cbd6ebbd9e59283ffca7546a7161df4cd4c1 GIT binary patch literal 31343 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 literal 0 HcmV?d00001 diff --git a/modules/integration/tests-ui-integration/src/test/resources/client/modules/rampart-1.6.1-wso2v8.mar b/modules/integration/tests-ui-integration/src/test/resources/client/modules/rampart-1.6.1-wso2v8.mar new file mode 100644 index 0000000000000000000000000000000000000000..60cd6cdf8894a651e7c3c0083bedb6b53a1e56d8 GIT binary patch literal 9708 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' 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-ui-integration/src/test/resources/filters.txt b/modules/integration/tests-ui-integration/src/test/resources/filters.txt new file mode 100644 index 00000000..54913a22 --- /dev/null +++ b/modules/integration/tests-ui-integration/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-ui-integration/src/test/resources/instrumentation.txt b/modules/integration/tests-ui-integration/src/test/resources/instrumentation.txt new file mode 100644 index 00000000..917b2bb7 --- /dev/null +++ b/modules/integration/tests-ui-integration/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-ui-integration/src/test/resources/keystores/products/client-truststore.jks b/modules/integration/tests-ui-integration/src/test/resources/keystores/products/client-truststore.jks new file mode 100644 index 0000000000000000000000000000000000000000..9e3a51db3e8329a40eebef8e585a4bcbed7f97fe GIT binary patch literal 36522 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 literal 0 HcmV?d00001 diff --git a/modules/integration/tests-integration/src/test/resources/keystores/stratos/wso2emm.jks b/modules/integration/tests-ui-integration/src/test/resources/keystores/products/wso2emm.jks similarity index 100% rename from modules/integration/tests-integration/src/test/resources/keystores/stratos/wso2emm.jks rename to modules/integration/tests-ui-integration/src/test/resources/keystores/products/wso2emm.jks diff --git a/modules/integration/tests-ui-integration/src/test/resources/keystores/stratos/client-truststore.jks b/modules/integration/tests-ui-integration/src/test/resources/keystores/stratos/client-truststore.jks new file mode 100644 index 0000000000000000000000000000000000000000..ab222fdd343e6a44d2c1c0b82fbc7e2538509618 GIT binary patch literal 103867 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 hO}sl5RmlQbI~fLQ+6dKrrAx7vL7% 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%0AN@CsM=Q$5-?s4<_^K8iH4;O_Y$dR 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 literal 0 HcmV?d00001 diff --git a/modules/integration/tests-ui-integration/src/test/resources/keystores/stratos/wso2emm.jks b/modules/integration/tests-ui-integration/src/test/resources/keystores/stratos/wso2emm.jks new file mode 100644 index 0000000000000000000000000000000000000000..ae5670b037e576e9555ec42c10e2bf6bd97b50f4 GIT binary patch literal 4993 zcmeHK`%jzK8TJhmF6L%z=8%95go}anvkf+vFvl?kVuHCD0|v+V5{EzogkT2(1XbPE zU#hliHMQ%cXxiE?nzTq$RZZG7RmzrDTC+}SlPc}j?Wb1SPu-ue=i!_hlx$KbP5Wh) zp7(j*bI#}Qd(V40-{&vi`R$iqL8Ve@q^MQ;^?35a`i4rS9&q_;a19p03S?iG=nGr* zYMt7yDOaoWR604|I}_T0xdpjc96SNl21x`>U`-Shgyg?>+kK_?w674hfOQ=@4DsfJ z2L5;pTwVv-h5*NAK|{h8{P0z1-c`V`oHL!Ux*=*v`x?FBa~2>4)pTe%69VfsdiNl- zKzvObIwwqXhtOxQLoeMhFEv1Whx)-8?gilPRKf(?>ioe@GmN#tBHIlv^^eotBM>d5 zb|KpZH3c~dDWs>y8^9H+*k%u+zIMQ zU$oJ|zGEPI4p@Z(m-L<;g<`P&{2as12z>Ta5D@BU0hdC${e$MM`!`{I_8f>2H!KwD zp(1jquj4Pd2|x1^Itv1pWYXqgXIWZ+orxa`&!$@1n3a_>(0k9e+MwK_3*hRmkyB6r z9j}Wgz?NCw;z&f zr^u?dwqXDy*k+ge>B(W-|1m}+V<;bEz=@WpQbrsGrAV)x(iIl#f~zYR9H*2X4zG3$hnz5|cDj8j-E)>QHurXFDT#UhKJzwrFM*RxDY;*;;5 zf>Ic4C!`tzFu&u>|HGewK7GZ~&Q{|jgt=q2tfk7XKnWO3vr~)09A)_kG}`sYSqV%q ze_|EWu~?GF;_uo0OtH={=BKQc7S=1h*oAm_C$^wK=cMoc%_eWOwSsjrc9gpbmrQH4 zY84y3Ua={q2-9(+nnPWlqTM%?5>A$iNu5@chsDQZhBSW_Gpw@#4UoV`zXJ2n8-qmY zEL)8GU^Uu4f95+bb_|P5K=y;`N~o`Gy`{3A;RR$Kmf7TN6d#1UX7}ECgACle)qnIx zV$}#!Hq)ppJ9xUeYQ5irxuUZ>d=}6W?hZrACNo{%)RvuKG~RzfMskSv0D22S+>9z$ z_#V2VagiA&K$O1vU&iErUHbp!P7@n^d}sf@L+(9~-`u$kI+q4bi95)?z+krg;Or7> zy&MI8377-uKusC)D!vEpy`b|&Pl8(@z$(PYF#%ahVsPR=?H1O^~1CV*h`!^rF1f}(lxczf_I>U3Nik^hJyt_~nW>AyO z_{GgzFrxnIWnJ6yB23wjtqd7=Kwp7@OG`mv)g+(;j%F|&EHk%)>&x@6H@0Nce%``t zlr^AXfe3h5y|R#Dofoqc<*v+5eP0wKR@BF@v($K82*k!?3tY=#I%gd=Sloa-z+y}F zUX1*GV%8+oq)_1FC7?AiR4VD|x7Mc_4b7$v9Hh^4?VDg9WP*jw{L4eFGGUH0jK{8l zI^>2tuz@~ymvp9xHNX#^z|edF<0!ulqA-Cy2t##cmOGYfJTD)-=>`Mb4WG%nSW3^! zBEn!%zupv6u_P5z?kzz2lPRjAXa+K z4gT$wKm8DD7a|~g<5vux!+wJA+_;m>dRQt_|xf5Z8xqMa2rel^%0n{2BZG@8A11n3p~U0cwSkZ{=p^ zRbCC0Klo(>n@S~yf?Mfr+Z>1;$a@MLWclEO$IWZiVx7^|j|=-URE(LKhNK7R$|E>P z5EfXB%@;w}9GAd}$XXv%x%Bt^9*ZM~4}Vl!cj@kH7-xEi=t?2WR+C$YVVQH@eS`JM z$Ir0UWr4%`({)za_r^Mm^ i2j6^3eBBRkcFX_krv$bhh5#9!F9K + + + + + +

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-ui-integration/src/test/resources/security/policies/scenario1-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario1-policy.xml new file mode 100644 index 00000000..4a232f73 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario1-policy.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario10-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario10-policy.xml new file mode 100644 index 00000000..2d076e06 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario10-policy.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario11-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario11-policy.xml new file mode 100644 index 00000000..794d52ee --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario11-policy.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario12-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario12-policy.xml new file mode 100644 index 00000000..6ac14ecd --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario12-policy.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario13-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario13-policy.xml new file mode 100644 index 00000000..dbefeda8 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario13-policy.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario14-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario14-policy.xml new file mode 100644 index 00000000..bafd7263 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario14-policy.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario15-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario15-policy.xml new file mode 100644 index 00000000..47fb6711 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario15-policy.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario16-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario16-policy.xml new file mode 100644 index 00000000..dc383d79 --- /dev/null +++ b/modules/integration/tests-ui-integration/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-ui-integration/src/test/resources/security/policies/scenario17-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario17-policy.xml new file mode 100644 index 00000000..637cf81d --- /dev/null +++ b/modules/integration/tests-ui-integration/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-ui-integration/src/test/resources/security/policies/scenario2-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario2-policy.xml new file mode 100644 index 00000000..08a45d55 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario2-policy.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario3-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario3-policy.xml new file mode 100644 index 00000000..0bfd14eb --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario3-policy.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario4-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario4-policy.xml new file mode 100644 index 00000000..9ee47cc2 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario4-policy.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario5-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario5-policy.xml new file mode 100644 index 00000000..9454c745 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario5-policy.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario6-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario6-policy.xml new file mode 100644 index 00000000..7de14746 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario6-policy.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario7-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario7-policy.xml new file mode 100644 index 00000000..db95d371 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario7-policy.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario8-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario8-policy.xml new file mode 100644 index 00000000..1fdfd940 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario8-policy.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario9-policy.xml b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario9-policy.xml new file mode 100644 index 00000000..73fa833b --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/security/policies/scenario9-policy.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/testng-server-mgt.xml b/modules/integration/tests-ui-integration/src/test/resources/testng-server-mgt.xml new file mode 100644 index 00000000..75264212 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/testng-server-mgt.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + diff --git a/modules/integration/tests-ui-integration/src/test/resources/testng.xml b/modules/integration/tests-ui-integration/src/test/resources/testng.xml new file mode 100644 index 00000000..14718b73 --- /dev/null +++ b/modules/integration/tests-ui-integration/src/test/resources/testng.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + +