diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManager.java index 1f1ee0d8683..6e2aff8b35d 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManager.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManager.java @@ -83,9 +83,7 @@ public class DeviceTypeManager implements DeviceManager { if (deviceTypeConfiguration.getFeatures() != null && deviceTypeConfiguration.getFeatures(). getFeature() != null) { List features = deviceTypeConfiguration.getFeatures().getFeature(); - if (features != null) { - featureManager = new ConfigurationBasedFeatureManager(features); - } + featureManager = new ConfigurationBasedFeatureManager(features); } if (deviceTypeConfiguration.getDeviceAuthorizationConfig() != null) { requiredDeviceTypeAuthorization = deviceTypeConfiguration.getDeviceAuthorizationConfig(). @@ -119,7 +117,8 @@ public class DeviceTypeManager implements DeviceManager { try { defaultPlatformConfiguration = this.getDefaultConfiguration(); } catch (DeviceManagementException e) { - String msg = "Error occurred while default platform configuration"; + String msg = + "Error occurred while getting default platform configuration for the device type " + deviceType; throw new DeviceTypeDeployerPayloadException(msg, e); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/PropertyBasedPluginDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/PropertyBasedPluginDAOImpl.java index ceedeb74546..0e1502f34a0 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/PropertyBasedPluginDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/PropertyBasedPluginDAOImpl.java @@ -126,14 +126,13 @@ public class PropertyBasedPluginDAOImpl implements PluginDAO { } public boolean updateDevice(Device device) throws DeviceTypeMgtPluginException { - boolean status = false; - Connection conn = null; + Connection conn; PreparedStatement stmt = null; try { conn = deviceTypeDAOHandler.getConnection(); stmt = conn.prepareStatement( - "UPDATE DM_DEVICE_PROPERTIES SET PROPERTY_VALUE = ? WHERE DEVICE_TYPE_NAME = ? AND " + - "DEVICE_IDENTIFICATION = ? AND PROPERTY_NAME = ? AND TENANT_ID= ?"); + "UPDATE DM_DEVICE_PROPERTIES SET PROPERTY_VALUE = ? WHERE DEVICE_TYPE_NAME = ? AND " + + "DEVICE_IDENTIFICATION = ? AND PROPERTY_NAME = ? AND TENANT_ID= ?"); for (Device.Property property : device.getProperties()) { if (!deviceProps.contains(property.getName())) { @@ -149,8 +148,8 @@ public class PropertyBasedPluginDAOImpl implements PluginDAO { stmt.executeBatch(); return true; } catch (SQLException e) { - String msg = "Error occurred while modifying the device '" + - device.getDeviceIdentifier() + "' data on" + deviceType; + String msg = "Error occurred while modifying the device '" + device.getDeviceIdentifier() + "' data on" + + deviceType; log.error(msg, e); throw new DeviceTypeMgtPluginException(msg, e); } finally { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/exception/DeviceTypeMgtPluginException.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/exception/DeviceTypeMgtPluginException.java index 1919e88f429..a07808a9ffe 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/exception/DeviceTypeMgtPluginException.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/exception/DeviceTypeMgtPluginException.java @@ -22,6 +22,10 @@ package org.wso2.carbon.device.mgt.extensions.device.type.template.exception; */ public class DeviceTypeMgtPluginException extends Exception{ + public DeviceTypeMgtPluginException(String msg) { + super(msg); + } + public DeviceTypeMgtPluginException(String msg, Exception nestedEx) { super(msg, nestedEx); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/util/DeviceTypeUtils.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/util/DeviceTypeUtils.java index d409d22b385..56ab67d7bf3 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/util/DeviceTypeUtils.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/util/DeviceTypeUtils.java @@ -25,6 +25,7 @@ import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.extensions.device.type.template.exception.DeviceTypeMgtPluginException; import org.wso2.carbon.device.mgt.extensions.internal.DeviceTypeExtensionDataHolder; import org.wso2.carbon.registry.api.RegistryException; +import org.wso2.carbon.registry.api.RegistryService; import org.wso2.carbon.registry.api.Resource; import org.wso2.carbon.registry.core.Registry; @@ -101,25 +102,28 @@ public class DeviceTypeUtils { public static Registry getConfigurationRegistry() throws DeviceTypeMgtPluginException { try { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); - return DeviceTypeExtensionDataHolder.getInstance().getRegistryService() - .getConfigSystemRegistry(tenantId); + org.wso2.carbon.registry.core.service.RegistryService registryService = DeviceTypeExtensionDataHolder + .getInstance().getRegistryService(); + if (registryService == null) { + throw new DeviceTypeMgtPluginException("Registry Service is not initialized properly"); + } + return registryService.getConfigSystemRegistry(tenantId); } catch (RegistryException e) { throw new DeviceTypeMgtPluginException("Error in retrieving conf registry instance: " + e.getMessage(), e); } } public static boolean putRegistryResource(String path, Resource resource) throws DeviceTypeMgtPluginException { - boolean status; try { - DeviceTypeUtils.getConfigurationRegistry().beginTransaction(); - DeviceTypeUtils.getConfigurationRegistry().put(path, resource); - DeviceTypeUtils.getConfigurationRegistry().commitTransaction(); - status = true; + Registry registry = getConfigurationRegistry(); + registry.beginTransaction(); + registry.put(path, resource); + registry.commitTransaction(); + return true; } catch (RegistryException e) { - throw new DeviceTypeMgtPluginException("Error occurred while persisting registry resource : " + - e.getMessage(), e); + throw new DeviceTypeMgtPluginException( + "Error occurred while persisting registry resource : " + e.getMessage(), e); } - return status; } public static Resource getRegistryResource(String path) throws DeviceTypeMgtPluginException { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java index d2d9060d12e..06c0a3a0fb9 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java @@ -18,13 +18,26 @@ package org.wso2.carbon.device.mgt.extensions.device.type.template; +import org.h2.jdbcx.JdbcDataSource; +import org.mockito.Mockito; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import org.wso2.carbon.base.MultitenantConstants; +import org.wso2.carbon.device.mgt.common.Device; +import org.wso2.carbon.device.mgt.common.DeviceIdentifier; +import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DataSource; +import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DeviceDetails; import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DeviceTypeConfiguration; +import org.wso2.carbon.device.mgt.extensions.device.type.template.config.Properties; import org.wso2.carbon.device.mgt.extensions.device.type.template.config.exception.DeviceTypeConfigurationException; +import org.wso2.carbon.device.mgt.extensions.device.type.template.dao.DeviceDAODefinition; +import org.wso2.carbon.device.mgt.extensions.device.type.template.dao.DeviceTypeDAOHandler; +import org.wso2.carbon.device.mgt.extensions.device.type.template.dao.DeviceTypePluginDAOImpl; +import org.wso2.carbon.device.mgt.extensions.device.type.template.dao.DeviceTypePluginDAOManager; +import org.wso2.carbon.device.mgt.extensions.device.type.template.dao.PropertyBasedPluginDAOImpl; import org.wso2.carbon.device.mgt.extensions.device.type.template.exception.DeviceTypeDeployerPayloadException; +import org.wso2.carbon.device.mgt.extensions.device.type.template.exception.DeviceTypeMgtPluginException; import org.wso2.carbon.device.mgt.extensions.utils.Utils; import org.xml.sax.SAXException; @@ -32,7 +45,11 @@ import javax.xml.bind.JAXBException; import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.IOException; +import java.lang.reflect.Field; import java.net.URL; +import java.sql.Connection; +import java.util.ArrayList; +import java.util.List; /** * This class tests the negative scenarios in {@link DeviceTypeManager} initialization; @@ -40,15 +57,22 @@ import java.net.URL; public class DeviceTypeManagerNegativeTest { private DeviceTypeConfiguration defectiveDeviceTypeConfiguration1; private DeviceTypeConfiguration defectiveDeviceTypeConfiguration2; + private DeviceTypeConfiguration defectiveDeviceTypeConfiguration3; private DeviceTypeConfiguration androidDeviceTypeConfiguration; private DeviceTypeConfigIdentifier deviceTypeConfigIdentifier; + private DeviceTypeManager androidDeviceTypeManager; + private DeviceTypeDAOHandler deviceTypeDAOHandler; private final String DEFECTIVE_DEVICE_TYPE = "defectiveDeviceType"; private final String TABLE_NAME = "DEFECTIVE_DEVICE"; + private DeviceIdentifier deviceIdentifier; + private final String ANDROID_DEVICE_TYPE = "android"; + private PropertyBasedPluginDAOImpl propertyBasedPluginDAO; + private Device sampleDevice; @BeforeTest public void setup() throws SAXException, JAXBException, ParserConfigurationException, DeviceTypeConfigurationException, - IOException { + IOException, NoSuchFieldException, IllegalAccessException { ClassLoader classLoader = getClass().getClassLoader(); URL resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "defective-devicetype.xml"); File configurationFile = null; @@ -76,6 +100,37 @@ public class DeviceTypeManagerNegativeTest { if (configurationFile != null) { androidDeviceTypeConfiguration = Utils.getDeviceTypeConfiguration(configurationFile.getAbsoluteFile()); } + + resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "defective-devicetype3.xml"); + if (resourceUrl != null) { + configurationFile = new File(resourceUrl.getFile()); + } + if (configurationFile != null) { + defectiveDeviceTypeConfiguration3 = Utils + .getDeviceTypeConfiguration(configurationFile.getAbsoluteFile()); + } + createDefectiveDeviceTypeManager(); + deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(Utils.TEST_STRING); + deviceIdentifier.setType(ANDROID_DEVICE_TYPE); + + DeviceDetails deviceDetails = new DeviceDetails(); + Properties properties = new Properties(); + List propertyList = new ArrayList<>(); + propertyList.add(Utils.TEST_STRING); + properties.addProperties(propertyList); + + deviceDetails.setProperties(properties); + propertyBasedPluginDAO = new PropertyBasedPluginDAOImpl(deviceDetails, + deviceTypeDAOHandler, ANDROID_DEVICE_TYPE); + sampleDevice = new Device(); + sampleDevice.setDeviceIdentifier(Utils.TEST_STRING); + List deviceProperties = new ArrayList<>(); + Device.Property property = new Device.Property(); + property.setName(Utils.TEST_STRING); + property.setValue(Utils.TEST_STRING); + deviceProperties.add(property); + sampleDevice.setProperties(deviceProperties); } @Test(description = "This test case tests the behaviour of the DeviceTypeManager creation without defining the " @@ -121,4 +176,168 @@ public class DeviceTypeManagerNegativeTest { new DeviceTypeManager(deviceTypeConfigIdentifier, androidDeviceTypeConfiguration); } + + @Test(description = "This test case tests the behaviour of the DeviceTypeManager creation when having a " + + "defective platform configuration ", expectedExceptions = {DeviceTypeDeployerPayloadException.class}, + expectedExceptionsMessageRegExp = "Error occurred while getting default platform configuration for the " + + "device type wrong *") + public void testWithDefectivePlatformConfiguration() { + DeviceTypeConfigIdentifier wrongDeviceTypeConfigIdentifier = new DeviceTypeConfigIdentifier("wrong", + MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + new DeviceTypeManager(wrongDeviceTypeConfigIdentifier, androidDeviceTypeConfiguration); + } + + @Test(description = "This test case tests the behaviour of the DeviceTypeManager creation when having a " + + "defective platform configuration ", expectedExceptions = {DeviceTypeDeployerPayloadException.class}, + expectedExceptionsMessageRegExp = "Error while looking up the data source:.*") + public void testWithoutDeviceSpecificTable() { + new DeviceTypeManager(deviceTypeConfigIdentifier, defectiveDeviceTypeConfiguration3); + } + + @Test(description = "This test case tests the behaviour of the isEnrolled when the relevant tables are not there", + expectedExceptions = {DeviceManagementException.class}, + expectedExceptionsMessageRegExp = "Error while checking the enrollment status of android device.*") + public void testIsEnrolled() throws DeviceManagementException { + androidDeviceTypeManager.isEnrolled(deviceIdentifier); + } + + @Test(description = "This test case tests the behaviour of the modifyEnrollment when the relevant tables " + + "are not there", + expectedExceptions = {DeviceManagementException.class}, + expectedExceptionsMessageRegExp = "Error while updating the enrollment of the.*") + public void testModifyEnrollment() throws DeviceManagementException { + Device device = new Device(); + device.setDeviceIdentifier(deviceIdentifier.getId()); + device.setType(deviceIdentifier.getType()); + androidDeviceTypeManager.modifyEnrollment(device); + } + + @Test(description = "This test case tests the behaviour of the getAllDevices when the relevant tables " + + "are not there", + expectedExceptions = {DeviceManagementException.class}, + expectedExceptionsMessageRegExp = "Error occurred while fetching all.*") + public void testGetAllDevices() throws DeviceManagementException { + androidDeviceTypeManager.getAllDevices(); + } + + @Test(description = "This test case tests the behaviour of the updateDeviceInfo when the relevant tables " + + "are not there", + expectedExceptions = {DeviceManagementException.class}, + expectedExceptionsMessageRegExp = "Error occurred while fetching the.*") + public void testUpdateDeviceInfo() throws DeviceManagementException { + Device device = new Device(); + device.setDeviceIdentifier(deviceIdentifier.getId()); + device.setType(deviceIdentifier.getType()); + androidDeviceTypeManager.updateDeviceInfo(deviceIdentifier, device); + } + + @Test(description = ("This test case tests the behaviour of the enrollDevice when the relevant tables are not " + + "there"), expectedExceptions = {DeviceManagementException.class}, + expectedExceptionsMessageRegExp = "Error while enrolling the.*", dependsOnMethods = {"testIsEnrolled"}) + public void testEnrollDevice() throws DeviceManagementException { + Device device = new Device(); + device.setDeviceIdentifier(deviceIdentifier.getId()); + device.setType(deviceIdentifier.getType()); + Mockito.doReturn(false).when(androidDeviceTypeManager).isEnrolled(Mockito.any()); + androidDeviceTypeManager.enrollDevice(device); + } + + @Test(description = ("This test case tests the behaviour of the updateDeviceInfo when the relevant tables are not " + + "there"), expectedExceptions = {DeviceManagementException.class}, + expectedExceptionsMessageRegExp = "Error occurred while updating the.*", dependsOnMethods = + {"testUpdateDeviceInfo"}) + public void testUpdateDeviceWithMock() throws DeviceManagementException { + Mockito.doReturn(new Device()).when(androidDeviceTypeManager).getDevice(Mockito.any()); + androidDeviceTypeManager.updateDeviceInfo(deviceIdentifier, sampleDevice); + } + + @Test(description = "This test case tests the behaviour of addDevice when the relevant tables are not available", + expectedExceptions = { DeviceTypeMgtPluginException.class }, + expectedExceptionsMessageRegExp = "Error occurred while adding the device .*") + public void testAddDevice() throws DeviceTypeMgtPluginException { + propertyBasedPluginDAO.addDevice(sampleDevice); + } + + @Test(description = "This test case tests the behaviour of getDevice when the relevant tables are not available", + expectedExceptions = { DeviceTypeMgtPluginException.class }, + expectedExceptionsMessageRegExp = "Error occurred while fetching device .*") + public void testGetPropertyBasedDevice() throws DeviceTypeMgtPluginException { + propertyBasedPluginDAO.getDevice("id"); + } + + @Test(description = "This test case tests the behaviour of the getAllDevices method of the PropertyBasedPuginDAO", + expectedExceptions = {DeviceTypeMgtPluginException.class}, expectedExceptionsMessageRegExp = "Error " + + "occurred while fetching all.*") + public void testGetAllPropertyBasedDevices() throws DeviceTypeMgtPluginException { + propertyBasedPluginDAO.getAllDevices(); + } + + @Test(description = "This test case tests the behaviour of the updateDevice method of the PropertyBasedPuginDAO", + expectedExceptions = {DeviceTypeMgtPluginException.class}, expectedExceptionsMessageRegExp = "Error " + + "occurred while modifying the device.*") + public void testUpdateDevice() throws DeviceTypeMgtPluginException { + propertyBasedPluginDAO.updateDevice(sampleDevice); + } + + /** + * To create a defective device type manager for testing. + * @throws NoSuchFieldException No Such Field Exception. + * @throws SAXException SAX Exception. + * @throws JAXBException JAXB Exception + * @throws ParserConfigurationException Parser Configuration Exception. + * @throws DeviceTypeConfigurationException Device Type Configuration Exception. + * @throws IOException IO Exception. + * @throws IllegalAccessException Illegal Access Exception. + */ + private void createDefectiveDeviceTypeManager() + throws NoSuchFieldException, SAXException, JAXBException, ParserConfigurationException, + DeviceTypeConfigurationException, IOException, IllegalAccessException { + Field datasourceField = DeviceTypeDAOHandler.class.getDeclaredField("dataSource"); + datasourceField.setAccessible(true); + Field currentConnection = DeviceTypeDAOHandler.class.getDeclaredField("currentConnection"); + currentConnection.setAccessible(true); + Field deviceTypePluginDAOField = DeviceTypePluginDAOManager.class.getDeclaredField("deviceTypePluginDAO"); + deviceTypePluginDAOField.setAccessible(true); + Field deviceTypeDAOHandlerField = DeviceTypePluginDAOManager.class.getDeclaredField("deviceTypeDAOHandler"); + deviceTypeDAOHandlerField.setAccessible(true); + + ClassLoader classLoader = getClass().getClassLoader(); + URL resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "android.xml"); + File androidConfiguration = null; + if (resourceUrl != null) { + androidConfiguration = new File(resourceUrl.getFile()); + } + DeviceTypeConfiguration androidDeviceConfiguration = Utils.getDeviceTypeConfiguration(androidConfiguration); + androidDeviceTypeManager = Mockito.mock(DeviceTypeManager.class, Mockito.CALLS_REAL_METHODS); + + deviceTypeDAOHandler = Mockito + .mock(DeviceTypeDAOHandler.class, Mockito.CALLS_REAL_METHODS); + + JdbcDataSource dataSource = new JdbcDataSource(); + dataSource.setURL("jdbc:h2:mem:notexist;DB_CLOSE_DELAY=-1"); + dataSource.setUser("sa"); + dataSource.setPassword("sa"); + datasourceField.set(deviceTypeDAOHandler, dataSource); + currentConnection.set(deviceTypeDAOHandler, new ThreadLocal()); + + DeviceDAODefinition deviceDAODefinition = Utils.getDeviceDAODefinition(androidDeviceConfiguration); + DeviceTypePluginDAOImpl deviceTypePluginDAO = new DeviceTypePluginDAOImpl(deviceDAODefinition, + deviceTypeDAOHandler); + DeviceTypePluginDAOManager deviceTypePluginDAOManager = Mockito + .mock(DeviceTypePluginDAOManager.class, Mockito.CALLS_REAL_METHODS); + deviceTypePluginDAOField.set(deviceTypePluginDAOManager, deviceTypePluginDAO); + deviceTypeDAOHandlerField.set(deviceTypePluginDAOManager, deviceTypeDAOHandler); + + Field deviceTypePluginDAOManagerField = DeviceTypeManager.class.getDeclaredField("deviceTypePluginDAOManager"); + deviceTypePluginDAOManagerField.setAccessible(true); + deviceTypePluginDAOManagerField.set(androidDeviceTypeManager, deviceTypePluginDAOManager); + + Field propertiesExist = DeviceTypeManager.class.getDeclaredField("propertiesExist"); + propertiesExist.setAccessible(true); + Field deviceType = DeviceTypeManager.class.getDeclaredField("deviceType"); + deviceType.setAccessible(true); + + deviceType.set(androidDeviceTypeManager, ANDROID_DEVICE_TYPE); + propertiesExist.set(androidDeviceTypeManager, true); + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerTest.java index 27ebd3f8277..d6f732cf13e 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerTest.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerTest.java @@ -170,8 +170,8 @@ public class DeviceTypeManagerTest { Assert.assertTrue(customDeviceTypeManager.enrollDevice(customDevice), "Custom device type enrollment failed."); List properties = customDevice.getProperties(); Device.Property property = new Device.Property(); - property.setName("test"); - property.setValue("test"); + property.setName(Utils.TEST_STRING); + property.setValue(Utils.TEST_STRING); properties.add(property); customDevice.setProperties(properties); Assert.assertFalse(customDeviceTypeManager.enrollDevice(customDevice), @@ -239,8 +239,8 @@ public class DeviceTypeManagerTest { list.add(property); } - sampleDevice1 = new Device("testdevice", androidDeviceType, "test", "testdevice", null, null, list); - sampleDevice2 = new Device("testdevice1", androidDeviceType, "test", "testdevice", null, null, list); + sampleDevice1 = new Device("testdevice", androidDeviceType, Utils.TEST_STRING, "testdevice", null, null, list); + sampleDevice2 = new Device("testdevice1", androidDeviceType, Utils.TEST_STRING, "testdevice", null, null, list); } /** diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest.java index 7c4ff9ec2c6..b6beda3c2c0 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest.java @@ -42,9 +42,13 @@ import javax.xml.bind.JAXBException; import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.net.URL; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * This test case contains the tests for {@link HTTPDeviceTypeManagerService} and {@link DeviceTypeGeneratorServiceImpl} @@ -75,7 +79,8 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest { @Test(description = "This test case tests the enrollment of newly added device type") public void testEnrollDevice() throws DeviceManagementException { String deviceId = "testdevice1"; - Device sampleDevice1 = new Device(deviceId, androidSenseDeviceType, "test", "testdevice", null, null, null); + Device sampleDevice1 = new Device(deviceId, androidSenseDeviceType, Utils.TEST_STRING, "testdevice", null, null, + null); Assert.assertTrue(httpDeviceTypeManagerService.getDeviceManager().enrollDevice(sampleDevice1), "Enrollment of " + androidSenseDeviceType + " device failed"); Assert.assertTrue(httpDeviceTypeManagerService.getDeviceManager() @@ -108,7 +113,7 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest { ConfigurationEntry configurationEntry = configurationEntries.get(0); - Assert.assertEquals(configurationEntry.getName(), "test", + Assert.assertEquals(configurationEntry.getName(), Utils.TEST_STRING, "Platform Configuration for device type " + "sample is not saved correctly"); String contentType = configurationEntry.getContentType(); @@ -142,6 +147,28 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest { httpDeviceTypeManagerService.getDeviceManager().enrollDevice(null); } + @Test(description = "This test case tests the getDeviceTypeConfiguration method", + dependsOnMethods = {"testPopulateDeviceManagementService"}) + public void testGetDeviceTypeConfiguration() + throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + Method getDeviceTypeConfiguration = HTTPDeviceTypeManagerService.class + .getDeclaredMethod("getDeviceTypeConfiguration", String.class, DeviceTypeMetaDefinition.class); + getDeviceTypeConfiguration.setAccessible(true); + List properties = new ArrayList<>(); + properties.add(Utils.TEST_STRING); + deviceTypeMetaDefinition.setProperties(properties); + Map mapProperties = new HashMap<>(); + mapProperties.put(Utils.TEST_STRING, Utils.TEST_STRING); + PushNotificationConfig pushNotificationConfig = new PushNotificationConfig("push", true, mapProperties); + deviceTypeMetaDefinition.setPushNotificationConfig(pushNotificationConfig); + DeviceTypeConfiguration deviceTypeConfiguration = (DeviceTypeConfiguration) getDeviceTypeConfiguration + .invoke(httpDeviceTypeManagerService, "android", deviceTypeMetaDefinition); + Assert.assertEquals(deviceTypeMetaDefinition.getProperties().size(), + deviceTypeConfiguration.getDeviceDetails().getProperties().getProperty().size(), "Number of " + + "properties added in device-type meta definition is not equal to the properties added in " + + "the DeviceType Configuration"); + } + /** * To create a sample device type meta defintion. * @throws SAXException SAX Exception. @@ -180,6 +207,13 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest { commonFeature.setCode(feature.getCode()); commonFeature.setDescription(feature.getDescription()); commonFeature.setName(feature.getName()); + org.wso2.carbon.device.mgt.common.Feature.MetadataEntry metadataEntry = new org.wso2.carbon.device.mgt + .common.Feature.MetadataEntry(); + metadataEntry.setId(1); + metadataEntry.setValue(Utils.TEST_STRING); + List metadataEntries = new ArrayList<>(); + metadataEntries.add(metadataEntry); + commonFeature.setMetadataEntries(metadataEntries); features.add(commonFeature); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/Utils.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/Utils.java index d35b8eba93e..8a2634d0f80 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/Utils.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/Utils.java @@ -56,6 +56,7 @@ import java.util.List; */ public class Utils { public static final String DEVICE_TYPE_FOLDER = "device-types" + File.separator; + public static final String TEST_STRING = "test"; /** * To get the device type configuration based on the configuration file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/UtilsTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/UtilsTest.java index 01651d3b2c9..c5a6f419cd2 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/UtilsTest.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/UtilsTest.java @@ -23,10 +23,15 @@ import org.testng.Assert; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import org.wso2.carbon.base.MultitenantConstants; +import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.common.license.mgt.License; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException; +import org.wso2.carbon.device.mgt.extensions.device.type.template.DeviceTypeConfigIdentifier; +import org.wso2.carbon.device.mgt.extensions.device.type.template.exception.DeviceTypeMgtPluginException; import org.wso2.carbon.device.mgt.extensions.device.type.template.util.DeviceSchemaInitializer; +import org.wso2.carbon.device.mgt.extensions.device.type.template.util.DeviceTypeUtils; import org.wso2.carbon.device.mgt.extensions.license.mgt.file.FileSystemBasedLicenseManager; +import org.wso2.carbon.device.mgt.extensions.license.mgt.registry.RegistryBasedLicenseManager; import java.io.File; import java.lang.reflect.InvocationTargetException; @@ -63,7 +68,7 @@ public class UtilsTest { @Test(description = "This test case tests the getLicense method of the FileBasedLicenseManager") public void testFileBasedLicenseManagerGetLicense() throws LicenseManagementException { - License fileBasedLicense = fileSystemBasedLicenseManager.getLicense("test","en_US"); + License fileBasedLicense = fileSystemBasedLicenseManager.getLicense(Utils.TEST_STRING,"en_US"); Assert.assertEquals(fileBasedLicense.getText(), "This is a file based license", "FileBased License cannot " + "be retrieved by FileBasedLicenseManager"); } @@ -79,6 +84,43 @@ public class UtilsTest { + "file system", expectedExceptions = {UnsupportedOperationException.class}, expectedExceptionsMessageRegExp = "'addLicense' method is not supported in FileSystemBasedLicenseManager") public void testFileBasedLicenseManagerAddLicense() throws LicenseManagementException { - fileSystemBasedLicenseManager.addLicense("test", null); + fileSystemBasedLicenseManager.addLicense(Utils.TEST_STRING, null); + } + + @Test(description = "This test case tests the DeviceTypeConfigIdentifier equals method") + public void testDeviceTypeConfigIdentifier() { + DeviceTypeConfigIdentifier deviceTypeConfigIdentifier = new DeviceTypeConfigIdentifier("sample", + MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + DeviceTypeConfigIdentifier clonedDeviceTypeConfigIdentifier = new DeviceTypeConfigIdentifier("sample", + MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + Assert.assertTrue(deviceTypeConfigIdentifier.equals(clonedDeviceTypeConfigIdentifier), + "Clone device type config identifier gives wrong results for equals check."); + Assert.assertFalse(deviceTypeConfigIdentifier.equals(null), + "Device Type config identifier object comparison gives wrong results."); + } + + @Test(description = "This test cases tests the registry based license addition") + public void testAddRegistryBasedLicense() throws LicenseManagementException { + String newLicenseString = "New License"; + License fileBasedLicense = fileSystemBasedLicenseManager.getLicense(Utils.TEST_STRING, "en_US"); + RegistryBasedLicenseManager registryBasedLicenseManager = new RegistryBasedLicenseManager(); + registryBasedLicenseManager.addLicense(Utils.TEST_STRING, fileBasedLicense); + Assert.assertEquals(fileBasedLicense.getText(), + registryBasedLicenseManager.getLicense(Utils.TEST_STRING, "en_US").getText(), + "Registry license addition failed"); + fileBasedLicense.setText(newLicenseString); + registryBasedLicenseManager.addLicense(Utils.TEST_STRING, fileBasedLicense); + Assert.assertEquals(registryBasedLicenseManager.getLicense(Utils.TEST_STRING, "en_US").getText(), + newLicenseString, "Registry license update failed"); + } + + @Test(description = "This test case tests the GetConfigurationRegistry method when the registry service is " + + "unavailable", dependsOnMethods = {"testDeviceSchemaInitializer", "testDeviceTypeConfigIdentifier", + "testAddRegistryBasedLicense"}, + expectedExceptions = {DeviceTypeMgtPluginException.class}, + expectedExceptionsMessageRegExp = "Error in retrieving conf registry instance:.*") + public void testGetConfigurationRegistry() throws DeviceTypeMgtPluginException { + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(4); + DeviceTypeUtils.getConfigurationRegistry(); } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/etc/device-mgt-plugin-configs/mobile/wrong-default-platform-configuration.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/etc/device-mgt-plugin-configs/mobile/wrong-default-platform-configuration.xml new file mode 100644 index 00000000000..645805d7a87 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/etc/device-mgt-plugin-configs/mobile/wrong-default-platform-configuration.xml @@ -0,0 +1,23 @@ + + + + + + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/registry.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/registry.xml index 0bb97a7dc97..036b3dda067 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/registry.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/registry.xml @@ -24,7 +24,7 @@ wso2registry false - true + false / diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android.xml index 176469c3299..0320698ff49 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android.xml @@ -51,6 +51,11 @@ true + + + true + + + + + + + defective + + + + + + + Control Bulb + Control Bulb on Arduino Uno + + + state + + + + + + + true + + + + en_US + 1.0.0 + This is license text + + + + + jdbc/MobileAndroidDM_DS + + + +
+
+
+ +