diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/DeviceTypeCAppDeployer.java b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/DeviceTypeCAppDeployer.java index 435e3cad3b..2880177a9e 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/DeviceTypeCAppDeployer.java +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/DeviceTypeCAppDeployer.java @@ -78,7 +78,7 @@ public class DeviceTypeCAppDeployer implements AppDeploymentHandler { } - private void deployTypeSpecifiedArtifacts(List artifacts, AxisConfiguration axisConfig, + protected void deployTypeSpecifiedArtifacts(List artifacts, AxisConfiguration axisConfig, String fileType, String directory) throws DeploymentException { for (Artifact artifact : artifacts) { Deployer deployer = AppDeployerUtils.getArtifactDeployer(axisConfig, directory, fileType); @@ -118,7 +118,7 @@ public class DeviceTypeCAppDeployer implements AppDeploymentHandler { } - private void undeployTypeSpecifiedArtifacts(List artifacts, AxisConfiguration axisConfig, String fileType + protected void undeployTypeSpecifiedArtifacts(List artifacts, AxisConfiguration axisConfig, String fileType , String directory) throws DeploymentException { for (Artifact artifact : artifacts) { Deployer deployer = AppDeployerUtils.getArtifactDeployer(axisConfig, directory, fileType); diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/DeviceTypeCAppDeployerTest.java b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/DeviceTypeCAppDeployerTest.java new file mode 100644 index 0000000000..0aa0e28839 --- /dev/null +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/DeviceTypeCAppDeployerTest.java @@ -0,0 +1,131 @@ +/* + * 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.carbon.device.mgt.extensions.device.type.deployer; + +import org.apache.axis2.deployment.DeploymentException; +import org.apache.axis2.engine.AxisConfiguration; +import org.mockito.Mockito; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.wso2.carbon.application.deployer.CarbonApplication; +import org.wso2.carbon.application.deployer.config.ApplicationConfiguration; +import org.wso2.carbon.application.deployer.config.Artifact; +import org.wso2.carbon.application.deployer.config.CappFile; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.mgt.extensions.device.type.deployer.util.DeviceTypePluginConstants; +import org.wso2.carbon.registry.core.exceptions.RegistryException; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; + +/* + Unit tests for deviceTypeCAppDeployer + */ +public class DeviceTypeCAppDeployerTest { + private DeviceTypeCAppDeployer deviceTypeCAppDeployer; + private CarbonApplication carbonApplication = null; + private AxisConfiguration axisConfiguration = null; + private ApplicationConfiguration applicationConfiguration = null; + private CappFile cappFile = new CappFile(); + + + private void initializeActifact(String type) { + Artifact tempArtifact = new Artifact(); + cappFile.setName("testCappFile"); + tempArtifact.setType(type); + tempArtifact.addFile(cappFile); + Artifact.Dependency dependency = new Artifact.Dependency(); + dependency.setArtifact(tempArtifact); + tempArtifact.addDependency(dependency); + Mockito.doReturn(tempArtifact).when(applicationConfiguration).getApplicationArtifact(); + } + + private void initializeErrorArtifact() { + Artifact errArtifact = new Artifact(); + errArtifact.setType(DeviceTypePluginConstants.CDMF_PLUGIN_TYPE); + Artifact.Dependency dependency = new Artifact.Dependency(); + dependency.setArtifact(errArtifact); + errArtifact.addDependency(dependency); + Mockito.doReturn(errArtifact).when(applicationConfiguration).getApplicationArtifact(); + } + + @BeforeClass + public void init() throws NoSuchFieldException, IllegalAccessException, IOException, RegistryException { + Field deviceTypePlugins; + Field deviceTypeUIs; + deviceTypeCAppDeployer = Mockito.mock(DeviceTypeCAppDeployer.class, Mockito.CALLS_REAL_METHODS); + carbonApplication = Mockito.mock(CarbonApplication.class, Mockito.CALLS_REAL_METHODS); + axisConfiguration = Mockito.mock(AxisConfiguration.class, Mockito.CALLS_REAL_METHODS); + applicationConfiguration = Mockito.mock(ApplicationConfiguration.class, Mockito.CALLS_REAL_METHODS); + Mockito.doReturn(applicationConfiguration).when(carbonApplication).getAppConfig(); + Mockito.doNothing().when(deviceTypeCAppDeployer).deployTypeSpecifiedArtifacts(Mockito.any(), Mockito.any(), + Mockito.any(), Mockito.any()); + Mockito.doNothing().when(deviceTypeCAppDeployer).undeployTypeSpecifiedArtifacts(Mockito.any(), Mockito.any(), + Mockito.any(), Mockito.any()); + this.initializeCarbonContext(); + deviceTypePlugins = DeviceTypeCAppDeployer.class.getDeclaredField("deviceTypePlugins"); + deviceTypePlugins.setAccessible(true); + deviceTypePlugins.set(deviceTypeCAppDeployer, new ArrayList()); + deviceTypeUIs = DeviceTypeCAppDeployer.class.getDeclaredField("deviceTypeUIs"); + deviceTypeUIs.setAccessible(true); + deviceTypeUIs.set(deviceTypeCAppDeployer, new ArrayList()); + } + + private void initializeCarbonContext() throws IOException, RegistryException { + if (System.getProperty("carbon.home") == null) { + File file = new File("src/test/resources"); + if (file.exists()) { + System.setProperty("carbon.home", file.getAbsolutePath()); + } + } + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain( + org.wso2.carbon.base.MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId( + org.wso2.carbon.base.MultitenantConstants.SUPER_TENANT_ID); + } + + @Test(description = "deploying a capp of plugin type") + public void testDeployCarbonAppsPluginType() throws DeploymentException, IllegalAccessException { + initializeActifact(DeviceTypePluginConstants.CDMF_PLUGIN_TYPE); + deviceTypeCAppDeployer.deployArtifacts(carbonApplication, axisConfiguration); + } + + @Test(description = "deploying an erroneous car file") + public void testDeployErrorArtifact() throws DeploymentException, IllegalAccessException { + initializeErrorArtifact(); + deviceTypeCAppDeployer.deployArtifacts(carbonApplication, axisConfiguration); + } + + @Test(dependsOnMethods = {"testDeployCarbonAppsPluginType"}, description = "undeploying previously deployed capp") + public void testUndeployCarbonAppsPluginType() throws DeploymentException { + deviceTypeCAppDeployer.undeployArtifacts(carbonApplication, axisConfiguration); + } + + @Test(dependsOnMethods = {"testUndeployCarbonAppsPluginType"}, description = "deploying a capp of UI type") + public void testDeployCarbonAppsUiType() throws DeploymentException, IllegalAccessException { + initializeActifact(DeviceTypePluginConstants.CDMF_UI_TYPE); + deviceTypeCAppDeployer.deployArtifacts(carbonApplication, axisConfiguration); + } + + @Test(dependsOnMethods = {"testDeployCarbonAppsUiType"}, description = "Undeploy previously deployed capp") + public void testUndeployCarbonAppsUiType() throws DeploymentException { + deviceTypeCAppDeployer.undeployArtifacts(carbonApplication, axisConfiguration); + } +} diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/DeviceTypePluginDeployerTest.java b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/DeviceTypePluginDeployerTest.java index 7f158ff569..597575ea31 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/DeviceTypePluginDeployerTest.java +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/DeviceTypePluginDeployerTest.java @@ -40,9 +40,12 @@ import java.util.concurrent.ConcurrentHashMap; public class DeviceTypePluginDeployerTest { private DeviceTypePluginDeployer deviceTypePluginDeployer; private DeploymentFileData deploymentFileData; + private DeploymentFileData invalidDeploymentFileData; private Field deviceTypeServiceRegistrations = null; private Field deviceTypeConfigurationDataMap = null; private ServiceRegistration serviceRegistration = null; + private File file = new File("src/test/resources/android.xml"); + private File invalidFile = new File("src/test/resources/invalidAndroid.xml"); @BeforeClass public void init() throws NoSuchFieldException, IllegalAccessException, IOException, RegistryException { @@ -59,10 +62,15 @@ public class DeviceTypePluginDeployerTest { deviceTypeConfigurationDataMap.setAccessible(true); deviceTypeConfigurationDataMap.set(deviceTypePluginDeployer, new ConcurrentHashMap()); this.initializeCarbonContext(); + if (file.exists()) { + deploymentFileData = new DeploymentFileData(file); + } + if (invalidFile.exists()) { + invalidDeploymentFileData = new DeploymentFileData(invalidFile); + } } private void initializeCarbonContext() throws IOException, RegistryException { - if (System.getProperty("carbon.home") == null) { File file = new File("src/test/resources"); if (file.exists()) { @@ -78,10 +86,6 @@ public class DeviceTypePluginDeployerTest { @SuppressWarnings("unchecked") @Test(description = "Testing deviceType deploy method by deploying Android device type") public void deploy() throws DeploymentException, IllegalAccessException { - File file = new File("src/test/resources/android.xml"); - if (file.exists()) { - deploymentFileData = new DeploymentFileData(file); - } deviceTypePluginDeployer.deploy(deploymentFileData); Map tempServiceRegistration = (Map) deviceTypeServiceRegistrations.get(deviceTypePluginDeployer); @@ -92,4 +96,29 @@ public class DeviceTypePluginDeployerTest { .getAbsolutePath()); Assert.assertEquals(deviceTypeConfigIdentifier.getDeviceType(), "android"); } + + @Test(description = "Testing exception for invalid xml files", expectedExceptions = {org.apache.axis2.deployment + .DeploymentException.class}) + public void deployInvalidXml() throws DeploymentException, IllegalAccessException { + deviceTypePluginDeployer.deploy(invalidDeploymentFileData); + } + + @Test(description = "Testing exception for non existing xml file", expectedExceptions = {org.apache.axis2.deployment + .DeploymentException.class}) + public void unDeployInvalidXml() throws DeploymentException, IllegalAccessException { + deviceTypePluginDeployer.deploy(new DeploymentFileData(new File("src/test/resources/notExist.xml"))); + } + + @SuppressWarnings("unchecked") + @Test(dependsOnMethods = {"deploy"} , description = "Testing deviceType undeploy method by un-deploying Android " + + "device type") + public void unDeploy() throws DeploymentException, IllegalAccessException { + deviceTypePluginDeployer.undeploy(deploymentFileData.getAbsolutePath()); + Map tempServiceRegistration = (Map) + deviceTypeServiceRegistrations.get(deviceTypePluginDeployer); + Assert.assertNull(tempServiceRegistration.get(deploymentFileData.getAbsolutePath())); + Map tempDeviceTypeConfig = (Map) + deviceTypeConfigurationDataMap.get(deviceTypePluginDeployer); + Assert.assertNull(tempDeviceTypeConfig.get(deploymentFileData.getAbsolutePath())); + } } diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/resources/invalidAndroid.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/resources/invalidAndroid.xml new file mode 100644 index 0000000000..45ddc258b5 --- /dev/null +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/resources/invalidAndroid.xml @@ -0,0 +1,382 @@ + + + + + + + en_US + 1.0.0 + This End User License Agreement ("Agreement") is a legal agreement between you ("You") and WSO2, + Inc., regarding the enrollment of Your personal mobile device ("Device") in SoR's mobile device + management program, and the loading to and removal from Your Device and Your use of certain + applications and any associated software and user documentation, whether provided in "online" or + electronic format, used in connection with the operation of or provision of services to WSO2, + Inc., BY SELECTING "I ACCEPT" DURING INSTALLATION, YOU ARE ENROLLING YOUR DEVICE, AND THEREBY + AUTHORIZING SOR OR ITS AGENTS TO INSTALL, UPDATE AND REMOVE THE APPS FROM YOUR DEVICE AS DESCRIBED + IN THIS AGREEMENT. YOU ARE ALSO EXPLICITLY ACKNOWLEDGING AND AGREEING THAT (1) THIS IS A BINDING + CONTRACT AND (2) YOU HAVE READ AND AGREE TO THE TERMS OF THIS AGREEMENT. + + IF YOU DO NOT ACCEPT THESE TERMS, DO NOT ENROLL YOUR DEVICE AND DO NOT PROCEED ANY FURTHER. + + You agree that: (1) You understand and agree to be bound by the terms and conditions contained in + this Agreement, and (2) You are at least 21 years old and have the legal capacity to enter into + this Agreement as defined by the laws of Your jurisdiction. SoR shall have the right, without + prior notice, to terminate or suspend (i) this Agreement, (ii) the enrollment of Your Device, or + (iii) the functioning of the Apps in the event of a violation of this Agreement or the cessation + of Your relationship with SoR (including termination of Your employment if You are an employee or + expiration or termination of Your applicable franchise or supply agreement if You are a franchisee + of or supplier to the WSO2 WSO2, Inc., system). SoR expressly reserves all rights not expressly + granted herein. + + + + + true + + + + + + + + + jdbc/MobileAndroidDM_DS + + + + DEVICE_ID + + FCM_TOKEN + DEVICE_INFO + IMEI + IMSI + OS_VERSION + DEVICE_MODEL + VENDOR + LATITUDE + LONGITUDE + SERIAL + MAC_ADDRESS + DEVICE_NAME + OS_BUILD_DATE + +
+
+
+ + + + Ring + Ring the device + + + + + Device Lock + Lock the device + + + + + Location + Request coordinates of device location + + + + + Clear Password + Clear current password + + + + + Reboot + Reboot the device + + + + + Upgrade Firmware + Upgrade Firmware + + + + + Mute + Enable mute in the device + + + + + Message + Send message + + + + + Change Lock-code + Change current lock code + + + + + Enterprise Wipe + Remove enterprise applications + + + + + Wipe Data + Factory reset the device + + + + + Wifi + Setting up wifi configuration + + + Camera + Enable or disable camera + + + Email + Configure email settings + + + Device info + Request device information + + + Application List + Request list of current installed applications + + + Install App + Install App + + + Uninstall App + Uninstall App + + + Blacklist app + Blacklist applications + + + Encrypt Storage + Encrypt storage + + + Password Policy + Set passcode policy + + + Configure VPN + Configure VPN settings + + + Disallow user to change volume + Allow or disallow user to change volume" + + + Disallow bluetooth configuration + Allow or disallow bluetooth configuration + + + Disallow user to change cell broadcast configurations + Allow or disallow user to change cell broadcast configurations + + + Disallow user to change user credentials + Allow or disallow user to change user credentials + + + Disallow user to change mobile networks configurations + Allow or disallow user to change mobile networks configurations + + + Disallow user to change tethering configurations + Allow or disallow user to change tethering configurations + + + Disallow user to change VPN configurations + Allow or disallow user to change VPN configurations + + + Disallow user to change WIFI configurations + Allow or disallow user to change WIFI configurations + + + Disallow user to change app control + Allow or disallow user to change app control + + + Disallow window creation + Allow or disallow window creation + + + Disallow user to change app control configurations + Allow or disallow user to change app control configurations + + + Disallow cross profile copy paste + Allow or disallow cross profile copy paste + + + Disallow debugging features + Allow or disallow debugging features + + + Disallow factory reset + Allow or disallow factory reset + + + Disallow add user + Allow or disallow add user + + + Disallow install apps + Allow or disallow install apps + + + Disallow install unknown sources + Allow or disallow install unknown sources + + + Disallow modify account + Allow or disallow modify account + + + Disallow mount physical media + Allow or disallow mount physical media + + + Disallow network reset + Allow or disallow network reset + + + Disallow outgoing beam + Allow or disallow outgoing beam + + + Disallow outgoing calls + Allow or disallow outgoing calls + + + Disallow remove users + Allow or disallow remove users + + + Disallow safe boot + Allow or disallow safe boot + + + Disallow share location + Allow or disallow share location + + + Disallow sms + Allow or disallow sms + + + Disallow uninstall app + Allow or disallow uninstall app + + + Disallow unmute mic + Allow or disallow unmute mic + + + Disallow usb file transfer + Allow or disallow usb file transfer + + + Disallow parent profile app linking + Allow or disallow parent profile app linking + + + Disallow ensure verify apps + Allow or disallow ensure verify apps + + + Disallow auto timing + Allow or disallow auto timing + + + Remove device owner + Remove device owner + + + Fetch device logcat + Fetch device logcat + + + Unlock the device + Unlock the device + + + + true + 60000 + + + DEVICE_INFO + 1 + + + APPLICATION_LIST + 5 + + + DEVICE_LOCATION + 1 + + + + + + + DEVICE_INFO + APPLICATION_LIST + DEVICE_LOCATION + + + + + true + 300 + 900 + 600 + +
diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/resources/testng.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/resources/testng.xml index d0ea4e8805..5d4a11b9b9 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/resources/testng.xml +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/resources/testng.xml @@ -23,6 +23,7 @@ + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/EnrollmentDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/EnrollmentDAOImpl.java index 33371e3c9d..b7a4086d0e 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/EnrollmentDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/EnrollmentDAOImpl.java @@ -23,9 +23,12 @@ import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; import org.wso2.carbon.device.mgt.core.dao.EnrollmentDAO; import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil; -import org.wso2.carbon.device.mgt.core.operation.mgt.OperationMapping; -import java.sql.*; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -201,25 +204,53 @@ public class EnrollmentDAOImpl implements EnrollmentDAO { return true; } - @Override - public boolean setStatus(String currentOwner, EnrolmentInfo.Status status, - int tenantId) throws DeviceManagementDAOException { + private int getCountOfDevicesOfOwner(String owner, int tenantID) throws DeviceManagementDAOException { Connection conn; PreparedStatement stmt = null; + ResultSet rs = null; + int count = 0; try { conn = this.getConnection(); - String sql = "UPDATE DM_ENROLMENT SET STATUS = ? WHERE OWNER = ? AND TENANT_ID = ?"; - stmt = conn.prepareStatement(sql); - stmt.setString(1, status.toString()); - stmt.setString(2, currentOwner); - stmt.setInt(3, tenantId); - stmt.executeUpdate(); + String checkQuery = "SELECT COUNT(ID) AS COUNT FROM DM_ENROLMENT WHERE OWNER = ? AND TENANT_ID = ?"; + stmt = conn.prepareStatement(checkQuery); + stmt.setString(1, owner); + stmt.setInt(2, tenantID); + rs = stmt.executeQuery(); + if(rs.next()){ + count = rs.getInt("COUNT"); + } } catch (SQLException e) { - throw new DeviceManagementDAOException("Error occurred while setting the status of device enrolment", e); + throw new DeviceManagementDAOException("Error occurred while trying to get device " + + "count of Owner : "+owner, e); } finally { - DeviceManagementDAOUtil.cleanupResources(stmt, null); + DeviceManagementDAOUtil.cleanupResources(stmt, rs); + } + return count; + } + + @Override + public boolean setStatus(String currentOwner, EnrolmentInfo.Status status, + int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + if(getCountOfDevicesOfOwner(currentOwner, tenantId) > 0){ + try { + conn = this.getConnection(); + String sql = "UPDATE DM_ENROLMENT SET STATUS = ? WHERE OWNER = ? AND TENANT_ID = ?"; + stmt = conn.prepareStatement(sql); + stmt.setString(1, status.toString()); + stmt.setString(2, currentOwner); + stmt.setInt(3, tenantId); + stmt.executeUpdate(); + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while setting the status of device enrolment", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return true; + } else { + return false; } - return true; } @Override diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManager.java index 010b47b8d0..e30edc3f48 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManager.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManager.java @@ -20,6 +20,7 @@ import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration import org.wso2.carbon.device.mgt.common.license.mgt.License; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException; +import java.util.ArrayList; import java.util.List; public class TestDeviceManager implements DeviceManager { @@ -80,7 +81,15 @@ public class TestDeviceManager implements DeviceManager { @Override public Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException { - return null; + List features = new ArrayList(); + List properties = new ArrayList(); + Device.Property prop1 = new Device.Property(); + prop1.setName("Prop1"); + prop1.setValue("Prop1-value"); + properties.add(prop1); + Device device = new Device(deviceId.getType()+"-"+deviceId.getId(), deviceId.getType(), + "This is a test Device", deviceId.getId(), null, features, properties); + return device; } @Override @@ -92,7 +101,7 @@ public class TestDeviceManager implements DeviceManager { @Override public boolean setOwnership(DeviceIdentifier deviceId, String ownershipType) throws DeviceManagementException { - return false; + return true; } @Override diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceTest.java index 3b57176b63..64efeb76a4 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceTest.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceTest.java @@ -17,6 +17,7 @@ package org.wso2.carbon.device.mgt.core.service; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.mockito.Mockito; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -45,10 +46,12 @@ import org.wso2.carbon.registry.core.exceptions.RegistryException; import org.wso2.carbon.registry.core.internal.RegistryDataHolder; import org.wso2.carbon.registry.core.jdbc.realm.InMemoryRealmService; import org.wso2.carbon.registry.core.service.RegistryService; +import org.wso2.carbon.user.api.UserStoreException; import org.wso2.carbon.user.core.service.RealmService; import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import java.io.InputStream; +import java.lang.reflect.Field; import java.util.Calendar; import java.util.Date; import java.util.HashMap; @@ -98,6 +101,20 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes Assert.assertTrue(deviceTypes.size() > 0); } + @Test + public void testGetAvailableDeviceType() throws DeviceManagementException { + DeviceType deviceType = deviceMgtService.getDeviceType(DEVICE_TYPE); + Assert.assertTrue(deviceType.getName().equalsIgnoreCase(DEVICE_TYPE)); + } + + @Test + public void addLicense() throws DeviceManagementException { + License license = new License(); + license.setLanguage("ENG"); + license.setName("RANDON_DEVICE_LICENSE"); + deviceMgtService.addLicense(DEVICE_TYPE, license); + } + @Test(expectedExceptions = DeviceManagementException.class) public void testNullDeviceEnrollment() throws DeviceManagementException { deviceMgtService.enrollDevice(null); @@ -176,14 +193,45 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes public void testDisenrollment() throws DeviceManagementException { Device device = TestDataHolder.generateDummyDeviceData(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE)); boolean disenrollmentStatus = deviceMgtService.disenrollDevice(new DeviceIdentifier - (device - .getDeviceIdentifier(), - device.getType())); + (device.getDeviceIdentifier(), device.getType())); log.info(disenrollmentStatus); Assert.assertTrue(disenrollmentStatus); } + @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceWithOtherUser"}, expectedExceptions = + DeviceManagementException.class) + public void testDisenrollmentWithNullDeviceID() throws DeviceManagementException { + deviceMgtService.disenrollDevice(null); + } + + @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceWithOtherUser"}) + public void testDisenrollmentWithNonExistentDT() throws DeviceManagementException { + Device device = TestDataHolder.generateDummyDeviceData(new DeviceIdentifier(DEVICE_ID, + "NON_EXISTENT_DT")); + boolean result = deviceMgtService.disenrollDevice(new DeviceIdentifier( + device.getDeviceIdentifier(), device.getType())); + Assert.assertTrue(!result); + } + + @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceWithOtherUser"}) + public void testDisenrollmentWithNonExistentDevice() throws DeviceManagementException { + Device device = TestDataHolder.generateDummyDeviceData(new DeviceIdentifier(ALTERNATE_DEVICE_ID, + DEVICE_TYPE)); + boolean result = deviceMgtService.disenrollDevice(new DeviceIdentifier( + device.getDeviceIdentifier(), device.getType())); + Assert.assertTrue(!result); + } + + @Test(dependsOnMethods = {"testDisenrollment"}) + public void testDisenrollAlreadyDisEnrolledDevice() throws DeviceManagementException { + Device device = TestDataHolder.generateDummyDeviceData(new DeviceIdentifier(DEVICE_ID, + DEVICE_TYPE)); + boolean result = deviceMgtService.disenrollDevice(new DeviceIdentifier( + device.getDeviceIdentifier(), device.getType())); + Assert.assertTrue(result); + } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) public void testGetDeviceCount() throws DeviceManagementException { int count = deviceMgtService.getDeviceCount(); @@ -259,6 +307,12 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes Assert.assertTrue(device.getDeviceInfo() != null); } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) + public void testGetDeviceTypeWithProps() throws DeviceManagementException { + Device device = deviceMgtService.getDeviceWithTypeProperties(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE)); + Assert.assertTrue(!device.getProperties().isEmpty()); + } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) public void testGetDeviceWithOutInfo() throws DeviceManagementException { Device device = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE) @@ -272,6 +326,35 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes Assert.assertTrue(devices.size() > 0); } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions = + DeviceManagementException.class) + public void testGetAllDevicesOfRoleFailureFlow() throws DeviceManagementException, UserStoreException, NoSuchFieldException, IllegalAccessException { + int tenantID = -1234; + RealmService mockRealmService = Mockito.mock(RealmService.class, Mockito.CALLS_REAL_METHODS); + + Mockito.doThrow(new UserStoreException("Mocked Exception when obtaining Tenant Realm")) + .when(mockRealmService).getTenantUserRealm(tenantID); + RealmService currentRealm = DeviceManagementDataHolder.getInstance().getRealmService(); + DeviceManagementDataHolder.getInstance().setRealmService(mockRealmService); + try { + deviceMgtService.getAllDevicesOfRole("admin"); + } finally { + DeviceManagementDataHolder.getInstance().setRealmService(currentRealm); + } + } + + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) + public void testGetAllDevicesOfRoleWithNonExistentRole() throws DeviceManagementException { + List devices = deviceMgtService.getAllDevicesOfRole("non-existent-role"); + Assert.assertTrue(devices.size() == 0); + } + + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions = + DeviceManagementException.class) + public void testGetAllDevicesOfRoleWithNullArgs() throws DeviceManagementException { + deviceMgtService.getAllDevicesOfRole(null); + } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) public void testDeviceByOwner() throws DeviceManagementException { Device device = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID, @@ -279,11 +362,47 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes Assert.assertTrue(device != null); } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) + public void testDeviceByOwnerAndNonExistentDeviceID() throws DeviceManagementException { + String nonExistentDeviceID = "4455"; + Device device = deviceMgtService.getDevice(new DeviceIdentifier(nonExistentDeviceID, + DEVICE_TYPE), "admin", true); + Assert.assertTrue(device == null); + } + + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions = + DeviceManagementException.class) + public void testDeviceByOwnerWithNullDeviceID() throws DeviceManagementException { + deviceMgtService.getDevice(null, "admin", true); + } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) public void testDeviceByDate() throws DeviceManagementException, TransactionManagementException, DeviceDetailsMgtDAOException { Device initialDevice = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE)); + addDeviceInformation(initialDevice); + + Device device = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID, + DEVICE_TYPE), yesterday()); + Assert.assertTrue(device != null); + } + + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) + public void testDeviceByDateWithNonExistentDevice() throws DeviceManagementException, + TransactionManagementException, DeviceDetailsMgtDAOException { + Device device = deviceMgtService.getDevice(new DeviceIdentifier(ALTERNATE_DEVICE_ID, + DEVICE_TYPE), yesterday()); + Assert.assertTrue(device == null); + } + + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions = + DeviceManagementException.class) + public void testDeviceByDateWithNullDeviceID() throws DeviceManagementException { + deviceMgtService.getDevice(null, yesterday()); + } + + private void addDeviceInformation(Device initialDevice) throws TransactionManagementException, DeviceDetailsMgtDAOException { DeviceManagementDAOFactory.beginTransaction(); //Device details table will be reffered when looking for last updated time @@ -292,10 +411,6 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes .generateDummyDeviceInfo()); DeviceManagementDAOFactory.closeConnection(); - - Device device = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID, - DEVICE_TYPE), yesterday()); - Assert.assertTrue(device != null); } @Test(dependsOnMethods = {"testDeviceByDate"}) @@ -320,10 +435,18 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) public void testGetAllDevicesPaginated() throws DeviceManagementException { PaginationRequest request = new PaginationRequest(0, 100); + request.setOwnerRole("admin"); PaginationResult result = deviceMgtService.getAllDevices(request); Assert.assertTrue(result.getRecordsTotal() > 0); } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions = + DeviceManagementException.class) + public void testGetAllDevicesWithNullRequest() throws DeviceManagementException { + PaginationRequest request = null; + deviceMgtService.getAllDevices(request); + } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) public void testGetAllDevicesByName() throws DeviceManagementException { PaginationRequest request = new PaginationRequest(0, 100); @@ -392,8 +515,15 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes Assert.assertTrue(false); } - @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions = + DeviceManagementException.class) public void testGetDeviesOfUser() throws DeviceManagementException { + String username = null; + deviceMgtService.getDevicesOfUser(username); + } + + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) + public void testGetDeviesOfUserWhileUserNull() throws DeviceManagementException { List devices = deviceMgtService.getDevicesOfUser("admin"); Assert.assertTrue(!devices.isEmpty()); } @@ -419,6 +549,13 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes Assert.assertTrue(result.getRecordsTotal() > 0); } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions = + DeviceManagementException.class) + public void testGetDeviesOfUserWhileNullOwnerPaginated() throws DeviceManagementException { + PaginationRequest request = null; + deviceMgtService.getDevicesOfUser(request, true); + } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) public void testGetDeviesByOwnership() throws DeviceManagementException { PaginationRequest request = new PaginationRequest(0, 100); @@ -427,6 +564,26 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes Assert.assertTrue(result.getRecordsTotal() > 0); } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) + public void testSetOwnership() throws DeviceManagementException { + boolean status = deviceMgtService.setOwnership(new DeviceIdentifier(DEVICE_ID, + DEVICE_TYPE), EnrolmentInfo.OwnerShip.COPE.toString()); + Assert.assertTrue(status); + } + + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) + public void testSetOwnershipNonExistentDT() throws DeviceManagementException { + boolean status = deviceMgtService.setOwnership(new DeviceIdentifier(DEVICE_ID, + "non-existent-dt"), EnrolmentInfo.OwnerShip.COPE.toString()); + Assert.assertFalse(status); + } + + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions = + DeviceManagementException.class) + public void testSetOwnershipOfNullDevice() throws DeviceManagementException { + deviceMgtService.setOwnership(null, EnrolmentInfo.OwnerShip.COPE.toString()); + } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) public void testGetDeviesByStatus() throws DeviceManagementException { PaginationRequest request = new PaginationRequest(0, 100); @@ -435,6 +592,25 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes Assert.assertTrue(result.getRecordsTotal() > 0); } + @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceUnderSameUser"}) + public void testUpdateDevicesStatus() throws DeviceManagementException { + boolean status = deviceMgtService.setStatus("user1", EnrolmentInfo.Status.REMOVED); + Assert.assertTrue(status); + } + + @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceUnderSameUser"}) + public void testUpdateDevicesStatusWithDeviceID() throws DeviceManagementException { + boolean status = deviceMgtService.setStatus(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE),"user1", + EnrolmentInfo.Status.ACTIVE); + Assert.assertTrue(status); + } + + @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceUnderSameUser"}) + public void testUpdateDevicesStatusOfNonExistingUser() throws DeviceManagementException { + boolean status = deviceMgtService.setStatus("random-user", EnrolmentInfo.Status.REMOVED); + Assert.assertFalse(status); + } + @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) public void testGetDeviesOfUserAndDeviceType() throws DeviceManagementException { List devices = deviceMgtService.getDevicesOfUser("admin", DEVICE_TYPE, true); @@ -451,7 +627,6 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes props.setProperty("password", "!@#$$$%"); EmailMetaInfo metaInfo = new EmailMetaInfo(recipient, props); - deviceMgtService.sendRegistrationEmail(metaInfo); Assert.assertTrue(true); }