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 225e3b42486..e1228aa29de 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 @@ -245,13 +245,15 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } } for (Device device : allDevices) { - Device dmsDevice = - this.getPluginRepository().getDeviceManagementService( - device.getType()).getDeviceManager().getDevice( - new DeviceIdentifier(device.getDeviceIdentifier(), device.getType())); - if (dmsDevice != null) { - device.setFeatures(dmsDevice.getFeatures()); - device.setProperties(dmsDevice.getProperties()); + DeviceManagementService managementService = this.getPluginRepository(). + getDeviceManagementService(device.getType()); + if(managementService != null) { + Device dmsDevice = managementService.getDeviceManager().getDevice( + new DeviceIdentifier(device.getDeviceIdentifier(), device.getType())); + if (dmsDevice != null) { + device.setFeatures(dmsDevice.getFeatures()); + device.setProperties(dmsDevice.getProperties()); + } } devices.add(device); } @@ -278,13 +280,15 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } for (Device device : allDevices) { - Device dmsDevice = - this.getPluginRepository().getDeviceManagementService( - device.getType()).getDeviceManager().getDevice( - new DeviceIdentifier(device.getDeviceIdentifier(), device.getType())); - if (dmsDevice != null) { - device.setFeatures(dmsDevice.getFeatures()); - device.setProperties(dmsDevice.getProperties()); + + DeviceManagementService service = this.getPluginRepository().getDeviceManagementService(device.getType()); + if (service != null) { + Device dmsDevice = service.getDeviceManager().getDevice( + new DeviceIdentifier(device.getDeviceIdentifier(), device.getType())); + if (dmsDevice != null) { + device.setFeatures(dmsDevice.getFeatures()); + device.setProperties(dmsDevice.getProperties()); + } } devices.add(device); } @@ -307,7 +311,8 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv String subject = ""; for (NotificationMessages notificationMessage : notificationMessages) { - if (org.wso2.carbon.device.mgt.core.DeviceManagementConstants.EmailNotifications.ENROL_NOTIFICATION_TYPE.equals( + if (org.wso2.carbon.device.mgt.core.DeviceManagementConstants.EmailNotifications.ENROL_NOTIFICATION_TYPE + .equals( notificationMessage.getType())) { messageHeader = notificationMessage.getHeader(); messageBody = notificationMessage.getBody(); diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/PolicyManagerService.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/PolicyManagerService.java index 405fe73f7ab..15ed689e4b5 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/PolicyManagerService.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/PolicyManagerService.java @@ -67,6 +67,8 @@ public interface PolicyManagerService { int getPolicyCount() throws PolicyManagementException; + Policy getAppliedPolicyToDevice(DeviceIdentifier deviceIdentifier) throws PolicyManagementException; + List CheckPolicyCompliance(DeviceIdentifier deviceIdentifier, Object deviceResponse) throws PolicyComplianceException; diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/PolicyManagerServiceImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/PolicyManagerServiceImpl.java index f3045bb2127..86428059eac 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/PolicyManagerServiceImpl.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/PolicyManagerServiceImpl.java @@ -34,7 +34,9 @@ import org.wso2.carbon.policy.mgt.core.impl.PolicyAdministratorPointImpl; import org.wso2.carbon.policy.mgt.core.impl.PolicyInformationPointImpl; import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder; import org.wso2.carbon.policy.mgt.core.mgt.MonitoringManager; +import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager; import org.wso2.carbon.policy.mgt.core.mgt.impl.MonitoringManagerImpl; +import org.wso2.carbon.policy.mgt.core.mgt.impl.PolicyManagerImpl; import org.wso2.carbon.policy.mgt.core.task.TaskScheduleService; import org.wso2.carbon.policy.mgt.core.task.TaskScheduleServiceImpl; @@ -47,10 +49,12 @@ public class PolicyManagerServiceImpl implements PolicyManagerService { PolicyAdministratorPointImpl policyAdministratorPoint; MonitoringManager monitoringManager; + private PolicyManager policyManager; public PolicyManagerServiceImpl() { policyAdministratorPoint = new PolicyAdministratorPointImpl(); monitoringManager = new MonitoringManagerImpl(); + policyManager = new PolicyManagerImpl(); } @Override @@ -215,6 +219,11 @@ public class PolicyManagerServiceImpl implements PolicyManagerService { return policyAdministratorPoint.getPolicyCount(); } + @Override + public Policy getAppliedPolicyToDevice(DeviceIdentifier deviceIdentifier) throws PolicyManagementException { + return policyManager.getAppliedPolicyToDevice(deviceIdentifier); + } + @Override public List CheckPolicyCompliance(DeviceIdentifier deviceIdentifier, Object deviceResponse) throws PolicyComplianceException { diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/MonitoringDAO.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/MonitoringDAO.java index 3286ed39455..f073fafa0e0 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/MonitoringDAO.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/MonitoringDAO.java @@ -22,13 +22,24 @@ package org.wso2.carbon.policy.mgt.core.dao; import org.wso2.carbon.policy.mgt.common.monitor.ComplianceData; import org.wso2.carbon.policy.mgt.common.monitor.ComplianceFeature; +import java.util.HashMap; import java.util.List; +import java.util.Map; public interface MonitoringDAO { + int addComplianceDetails(int deviceId, int policyId) throws MonitoringDAOException; + + /** + * This is getting a list of values with device id and applied policy + * @param devicePolicyMap + * @throws MonitoringDAOException + */ + void addComplianceDetails(Map devicePolicyMap) throws MonitoringDAOException; + int setDeviceAsNoneCompliance(int deviceId, int policyId) throws MonitoringDAOException; - void setDeviceAsCompliance(int deviceId, int policyId) throws MonitoringDAOException; + int setDeviceAsCompliance(int deviceId, int policyId) throws MonitoringDAOException; void addNoneComplianceFeatures(int policyComplianceStatusId, int deviceId, List complianceFeatures) diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java index 92940de313a..206bd3b4ee1 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java @@ -25,6 +25,7 @@ import org.wso2.carbon.policy.mgt.common.Policy; import org.wso2.carbon.policy.mgt.common.PolicyCriterion; import org.wso2.carbon.policy.mgt.common.ProfileFeature; +import java.util.HashMap; import java.util.List; public interface PolicyDAO { @@ -104,4 +105,6 @@ public interface PolicyDAO { int getAppliedPolicyId(int deviceId) throws PolicyManagerDAOException; Policy getAppliedPolicy(int deviceId) throws PolicyManagerDAOException; -} + + HashMap getAppliedPolicyIds(List deviceIds) throws PolicyManagerDAOException; + } diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/MonitoringDAOImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/MonitoringDAOImpl.java index c39bf57ab9d..dfd4823c61d 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/MonitoringDAOImpl.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/MonitoringDAOImpl.java @@ -28,33 +28,31 @@ import org.wso2.carbon.policy.mgt.core.dao.MonitoringDAOException; import org.wso2.carbon.policy.mgt.core.dao.PolicyManagementDAOFactory; import org.wso2.carbon.policy.mgt.core.dao.PolicyManagerDAOException; import org.wso2.carbon.policy.mgt.core.dao.util.PolicyManagementDAOUtil; +import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil; import java.sql.*; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; +import java.util.*; public class MonitoringDAOImpl implements MonitoringDAO { private static final Log log = LogFactory.getLog(MonitoringDAOImpl.class); @Override - public int setDeviceAsNoneCompliance(int deviceId, int policyId) throws MonitoringDAOException { - + public int addComplianceDetails(int deviceId, int policyId) throws MonitoringDAOException { Connection conn; PreparedStatement stmt = null; ResultSet generatedKeys = null; Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime()); try { conn = this.getConnection(); - String query = "INSERT INTO DM_POLICY_COMPLIANCE_STATUS (DEVICE_ID, POLICY_ID, STATUS, LAST_FAILED_TIME, " + - "ATTEMPTS) VALUES (?, ?, ?, ?, ?) "; + String query = "INSERT INTO DM_POLICY_COMPLIANCE_STATUS (DEVICE_ID, POLICY_ID, STATUS, ATTEMPTS, " + + "LAST_REQUESTED_TIME) VALUES (?, ?, ?,?, ?) "; stmt = conn.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS); stmt.setInt(1, deviceId); stmt.setInt(2, policyId); - stmt.setInt(3, 0); - stmt.setTimestamp(4, currentTimestamp); - stmt.setInt(5, 0); + stmt.setInt(3, 1); + stmt.setInt(4, 1); + stmt.setTimestamp(5, currentTimestamp); stmt.executeUpdate(); generatedKeys = stmt.getGeneratedKeys(); @@ -71,32 +69,109 @@ public class MonitoringDAOImpl implements MonitoringDAO { } finally { PolicyManagementDAOUtil.cleanupResources(stmt, generatedKeys); } + } + + + @Override + public void addComplianceDetails(Map devicePolicyMap) throws MonitoringDAOException { + Connection conn; + PreparedStatement stmt = null; + ResultSet generatedKeys = null; + Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime()); + try { + conn = this.getConnection(); + String query = "INSERT INTO DM_POLICY_COMPLIANCE_STATUS (DEVICE_ID, POLICY_ID, STATUS, ATTEMPTS, " + + "LAST_REQUESTED_TIME) VALUES (?, ?, ?,?, ?) "; + stmt = conn.prepareStatement(query); + for (Map.Entry map : devicePolicyMap.entrySet()) { + stmt.setInt(1, map.getKey()); + stmt.setInt(2, map.getValue()); + stmt.setInt(3, 1); + stmt.setInt(4, 1); + stmt.setTimestamp(5, currentTimestamp); + stmt.addBatch(); + } + stmt.executeBatch(); + + + } catch (SQLException e) { + String msg = "Error occurred while adding the none compliance to the database."; + log.error(msg, e); + throw new MonitoringDAOException(msg, e); + } finally { + PolicyManagementDAOUtil.cleanupResources(stmt, generatedKeys); + } + } + + @Override + public int setDeviceAsNoneCompliance(int deviceId, int policyId) throws MonitoringDAOException { + + Connection conn; + PreparedStatement stmt = null; + ResultSet generatedKeys = null; + Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime()); + try { + conn = this.getConnection(); +// String query = "INSERT INTO DM_POLICY_COMPLIANCE_STATUS (DEVICE_ID, POLICY_ID, STATUS, +// LAST_FAILED_TIME, " + +// "ATTEMPTS) VALUES (?, ?, ?, ?, ?) "; + + String query = "UPDATE DM_POLICY_COMPLIANCE_STATUS SET STATUS = 0, LAST_FAILED_TIME = ?, POLICY_ID = ?," + + " ATTEMPTS=0 WHERE DEVICE_ID = ?"; + stmt = conn.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS); + stmt.setTimestamp(1, currentTimestamp); + stmt.setInt(2, policyId); + stmt.setInt(3, deviceId); + stmt.executeUpdate(); + + generatedKeys = stmt.getGeneratedKeys(); + if (generatedKeys.next()) { + return generatedKeys.getInt(1); + } else { + return 0; + } + + } catch (SQLException e) { + String msg = "Error occurred while updating the none compliance to the database."; + log.error(msg, e); + throw new MonitoringDAOException(msg, e); + } finally { + PolicyManagementDAOUtil.cleanupResources(stmt, generatedKeys); + } } @Override - public void setDeviceAsCompliance(int deviceId, int policyId) throws MonitoringDAOException { + public int setDeviceAsCompliance(int deviceId, int policyId) throws MonitoringDAOException { Connection conn; PreparedStatement stmt = null; + ResultSet generatedKeys = null; Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime()); try { conn = this.getConnection(); String query = "UPDATE DM_POLICY_COMPLIANCE_STATUS SET STATUS = ?, ATTEMPTS=0, LAST_SUCCESS_TIME = ?" + " WHERE DEVICE_ID = ?"; - stmt = conn.prepareStatement(query); + stmt = conn.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS); stmt.setInt(1, 1); stmt.setTimestamp(2, currentTimestamp); stmt.setInt(3, deviceId); stmt.executeUpdate(); + generatedKeys = stmt.getGeneratedKeys(); + if (generatedKeys.next()) { + return generatedKeys.getInt(1); + } else { + return 0; + } + } catch (SQLException e) { String msg = "Error occurred while deleting the none compliance to the database."; log.error(msg, e); throw new MonitoringDAOException(msg, e); } finally { - PolicyManagementDAOUtil.cleanupResources(stmt, null); + PolicyManagementDAOUtil.cleanupResources(stmt, generatedKeys); } } @@ -171,13 +246,13 @@ public class MonitoringDAOImpl implements MonitoringDAO { Connection conn; PreparedStatement stmt = null; ResultSet resultSet = null; - List complianceDataList = null; + List complianceDataList = new ArrayList<>(); try { conn = this.getConnection(); String query = "SELECT * FROM DM_POLICY_COMPLIANCE_STATUS WHERE DEVICE_ID IN (?)"; stmt = conn.prepareStatement(query); - stmt.setString(1, makeString(deviceIds)); + stmt.setString(1, PolicyManagerUtil.makeString(deviceIds)); resultSet = stmt.executeQuery(); @@ -348,13 +423,5 @@ public class MonitoringDAOImpl implements MonitoringDAO { } } - private String makeString(List values) { - StringBuilder buff = new StringBuilder(); - for (int value : values) { - buff.append(value).append(","); - } - buff.deleteCharAt(buff.length() - 1); - return buff.toString(); - } } diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java index 08232ea7edc..5ea5f097461 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java @@ -38,10 +38,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.sql.*; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Properties; +import java.util.*; public class PolicyDAOImpl implements PolicyDAO { @@ -755,16 +752,18 @@ public class PolicyDAOImpl implements PolicyDAO { Connection conn; PreparedStatement stmt = null; Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime()); + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); try { conn = this.getConnection(); - String query = "INSERT INTO DM_DEVICE_POLICY_APPLIED " + - "(DEVICE_ID, POLICY_ID, POLICY_CONTENT, CREATED_TIME, UPDATED_TIME) VALUES (?, ?, ?, ?, ?)"; + String query = "INSERT INTO DM_DEVICE_POLICY_APPLIED (DEVICE_ID, POLICY_ID, POLICY_CONTENT, " + + "CREATED_TIME, UPDATED_TIME, TENANT_ID) VALUES (?, ?, ?, ?, ?, ?)"; stmt = conn.prepareStatement(query); stmt.setInt(1, deviceId); stmt.setInt(2, policyId); stmt.setObject(3, profileFeatures); stmt.setTimestamp(4, currentTimestamp); stmt.setTimestamp(5, currentTimestamp); + stmt.setInt(6, tenantId); stmt.executeUpdate(); @@ -1246,27 +1245,29 @@ public class PolicyDAOImpl implements PolicyDAO { resultSet = stmt.executeQuery(); - ByteArrayInputStream bais = null; - ObjectInputStream ois = null; - byte[] contentBytes; - try { - contentBytes = (byte[]) resultSet.getBytes("POLICY_CONTENT"); - bais = new ByteArrayInputStream(contentBytes); - ois = new ObjectInputStream(bais); - policy = (Policy) ois.readObject(); - } finally { - if (bais != null) { - try { - bais.close(); - } catch (IOException e) { - log.warn("Error occurred while closing ByteArrayOutputStream", e); + while (resultSet.next()) { + ByteArrayInputStream bais = null; + ObjectInputStream ois = null; + byte[] contentBytes; + try { + contentBytes = (byte[]) resultSet.getBytes("POLICY_CONTENT"); + bais = new ByteArrayInputStream(contentBytes); + ois = new ObjectInputStream(bais); + policy = (Policy) ois.readObject(); + } finally { + if (bais != null) { + try { + bais.close(); + } catch (IOException e) { + log.warn("Error occurred while closing ByteArrayOutputStream", e); + } } - } - if (ois != null) { - try { - ois.close(); - } catch (IOException e) { - log.warn("Error occurred while closing ObjectOutputStream", e); + if (ois != null) { + try { + ois.close(); + } catch (IOException e) { + log.warn("Error occurred while closing ObjectOutputStream", e); + } } } } @@ -1290,4 +1291,37 @@ public class PolicyDAOImpl implements PolicyDAO { return policy; } + @Override + public HashMap getAppliedPolicyIds(List deviceIds) throws PolicyManagerDAOException { + Connection conn; + PreparedStatement stmt = null; + ResultSet resultSet = null; + + HashMap devicePolicyIds = new HashMap<>(); + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + + try { + conn = this.getConnection(); + String query = "SELECT * FROM DM_DEVICE_POLICY_APPLIED WHERE DEVICE_ID = ? AND TENANT_ID = ?"; + stmt = conn.prepareStatement(query); + stmt.setString(1, PolicyManagerUtil.makeString(deviceIds)); + stmt.setInt(2, tenantId); + resultSet = stmt.executeQuery(); + + while (resultSet.next()) { + devicePolicyIds.put(resultSet.getInt("DEVICE_ID"), resultSet.getInt("POLICY_ID")); + } + + } catch (SQLException e) { + String msg = "Error occurred while getting the applied policy."; + log.error(msg, e); + throw new PolicyManagerDAOException(msg, e); + } finally { + PolicyManagementDAOUtil.cleanupResources(stmt, resultSet); + this.closeConnection(); + } + + return devicePolicyIds; + } + } diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/MonitoringManagerImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/MonitoringManagerImpl.java index 2cc6be75894..117bfc2600c 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/MonitoringManagerImpl.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/MonitoringManagerImpl.java @@ -24,12 +24,16 @@ import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; 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.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; import org.wso2.carbon.device.mgt.core.dao.DeviceDAO; 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.operation.mgt.CommandOperation; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl; +import org.wso2.carbon.policy.mgt.common.PolicyManagementException; import org.wso2.carbon.policy.mgt.common.monitor.ComplianceData; import org.wso2.carbon.policy.mgt.common.monitor.ComplianceDecisionPoint; import org.wso2.carbon.policy.mgt.common.monitor.ComplianceFeature; @@ -45,6 +49,7 @@ import org.wso2.carbon.policy.mgt.core.dao.PolicyManagerDAOException; import org.wso2.carbon.policy.mgt.core.impl.ComplianceDecisionPointImpl; import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder; import org.wso2.carbon.policy.mgt.core.mgt.MonitoringManager; +import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager; import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil; import java.util.*; @@ -73,10 +78,13 @@ public class MonitoringManagerImpl implements MonitoringManager { List complianceFeatures; try { PolicyManagementDAOFactory.beginTransaction(); - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); - Device device = deviceDAO.getDevice(deviceIdentifier, tenantId); - Policy policy = policyDAO.getAppliedPolicy(device.getId()); + DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl(); + PolicyManager manager = new PolicyManagerImpl(); + + Device device = service.getDevice(deviceIdentifier); + Policy policy = manager.getAppliedPolicyToDevice(deviceIdentifier); //policyDAO.getAppliedPolicy(device + // .getId()); PolicyMonitoringService monitoringService = PolicyManagementDataHolder.getInstance(). getPolicyMonitoringService(deviceIdentifier.getType()); @@ -84,9 +92,12 @@ public class MonitoringManagerImpl implements MonitoringManager { policy, deviceResponse); complianceData.setPolicy(policy); complianceFeatures = complianceData.getComplianceFeatures(); + complianceData.setDeviceId(device.getId()); + complianceData.setPolicyId(policy.getId()); if (!complianceFeatures.isEmpty()) { int complianceId = monitoringDAO.setDeviceAsNoneCompliance(device.getId(), policy.getId()); + complianceData.setId(complianceId); monitoringDAO.addNoneComplianceFeatures(complianceId, device.getId(), complianceFeatures); complianceDecisionPoint.validateDevicePolicyCompliance(deviceIdentifier, complianceData); List profileFeatures = policy.getProfile().getProfileFeaturesList(); @@ -99,11 +110,13 @@ public class MonitoringManagerImpl implements MonitoringManager { } } else { - monitoringDAO.setDeviceAsCompliance(device.getId(), policy.getId()); + int complianceId = monitoringDAO.setDeviceAsCompliance(device.getId(), policy.getId()); + complianceData.setId(complianceId); + monitoringDAO.deleteNoneComplianceData(complianceId); } PolicyManagementDAOFactory.commitTransaction(); - } catch (DeviceManagementDAOException e) { + } catch (DeviceManagementException e) { try { PolicyManagementDAOFactory.rollbackTransaction(); } catch (PolicyManagerDAOException e1) { @@ -133,6 +146,16 @@ public class MonitoringManagerImpl implements MonitoringManager { getId() + " - " + deviceIdentifier.getType(); log.error(msg, e); throw new PolicyComplianceException(msg, e); + } catch (PolicyManagementException e) { + try { + PolicyManagementDAOFactory.rollbackTransaction(); + } catch (PolicyManagerDAOException e1) { + log.warn("Error occurred while roll backing the transaction."); + } + String msg = "Unable tor retrieve policy data from DB for device " + deviceIdentifier.getId() + " - " + + deviceIdentifier.getType(); + log.error(msg, e); + throw new PolicyComplianceException(msg, e); } return complianceFeatures; } @@ -142,14 +165,15 @@ public class MonitoringManagerImpl implements MonitoringManager { public boolean isCompliance(DeviceIdentifier deviceIdentifier) throws PolicyComplianceException { try { - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); - Device device = deviceDAO.getDevice(deviceIdentifier, tenantId); + DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl(); + Device device = service.getDevice(deviceIdentifier); + //deviceDAO.getDevice(deviceIdentifier, tenantId); ComplianceData complianceData = monitoringDAO.getCompliance(device.getId()); if (complianceData == null || !complianceData.isStatus()) { return false; } - } catch (DeviceManagementDAOException e) { + } catch (DeviceManagementException e) { String msg = "Unable to retrieve device data for " + deviceIdentifier.getId() + " - " + deviceIdentifier.getType(); log.error(msg, e); @@ -170,14 +194,14 @@ public class MonitoringManagerImpl implements MonitoringManager { ComplianceData complianceData; try { - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); - Device device = deviceDAO.getDevice(deviceIdentifier, tenantId); + DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl(); + Device device = service.getDevice(deviceIdentifier); complianceData = monitoringDAO.getCompliance(device.getId()); List complianceFeatures = monitoringDAO.getNoneComplianceFeatures(complianceData.getId()); complianceData.setComplianceFeatures(complianceFeatures); - } catch (DeviceManagementDAOException e) { + } catch (DeviceManagementException e) { String msg = "Unable to retrieve device data for " + deviceIdentifier.getId() + " - " + deviceIdentifier.getType(); log.error(msg, e); @@ -196,6 +220,7 @@ public class MonitoringManagerImpl implements MonitoringManager { public void addMonitoringOperation(List devices) throws PolicyComplianceException { try { + PolicyManagementDAOFactory.beginTransaction(); ComplianceDecisionPoint decisionPoint = new ComplianceDecisionPointImpl(); @@ -206,40 +231,47 @@ public class MonitoringManagerImpl implements MonitoringManager { deviceIds.put(device.getId(), device); } - List complianceDatas = monitoringDAO.getCompliance(new ArrayList<>(deviceIds.keySet())); + List deviceIDs = new ArrayList<>(deviceIds.keySet()); + List complianceDatas = monitoringDAO.getCompliance(deviceIDs); + HashMap devicePolicyIdMap = policyDAO.getAppliedPolicyIds(deviceIDs); Map deviceIdsToAddOperation = new HashMap<>(); Map deviceIdsWithExistingOperation = new HashMap<>(); Map inactiveDeviceIds = new HashMap<>(); + Map firstTimeDeviceId = new HashMap<>(); Map tempMap = new HashMap<>(); - for (ComplianceData complianceData : complianceDatas) { + if (complianceDatas != null || !complianceDatas.isEmpty()) { + for (ComplianceData complianceData : complianceDatas) { - tempMap.put(complianceData.getDeviceId(), complianceData); + tempMap.put(complianceData.getDeviceId(), complianceData); - if (complianceData.getAttempts() == 0) { - deviceIdsToAddOperation.put(complianceData.getDeviceId(), - deviceIds.get(complianceData.getDeviceId())); - } else { - deviceIdsWithExistingOperation.put(complianceData.getDeviceId(), - deviceIds.get(complianceData.getDeviceId())); - } - if (complianceData.getAttempts() >= 20) { - inactiveDeviceIds.put(complianceData.getDeviceId(), - deviceIds.get(complianceData.getDeviceId())); + if (complianceData.getAttempts() == 0) { + deviceIdsToAddOperation.put(complianceData.getDeviceId(), + deviceIds.get(complianceData.getDeviceId())); + } else { + deviceIdsWithExistingOperation.put(complianceData.getDeviceId(), + deviceIds.get(complianceData.getDeviceId())); + } + if (complianceData.getAttempts() >= 20) { + inactiveDeviceIds.put(complianceData.getDeviceId(), + deviceIds.get(complianceData.getDeviceId())); + } } } for (Device device : devices) { if (!tempMap.containsKey(device.getId())) { deviceIdsToAddOperation.put(device.getId(), device); + firstTimeDeviceId.put(device.getId(), devicePolicyIdMap.get(device.getId())); } } if (!deviceIdsToAddOperation.isEmpty()) { this.addMonitoringOperationsToDatabase(new ArrayList<>(deviceIdsToAddOperation.values())); + monitoringDAO.addComplianceDetails(firstTimeDeviceId); } if (!deviceIdsWithExistingOperation.isEmpty()) { @@ -248,14 +280,35 @@ public class MonitoringManagerImpl implements MonitoringManager { new ArrayList<>(deviceIdsWithExistingOperation.values()))); } + PolicyManagementDAOFactory.commitTransaction(); + } catch (MonitoringDAOException e) { + try { + PolicyManagementDAOFactory.rollbackTransaction(); + } catch (PolicyManagerDAOException e1) { + log.warn("Error occurred while roll backing the transaction."); + } String msg = "Error occurred from monitoring dao."; log.error(msg, e); throw new PolicyComplianceException(msg, e); } catch (OperationManagementException e) { + try { + PolicyManagementDAOFactory.rollbackTransaction(); + } catch (PolicyManagerDAOException e1) { + log.warn("Error occurred while roll backing the transaction."); + } String msg = "Error occurred while adding monitoring operation to devices"; log.error(msg, e); throw new PolicyComplianceException(msg, e); + } catch (PolicyManagerDAOException e) { + try { + PolicyManagementDAOFactory.rollbackTransaction(); + } catch (PolicyManagerDAOException e1) { + log.warn("Error occurred while roll backing the transaction."); + } + String msg = "Error occurred reading the applied policies to devices."; + log.error(msg, e); + throw new PolicyComplianceException(msg, e); } } @@ -269,8 +322,11 @@ public class MonitoringManagerImpl implements MonitoringManager { monitoringOperation.setEnabled(true); monitoringOperation.setType(Operation.Type.COMMAND); monitoringOperation.setCode(OPERATION_MONITOR); - PolicyManagementDataHolder.getInstance().getDeviceManagementService(). - addOperation(monitoringOperation, deviceIdentifiers); + + DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl(); + service.addOperation(monitoringOperation, deviceIdentifiers); +// PolicyManagementDataHolder.getInstance().getDeviceManagementService(). +// addOperation(monitoringOperation, deviceIdentifiers); } private List getDeviceIdentifiersFromDevices(List devices) { diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/service/PolicyManagementService.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/service/PolicyManagementService.java index f2b738b1efc..648fba4aeda 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/service/PolicyManagementService.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/service/PolicyManagementService.java @@ -116,6 +116,11 @@ public class PolicyManagementService implements PolicyManagerService { return policyManagerService.getPolicyCount(); } + @Override + public Policy getAppliedPolicyToDevice(DeviceIdentifier deviceIdentifier) throws PolicyManagementException { + return policyManagerService.getAppliedPolicyToDevice(deviceIdentifier); + } + @Override public List CheckPolicyCompliance(DeviceIdentifier deviceIdentifier, Object deviceResponse) throws PolicyComplianceException { @@ -123,7 +128,8 @@ public class PolicyManagementService implements PolicyManagerService { } @Override - public boolean checkCompliance(DeviceIdentifier deviceIdentifier, Object response) throws PolicyComplianceException { + public boolean checkCompliance(DeviceIdentifier deviceIdentifier, Object response) throws + PolicyComplianceException { return policyManagerService.checkCompliance(deviceIdentifier, response); } diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/util/PolicyManagerUtil.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/util/PolicyManagerUtil.java index ad84495a85c..8fac749e258 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/util/PolicyManagerUtil.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/util/PolicyManagerUtil.java @@ -89,4 +89,13 @@ public class PolicyManagerUtil { return dataSource; } + public static String makeString(List values) { + + StringBuilder buff = new StringBuilder(); + for (int value : values) { + buff.append(value).append(","); + } + buff.deleteCharAt(buff.length() - 1); + return buff.toString(); + } } diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java index 4fe1b712c03..a391495b304 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java @@ -24,7 +24,10 @@ import org.apache.tomcat.jdbc.pool.PoolProperties; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeSuite; import org.w3c.dom.Document; +import org.wso2.carbon.base.MultitenantConstants; +import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; +import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory; import org.wso2.carbon.policy.mgt.common.PolicyManagementException; import org.wso2.carbon.policy.mgt.core.common.DataSourceConfig; import org.wso2.carbon.policy.mgt.core.dao.PolicyManagementDAOFactory; @@ -53,6 +56,35 @@ public abstract class BasePolicyManagementDAOTest { this.dataSource = this.getDataSource(this.readDataSourceConfig()); DeviceManagementDAOFactory.init(dataSource); PolicyManagementDAOFactory.init(dataSource); + OperationManagementDAOFactory.init(dataSource); + } + + public void initiatePriviledgeCaronContext() throws Exception { + + + if (System.getProperty("carbon.home") == null) { + File file = new File("src/test/resources/carbon-home"); + if (file.exists()) { + System.setProperty("carbon.home", file.getAbsolutePath()); + } + file = new File("../resources/carbon-home"); + if (file.exists()) { + System.setProperty("carbon.home", file.getAbsolutePath()); + } + file = new File("../../resources/carbon-home"); + if (file.exists()) { + System.setProperty("carbon.home", file.getAbsolutePath()); + } + file = new File("../../../resources/carbon-home"); + if (file.exists()) { + System.setProperty("carbon.home", file.getAbsolutePath()); + } + } + + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(MultitenantConstants + .SUPER_TENANT_DOMAIN_NAME); + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID); + } @BeforeClass diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/MonitoringTestCase.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/MonitoringTestCase.java new file mode 100644 index 00000000000..c99e4a8c499 --- /dev/null +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/MonitoringTestCase.java @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +package org.wso2.carbon.policy.mgt.core; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +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.common.operation.mgt.OperationManager; +import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder; +import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementAdminService; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl; +import org.wso2.carbon.policy.mgt.common.Policy; +import org.wso2.carbon.policy.mgt.common.PolicyAdministratorPoint; +import org.wso2.carbon.policy.mgt.common.PolicyManagementException; +import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException; +import org.wso2.carbon.policy.mgt.core.impl.PolicyAdministratorPointImpl; +import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder; +import org.wso2.carbon.policy.mgt.core.mgt.MonitoringManager; +import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager; +import org.wso2.carbon.policy.mgt.core.mgt.impl.MonitoringManagerImpl; +import org.wso2.carbon.policy.mgt.core.mgt.impl.PolicyManagerImpl; +import org.wso2.carbon.policy.mgt.core.services.PolicyMonitoringServiceTest; +import org.wso2.carbon.policy.mgt.core.task.MonitoringTask; + +import java.util.List; + +public class MonitoringTestCase extends BasePolicyManagementDAOTest { + + private static final Log log = LogFactory.getLog(MonitoringTestCase.class); + + private static final String ANDROID = "android"; + + DeviceIdentifier identifier = new DeviceIdentifier(); + + @BeforeClass + @Override + public void init() throws Exception { + } + + @Test + public void testMonitorDao() throws PolicyManagementException, DeviceManagementException { + + DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl(); + PolicyManagerService policyManagerService = new PolicyManagerServiceImpl(); + + List policies = policyManagerService.getPolicies(ANDROID); + List devices = service.getAllDevices(ANDROID); + + for (Policy policy : policies) { + log.debug(policy.getPolicyName() + "-----P"); + } + + for (Device device : devices) { + log.debug(device.getDeviceIdentifier() + " ----- D"); + } + + + identifier.setType(ANDROID); + identifier.setId(devices.get(0).getDeviceIdentifier()); + + PolicyAdministratorPoint administratorPoint = new PolicyAdministratorPointImpl(); + + administratorPoint.setPolicyUsed(identifier, policies.get(0)); + + } + + @Test(dependsOnMethods = ("testMonitorDao")) + public void getDeviceAppliedPolicy() throws PolicyManagementException { + + PolicyManager manager = new PolicyManagerImpl(); + Policy policy = manager.getAppliedPolicyToDevice(identifier); + + log.debug(policy.getId()); + log.debug(policy.getPolicyName()); + log.debug(policy.getCompliance()); + + } + + @Test(dependsOnMethods = ("testMonitorDao")) + public void addComplianceOperation() throws PolicyManagementException, DeviceManagementException, + PolicyComplianceException { + + log.debug("Compliance operations adding started."); + + PolicyManager manager = new PolicyManagerImpl(); + Policy policy = manager.getAppliedPolicyToDevice(identifier); + OperationManager operationManager = new OperationManagerImpl(); + + DeviceManagementDataHolder.getInstance().setOperationManager(operationManager); + + log.debug(policy.getId()); + log.debug(policy.getPolicyName()); + log.debug(policy.getCompliance()); + + MonitoringManager monitoringManager = new MonitoringManagerImpl(); + + DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl(); + List devices = service.getAllDevices(ANDROID); + + monitoringManager.addMonitoringOperation(devices); + + log.debug("Compliance operations adding done."); + + } + + + @Test(dependsOnMethods = ("addComplianceOperation")) + public void checkComplianceFromMonitoringService() throws PolicyManagementException, DeviceManagementException, + PolicyComplianceException { + + PolicyMonitoringServiceTest monitoringServiceTest = new PolicyMonitoringServiceTest(); + PolicyManagementDataHolder.getInstance().setPolicyMonitoringService(monitoringServiceTest.getType(), + monitoringServiceTest); + + DeviceManagementProviderService adminService = new DeviceManagementProviderServiceImpl(); + + PolicyManagerService policyManagerService = new PolicyManagerServiceImpl(); + + + List devices = adminService.getAllDevices(); + + + monitoringServiceTest.notifyDevices(devices); + + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(devices.get(0).getDeviceIdentifier()); + deviceIdentifier.setType(devices.get(0).getType()); + + Policy policy = policyManagerService.getAppliedPolicyToDevice(deviceIdentifier); + + Object ob = new Object(); + + + // This has to be removed, until milan sends the full request. + + policy = policyManagerService.getPolicies(ANDROID).get(0); + + // remove above + + monitoringServiceTest.checkPolicyCompliance(deviceIdentifier, policy, ob); + +// MonitoringTask task = new MonitoringTask(); +// task.execute(); + } + + + @Test(dependsOnMethods = ("checkComplianceFromMonitoringService")) + public void checkCompliance() throws DeviceManagementException, PolicyComplianceException { + + DeviceManagementProviderService adminService = new DeviceManagementProviderServiceImpl(); + + List devices = adminService.getAllDevices(); + + + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(devices.get(0).getDeviceIdentifier()); + deviceIdentifier.setType(devices.get(0).getType()); + + Object ob = new Object(); + + MonitoringManager monitoringManager = new MonitoringManagerImpl(); + + monitoringManager.checkPolicyCompliance(deviceIdentifier, ob); + + } +} diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/PolicyDAOTestCase.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/PolicyDAOTestCase.java index ba59d282c61..a5e4f681f28 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/PolicyDAOTestCase.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/PolicyDAOTestCase.java @@ -21,14 +21,14 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -import org.wso2.carbon.base.MultitenantConstants; -import org.wso2.carbon.context.CarbonContext; -import org.wso2.carbon.context.PrivilegedCarbonContext; 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.common.Feature; import org.wso2.carbon.device.mgt.core.dao.*; import org.wso2.carbon.device.mgt.core.dto.DeviceType; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl; import org.wso2.carbon.policy.mgt.common.*; import org.wso2.carbon.policy.mgt.core.impl.PolicyAdministratorPointImpl; import org.wso2.carbon.policy.mgt.core.mgt.FeatureManager; @@ -39,7 +39,6 @@ import org.wso2.carbon.policy.mgt.core.mgt.impl.PolicyManagerImpl; import org.wso2.carbon.policy.mgt.core.mgt.impl.ProfileManagerImpl; import org.wso2.carbon.policy.mgt.core.util.*; -import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Properties; @@ -57,38 +56,10 @@ public class PolicyDAOTestCase extends BasePolicyManagementDAOTest { @Override public void init() throws Exception { initDatSource(); - System.setProperty("GetTenantIDForTest", "Super"); - this.setUp(); - + // System.setProperty("GetTenantIDForTest", "Super"); + initiatePriviledgeCaronContext(); } - public void setUp() throws Exception { - - - if (System.getProperty("carbon.home") == null) { - File file = new File("src/test/resources/carbon-home"); - if (file.exists()) { - System.setProperty("carbon.home", file.getAbsolutePath()); - } - file = new File("../resources/carbon-home"); - if (file.exists()) { - System.setProperty("carbon.home", file.getAbsolutePath()); - } - file = new File("../../resources/carbon-home"); - if (file.exists()) { - System.setProperty("carbon.home", file.getAbsolutePath()); - } - file = new File("../../../resources/carbon-home"); - if (file.exists()) { - System.setProperty("carbon.home", file.getAbsolutePath()); - } - } - - PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(MultitenantConstants - .SUPER_TENANT_DOMAIN_NAME); - PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID); - - } @Test public void addDeviceType() throws DeviceManagementDAOException { @@ -98,16 +69,37 @@ public class PolicyDAOTestCase extends BasePolicyManagementDAOTest { @Test(dependsOnMethods = ("addDeviceType")) - public void addDevice() throws DeviceManagementDAOException { + public void addDevice() throws DeviceManagementDAOException, DeviceManagementException { - DeviceDAO deviceTypeDAO = DeviceManagementDAOFactory.getDeviceDAO(); - EnrolmentDAO enrolmentDAO = DeviceManagementDAOFactory.getEnrollmentDAO(); + DeviceDAO deviceDAO = DeviceManagementDAOFactory.getDeviceDAO(); + EnrolmentDAO enrolmentDAO = DeviceManagementDAOFactory.getEnrollmentDAO(); DeviceType type = DeviceTypeCreator.getDeviceType(); devices = DeviceCreator.getDeviceList(type); for (Device device : devices) { - int id = deviceTypeDAO.addDevice(type.getId(), device, -1234); + int id = deviceDAO.addDevice(type.getId(), device, -1234); enrolmentDAO.addEnrollment(id, device.getEnrolmentInfo(), -1234); } + + List devices = deviceDAO.getDevices(-1234); + + for (Device device : devices) { + log.debug(device.getDeviceIdentifier() + " ----- X"); + } + + List devices2 = deviceDAO.getDevices("android", -1234); + + for (Device device : devices2) { + log.debug(device.getDeviceIdentifier() + " ----- XX"); + } + + + DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl(); + + List devices3 = service.getAllDevices("android"); + + for (Device device : devices3) { + log.debug(device.getDeviceIdentifier() + " ----- XXX"); + } } @@ -354,4 +346,23 @@ public class PolicyDAOTestCase extends BasePolicyManagementDAOTest { } + @Test(dependsOnMethods = ("deletPolicy")) + public void testMonitorDao() throws PolicyManagementException, DeviceManagementException { + + DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl(); + PolicyManagerService policyManagerService = new PolicyManagerServiceImpl(); + + List policies = policyManagerService.getPolicies("android"); + List devices = service.getAllDevices("android"); + + for (Policy policy : policies) { + log.debug(policy.getPolicyName() + "-----P"); + } + + for (Device device : devices) { + log.debug(device.getDeviceIdentifier() + " ----- D"); + } + + + } } diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/services/PolicyMonitoringServiceTest.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/services/PolicyMonitoringServiceTest.java new file mode 100644 index 00000000000..17389c0462b --- /dev/null +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/services/PolicyMonitoringServiceTest.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +package org.wso2.carbon.policy.mgt.core.services; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.common.Device; +import org.wso2.carbon.device.mgt.common.DeviceIdentifier; +import org.wso2.carbon.policy.mgt.common.Policy; +import org.wso2.carbon.policy.mgt.common.ProfileFeature; +import org.wso2.carbon.policy.mgt.common.monitor.ComplianceData; +import org.wso2.carbon.policy.mgt.common.monitor.ComplianceFeature; +import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException; +import org.wso2.carbon.policy.mgt.common.spi.PolicyMonitoringService; + +import java.util.ArrayList; +import java.util.List; + +public class PolicyMonitoringServiceTest implements PolicyMonitoringService { + + private static final Log log = LogFactory.getLog(PolicyMonitoringServiceTest.class); + + @Override + public void notifyDevices(List devices) throws PolicyComplianceException { + + log.debug("Device notifying is called by the task."); + } + + @Override + public ComplianceData checkPolicyCompliance(DeviceIdentifier deviceIdentifier, Policy policy, Object response) + throws PolicyComplianceException { + + log.debug("Check compliance is called."); + + log.debug(policy.getPolicyName()); + log.debug(policy.getId()); + + log.debug(deviceIdentifier.getId()); + log.debug(deviceIdentifier.getType()); + + ComplianceData data = new ComplianceData(); + + List complianceFeatures = new ArrayList<>(); + +// List profileFeatures = policy.getProfile().getProfileFeaturesList(); + +// for (ProfileFeature pf : profileFeatures) { +// log.debug(pf.getFeatureCode()); +// ComplianceFeature comf = new ComplianceFeature(); +// +// comf.setFeatureCode(pf.getFeatureCode()); +// comf.setCompliance(false); +// comf.setMessage("This is a test...."); +// +// complianceFeatures.add(comf); +// } + data.setComplianceFeatures(complianceFeatures); + data.setStatus(false); + + return data; + } + + @Override + public String getType() { + return "android"; + } +} diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql index b7bd8e1f025..b12dcc8c817 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql @@ -246,6 +246,7 @@ CREATE TABLE IF NOT EXISTS DM_USER_POLICY ( DEVICE_ID INT NOT NULL , POLICY_ID INT NOT NULL , POLICY_CONTENT BLOB NULL , + TENANT_ID INT NOT NULL, APPLIED TINYINT(1) NULL , CREATED_TIME TIMESTAMP NULL , UPDATED_TIME TIMESTAMP NULL , diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/testng.xml b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/testng.xml index 02107984d53..5fd31bb67c6 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/testng.xml +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/testng.xml @@ -26,6 +26,7 @@ + \ No newline at end of file diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql index 6c742534ff5..8c6b060e449 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql @@ -222,6 +222,7 @@ CREATE TABLE IF NOT EXISTS DM_USER_POLICY ( DEVICE_ID INT NOT NULL , POLICY_ID INT NOT NULL , POLICY_CONTENT BLOB NULL , + TENANT_ID INT NOT NULL, APPLIED TINYINT(1) NULL , CREATED_TIME TIMESTAMP NULL , UPDATED_TIME TIMESTAMP NULL ,