From b9131fa14131a1b94ce68fe9677199e394593bf5 Mon Sep 17 00:00:00 2001 From: sinthuja Date: Mon, 16 Oct 2017 18:08:10 +0530 Subject: [PATCH] Adding mock database impl. --- .../org.wso2.carbon.device.mgt.core/pom.xml | 4 +- .../DeviceManagementProviderServiceImpl.java | 17 ++- .../mgt/core/common/BaseDBIntializerTest.java | 42 ------ .../core/common/BaseDeviceManagementTest.java | 17 ++- .../mgt/core/common/TestDataHolder.java | 6 +- .../device/mgt/core/mock/MockConnection.java | 23 ++- .../device/mgt/core/mock/MockDataSource.java | 29 +++- .../device/mgt/core/mock/MockResultSet.java | 139 ++++++++++++++++-- .../device/mgt/core/mock/MockStatement.java | 28 +++- ...tionManagementNegativeDBOperationTest.java | 4 +- .../DeviceManagementProviderServiceTest.java | 104 +++++++++++-- .../src/test/resources/mysql-testng.xml | 14 +- 12 files changed, 320 insertions(+), 107 deletions(-) delete mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDBIntializerTest.java diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml index 5b24877428..debf13870a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml @@ -139,8 +139,8 @@ file:src/test/resources/log4j.properties - src/test/resources/testng.xml - src/test/resources/mysql-testng.xml + + src/test/resources/mysql-testng.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java index 5244a74201..7bfe0dd31e 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java @@ -254,9 +254,16 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv try { DeviceManagementDAOFactory.beginTransaction(); DeviceType type = deviceTypeDAO.getDeviceType(device.getType(), tenantId); - int deviceId = deviceDAO.addDevice(type.getId(), device, tenantId); - enrolmentId = enrollmentDAO.addEnrollment(deviceId, device.getEnrolmentInfo(), tenantId); - DeviceManagementDAOFactory.commitTransaction(); + if (type != null) { + int deviceId = deviceDAO.addDevice(type.getId(), device, tenantId); + enrolmentId = enrollmentDAO.addEnrollment(deviceId, device.getEnrolmentInfo(), tenantId); + DeviceManagementDAOFactory.commitTransaction(); + } else { + DeviceManagementDAOFactory.rollbackTransaction(); + throw new DeviceManagementException("No device type registered with name - " + device.getType() + + " and hence unable to find succeed the enrollment of device - " + + device.getDeviceIdentifier()); + } } catch (DeviceManagementDAOException e) { DeviceManagementDAOFactory.rollbackTransaction(); String msg = "Error occurred while adding metadata of '" + device.getType() + @@ -282,8 +289,8 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } catch (DeviceDetailsMgtException e) { String msg = "Error occurred while adding device info for the device " + device.getDeviceIdentifier(); - log.error(msg, e); - throw new DeviceManagementException(msg, e); + log.error(msg, e); + throw new DeviceManagementException(msg, e); } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDBIntializerTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDBIntializerTest.java deleted file mode 100644 index 74fffb58c5..0000000000 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDBIntializerTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/* -* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* WSO2 Inc. licenses this file to you under the Apache License, -* Version 2.0 (the "License"); you may not use this file except -* in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, -* software distributed under the License is distributed on an -* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -* KIND, either express or implied. See the License for the -* specific language governing permissions and limitations -* under the License. -* -*/ -package org.wso2.carbon.device.mgt.core.common; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.Parameters; - -public class BaseDBIntializerTest { - private static boolean mock; - private static String dataSourceLocation; - - @BeforeClass - @Parameters({"datasource", "isMock"}) - public void setupDataSource(String datasource, boolean isMock) throws Exception { - mock = isMock; - dataSourceLocation = datasource; - } - - public static boolean isMock() { - return mock; - } - - public static String getDataSourceLocation() { - return dataSourceLocation; - } -} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDeviceManagementTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDeviceManagementTest.java index 27484e2ee5..ed5bf573b0 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDeviceManagementTest.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDeviceManagementTest.java @@ -36,6 +36,7 @@ import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOFactory; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent; +import org.wso2.carbon.device.mgt.core.mock.MockDataSource; import org.wso2.carbon.device.mgt.core.notification.mgt.dao.NotificationManagementDAOFactory; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; @@ -118,12 +119,16 @@ public abstract class BaseDeviceManagementTest { public abstract void init() throws Exception; protected DataSource getDataSource(DataSourceConfig config) { - PoolProperties properties = new PoolProperties(); - properties.setUrl(config.getUrl()); - properties.setDriverClassName(config.getDriverClassName()); - properties.setUsername(config.getUser()); - properties.setPassword(config.getPassword()); - return new org.apache.tomcat.jdbc.pool.DataSource(properties); + if (!isMock()) { + PoolProperties properties = new PoolProperties(); + properties.setUrl(config.getUrl()); + properties.setDriverClassName(config.getDriverClassName()); + properties.setUsername(config.getUser()); + properties.setPassword(config.getPassword()); + return new org.apache.tomcat.jdbc.pool.DataSource(properties); + } else { + return new MockDataSource(config.getUrl()); + } } private void initializeCarbonContext() { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/TestDataHolder.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/TestDataHolder.java index 5065109f35..68079eeb24 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/TestDataHolder.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/TestDataHolder.java @@ -107,7 +107,7 @@ public class TestDataHolder { device.setDescription("Test Description"); device.setDeviceIdentifier(deviceIdentifier); device.setType(deviceType); - device.setName(deviceType+"-"+deviceIdentifier); + device.setName(deviceType + "-" + deviceIdentifier); return device; } @@ -137,7 +137,7 @@ public class TestDataHolder { device.setDescription("Test Description"); device.setDeviceIdentifier(deviceIdentifier.getId()); device.setType(deviceIdentifier.getType()); - device.setName(deviceIdentifier.getType()+"-"+deviceIdentifier.getId()); + device.setName(deviceIdentifier.getType() + "-" + deviceIdentifier.getId()); return device; } @@ -171,7 +171,7 @@ public class TestDataHolder { } public static OperationMonitoringTaskConfig generateMonitoringTaskConfig(boolean enabled, int frequency, - int numberOfOperations) { + int numberOfOperations) { OperationMonitoringTaskConfig taskConfig = new OperationMonitoringTaskConfig(); List operationList = new ArrayList<>(); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockConnection.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockConnection.java index 72f21ed3a5..4e47beba4b 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockConnection.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockConnection.java @@ -34,6 +34,8 @@ import java.sql.SQLXML; import java.sql.Savepoint; import java.sql.Statement; import java.sql.Struct; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Properties; import java.util.concurrent.Executor; @@ -44,23 +46,30 @@ import java.util.concurrent.Executor; public class MockConnection implements Connection { private String url; + private List statements = new ArrayList<>(); + private int statementCounter = 0; public MockConnection(String url) { this.url = url; } - public MockConnection(){ - - } - @Override public Statement createStatement() throws SQLException { + return getStatement(); + } + + private MockStatement getStatement(){ + if (!statements.isEmpty()) { + MockStatement statement = this.statements.get(this.statementCounter); + statementCounter++; + return statement; + } return new MockStatement(); } @Override public PreparedStatement prepareStatement(String sql) throws SQLException { - return new MockStatement(); + return getStatement(); } @Override @@ -326,4 +335,8 @@ public class MockConnection implements Connection { public boolean isWrapperFor(Class iface) throws SQLException { return false; } + + public void addMockStatement(MockStatement mockStatement) { + this.statements.add(mockStatement); + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockDataSource.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockDataSource.java index e9231bbe42..87f500b1cf 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockDataSource.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockDataSource.java @@ -21,26 +21,35 @@ import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; +import java.util.ArrayList; +import java.util.List; import java.util.logging.Logger; import javax.sql.DataSource; /** * This is the mock data source implementation that will be used in the test cases. - * */ public class MockDataSource implements DataSource { private boolean throwException = false; - private Connection connection; + private List connections = new ArrayList<>(); + private int connectionCounter = 0; + private String url; + + public MockDataSource(String url) { + this.url = url; + } @Override public Connection getConnection() throws SQLException { if (throwException) { throw new SQLException("Cannot created test connection."); } else { - if (connection != null) { + if (!connections.isEmpty()) { + Connection connection = this.connections.get(this.connectionCounter); + this.connectionCounter++; return connection; } - return new MockConnection(); + return new MockConnection(url); } } @@ -90,10 +99,16 @@ public class MockDataSource implements DataSource { public void reset() { this.throwException = false; - this.connection = null; + this.connections.clear(); + this.connectionCounter = 0; } - private void setConnection(Connection connection) { - this.connection = connection; + public void setConnection(Connection connection) { + this.connections.add(connection); } + + public String getUrl() { + return this.url; + } + } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockResultSet.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockResultSet.java index 73665fbde6..4ed01dfeec 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockResultSet.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockResultSet.java @@ -36,13 +36,36 @@ import java.sql.SQLXML; import java.sql.Statement; import java.sql.Time; import java.sql.Timestamp; +import java.util.ArrayList; import java.util.Calendar; +import java.util.List; import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; public class MockResultSet implements ResultSet { + private List stringList = new ArrayList<>(); + private List integerList = new ArrayList<>(); + private List doubleList = new ArrayList<>(); + private List booleanList = new ArrayList<>(); + private List timestamps = new ArrayList<>(); + + private AtomicInteger stringCounter = new AtomicInteger(0); + private AtomicInteger integerCounter = new AtomicInteger(0); + private AtomicInteger doubleCounter = new AtomicInteger(0); + private AtomicInteger booleanCounter = new AtomicInteger(0); + private AtomicInteger timestampCounter; + + private boolean iterated = false; + private boolean hasData = false; + @Override public boolean next() throws SQLException { - return false; + if (!this.iterated && this.hasData) { + this.iterated = true; + return true; + } else { + return false; + } } @Override @@ -57,12 +80,29 @@ public class MockResultSet implements ResultSet { @Override public String getString(int columnIndex) throws SQLException { + Object item = getItem(this.stringList, this.stringCounter); + if (item != null) { + return (String) item; + } else { + return ""; + } + } + + private Object getItem(List list, AtomicInteger counter) { + if (!list.isEmpty()) { + return list.get(counter.getAndIncrement()); + } return null; } @Override public boolean getBoolean(int columnIndex) throws SQLException { - return false; + Object item = getItem(this.booleanList, this.booleanCounter); + if (item != null) { + return (Boolean) item; + } else { + return false; + } } @Override @@ -77,7 +117,12 @@ public class MockResultSet implements ResultSet { @Override public int getInt(int columnIndex) throws SQLException { - return 0; + Object item = getItem(this.integerList, this.integerCounter); + if (item != null) { + return (Integer) item; + } else { + return 0; + } } @Override @@ -92,7 +137,12 @@ public class MockResultSet implements ResultSet { @Override public double getDouble(int columnIndex) throws SQLException { - return 0; + Object item = getItem(this.doubleList, this.doubleCounter); + if (item != null) { + return (Double) item; + } else { + return 0.0; + } } @Override @@ -117,7 +167,12 @@ public class MockResultSet implements ResultSet { @Override public Timestamp getTimestamp(int columnIndex) throws SQLException { - return null; + Object item = getItem(this.timestamps, this.timestampCounter); + if (item != null) { + return (Timestamp) item; + } else { + return new Timestamp(System.currentTimeMillis()); + } } @Override @@ -137,12 +192,22 @@ public class MockResultSet implements ResultSet { @Override public String getString(String columnLabel) throws SQLException { - return null; + Object item = getItem(this.stringList, this.stringCounter); + if (item != null) { + return (String) item; + } else { + return ""; + } } @Override public boolean getBoolean(String columnLabel) throws SQLException { - return false; + Object item = getItem(this.booleanList, this.booleanCounter); + if (item != null) { + return (Boolean) item; + } else { + return false; + } } @Override @@ -157,7 +222,12 @@ public class MockResultSet implements ResultSet { @Override public int getInt(String columnLabel) throws SQLException { - return 0; + Object item = getItem(this.integerList, this.integerCounter); + if (item != null) { + return (Integer) item; + } else { + return 0; + } } @Override @@ -172,7 +242,12 @@ public class MockResultSet implements ResultSet { @Override public double getDouble(String columnLabel) throws SQLException { - return 0; + Object item = getItem(this.doubleList, this.doubleCounter); + if (item != null) { + return (Double) item; + } else { + return 0.0; + } } @Override @@ -197,7 +272,12 @@ public class MockResultSet implements ResultSet { @Override public Timestamp getTimestamp(String columnLabel) throws SQLException { - return null; + Object item = getItem(this.timestamps, this.timestampCounter); + if (item != null) { + return (Timestamp) item; + } else { + return new Timestamp(System.currentTimeMillis()); + } } @Override @@ -677,12 +757,22 @@ public class MockResultSet implements ResultSet { @Override public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException { - return null; + Object item = getItem(this.timestamps, this.timestampCounter); + if (item != null) { + return (Timestamp) item; + } else { + return new Timestamp(System.currentTimeMillis()); + } } @Override public Timestamp getTimestamp(String columnLabel, Calendar cal) throws SQLException { - return null; + Object item = getItem(this.timestamps, this.timestampCounter); + if (item != null) { + return (Timestamp) item; + } else { + return new Timestamp(System.currentTimeMillis()); + } } @Override @@ -994,4 +1084,29 @@ public class MockResultSet implements ResultSet { public boolean isWrapperFor(Class iface) throws SQLException { return false; } + + public void addString(String string) { + this.stringList.add(string); + this.hasData = true; + } + + public void addInteger(Integer integer) { + this.integerList.add(integer); + this.hasData = true; + } + + public void addBoolean(Boolean bool) { + this.booleanList.add(bool); + this.hasData = true; + } + + public void addDouble(Double doubleVal) { + this.doubleList.add(doubleVal); + this.hasData = true; + } + + public void addTimestamp(Timestamp timestamp){ + this.timestamps.add(timestamp); + this.hasData = true; + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockStatement.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockStatement.java index e2d8373a44..3b8fa5fe60 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockStatement.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockStatement.java @@ -39,16 +39,30 @@ import java.sql.SQLXML; import java.sql.Statement; import java.sql.Time; import java.sql.Timestamp; +import java.util.ArrayList; import java.util.Calendar; +import java.util.List; /** - * This is the mock statement for the testcases. + * This is the mock statement for the test cases. */ public class MockStatement implements PreparedStatement { + private List resultSets = new ArrayList<>(); + private int resultSetCounter; @Override public ResultSet executeQuery(String sql) throws SQLException { - return new MockResultSet(); + return this.getMockResultSet(); + } + + private ResultSet getMockResultSet() { + if (!this.resultSets.isEmpty()) { + ResultSet resultSet = this.resultSets.get(this.resultSetCounter); + this.resultSetCounter++; + return resultSet; + } else { + return new MockResultSet(); + } } @Override @@ -123,7 +137,7 @@ public class MockStatement implements PreparedStatement { @Override public ResultSet getResultSet() throws SQLException { - return null; + return getMockResultSet(); } @Override @@ -193,7 +207,7 @@ public class MockStatement implements PreparedStatement { @Override public ResultSet getGeneratedKeys() throws SQLException { - return new MockResultSet(); + return getMockResultSet(); } @Override @@ -268,7 +282,7 @@ public class MockStatement implements PreparedStatement { @Override public ResultSet executeQuery() throws SQLException { - return new MockResultSet(); + return getMockResultSet(); } @Override @@ -540,4 +554,8 @@ public class MockStatement implements PreparedStatement { public void setNClob(int parameterIndex, Reader reader) throws SQLException { } + + public void addResultSet(MockResultSet resultSet){ + this.resultSets.add(resultSet); + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementNegativeDBOperationTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementNegativeDBOperationTest.java index 2f38d7b157..767cde63ed 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementNegativeDBOperationTest.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementNegativeDBOperationTest.java @@ -45,7 +45,7 @@ import java.util.List; import javax.sql.DataSource; /** - * Negative testcases for {@link OperationManagerImpl} + * Negative test cases for {@link OperationManagerImpl} * regarding the database connectivity. */ public class OperationManagementNegativeDBOperationTest extends BaseDeviceManagementTest { @@ -216,7 +216,7 @@ public class OperationManagementNegativeDBOperationTest extends BaseDeviceManage private void setMockDataSource() throws NoSuchFieldException, IllegalAccessException { Field datasource = OperationManagementDAOFactory.class.getDeclaredField("dataSource"); datasource.setAccessible(true); - this.dataSource = new MockDataSource(); + this.dataSource = new MockDataSource(null); datasource.set(datasource, this.dataSource); } 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 64efeb76a4..fc184a95e9 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.Mock; import org.mockito.Mockito; import org.testng.Assert; import org.testng.annotations.BeforeClass; @@ -41,6 +42,10 @@ import org.wso2.carbon.device.mgt.core.device.details.mgt.dao.DeviceDetailsMgtDA import org.wso2.carbon.device.mgt.core.dto.DeviceType; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent; +import org.wso2.carbon.device.mgt.core.mock.MockConnection; +import org.wso2.carbon.device.mgt.core.mock.MockDataSource; +import org.wso2.carbon.device.mgt.core.mock.MockResultSet; +import org.wso2.carbon.device.mgt.core.mock.MockStatement; import org.wso2.carbon.registry.core.config.RegistryContext; import org.wso2.carbon.registry.core.exceptions.RegistryException; import org.wso2.carbon.registry.core.internal.RegistryDataHolder; @@ -52,17 +57,19 @@ import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import java.io.InputStream; import java.lang.reflect.Field; +import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Properties; +import javax.sql.DataSource; public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTest { private static final Log log = LogFactory.getLog(DeviceManagementProviderServiceTest.class); public static final String DEVICE_ID = "9999"; - public static final String ALTERNATE_DEVICE_ID = "1128"; + private static final String ALTERNATE_DEVICE_ID = "1128"; private DeviceManagementProviderService providerService; private static final String DEVICE_TYPE = "RANDOM_DEVICE_TYPE"; private DeviceDetailsDAO deviceDetailsDAO = DeviceManagementDAOFactory.getDeviceDetailsDAO(); @@ -98,13 +105,17 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes @Test public void testGetAvailableDeviceTypes() throws DeviceManagementException { List deviceTypes = deviceMgtService.getDeviceTypes(); - Assert.assertTrue(deviceTypes.size() > 0); + if (!isMock()) { + Assert.assertTrue(deviceTypes.size() > 0); + } } @Test public void testGetAvailableDeviceType() throws DeviceManagementException { DeviceType deviceType = deviceMgtService.getDeviceType(DEVICE_TYPE); - Assert.assertTrue(deviceType.getName().equalsIgnoreCase(DEVICE_TYPE)); + if (!isMock()) { + Assert.assertTrue(deviceType.getName().equalsIgnoreCase(DEVICE_TYPE)); + } } @Test @@ -121,10 +132,34 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes } @Test - public void testSuccessfulDeviceEnrollment() throws DeviceManagementException { + public void testSuccessfulDeviceEnrollment() throws DeviceManagementException, NoSuchFieldException, + IllegalAccessException { Device device = TestDataHolder.generateDummyDeviceData(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE)); - boolean enrollmentStatus = deviceMgtService.enrollDevice(device); - Assert.assertTrue(enrollmentStatus); + MockDataSource dataSource = null; + if (isMock()) { + Field datasourceField = DeviceManagementDAOFactory.class.getDeclaredField("dataSource"); + datasourceField.setAccessible(true); + dataSource = (MockDataSource) getDataSource(); + dataSource.setConnection(new MockConnection(dataSource.getUrl())); + MockConnection connection = new MockConnection(dataSource.getUrl()); + dataSource.setConnection(connection); + MockStatement mockStatement = new MockStatement(); + MockResultSet resultSet = new MockResultSet(); + resultSet.addInteger(1); + resultSet.addString(null); + mockStatement.addResultSet(resultSet); + connection.addMockStatement(mockStatement); + datasourceField.set(datasourceField, dataSource); + } + try { + boolean enrollmentStatus = deviceMgtService.enrollDevice(device); + Assert.assertTrue(enrollmentStatus); + } finally { + if (dataSource != null) { + dataSource.reset(); + } + } + } @Test(dependsOnMethods = "testSuccessfulDeviceEnrollment") @@ -377,15 +412,60 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes } @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) - public void testDeviceByDate() throws DeviceManagementException, TransactionManagementException, DeviceDetailsMgtDAOException { + public void testDeviceByDate() throws DeviceManagementException, TransactionManagementException, + DeviceDetailsMgtDAOException, NoSuchFieldException, IllegalAccessException { + MockDataSource dataSource = null; + if (isMock()) { + Field datasourceField = DeviceManagementDAOFactory.class.getDeclaredField("dataSource"); + datasourceField.setAccessible(true); + dataSource = (MockDataSource) getDataSource(); + + //connection used for first get device operation. + MockConnection connection = new MockConnection(dataSource.getUrl()); + dataSource.setConnection(connection); + MockStatement mockStatement = new MockStatement(); + mockStatement.addResultSet(getMockGetDeviceResult()); + connection.addMockStatement(mockStatement); + + //connection used for the add device information operation. + dataSource.setConnection(new MockConnection(dataSource.getUrl())); + + //connection used for second get device operation. + connection = new MockConnection(dataSource.getUrl()); + dataSource.setConnection(connection); + mockStatement = new MockStatement(); + mockStatement.addResultSet(getMockGetDeviceResult()); + connection.addMockStatement(mockStatement); + datasourceField.set(datasourceField, dataSource); + } Device initialDevice = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE)); - addDeviceInformation(initialDevice); - Device device = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE), yesterday()); + if (isMock()) { + if (dataSource != null) { + dataSource.reset(); + } + } Assert.assertTrue(device != null); + + } + + private MockResultSet getMockGetDeviceResult() { + MockResultSet resultSet = new MockResultSet(); + resultSet.addInteger(1); + resultSet.addString("Test"); + resultSet.addString(null); + resultSet.addString(DEVICE_TYPE); + resultSet.addString(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE).toString()); + resultSet.addInteger(0); + resultSet.addString("admin"); + resultSet.addString("BYOD"); + resultSet.addTimestamp(new Timestamp(System.currentTimeMillis())); + resultSet.addTimestamp(new Timestamp(System.currentTimeMillis())); + resultSet.addString("ACTIVE"); + return resultSet; } @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) @@ -423,7 +503,9 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes @Test public void testGetAvaliableDeviceTypes() throws DeviceManagementException { List deviceTypes = deviceMgtService.getAvailableDeviceTypes(); - Assert.assertTrue(!deviceTypes.isEmpty()); + if (!isMock()) { + Assert.assertTrue(!deviceTypes.isEmpty()); + } } @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}) @@ -600,7 +682,7 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceUnderSameUser"}) public void testUpdateDevicesStatusWithDeviceID() throws DeviceManagementException { - boolean status = deviceMgtService.setStatus(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE),"user1", + boolean status = deviceMgtService.setStatus(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE), "user1", EnrolmentInfo.Status.ACTIVE); Assert.assertTrue(status); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/mysql-testng.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/mysql-testng.xml index a704c1d74e..b96e6007d9 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/mysql-testng.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/mysql-testng.xml @@ -18,7 +18,7 @@ - + @@ -28,7 +28,7 @@ - + @@ -37,9 +37,9 @@ - - - + + + @@ -56,6 +56,6 @@ - - + +