forked from community/device-mgt-core
commit
357a625b0b
@ -0,0 +1,325 @@
|
||||
package org.wso2.carbon.policy.mgt.core.mgt.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
import org.powermock.api.mockito.PowerMockito;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
import org.testng.internal.collections.Pair;
|
||||
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.IllegalTransactionStateException;
|
||||
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
||||
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.DeviceGroupWrapper;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.Policy;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.Profile;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.ProfileFeature;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.ComplianceFeature;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException;
|
||||
import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl;
|
||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||
import org.wso2.carbon.policy.mgt.core.BasePolicyManagementDAOTest;
|
||||
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
|
||||
import org.wso2.carbon.policy.mgt.core.PolicyManagerServiceImpl;
|
||||
import org.wso2.carbon.policy.mgt.core.dao.MonitoringDAO;
|
||||
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.impl.MonitoringDAOImpl;
|
||||
import org.wso2.carbon.policy.mgt.core.enforcement.DelegationTask;
|
||||
import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
|
||||
import org.wso2.carbon.policy.mgt.core.mgt.FeatureManager;
|
||||
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.mock.TypeXDeviceManagementService;
|
||||
import org.wso2.carbon.policy.mgt.core.util.PolicyManagementConstants;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.lang.reflect.Field;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyBoolean;
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
public class MonitoringManagerImplTest extends BasePolicyManagementDAOTest{
|
||||
|
||||
private static final Log log = LogFactory.getLog(MonitoringManagerImplTest.class);
|
||||
|
||||
private static final String PROFILE5 = "profile5";
|
||||
private static final String DEVICE5 = "device5";
|
||||
private static final String POLICY5 = "policy5";
|
||||
private static final String GROUP5 = "group5";
|
||||
private static final String DEVICE_TYPE_E = "deviceTypeE";
|
||||
private static final String POLICY5_FEATURE1_CODE = "DISALLOW_ADJUST_VOLUME";
|
||||
|
||||
private OperationManager operationManager;
|
||||
private FeatureManager featureManager;
|
||||
private MonitoringManager monitoringManager;
|
||||
private PolicyManagerService policyManagerService;
|
||||
|
||||
private Device device5;
|
||||
private Policy policy5;
|
||||
private PolicyManager policyManager;
|
||||
|
||||
@BeforeClass
|
||||
public void initialize() throws Exception {
|
||||
log.info("Initializing monitor manager tests");
|
||||
super.initializeServices();
|
||||
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
|
||||
deviceMgtService.registerDeviceType(new TypeXDeviceManagementService(DEVICE_TYPE_E));
|
||||
operationManager = new OperationManagerImpl(DEVICE_TYPE_E);
|
||||
featureManager = new FeatureManagerImpl();
|
||||
monitoringManager = new MonitoringManagerImpl();
|
||||
policyManager = new PolicyManagerImpl();
|
||||
policyManagerService = new PolicyManagerServiceImpl();
|
||||
|
||||
PolicyManagementDataHolder.getInstance().setPolicyManager(policyManager);
|
||||
|
||||
enrollDevice(DEVICE5, DEVICE_TYPE_E);
|
||||
createDeviceGroup(GROUP5);
|
||||
addDeviceToGroup(new DeviceIdentifier(DEVICE5, DEVICE_TYPE_E), GROUP5);
|
||||
DeviceGroup group5 = groupMgtService.getGroup(GROUP5);
|
||||
|
||||
device5 = deviceMgtService.getAllDevices().get(0);
|
||||
|
||||
Profile profile = new Profile();
|
||||
profile.setProfileName(PROFILE5);
|
||||
profile.setTenantId(tenantId);
|
||||
profile.setCreatedDate(new Timestamp(System.currentTimeMillis()));
|
||||
profile.setDeviceType(DEVICE_TYPE_E);
|
||||
|
||||
DeviceGroupWrapper deviceGroupWrapper = new DeviceGroupWrapper();
|
||||
deviceGroupWrapper.setId(group5.getGroupId());
|
||||
deviceGroupWrapper.setName(GROUP5);
|
||||
deviceGroupWrapper.setOwner(ADMIN_USER);
|
||||
deviceGroupWrapper.setTenantId(tenantId);
|
||||
List<DeviceGroupWrapper> deviceGroupWrappers = new ArrayList<>();
|
||||
deviceGroupWrappers.add(deviceGroupWrapper);
|
||||
|
||||
List<ProfileFeature> profileFeatures = new ArrayList<ProfileFeature>();
|
||||
ProfileFeature profileFeature = new ProfileFeature();
|
||||
profileFeature.setContent("{'enable':'true'}");
|
||||
profileFeature.setDeviceType(DEVICE_TYPE_E);
|
||||
profileFeature.setFeatureCode(POLICY5_FEATURE1_CODE);
|
||||
profileFeatures.add(profileFeature);
|
||||
profile.setProfileFeaturesList(profileFeatures);
|
||||
profile.setProfileName("tp_profile1");
|
||||
profile.setUpdatedDate(new Timestamp(System.currentTimeMillis()));
|
||||
|
||||
policy5 = new Policy();
|
||||
policy5.setPolicyName(POLICY5);
|
||||
policy5.setDescription(POLICY5);
|
||||
policy5.setProfile(profile);
|
||||
policy5.setOwnershipType("BYOD");
|
||||
policy5.setActive(false);
|
||||
policy5.setRoles(new ArrayList<>());
|
||||
policy5.setUsers(new ArrayList<>());
|
||||
policy5.setCompliance(PolicyManagementConstants.ENFORCE);
|
||||
policy5.setDeviceGroups(deviceGroupWrappers);
|
||||
List<Device> devices = new ArrayList<Device>();
|
||||
policy5.setDevices(devices);
|
||||
policy5.setTenantId(PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId());
|
||||
policy5 = policyManager.addPolicy(policy5);
|
||||
policyManagerService.getPAP().activatePolicy(policy5.getId());
|
||||
new DelegationTask().execute();
|
||||
}
|
||||
|
||||
@Test(description = "This test case tests checking policy compliance")
|
||||
public void testCheckPolicyCompliance() throws Exception {
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(DEVICE_TYPE_E);
|
||||
deviceIdentifier.setId(String.valueOf(device5.getDeviceIdentifier()));
|
||||
monitoringManager.checkPolicyCompliance(deviceIdentifier, new ArrayList<ComplianceFeature>());
|
||||
}
|
||||
|
||||
@Test(description = "This test case tests handling ProfileManagerDAOException when checking policy compliance",
|
||||
dependsOnMethods = "testCheckPolicyCompliance")
|
||||
public void testCheckPolicyComplianceThrowingProfileManagerDAOException() throws Exception {
|
||||
MonitoringDAO monitoringDAO = mock(MonitoringDAO.class);
|
||||
when(monitoringDAO.getCompliance(anyInt(),anyInt())).thenThrow(new MonitoringDAOException());
|
||||
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(DEVICE_TYPE_E);
|
||||
deviceIdentifier.setId(String.valueOf(device5.getDeviceIdentifier()));
|
||||
testThrowingException(monitoringManager,
|
||||
null,
|
||||
p -> monitoringManager.checkPolicyCompliance(deviceIdentifier, new ArrayList<ComplianceFeature>()),
|
||||
"monitoringDAO", monitoringDAO,
|
||||
MonitoringDAOException.class);
|
||||
}
|
||||
|
||||
@Test(description = "This test case tests handling PolicyComplianceException when checking policy compliance",
|
||||
dependsOnMethods = "testCheckPolicyComplianceThrowingProfileManagerDAOException",
|
||||
expectedExceptions = PolicyComplianceException.class)
|
||||
public void testAddProfileThrowingPolicyComplianceException() throws Exception {
|
||||
Pair<Connection, Pair<DataSource, DataSource>> pair = mockConnection();
|
||||
PowerMockito.doAnswer(new Answer<Connection>() {
|
||||
int callCounter = 0;
|
||||
@Override
|
||||
public Connection answer(InvocationOnMock invocationOnMock) throws Throwable {
|
||||
if(callCounter > 0){
|
||||
Field currentConnectionField = PolicyManagementDAOFactory.class.getDeclaredField("currentConnection");
|
||||
currentConnectionField.setAccessible(true);
|
||||
ThreadLocal<Connection> threadLocal = new ThreadLocal<>();
|
||||
threadLocal.set(pair.first());
|
||||
currentConnectionField.set(null, threadLocal);
|
||||
throw new SQLException();
|
||||
}
|
||||
callCounter++;
|
||||
return pair.second().first().getConnection();
|
||||
}
|
||||
}).when(pair.second().second()).getConnection();
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(DEVICE_TYPE_E);
|
||||
deviceIdentifier.setId(String.valueOf(device5.getDeviceIdentifier()));
|
||||
try {
|
||||
monitoringManager.checkPolicyCompliance(deviceIdentifier, new ArrayList<ComplianceFeature>());
|
||||
} finally {
|
||||
PolicyManagementDAOFactory.init(pair.second().first());
|
||||
}
|
||||
}
|
||||
|
||||
@Test(description = "This test case tests handling PolicyComplianceException when checking policy compliance",
|
||||
dependsOnMethods = "testAddProfileThrowingPolicyComplianceException")
|
||||
public void testAddProfileThrowingMonitoringDAOException() throws Exception {
|
||||
MonitoringDAO monitoringDAO = mock(MonitoringDAO.class);
|
||||
when(monitoringDAO.getCompliance(anyInt(), anyInt())).thenThrow(
|
||||
new MonitoringDAOException());
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(DEVICE_TYPE_E);
|
||||
deviceIdentifier.setId(String.valueOf(device5.getDeviceIdentifier()));
|
||||
testThrowingException(monitoringManager, deviceIdentifier, d -> monitoringManager.checkPolicyCompliance((DeviceIdentifier) d, new ArrayList<ComplianceFeature>()), "monitoringDAO",
|
||||
monitoringDAO,
|
||||
MonitoringDAOException.class);
|
||||
}
|
||||
|
||||
@Test(description = "This test case tests handling PolicyComplianceException when checking policy compliance",
|
||||
dependsOnMethods = "testAddProfileThrowingMonitoringDAOException")
|
||||
public void testAddProfileThrowingMonitoringDAOException2() throws Exception {
|
||||
MonitoringDAO monitoringDAO = spy(MonitoringDAOImpl.class);
|
||||
doThrow(new MonitoringDAOException()).when(monitoringDAO).deleteNoneComplianceData(anyInt());
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(DEVICE_TYPE_E);
|
||||
deviceIdentifier.setId(String.valueOf(device5.getDeviceIdentifier()));
|
||||
testThrowingException(monitoringManager, deviceIdentifier, d -> monitoringManager.checkPolicyCompliance((DeviceIdentifier) d, new ArrayList<ComplianceFeature>()), "monitoringDAO",
|
||||
monitoringDAO,
|
||||
MonitoringDAOException.class);
|
||||
}
|
||||
|
||||
@Test(description = "This test case tests is compliant",
|
||||
dependsOnMethods = "testAddProfileThrowingMonitoringDAOException2")
|
||||
public void testIsCompliant() throws Exception {
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(DEVICE_TYPE_E);
|
||||
deviceIdentifier.setId(String.valueOf(device5.getDeviceIdentifier()));
|
||||
monitoringManager.isCompliant(deviceIdentifier);
|
||||
}
|
||||
|
||||
@Test(description = "This test case tests is compliant",
|
||||
dependsOnMethods = "testIsCompliant")
|
||||
public void testIsCompliant2() throws Exception {
|
||||
MonitoringDAO monitoringDAO = spy(MonitoringDAOImpl.class);
|
||||
doReturn(null).when(monitoringDAO).getCompliance(anyInt(),anyInt());
|
||||
|
||||
Object oldObj = changeFieldValue(monitoringManager, "monitoringDAO", monitoringDAO);
|
||||
try {
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(DEVICE_TYPE_E);
|
||||
deviceIdentifier.setId(String.valueOf(device5.getDeviceIdentifier()));
|
||||
boolean compliant = monitoringManager.isCompliant(deviceIdentifier);
|
||||
Assert.assertEquals(compliant,false);
|
||||
} finally {
|
||||
changeFieldValue(monitoringManager, "monitoringDAO", oldObj);
|
||||
}
|
||||
}
|
||||
|
||||
@Test(description = "This test case tests handling DeviceManagementException when testing policy compliance",
|
||||
dependsOnMethods = "testIsCompliant2")
|
||||
public void testIsCompliantThrowingDeviceManagementException() throws Exception {
|
||||
DeviceManagementProviderService serviceMock = mock(DeviceManagementProviderService.class);
|
||||
doThrow(new DeviceManagementException()).when(serviceMock).getDevice(any(DeviceIdentifier.class), anyBoolean());
|
||||
|
||||
PolicyManagementDataHolder instance = PolicyManagementDataHolder.getInstance();
|
||||
DeviceManagementProviderService service = instance.getDeviceManagementService();
|
||||
instance.setDeviceManagementService(serviceMock);
|
||||
|
||||
try {
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(DEVICE_TYPE_E);
|
||||
deviceIdentifier.setId(String.valueOf(device5.getDeviceIdentifier()));
|
||||
monitoringManager.isCompliant(deviceIdentifier);
|
||||
} catch (Exception e) {
|
||||
if (!(e.getCause() instanceof DeviceManagementException)) {
|
||||
throw e;
|
||||
}
|
||||
} finally {
|
||||
instance.setDeviceManagementService(service);
|
||||
}
|
||||
}
|
||||
|
||||
@Test(description = "This test case tests handling MonitoringDAOException when checking policy compliance",
|
||||
dependsOnMethods = "testIsCompliantThrowingDeviceManagementException")
|
||||
public void testIsCompliantThrowingMonitoringDAOException() throws Exception {
|
||||
MonitoringDAO monitoringDAO = spy(MonitoringDAOImpl.class);
|
||||
doThrow(new MonitoringDAOException()).when(monitoringDAO).getCompliance(anyInt(),anyInt());
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(DEVICE_TYPE_E);
|
||||
deviceIdentifier.setId(String.valueOf(device5.getDeviceIdentifier()));
|
||||
testThrowingException(monitoringManager, deviceIdentifier, d -> monitoringManager.isCompliant((DeviceIdentifier) d), "monitoringDAO",
|
||||
monitoringDAO,
|
||||
MonitoringDAOException.class);
|
||||
}
|
||||
|
||||
@Test(description = "This test case tests handling SQLException when checking is compliant",
|
||||
dependsOnMethods = "testIsCompliantThrowingMonitoringDAOException",
|
||||
expectedExceptions = IllegalTransactionStateException.class)
|
||||
public void testIsCompliantThrowingIllegalTransactionStateException() throws Exception {
|
||||
Pair<Connection, Pair<DataSource, DataSource>> pair = mockConnection();
|
||||
PowerMockito.doThrow(new SQLException()).when(pair.second().second()).getConnection();
|
||||
try {
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(DEVICE_TYPE_E);
|
||||
deviceIdentifier.setId(String.valueOf(device5.getDeviceIdentifier()));
|
||||
monitoringManager.isCompliant(deviceIdentifier);
|
||||
} finally {
|
||||
PolicyManagementDAOFactory.init(pair.second().first());
|
||||
}
|
||||
}
|
||||
|
||||
@Test(description = "This test case tests is compliant",
|
||||
dependsOnMethods = "testIsCompliant2")
|
||||
public void testGetDevicePolicyCompliance() throws Exception {
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(DEVICE_TYPE_E);
|
||||
deviceIdentifier.setId(String.valueOf(device5.getDeviceIdentifier()));
|
||||
monitoringManager.getDevicePolicyCompliance(deviceIdentifier);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddMonitoringOperation() throws Exception {
|
||||
monitoringManager.addMonitoringOperation(deviceMgtService.getAllDevices());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetDeviceTypes() throws Exception {
|
||||
monitoringManager.getDeviceTypes();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue