From 1a80b27cd5a06fd74734f1b4461dba1a7e325d54 Mon Sep 17 00:00:00 2001 From: megala21 Date: Tue, 18 Apr 2017 17:29:03 +0530 Subject: [PATCH] Improving android test cases --- .../iot/integration/common/Constants.java | 16 ++- .../integration/common/PayloadGenerator.java | 8 ++ .../device/enrollment/AndroidEnrollment.java | 74 +++++++++- .../device/mgt/AndroidDeviceManagement.java | 10 -- .../device/operation/AndroidOperation.java | 135 +++++++++++------- .../iot/integration/role/RoleManagement.java | 40 +++++- .../payloads/android-enrollment-payloads.json | 46 ++++++ .../payloads/android-operation-payloads.json | 2 +- .../resources/payloads/role-payloads.json | 10 +- pom.xml | 2 +- 10 files changed, 255 insertions(+), 88 deletions(-) diff --git a/modules/integration/tests-common/integration-common/src/main/java/org/wso2/iot/integration/common/Constants.java b/modules/integration/tests-common/integration-common/src/main/java/org/wso2/iot/integration/common/Constants.java index 8eba5498..b0b2552c 100644 --- a/modules/integration/tests-common/integration-common/src/main/java/org/wso2/iot/integration/common/Constants.java +++ b/modules/integration/tests-common/integration-common/src/main/java/org/wso2/iot/integration/common/Constants.java @@ -58,7 +58,8 @@ public final class Constants { public static final String API_APP_REGISTRATION_ENDPOINT = "/api-application-registration/register"; public static final String TOKEN_ENDPOINT = "/token"; public static final String MULTI_TENANT_OAUTH_TOKEN_PAYLOAD = "&grant_type=password&scope=perm:android:enroll" - + " perm:android:wipe perm:android:ring perm:android:lock-devices perm:android:configure-vpn perm:android:configure-wifi perm:android:enroll perm:android:uninstall-application perm:android:manage-configuration perm:android:location perm:android:install-application perm:android:mute perm:android:change-lock-code perm:android:blacklist-applications perm:android:set-password-policy perm:android:encrypt-storage perm:android:clear-password perm:android:enterprise-wipe perm:android:info perm:android:view-configuration perm:android:upgrade-firmware perm:android:set-webclip perm:android:send-notification perm:android:disenroll perm:android:update-application perm:android:unlock-devices perm:android:control-camera perm:android:reboot perm:android:logcat appm:subscribe perm:sign-csr perm:admin:devices:view perm:roles:add perm:roles:add-users perm:roles:update perm:roles:permissions perm:roles:details perm:roles:view perm:roles:create-combined-role perm:roles:delete perm:dashboard:vulnerabilities perm:dashboard:non-compliant-count perm:dashboard:non-compliant perm:dashboard:by-groups perm:dashboard:device-counts perm:dashboard:feature-non-compliant perm:dashboard:count-overview perm:dashboard:filtered-count perm:dashboard:details perm:get-activity perm:devices:delete perm:devices:applications perm:devices:effective-policy perm:devices:compliance-data perm:devices:features perm:devices:operations perm:devices:search perm:devices:details perm:devices:update perm:devices:view perm:view-configuration perm:manage-configuration perm:policies:remove perm:policies:priorities perm:policies:deactivate perm:policies:get-policy-details perm:policies:manage perm:policies:activate perm:policies:update perm:policies:changes perm:policies:get-details perm:users:add perm:users:details perm:users:count perm:users:delete perm:users:roles perm:users:user-details perm:users:credentials perm:users:search perm:users:is-exist perm:users:update perm:users:send-invitation perm:admin-users:view perm:groups:devices perm:groups:update perm:groups:add perm:groups:device perm:groups:devices-count perm:groups:remove perm:groups:groups perm:groups:groups-view perm:groups:share perm:groups:count perm:groups:roles perm:groups:devices-remove perm:groups:devices-add perm:groups:assign perm:device-types:features perm:device-types:types perm:applications:install perm:applications:uninstall perm:admin-groups:count perm:admin-groups:view perm:notifications:mark-checked perm:notifications:view perm:admin:certificates:delete perm:admin:certificates:details perm:admin:certificates:view perm:admin:certificates:add perm:admin:certificates:verify perm:ios:enroll perm:ios:view-device perm:ios:apn perm:ios:ldap perm:ios:enterprise-app perm:ios:store-application perm:ios:remove-application perm:ios:app-list perm:ios:profile-list perm:ios:lock perm:ios:enterprise-wipe perm:ios:device-info perm:ios:restriction perm:ios:email perm:ios:cellular perm:ios:applications perm:ios:wifi perm:ios:ring perm:ios:location perm:ios:notification perm:ios:airplay perm:ios:caldav perm:ios:cal-subscription perm:ios:passcode-policy perm:ios:webclip perm:ios:vpn perm:ios:per-app-vpn perm:ios:app-to-per-app-vpn perm:ios:app-lock perm:ios:clear-passcode perm:ios:remove-profile perm:ios:get-restrictions perm:ios:wipe-data perm:admin"; + + " perm:android:wipe perm:android:ring perm:android:lock-devices perm:android:configure-vpn " + + "perm:android:configure-wifi perm:android:enroll perm:android:uninstall-application perm:android:manage-configuration perm:android:location perm:android:install-application perm:android:mute perm:android:change-lock-code perm:android:blacklist-applications perm:android:set-password-policy perm:android:encrypt-storage perm:android:clear-password perm:android:enterprise-wipe perm:android:info perm:android:view-configuration perm:android:upgrade-firmware perm:android:set-webclip perm:android:send-notification perm:android:disenroll perm:android:update-application perm:android:unlock-devices perm:android:control-camera perm:android:reboot perm:android:logcat appm:subscribe perm:sign-csr perm:admin:devices:view perm:roles:add perm:roles:add-users perm:roles:update perm:roles:permissions perm:roles:details perm:roles:view perm:roles:create-combined-role perm:roles:delete perm:dashboard:vulnerabilities perm:dashboard:non-compliant-count perm:dashboard:non-compliant perm:dashboard:by-groups perm:dashboard:device-counts perm:dashboard:feature-non-compliant perm:dashboard:count-overview perm:dashboard:filtered-count perm:dashboard:details perm:get-activity perm:devices:delete perm:devices:applications perm:devices:effective-policy perm:devices:compliance-data perm:devices:features perm:devices:operations perm:devices:search perm:devices:details perm:devices:update perm:devices:view perm:view-configuration perm:manage-configuration perm:policies:remove perm:policies:priorities perm:policies:deactivate perm:policies:get-policy-details perm:policies:manage perm:policies:activate perm:policies:update perm:policies:changes perm:policies:get-details perm:users:add perm:users:details perm:users:count perm:users:delete perm:users:roles perm:users:user-details perm:users:credentials perm:users:search perm:users:is-exist perm:users:update perm:users:send-invitation perm:admin-users:view perm:groups:devices perm:groups:update perm:groups:add perm:groups:device perm:groups:devices-count perm:groups:remove perm:groups:groups perm:groups:groups-view perm:groups:share perm:groups:count perm:groups:roles perm:groups:devices-remove perm:groups:devices-add perm:groups:assign perm:device-types:features perm:device-types:types perm:applications:install perm:applications:uninstall perm:admin-groups:count perm:admin-groups:view perm:notifications:mark-checked perm:notifications:view perm:admin:certificates:delete perm:admin:certificates:details perm:admin:certificates:view perm:admin:certificates:add perm:admin:certificates:verify perm:ios:enroll perm:ios:view-device perm:ios:apn perm:ios:ldap perm:ios:enterprise-app perm:ios:store-application perm:ios:remove-application perm:ios:app-list perm:ios:profile-list perm:ios:lock perm:ios:enterprise-wipe perm:ios:device-info perm:ios:restriction perm:ios:email perm:ios:cellular perm:ios:applications perm:ios:wifi perm:ios:ring perm:ios:location perm:ios:notification perm:ios:airplay perm:ios:caldav perm:ios:cal-subscription perm:ios:passcode-policy perm:ios:webclip perm:ios:vpn perm:ios:per-app-vpn perm:ios:app-to-per-app-vpn perm:ios:app-lock perm:ios:clear-passcode perm:ios:remove-profile perm:ios:get-restrictions perm:ios:wipe-data perm:admin perm:android:applications"; public static final String OAUTH_TOKEN_PAYLOAD = "username=admin&password=admin" + MULTI_TENANT_OAUTH_TOKEN_PAYLOAD; @@ -104,7 +105,9 @@ public final class Constants { public static final String ENROLLMENT_RESPONSE_PAYLOAD_FILE_NAME = "android-enrollment-response-payloads.json"; public static final String ENROLLMENT_ENDPOINT = "/api/device-mgt/android/v1.0/devices"; public static final String ENROLLMENT_GROUP = "android-enrollment"; - + public static final String UPDATE_APPLICATION_METHOD = "UPDATE_APPLICATIONS"; + public static final String ANDROID_DEVICE_TYPE = "android"; + public static final String GET_PENDING_OPERATIONS_METHOD = "GET_PENDING_OPERATIONS"; private AndroidEnrollment() { throw new AssertionError(); } @@ -145,7 +148,7 @@ public final class Constants { } public static final class AndroidOperations { - private static final String PAYLOAD_COMMON = "[" + DEVICE_ID + "]"; + public static final String PAYLOAD_COMMON = "[" + DEVICE_ID + "]"; public static final String OPERATION_PAYLOAD_FILE_NAME = "android-operation-payloads.json"; public static final String OPERATIONS_GROUP = "operations"; @@ -179,9 +182,11 @@ public final class Constants { public static final String CLEAR_PASSWORD_ENDPOINT = "clear-password"; public static final String CLEAR_PASSWORD_PAYLOAD = PAYLOAD_COMMON; - public static final String DEVICE_INFO_ENDPOINT = "/info"; + public static final String DEVICE_INFO_ENDPOINT = "info"; public static final String DEVICE_INFO_PAYLOAD = "[\"" + DEVICE_ID + "\"]"; + public static final String DEVICE_LOGCAT_ENDPOINT = "logcat"; + public static final String ENTERPRISE_WIPE_ENDPOINT = "enterprise-wipe"; public static final String ENTERPRISE_WIPE_PAYLOAD = PAYLOAD_COMMON; @@ -254,7 +259,7 @@ public final class Constants { public static final String DEVICE_MANAGEMENT_GROUP = "device-mgt"; public static final String KEY_DEVICE_ID = "deviceIdentifier"; public static final String KEY_DEVICE_NAME = "name"; - public static final String DEVICE_MGT_ENDPOINT = "/mdm-android-agent/device/"; + public static final String DEVICE_MGT_ENDPOINT = "/api/device-mgt/android/v1.0/devices"; public static final String LICENSE_SECTION = "This"; public static final String LICENSE_ENDPOINT = DEVICE_MGT_ENDPOINT + "license"; public static final String APP_LIST_ENDPOINT = DEVICE_MGT_ENDPOINT + "appList/" + @@ -330,6 +335,7 @@ public final class Constants { public static final String ROLE_PAYLOAD_FILE_NAME = "role-payloads.json"; public static final String ROLE_RESPONSE_PAYLOAD_FILE_NAME = "role-response-payloads.json"; public static final String GET_FILTERED_ROLED_METHOD = "GET_FILTERED_ROLES"; + public static final String UPDATE_ROLES_METHOD = "UPDATE_USERS"; private RoleManagement() { throw new AssertionError(); } diff --git a/modules/integration/tests-common/integration-common/src/main/java/org/wso2/iot/integration/common/PayloadGenerator.java b/modules/integration/tests-common/integration-common/src/main/java/org/wso2/iot/integration/common/PayloadGenerator.java index c7c82e59..b1d3e3cf 100644 --- a/modules/integration/tests-common/integration-common/src/main/java/org/wso2/iot/integration/common/PayloadGenerator.java +++ b/modules/integration/tests-common/integration-common/src/main/java/org/wso2/iot/integration/common/PayloadGenerator.java @@ -18,6 +18,7 @@ package org.wso2.iot.integration.common; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.apache.commons.io.IOUtils; @@ -46,4 +47,11 @@ public class PayloadGenerator { String returnString = IOUtils.toString(fisTargetFile, Constants.UTF8); return returnString; } + + public static JsonArray getJsonArray(String fileName, String method) + throws FileNotFoundException { + URL url = PayloadGenerator.class.getClassLoader().getResource(PAYLOAD_LOCATION + fileName); + JsonObject jsonObject = parser.parse(new FileReader(url.getPath())).getAsJsonObject(); + return jsonObject.get(method).getAsJsonArray(); + } } \ No newline at end of file diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/enrollment/AndroidEnrollment.java b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/enrollment/AndroidEnrollment.java index 4687ad44..03fb3733 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/enrollment/AndroidEnrollment.java +++ b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/enrollment/AndroidEnrollment.java @@ -17,16 +17,26 @@ */ package org.wso2.iot.integration.device.enrollment; +import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.net.util.Base64; import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Factory; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; +import org.wso2.carbon.automation.engine.context.beans.User; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.iot.integration.common.AssertUtil; +import org.wso2.iot.integration.common.Constants; +import org.wso2.iot.integration.common.OAuthUtil; +import org.wso2.iot.integration.common.PayloadGenerator; +import org.wso2.iot.integration.common.RestClient; +import org.wso2.iot.integration.common.TestBase; /** * This contains testing of Android device enrollment which is necessary to run prior to all other Android related @@ -35,12 +45,23 @@ import org.wso2.iot.integration.common.*; public class AndroidEnrollment extends TestBase { private RestClient client; private String deviceId; + private TestUserMode userMode; - @BeforeClass(alwaysRun = true, groups = { Constants.AndroidEnrollment.ENROLLMENT_GROUP}, dependsOnGroups = - Constants.MobileDeviceManagement.MOBILE_DEVICE_MANAGEMENT_GROUP) + @Factory(dataProvider = "userModeProvider") + public AndroidEnrollment(TestUserMode userMode) { + this.userMode = userMode; + } + + @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(backendHTTPURL, backendHTTPSURL); + super.init(userMode); + User currentUser = getAutomationContext().getContextTenant().getContextUser(); + byte[] bytesEncoded = Base64 + .encodeBase64((currentUser.getUserName() + ":" + currentUser.getPassword()).getBytes()); + String encoded = new String(bytesEncoded); + String accessTokenString = "Bearer " + OAuthUtil + .getOAuthTokenPair(encoded, backendHTTPSURL, backendHTTPSURL, currentUser.getUserName(), + currentUser.getPassword()); this.client = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); } @@ -81,7 +102,40 @@ public class AndroidEnrollment extends TestBase { Constants.HTTP_METHOD_PUT).toString(), response.getData(), true); } - @Test(description = "Test disEnrollment.", dependsOnMethods = {"testModifyEnrollment"}) + @Test(description = "Test update applications", dependsOnMethods = {"testModifyEnrollment"}) + public void testUpdateApplications() throws Exception { + JsonArray updateApplicationData = PayloadGenerator.getJsonArray( + Constants.AndroidEnrollment.ENROLLMENT_PAYLOAD_FILE_NAME, + Constants.AndroidEnrollment.UPDATE_APPLICATION_METHOD); + HttpResponse response = client.put(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT + "/" + deviceId + + "/applications", updateApplicationData.toString()); + Assert.assertEquals("Update of applications for the device id " + deviceId + " failed", HttpStatus + .SC_ACCEPTED, response.getResponseCode()); + response = client.get(Constants.MobileDeviceManagement.CHANGE_DEVICE_STATUS_ENDPOINT + Constants + .AndroidEnrollment.ANDROID_DEVICE_TYPE + "/" + deviceId + "/applications"); + Assert.assertEquals("Error while getting application list for the device with the id " + deviceId + " failed", + HttpStatus.SC_OK, response.getResponseCode()); + JsonArray jsonArray = new JsonParser().parse(response.getData()).getAsJsonArray(); + Assert.assertEquals("Installed applications for the device with the device id " + deviceId + " has not been " + + "updated yet", 3, jsonArray.size()); + + } + + @Test(description = "Test get pending operations", dependsOnMethods = {"testModifyEnrollment"}) + public void testGetPendingOperations() throws Exception { + JsonArray pendingOperationsData = PayloadGenerator.getJsonArray( + Constants.AndroidEnrollment.ENROLLMENT_PAYLOAD_FILE_NAME, + Constants.AndroidEnrollment.GET_PENDING_OPERATIONS_METHOD); + HttpResponse response = client.put(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT + "/" + deviceId + + "/pending-operations", pendingOperationsData.toString()); + JsonArray pendingOperations = new JsonParser().parse(response.getData()).getAsJsonArray(); + Assert.assertEquals("Error while getting pending operations for android device with the id " + deviceId, + HttpStatus.SC_CREATED, response.getResponseCode()); + Assert.assertTrue("Pending operation count is 0. Periodic monitoring tasks are not running.", 0 < + pendingOperations.size()); + + } + @Test(description = "Test disEnrollment.", dependsOnMethods = {"testGetPendingOperations"}) public void testDisEnrollDevice() throws Exception { HttpResponse response = client.delete(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT + "/" + deviceId); Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode()); @@ -89,4 +143,12 @@ public class AndroidEnrollment extends TestBase { Constants.AndroidEnrollment.ENROLLMENT_RESPONSE_PAYLOAD_FILE_NAME, Constants.HTTP_METHOD_DELETE).toString(), response.getData(), true); } + + @DataProvider + private static Object[][] userModeProvider() { + return new TestUserMode[][]{ + new TestUserMode[]{TestUserMode.SUPER_TENANT_ADMIN}, + new TestUserMode[]{TestUserMode.TENANT_ADMIN} + }; + } } diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/mgt/AndroidDeviceManagement.java b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/mgt/AndroidDeviceManagement.java index 5b20f691..7aae9173 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/mgt/AndroidDeviceManagement.java +++ b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/mgt/AndroidDeviceManagement.java @@ -81,15 +81,5 @@ public class AndroidDeviceManagement extends TestBase { Assert.assertTrue(response.getData().contains(sequence)); } - /* - @Test(description = "Test update android device applist.", groups = Constants.DeviceManagement.DEVICE_MANAGEMENT_GROUP, - dependsOnMethods = {"testGetDevice"} ) - public void testUpdateAppList() throws Exception { - HttpResponse response = client.post(Constants.DeviceManagement.APP_LIST_ENDPOINT, - Constants.DeviceManagement.APPLIST_PAYLOAD); - Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode()); - AssertUtil.jsonPayloadCompare(Constants.DeviceManagement.REQUEST_MODIFY_DEVICE_EXPECTED, - response.getData().toString(), true); - }*/ } diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/operation/AndroidOperation.java b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/operation/AndroidOperation.java index 43e4fa12..f01bc303 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/operation/AndroidOperation.java +++ b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/device/operation/AndroidOperation.java @@ -20,22 +20,45 @@ package org.wso2.iot.integration.device.operation; import com.google.gson.JsonObject; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; +import org.apache.commons.net.util.Base64; +import org.testng.annotations.*; import org.wso2.carbon.automation.engine.context.TestUserMode; +import org.wso2.carbon.automation.engine.context.beans.User; +import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException; import org.wso2.carbon.automation.test.utils.http.client.HttpResponse; -import org.wso2.iot.integration.common.*; +import org.wso2.iot.integration.common.Constants; +import org.wso2.iot.integration.common.OAuthUtil; +import org.wso2.iot.integration.common.PayloadGenerator; +import org.wso2.iot.integration.common.RestClient; +import org.wso2.iot.integration.common.TestBase; + +import java.io.File; +import java.io.FileNotFoundException; +import java.net.MalformedURLException; +import java.net.URL; /** * This contain tests to check operations supported by Android. Test are executed against a previously enrolled device */ public class AndroidOperation extends TestBase { private RestClient client; + private TestUserMode userMode; - @BeforeTest(alwaysRun = true, groups = { Constants.AndroidOperations.OPERATIONS_GROUP}) + @Factory(dataProvider = "userModeProvider") + public AndroidOperation(TestUserMode userMode) { + this.userMode = userMode; + } + + @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(backendHTTPURL, backendHTTPSURL); + super.init(userMode); + User currentUser = getAutomationContext().getContextTenant().getContextUser(); + byte[] bytesEncoded = Base64 + .encodeBase64((currentUser.getUserName() + ":" + currentUser.getPassword()).getBytes()); + String encoded = new String(bytesEncoded); + String accessTokenString = "Bearer " + OAuthUtil + .getOAuthTokenPair(encoded, backendHTTPSURL, backendHTTPSURL, currentUser.getUserName(), + currentUser.getPassword()); this.client = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString); //Enroll a device JsonObject enrollmentData = PayloadGenerator.getJsonPayload( @@ -45,20 +68,21 @@ public class AndroidOperation extends TestBase { } @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android device lock operation.") - public void testLock() throws Exception { + public void testLock() throws MalformedURLException, AutomationFrameworkException { HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + Constants.AndroidOperations.LOCK_ENDPOINT, Constants.AndroidOperations.LOCK_OPERATION_PAYLOAD); Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); } -/* - @Test(groups = Constants.AndroidOperations.OPERATIONS_GROUP, description = "Test Android getPendingOperations.") - public void testGetPendingOperations() throws Exception { - HttpResponse response = client.put(Constants.AndroidOperations.OPERATION_ENDPOINT + Constants.DEVICE_ID, - "[]"); - Assert.assertEquals(response.getResponseCode(), HttpStatus.SC_CREATED); - }*/ + @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android device un-lock " + + "operation.") + public void testUnLock() throws MalformedURLException, AutomationFrameworkException { + HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + + Constants.AndroidOperations.UNLOCK_ENDPOINT, Constants.AndroidOperations.UNLOCK_OPERATION_PAYLOAD); + Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); + } + @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android device location " + "operation.") @@ -87,16 +111,20 @@ public class AndroidOperation extends TestBase { Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); } -// //404 -// @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android device information " -// + "operation.") -// public void testDeviceInfo() throws Exception { -// -// HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + -// Constants.AndroidOperations.DEVICE_INFO_ENDPOINT, -// Constants.AndroidOperations.DEVICE_INFO_PAYLOAD); -// Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); -// } + @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android get info operation") + public void testGetInfo() throws Exception { + HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + + Constants.AndroidOperations.DEVICE_INFO_ENDPOINT, Constants.AndroidOperations.DEVICE_INFO_PAYLOAD); + Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); + } + + @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android logcat operation") + public void testLogcat() throws Exception { + HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + + Constants.AndroidOperations.DEVICE_LOGCAT_ENDPOINT, Constants.AndroidOperations.PAYLOAD_COMMON); + Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); + } + @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android enterprise-wipe " + "operation.") @@ -115,15 +143,29 @@ public class AndroidOperation extends TestBase { Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); } -// //400 -// @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android application list " -// + "operation.") -// public void testApplicationList() throws Exception { -// HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + -// Constants.AndroidOperations.APPLICATION_LIST_ENDPOINT, -// Constants.AndroidOperations.APPLICATION_LIST_PAYLOAD); -// Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); -// } + @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android get applications " + + "operation.") + public void testGetApplications() throws Exception { + HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + + Constants.AndroidOperations.APPLICATION_LIST_ENDPOINT, Constants.AndroidOperations.PAYLOAD_COMMON); + Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); + } + + @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android app install operation") + public void testInstallApplication() throws Exception { + JsonObject installApplicationPayload = PayloadGenerator.getJsonPayload(Constants.AndroidOperations + .OPERATION_PAYLOAD_FILE_NAME, Constants.AndroidOperations.INSTALL_APPS_OPERATION); + HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + + Constants.AndroidOperations.INSTALL_APPS_ENDPOINT, installApplicationPayload.toString()); + Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); + } + + @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android reboot operation") + public void testReboot() throws Exception { + HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + + Constants.AndroidOperations.REBOOT_ENDPOINT, Constants.AndroidOperations.PAYLOAD_COMMON); + Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); + } @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android ring operation.") public void testRing() throws Exception { @@ -141,25 +183,6 @@ public class AndroidOperation extends TestBase { Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); } -// //400 -// @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android install apps operation.") -// public void testInstallApps() throws Exception { -// HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + -// Constants.AndroidOperations.INSTALL_APPS_ENDPOINT, -// Constants.AndroidOperations.INSTALL_APPS_PAYLOAD); -// Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); -// } - -// //400 -// @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android uninstall apps " -// + "operation.") -// public void testUninstallApps() throws Exception { -// HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + -// Constants.AndroidOperations.UNINSTALL_APPS_ENDPOINT, -// Constants.AndroidOperations.UNINSTALL_APPS_PAYLOAD); -// Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); -// } - @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android notification operation.") public void testNotification() throws Exception { HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT + @@ -207,4 +230,12 @@ public class AndroidOperation extends TestBase { Constants.AndroidOperations.WEB_CLIP_PAYLOAD); Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode()); } + + @DataProvider + private static Object[][] userModeProvider() { + return new TestUserMode[][]{ + new TestUserMode[]{TestUserMode.SUPER_TENANT_ADMIN}, + new TestUserMode[]{TestUserMode.TENANT_ADMIN} + }; + } } \ No newline at end of file diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/role/RoleManagement.java b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/role/RoleManagement.java index 9e6c8deb..0b6e9feb 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/role/RoleManagement.java +++ b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/role/RoleManagement.java @@ -17,6 +17,8 @@ */ package org.wso2.iot.integration.role; +import com.google.gson.JsonArray; +import com.google.gson.JsonParser; import junit.framework.Assert; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.net.util.Base64; @@ -26,7 +28,13 @@ import org.testng.annotations.Factory; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.automation.engine.context.beans.User; -import org.wso2.iot.integration.common.*; +import org.wso2.iot.integration.common.AssertUtil; +import org.wso2.iot.integration.common.Constants; +import org.wso2.iot.integration.common.IOTHttpClient; +import org.wso2.iot.integration.common.IOTResponse; +import org.wso2.iot.integration.common.OAuthUtil; +import org.wso2.iot.integration.common.PayloadGenerator; +import org.wso2.iot.integration.common.TestBase; import javax.xml.xpath.XPathExpressionException; import java.io.FileNotFoundException; @@ -37,6 +45,7 @@ import java.io.FileNotFoundException; public class RoleManagement extends TestBase { private IOTHttpClient client; private TestUserMode userMode; + private static final String ROLE_NAME = "administration"; @Factory(dataProvider = "userModeProvider") public RoleManagement(TestUserMode userMode) { @@ -66,7 +75,7 @@ public class RoleManagement extends TestBase { @Test(description = "Test update permission role.", dependsOnMethods = {"testAddRole"}) public void testUpdateRolePermission() throws FileNotFoundException { - IOTResponse response = client.put(Constants.RoleManagement.ROLE_MANAGEMENT_END_POINT + "/administration", + IOTResponse response = client.put(Constants.RoleManagement.ROLE_MANAGEMENT_END_POINT + "/" + ROLE_NAME, PayloadGenerator.getJsonPayload(Constants.RoleManagement.ROLE_PAYLOAD_FILE_NAME, Constants.HTTP_METHOD_PUT).toString()); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); @@ -94,20 +103,39 @@ public class RoleManagement extends TestBase { @Test(description = "Test getting permissions of a role.", dependsOnMethods = {"testGetFilteredRoles"}) public void testGetRolePermissions() throws FileNotFoundException { IOTResponse response = client - .get(Constants.RoleManagement.ROLE_MANAGEMENT_END_POINT + "/administration/permissions"); + .get(Constants.RoleManagement.ROLE_MANAGEMENT_END_POINT + "/" + ROLE_NAME + "/permissions"); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); } @Test(description = "Test getting role details.", dependsOnMethods = {"testGetRolePermissions"}) public void testGetRole() throws FileNotFoundException { IOTResponse response = client.get(Constants.RoleManagement.ROLE_MANAGEMENT_END_POINT + - "/administration"); + "/" + ROLE_NAME); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); } - @Test(description = "Test remove user.", dependsOnMethods = {"testGetRole"}) + @Test(description = "Test updating users with a given role.", dependsOnMethods = {"testGetRole"}) + public void testUpdateRolesOfUser() throws FileNotFoundException, XPathExpressionException { + IOTResponse response = client + .put(Constants.RoleManagement.ROLE_MANAGEMENT_END_POINT + "/administration/users", PayloadGenerator.getJsonArray( + Constants.RoleManagement.ROLE_PAYLOAD_FILE_NAME, + Constants.RoleManagement.UPDATE_ROLES_METHOD).toString()); + + Assert.assertEquals("Error while updating the user list for the role administration", HttpStatus.SC_OK, + response.getStatus()); + String url = Constants.UserManagement.USER_ENDPOINT + "/" + automationContext.getContextTenant() + .getContextUser().getUserNameWithoutDomain() + "/roles"; + response = client.get(url); + + JsonArray jsonArray = new JsonParser().parse(response.getBody()).getAsJsonObject().get("roles").getAsJsonArray(); + Assert.assertEquals("Error while retrieving the role details", HttpStatus.SC_OK, response.getStatus()); + Assert.assertEquals("The user is not updated with the roles list", "\"" + ROLE_NAME + "\"", + jsonArray.get(0).toString()); + } + + @Test(description = "Test remove user.", dependsOnMethods = {"testUpdateRolesOfUser"}) public void testRemoveRole() throws Exception { - IOTResponse response = client.delete(Constants.RoleManagement.ROLE_MANAGEMENT_END_POINT +"/administration"); + IOTResponse response = client.delete(Constants.RoleManagement.ROLE_MANAGEMENT_END_POINT +"/" + ROLE_NAME); Assert.assertEquals(HttpStatus.SC_OK, response.getStatus()); } diff --git a/modules/integration/tests-integration/src/test/resources/payloads/android-enrollment-payloads.json b/modules/integration/tests-integration/src/test/resources/payloads/android-enrollment-payloads.json index ca0c8a6b..9b73a322 100644 --- a/modules/integration/tests-integration/src/test/resources/payloads/android-enrollment-payloads.json +++ b/modules/integration/tests-integration/src/test/resources/payloads/android-enrollment-payloads.json @@ -182,5 +182,51 @@ "memoryUsage": 0 } ] + }, +"UPDATE_APPLICATIONS": [ + { + "id": 1, + "platform": "string", + "category": "string", + "name": "string", + "locationUrl": "string", + "imageUrl": "string", + "version": "string", + "type": "string", + "appProperties": { + }, + "applicationIdentifier": "string", + "memoryUsage": 0 + }, + { + "id": 2, + "platform": "string", + "category": "string", + "name": "string", + "locationUrl": "string", + "imageUrl": "string", + "version": "string", + "type": "string", + "appProperties": { + }, + "applicationIdentifier": "string", + "memoryUsage": 0 + }, + { + "id": 3, + "platform": "string", + "category": "string", + "name": "string", + "locationUrl": "string", + "imageUrl": "string", + "version": "string", + "type": "string", + "appProperties": { + }, + "applicationIdentifier": "string", + "memoryUsage": 0 } +], + "GET_PENDING_OPERATIONS" : [] } + diff --git a/modules/integration/tests-integration/src/test/resources/payloads/android-operation-payloads.json b/modules/integration/tests-integration/src/test/resources/payloads/android-operation-payloads.json index b6bd861c..dc1b8f9e 100644 --- a/modules/integration/tests-integration/src/test/resources/payloads/android-operation-payloads.json +++ b/modules/integration/tests-integration/src/test/resources/payloads/android-operation-payloads.json @@ -14,7 +14,7 @@ "install_apps": { "operation": { "appIdentifier": "package_name", - "type": "enterprise/public/webapp", + "type": "enterprise", "url": "https://www.youtube.com", "name": "youtube" }, diff --git a/modules/integration/tests-integration/src/test/resources/payloads/role-payloads.json b/modules/integration/tests-integration/src/test/resources/payloads/role-payloads.json index 3ca61531..e6dc97c3 100644 --- a/modules/integration/tests-integration/src/test/resources/payloads/role-payloads.json +++ b/modules/integration/tests-integration/src/test/resources/payloads/role-payloads.json @@ -1,17 +1,13 @@ { "POST": { "roleName": "administration", - "users": [ - "admin" - ] + "users": [] }, "PUT": { "roleName": "administration", - "users": [ - "admin" - ], "permissions": [ "/permission/admin/device-mgt/admin/groups" ] - } + }, + "UPDATE_USERS": ["admin", "testuser11"] } \ No newline at end of file diff --git a/pom.xml b/pom.xml index ba9c41ec..01441639 100644 --- a/pom.xml +++ b/pom.xml @@ -1596,7 +1596,7 @@ 1.0.400.v20120522-2049 2.40.0 0.8.1 - 4.4.1 + 4.4.2 3.3.0 0.7.4.201502262128 1.1.1