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 5732d8d355..5b91f5d22f 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
@@ -163,11 +163,6 @@
org.wso2.carbon.devicemgt
org.wso2.carbon.device.mgt.common
-
- org.powermock
- powermock-api-mockito
- test
-
org.wso2.carbon.devicemgt
org.wso2.carbon.device.mgt.analytics.data.publisher
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestTaskServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestTaskServiceImpl.java
index 882cc266f6..f44e65ee0d 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestTaskServiceImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestTaskServiceImpl.java
@@ -38,6 +38,10 @@ public class TestTaskServiceImpl implements TaskService {
this.taskManager = new TestTaskManagerImpl();
}
+ public void setTaskManager(TaskManager taskManager) {
+ this.taskManager = taskManager;
+ }
+
@Override
public TaskManager getTaskManager(String s) throws TaskException {
return this.taskManager;
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 94d1357598..a6868bd89a 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
@@ -18,12 +18,12 @@ package org.wso2.carbon.device.mgt.core.common;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
-import org.wso2.carbon.device.mgt.common.PaginationRequest;
+import org.wso2.carbon.device.mgt.common.MonitoringOperation;
+import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
import org.wso2.carbon.device.mgt.common.notification.mgt.Notification;
-import org.wso2.carbon.device.mgt.common.notification.mgt.Notification;
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import java.util.ArrayList;
@@ -33,11 +33,12 @@ import java.util.Properties;
public class TestDataHolder {
- public final static String TEST_DEVICE_TYPE = "Test";
+ public final static String TEST_DEVICE_TYPE = "TEST-DEVICE-TYPE";
public final static Integer SUPER_TENANT_ID = -1234;
public final static String SUPER_TENANT_DOMAIN = "carbon.super";
public final static String initialDeviceIdentifier = "12345";
public final static String OWNER = "admin";
+ public static final String OPERATION_CONFIG = "TEST-OPERATION-";
public static Device initialTestDevice;
public static DeviceType initialTestDeviceType;
@@ -164,4 +165,29 @@ public class TestDataHolder {
deviceGroup.setOwner(OWNER);
return deviceGroup;
}
+
+ public static OperationMonitoringTaskConfig generateMonitoringTaskConfig(boolean enabled, int frequency,
+ int numberOfOperations) {
+ OperationMonitoringTaskConfig taskConfig = new OperationMonitoringTaskConfig();
+ List operationList = new ArrayList<>();
+
+ while (--numberOfOperations >= 0) {
+ operationList.add(generateMonitoringOperation(OPERATION_CONFIG + String.valueOf(numberOfOperations),
+ 1 + (int) (Math.random() * 4)));
+ }
+
+ taskConfig.setEnabled(enabled);
+ taskConfig.setFrequency(frequency);
+ taskConfig.setMonitoringOperation(operationList);
+
+ return taskConfig;
+ }
+
+ private static MonitoringOperation generateMonitoringOperation(String name, int recurrentTimes) {
+ MonitoringOperation operation = new MonitoringOperation();
+ operation.setTaskName(name);
+ operation.setRecurrentTimes(recurrentTimes);
+
+ return operation;
+ }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/push/notification/mgt/task/PushNotificationSchedulerTaskTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/push/notification/mgt/task/PushNotificationSchedulerTaskTest.java
new file mode 100644
index 0000000000..64a01788bf
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/push/notification/mgt/task/PushNotificationSchedulerTaskTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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.push.notification.mgt.task;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
+import org.wso2.carbon.device.mgt.core.common.BaseDeviceManagementTest;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation;
+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.operation.TestNotificationStrategy;
+import org.wso2.carbon.device.mgt.core.operation.mgt.OperationMapping;
+import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationDAO;
+import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException;
+import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This class contains unit tests to test {@link PushNotificationSchedulerTask} class.
+ */
+public class PushNotificationSchedulerTaskTest extends BaseDeviceManagementTest {
+ private static final Log log = LogFactory.getLog(PushNotificationSchedulerTask.class);
+ private DeviceManagementProviderService deviceMgtProviderService;
+ private PushNotificationSchedulerTask pushNotificationSchedulerTask;
+ private OperationDAO operationDAO;
+
+ @BeforeClass
+ public void init() throws DeviceManagementException, RegistryException {
+ DeviceConfigurationManager.getInstance().initConfig();
+ log.info("Initializing Push Notification Scheduler Test Class");
+ DeviceManagementServiceComponent.notifyStartupListeners();
+ this.deviceMgtProviderService = Mockito.mock(DeviceManagementProviderServiceImpl.class, Mockito.CALLS_REAL_METHODS);
+ DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(this.deviceMgtProviderService);
+ this.operationDAO = OperationManagementDAOFactory.getOperationDAO();
+ this.pushNotificationSchedulerTask = new PushNotificationSchedulerTask();
+ }
+
+ @Test(description = "Tests the push notification scheduling for devices")
+ public void testPushNotificationScheduler()
+ throws DeviceManagementException, OperationManagementException, SQLException,
+ OperationManagementDAOException {
+ try {
+ log.info("Attempting to execute push notification task scheduler");
+ Mockito.doReturn(new TestNotificationStrategy()).when(this.deviceMgtProviderService)
+ .getNotificationStrategyByDeviceType(Mockito.anyString());
+ Mockito.doReturn(new org.wso2.carbon.device.mgt.common.operation.mgt.Operation())
+ .when(this.deviceMgtProviderService).getOperation(Mockito.anyString(), Mockito.anyInt());
+ this.pushNotificationSchedulerTask.run();
+ OperationManagementDAOFactory.openConnection();
+ Map> operationMappingsTenantMap = operationDAO
+ .getOperationMappingsByStatus(Operation.Status.PENDING, Operation.PushNotificationStatus.SCHEDULED,
+ DeviceConfigurationManager.getInstance().getDeviceManagementConfig()
+ .getPushNotificationConfiguration().getSchedulerBatchSize());
+ Assert.assertEquals(operationMappingsTenantMap.size(), 0);
+ log.info("Push notification task execution complete.");
+ } finally {
+ OperationManagementDAOFactory.closeConnection();
+ }
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerServiceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerServiceTest.java
index 2db940a4ec..b0a452b2a2 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerServiceTest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerServiceTest.java
@@ -1,48 +1,50 @@
+/*
+ * 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.task;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.mockito.Mock;
import org.mockito.Mockito;
-import org.opensaml.xml.signature.P;
-import org.powermock.api.mockito.PowerMockito;
-import org.quartz.impl.StdSchedulerFactory;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import org.wso2.carbon.device.mgt.common.MonitoringOperation;
-import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
import org.wso2.carbon.device.mgt.core.TestTaskServiceImpl;
-import org.wso2.carbon.device.mgt.core.TestUtils;
import org.wso2.carbon.device.mgt.core.common.TestDataHolder;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
-import org.wso2.carbon.device.mgt.core.permission.mgt.PermissionUtils;
-import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
import org.wso2.carbon.device.mgt.core.task.impl.DeviceTaskManagerServiceImpl;
import org.wso2.carbon.ntask.common.TaskException;
import org.wso2.carbon.ntask.core.TaskInfo;
import org.wso2.carbon.ntask.core.TaskManager;
-import org.wso2.carbon.ntask.core.TaskUtils;
-import org.wso2.carbon.ntask.core.impl.QuartzCachedThreadPool;
import org.wso2.carbon.ntask.core.internal.TasksDSComponent;
import org.wso2.carbon.ntask.core.service.TaskService;
import org.wso2.carbon.ntask.core.service.impl.TaskServiceImpl;
-import org.wso2.carbon.registry.core.exceptions.RegistryException;
import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
public class DeviceTaskManagerServiceTest {
private static final Log log = LogFactory.getLog(DeviceTaskManagerService.class);
private static final String TASK_TYPE = "DEVICE_MONITORING";
private DeviceTaskManagerService deviceTaskManagerService;
- @Mock private TaskService taskService;
+ private TaskService taskService;
- @BeforeClass public void init() throws Exception {
+ @BeforeClass
+ public void init() throws Exception {
DeviceConfigurationManager.getInstance().initConfig();
log.info("Initializing Device Task Manager Service Test Suite");
this.taskService = new TestTaskServiceImpl();
@@ -54,30 +56,31 @@ public class DeviceTaskManagerServiceTest {
taskServiceField.set(null, Mockito.mock(TaskServiceImpl.class, Mockito.RETURNS_MOCKS));
}
- @Test(groups = "Device Task Manager")
+ @Test(groups = "Device Task Manager Service Test Group")
public void testStartTask() {
try {
log.debug("Attempting to start task from testStartTask");
- this.deviceTaskManagerService
- .startTask(TestDataHolder.TEST_DEVICE_TYPE, generateValidMonitoringTaskConfig("DEVICE_INFO"));
+ this.deviceTaskManagerService.startTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 1));
TaskManager taskManager = this.taskService.getTaskManager(TASK_TYPE);
Assert.assertEquals(this.taskService.getRegisteredTaskTypes().size(), 1);
Assert.assertNotNull(taskManager
- .getTask(TestDataHolder.TEST_DEVICE_TYPE + String.valueOf(TestDataHolder.SUPER_TENANT_ID)));
+ .getTask(TestDataHolder.TEST_DEVICE_TYPE +
+ String.valueOf(TestDataHolder.SUPER_TENANT_ID)));
log.debug("Task Successfully started");
} catch (DeviceMgtTaskException | TaskException e) {
Assert.fail("Exception occurred when starting the task", e);
}
}
- @Test(groups = "Device Task Manager", dependsOnMethods = "testStartTask")
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testStartTask")
public void testUpdateTask() {
try {
log.debug("Attempting to update task from testStartTask");
- this.deviceTaskManagerService
- .updateTask(TestDataHolder.TEST_DEVICE_TYPE, generateValidMonitoringTaskConfig("DEVICE_LOCATION"));
- Assert.assertEquals(this.taskService.getRegisteredTaskTypes().size(), 1);
TaskManager taskManager = this.taskService.getTaskManager(TASK_TYPE);
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 30000, 1));
+ Assert.assertEquals(this.taskService.getRegisteredTaskTypes().size(), 1);
Assert.assertEquals(taskManager.getAllTasks().size(), 1);
log.debug("Task Successfully updated");
} catch (DeviceMgtTaskException | TaskException e) {
@@ -85,12 +88,12 @@ public class DeviceTaskManagerServiceTest {
}
}
- @Test(groups = "Device Task Manager", dependsOnMethods = "testUpdateTask")
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateTask")
public void testStopTask() {
log.debug("Attempting to stop task from testStopTask");
try {
- this.deviceTaskManagerService
- .stopTask(TestDataHolder.TEST_DEVICE_TYPE, generateValidMonitoringTaskConfig("DEVICE_LOCATION"));
+ this.deviceTaskManagerService.stopTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 30000, 1));
TaskManager taskManager = this.taskService.getTaskManager(TASK_TYPE);
Assert.assertEquals(taskManager.getAllTasks().size(), 0);
} catch (DeviceMgtTaskException | TaskException e) {
@@ -98,27 +101,117 @@ public class DeviceTaskManagerServiceTest {
}
}
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testStopTask", expectedExceptions = {
+ DeviceMgtTaskException.class })
+ public void testUpdateUnscheduledTask() throws DeviceMgtTaskException {
+ log.debug("Attempting to update unscheduled task");
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 1));
+ }
+
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask", expectedExceptions = {
+ DeviceMgtTaskException.class })
+ public void testStartTaskWhenUnableToRetrieveTaskManager()
+ throws DeviceMgtTaskException, TaskException {
+ TaskService taskService = Mockito.mock(TestTaskServiceImpl.class);
+ Mockito.doThrow(new TaskException("Unable to get TaskManager", TaskException.Code.UNKNOWN)).when(taskService)
+ .getTaskManager(TASK_TYPE);
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.startTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
+
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask", expectedExceptions = {
+ DeviceMgtTaskException.class })
+ public void testUpdateTaskWhenUnableToRetrieveTaskManager()
+ throws DeviceMgtTaskException, TaskException {
+ TaskService taskService = Mockito.mock(TestTaskServiceImpl.class);
+ Mockito.doThrow(new TaskException("Unable to get TaskManager", TaskException.Code.UNKNOWN)).when(taskService)
+ .getTaskManager(TASK_TYPE);
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
+
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testStartTaskWhenFailedToRegisterTaskType()
+ throws DeviceMgtTaskException, TaskException {
+ TaskService taskService = Mockito.mock(TestTaskServiceImpl.class);
+ Mockito.doThrow(new TaskException("Unable to register task type", TaskException.Code.UNKNOWN)).when(taskService)
+ .registerTaskType(TASK_TYPE);
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.startTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testStartTaskWhenFailedToRegisterTask()
+ throws DeviceMgtTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to register task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .registerTask(Mockito.any(TaskInfo.class));
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.startTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
- private OperationMonitoringTaskConfig generateValidMonitoringTaskConfig(String operationConfig) {
- OperationMonitoringTaskConfig validTaskConfig = new OperationMonitoringTaskConfig();
- List operationList = new ArrayList<>();
- MonitoringOperation operation = new MonitoringOperation();
- operation.setTaskName(operationConfig);
- operation.setRecurrentTimes(1);
- operationList.add(operation);
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testUpdateTaskWhenFailedToRegisterTask()
+ throws DeviceMgtTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to register task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .registerTask(Mockito.any(TaskInfo.class));
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
- validTaskConfig.setEnabled(true);
- validTaskConfig.setFrequency(60000);
- validTaskConfig.setMonitoringOperation(operationList);
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testUpdateTaskWhenFailedToRescheduleTask()
+ throws DeviceMgtTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to reschedule task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .rescheduleTask(Mockito.any(String.class));
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
- return validTaskConfig;
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testUpdateTaskWhenFailedToDeleteTask()
+ throws DeviceMgtTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to delete task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .deleteTask(Mockito.any(String.class));
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
}
- private Properties getStandardQuartzProps() {
- Properties result = new Properties();
- result.put("org.quartz.scheduler.skipUpdateCheck", "true");
- result.put("org.quartz.threadPool.class", QuartzCachedThreadPool.class.getName());
- return result;
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testStopTaskWhenFailedToDeleteTask()
+ throws DeviceMgtTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to delete task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .deleteTask(Mockito.any(String.class));
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.stopTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
}
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerTest.java
new file mode 100644
index 0000000000..ff020451cf
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerTest.java
@@ -0,0 +1,185 @@
+/*
+ * 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.task;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+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.Operation;
+import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
+import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
+import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy;
+import org.wso2.carbon.device.mgt.core.TestDeviceManagementService;
+import org.wso2.carbon.device.mgt.core.TestUtils;
+import org.wso2.carbon.device.mgt.core.authorization.DeviceAccessAuthorizationServiceImpl;
+import org.wso2.carbon.device.mgt.core.common.BaseDeviceManagementTest;
+import org.wso2.carbon.device.mgt.core.common.TestDataHolder;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+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.operation.TestNotificationStrategy;
+import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
+import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderServiceImpl;
+import org.wso2.carbon.device.mgt.core.task.impl.DeviceDetailsRetrieverTask;
+import org.wso2.carbon.device.mgt.core.task.impl.DeviceTaskManagerImpl;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * This is a test class to test the functionality in {@link DeviceTaskManager}.
+ */
+public class DeviceTaskManagerTest extends BaseDeviceManagementTest {
+
+ private static final Log log = LogFactory.getLog(DeviceTaskManagerTest.class);
+ private static final String NEW_DEVICE_TYPE = "NEW-DEVICE-TYPE";
+ private static final String DEVICE_DETAIL_RETRIEVER_OPPCONFIG = "{\"isEnabled\":true,\"frequency\":60000," +
+ "\"monitoringOperation\":[{\"taskName\":\"DEVICE_INFO\",\"recurrentTimes\":2}]}";
+ private List deviceIds;
+ private DeviceTaskManager deviceTaskManager;
+ private DeviceManagementProviderService deviceMgtProviderService;
+ private OperationManager operationManager;
+
+ @BeforeClass
+ public void init() throws DeviceManagementException, RegistryException {
+ log.info("Initializing Device Task Manager Test Suite");
+ this.deviceIds = new ArrayList<>();
+ for (int i = 0; i < 5; i++) {
+ deviceIds.add(new DeviceIdentifier(UUID.randomUUID().toString(), TestDataHolder.TEST_DEVICE_TYPE));
+ }
+ List devices = TestDataHolder.generateDummyDeviceData(this.deviceIds);
+ this.deviceMgtProviderService = new DeviceManagementProviderServiceImpl();
+
+ DeviceManagementServiceComponent.notifyStartupListeners();
+ DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(this.deviceMgtProviderService);
+ DeviceManagementDataHolder.getInstance()
+ .setRegistryService(TestUtils.getRegistryService(DeviceTaskManagerTest.class));
+ DeviceManagementDataHolder.getInstance()
+ .setDeviceAccessAuthorizationService(new DeviceAccessAuthorizationServiceImpl());
+ DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService(null);
+ NotificationStrategy notificationStrategy = new TestNotificationStrategy();
+ this.operationManager = new OperationManagerImpl(TestDataHolder.TEST_DEVICE_TYPE, notificationStrategy);
+ this.deviceMgtProviderService.registerDeviceType(
+ new TestDeviceManagementService(TestDataHolder.TEST_DEVICE_TYPE, TestDataHolder.SUPER_TENANT_DOMAIN));
+ for (Device device : devices) {
+ this.deviceMgtProviderService.enrollDevice(device);
+ }
+ this.deviceTaskManager = new DeviceTaskManagerImpl(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 3));
+ }
+
+ @Test(groups = "Device Task Manager Test Group", description = "Getting the task frequency from the scheduler")
+ public void testGetTaskFrequency() throws DeviceMgtTaskException {
+ log.info("Attempting to retrieve task frequency.");
+ Assert.assertEquals(this.deviceTaskManager.getTaskFrequency(), 60000);
+ log.info("Successfully retrieved task frequency.");
+ }
+
+ @Test(groups = "Device Task Manager Test Group", description = "Testing if the task is enabled")
+ public void testIsTaskEnabled() throws DeviceMgtTaskException {
+ log.info("Attempting to retrieve task status.");
+ Assert.assertTrue(this.deviceTaskManager.isTaskEnabled());
+ log.info("Successfully retrieved task status.");
+ }
+
+ @Test(groups = "Device Task Manager Test Group", description = "Testing adding operations to devices.")
+ public void testAddOperation() throws DeviceMgtTaskException, OperationManagementException {
+ log.info("Attempting to add operations for devices.");
+ this.deviceTaskManager.addOperations();
+ for (DeviceIdentifier deviceId : deviceIds) {
+ List extends Operation> operationList = this.operationManager.getOperations(deviceId);
+ Assert.assertNotNull(operationList);
+ Assert.assertEquals(operationList.size(), 3);
+ }
+ log.info("Successfully added operations for devices.");
+ }
+
+ @Test(groups = "Device Task Manager Test Group",
+ description = "Testing adding operations when no devices are available")
+ public void testAddOperationsWithoutDevices() throws DeviceManagementException, DeviceMgtTaskException {
+ this.deviceMgtProviderService.registerDeviceType(
+ new TestDeviceManagementService(NEW_DEVICE_TYPE, TestDataHolder.SUPER_TENANT_DOMAIN));
+ DeviceTaskManager taskManager = new DeviceTaskManagerImpl(NEW_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 50000, 3));
+ taskManager.addOperations();
+ }
+
+ @Test(groups = "Device Task Manager Test Group", dependsOnMethods = "testAddOperationsWithoutDevices",
+ description = "Testing adding operations when no operations are scheduled")
+ public void testAddOperationsWithoutOperations() throws DeviceMgtTaskException {
+ DeviceTaskManager taskManager = new DeviceTaskManagerImpl(NEW_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 50000, 3));
+ taskManager.addOperations();
+ }
+
+ @Test(groups = "Device Task Manager Test Group", description = "Testing device detail retriever task execution")
+ public void testDeviceDetailRetrieverTaskExecute() throws OperationManagementException {
+ DeviceDetailsRetrieverTask deviceDetailsRetrieverTask = new DeviceDetailsRetrieverTask();
+ Map map = new HashMap<>();
+ map.put("DEVICE_TYPE", TestDataHolder.TEST_DEVICE_TYPE);
+ map.put("OPPCONFIG", DEVICE_DETAIL_RETRIEVER_OPPCONFIG);
+ deviceDetailsRetrieverTask.setProperties(map);
+ deviceDetailsRetrieverTask.execute();
+ for (DeviceIdentifier deviceId : deviceIds) {
+ List extends Operation> operationList = this.operationManager.getOperations(deviceId);
+ Assert.assertNotNull(operationList);
+ Assert.assertEquals(operationList.size(), 4,
+ "Expected number of operations is 4 after adding the device detail retriever operation");
+ Assert.assertEquals(operationList.get(0).getCode(), "DEVICE_INFO",
+ "Operation code of the device detail retriever task should be DEVICE_LOCATION");
+ }
+ }
+
+ @Test(groups = "Device Task Manager Test Group",
+ description = "Testing device detail retriever task execution for tenants")
+ public void testDeviceDetailRetrieverTaskExecuteForAllTenants() throws OperationManagementException {
+ DeviceDetailsRetrieverTask deviceDetailsRetrieverTask = new DeviceDetailsRetrieverTask();
+ System.setProperty("is.cloud", "true");
+ Map map = new HashMap<>();
+ map.put("DEVICE_TYPE", TestDataHolder.TEST_DEVICE_TYPE);
+ map.put("OPPCONFIG", DEVICE_DETAIL_RETRIEVER_OPPCONFIG);
+ deviceDetailsRetrieverTask.setProperties(map);
+ deviceDetailsRetrieverTask.execute();
+ for (DeviceIdentifier deviceId : deviceIds) {
+ List extends Operation> operationList = this.operationManager.getOperations(deviceId);
+ Assert.assertNotNull(operationList);
+ Assert.assertEquals(operationList.size(), 4);
+ Assert.assertEquals(operationList.get(0).getCode(), "DEVICE_INFO",
+ "Operation code of the device detail retriever task should be DEVICE_LOCATION");
+ }
+ }
+
+ @AfterClass
+ public void cleanup() throws DeviceManagementException {
+ for (DeviceIdentifier deviceId: deviceIds) {
+ this.deviceMgtProviderService.disenrollDevice(deviceId);
+ }
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/TestTaskManagerImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/TestTaskManagerImpl.java
index fcebed343c..6eda125c3f 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/TestTaskManagerImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/TestTaskManagerImpl.java
@@ -1,3 +1,20 @@
+/*
+ * 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.task;
import org.wso2.carbon.ntask.common.TaskException;
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml
index d228944439..7830b7fbe3 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml
@@ -46,7 +46,9 @@
+
+