Package org.qzerver.model.service.job.executor.impl

Source Code of org.qzerver.model.service.job.executor.impl.ScheduleJobExecutorServiceAllParallelTest

package org.qzerver.model.service.job.executor.impl;

import com.gainmatrix.lib.time.ChronometerUtils;
import com.gainmatrix.lib.time.impl.StubChronometer;
import junit.framework.Assert;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
import org.junit.Before;
import org.junit.Test;
import org.qzerver.base.AbstractModelTest;
import org.qzerver.model.agent.action.ActionAgent;
import org.qzerver.model.agent.action.ActionAgentResult;
import org.qzerver.model.domain.entities.cluster.ClusterGroup;
import org.qzerver.model.domain.entities.cluster.ClusterNode;
import org.qzerver.model.domain.entities.job.ScheduleExecution;
import org.qzerver.model.domain.entities.job.ScheduleExecutionNode;
import org.qzerver.model.domain.entities.job.ScheduleExecutionResult;
import org.qzerver.model.domain.entities.job.ScheduleExecutionStatus;
import org.qzerver.model.domain.entities.job.ScheduleExecutionStrategy;
import org.qzerver.model.domain.entities.job.ScheduleGroup;
import org.qzerver.model.domain.entities.job.ScheduleJob;
import org.qzerver.model.service.cluster.ClusterManagementService;
import org.qzerver.model.service.job.execution.ScheduleExecutionManagementService;
import org.qzerver.model.service.job.executor.dto.AutomaticJobExecutionParameters;
import org.qzerver.model.service.job.management.ScheduleJobManagementService;
import org.qzerver.model.service.job.management.dto.ScheduleJobActionParameters;
import org.qzerver.model.service.job.management.dto.ScheduleJobCreateParameters;
import org.qzerver.model.service.mail.MailService;
import org.qzerver.model.service.quartz.management.QuartzManagementService;
import org.springframework.validation.Validator;

import javax.annotation.Resource;

public class ScheduleJobExecutorServiceAllParallelTest extends AbstractModelTest {

    private IMocksControl control;

    private MailService mailService;

    private ScheduleJobExecutorServiceImpl scheduleJobExecutorService;

    private ActionAgent actionAgent;

    private ScheduleGroup scheduleGroup;

    private ScheduleJob scheduleJob;

    private ClusterGroup clusterGroup;

    private ClusterNode clusterNode1;

    private ClusterNode clusterNode2;

    private ClusterNode clusterNode3;

    @Resource
    private ScheduleJobManagementService scheduleJobManagementService;

    @Resource
    private ClusterManagementService clusterManagementService;

    @Resource
    private QuartzManagementService quartzManagementService;

    @Resource
    private ScheduleExecutionManagementService scheduleExecutionManagementService;

    @Resource
    private Validator modelBeanValidator;

    @Resource
    private StubChronometer chronometer;

    @Before
    public void setUp() throws Exception {
        control = EasyMock.createControl();
        control.makeThreadSafe(true);

        mailService = control.createMock(MailService.class);
        actionAgent = control.createMock(ActionAgent.class);

        scheduleJobExecutorService = new ScheduleJobExecutorServiceImpl();
        scheduleJobExecutorService.setBeanValidator(modelBeanValidator);
        scheduleJobExecutorService.setChronometer(chronometer);
        scheduleJobExecutorService.setMailService(mailService);
        scheduleJobExecutorService.setExecutionManagementService(scheduleExecutionManagementService);
        scheduleJobExecutorService.setActionAgent(actionAgent);

        scheduleGroup = scheduleJobManagementService.createGroup("Test group");

        clusterGroup = clusterManagementService.createGroup("Test group");
        clusterNode1 = clusterManagementService.createNode(clusterGroup.getId(), "10.2.0.1", "Node 1", true);
        clusterNode2 = clusterManagementService.createNode(clusterGroup.getId(), "10.2.0.2", "Node 2", true);
        clusterNode3 = clusterManagementService.createNode(clusterGroup.getId(), "10.2.0.3", "Node 3", false);
    }

    @Test
    public void testNormalAutomaticAllExecution() throws Exception {
        ScheduleJobCreateParameters jobParameters = new ScheduleJobCreateParameters();
        jobParameters.setName("Test Job");
        jobParameters.setDescription("Nothing to do");
        jobParameters.setTimezone("UTC");
        jobParameters.setCron("0 0 0 * * ?");
        jobParameters.setEnabled(true);
        jobParameters.setAllNodes(true);
        jobParameters.setAllNodesPool(2);
        jobParameters.setClusterGroupId(clusterGroup.getId());
        jobParameters.setScheduleGroupId(scheduleGroup.getId());
        jobParameters.setStrategy(ScheduleExecutionStrategy.CIRCULAR);
        jobParameters.setNotifyOnFailure(true);
        jobParameters.setActionIdentifier("action.type");
        jobParameters.setActionDefinition("action.data".getBytes());

        scheduleJob = scheduleJobManagementService.createJob(jobParameters);
        quartzManagementService.disableJob(scheduleJob.getId());

        control.reset();

        EasyMock.expect(actionAgent.executeAction(
            EasyMock.anyLong(),
            EasyMock.<String>anyObject(),
            EasyMock.<byte[]>anyObject(),
            EasyMock.eq(clusterNode2.getAddress())
        )).andReturn(new ActionAgentResult(true, null));

        EasyMock.expect(actionAgent.executeAction(
            EasyMock.anyLong(),
            EasyMock.<String>anyObject(),
            EasyMock.<byte[]>anyObject(),
            EasyMock.eq(clusterNode1.getAddress())
        )).andReturn(new ActionAgentResult(true, null));

        control.replay();

        AutomaticJobExecutionParameters jobExecutionParameters = new AutomaticJobExecutionParameters();
        jobExecutionParameters.setScheduledTime(ChronometerUtils.parseMoment("2012-02-20 10:00:00.000 UTC"));
        jobExecutionParameters.setFiredTime(ChronometerUtils.parseMoment("2012-02-20 10:00:00.231 UTC"));
        jobExecutionParameters.setNextFireTime(null);

        ScheduleExecution scheduleExecution = scheduleJobExecutorService.executeAutomaticJob(scheduleJob.getId(),
            jobExecutionParameters);
        Assert.assertNotNull(scheduleExecution);

        control.verify();

        ScheduleExecutionNode scheduleExecutionNode;
        ScheduleExecutionResult scheduleExecutionResult;

        scheduleExecution = scheduleExecutionManagementService.findExecution(scheduleExecution.getId());
        Assert.assertEquals(ScheduleExecutionStatus.SUCCEED, scheduleExecution.getStatus());
        Assert.assertEquals(2, scheduleExecution.getNodes().size());
        Assert.assertEquals(2, scheduleExecution.getResults().size());

        scheduleExecutionNode =scheduleExecution.getNodes().get(0);
        Assert.assertNotNull(scheduleExecutionNode);
        Assert.assertEquals(clusterNode2.getAddress(), scheduleExecutionNode.getAddress());
        scheduleExecutionResult = scheduleExecutionNode.getResult();
        Assert.assertNotNull(scheduleExecutionResult);
        Assert.assertTrue(scheduleExecutionResult.isSucceed());

        scheduleExecutionNode =scheduleExecution.getNodes().get(1);
        Assert.assertNotNull(scheduleExecutionNode);
        Assert.assertEquals(clusterNode1.getAddress(), scheduleExecutionNode.getAddress());
        scheduleExecutionResult = scheduleExecutionNode.getResult();
        Assert.assertNotNull(scheduleExecutionResult);
        Assert.assertTrue(scheduleExecutionResult.isSucceed());
    }

    @Test
    public void testLimitedAutomaticAllExecution() throws Exception {
        ScheduleJobCreateParameters jobParameters = new ScheduleJobCreateParameters();
        jobParameters.setName("Test Job");
        jobParameters.setDescription("Nothing to do");
        jobParameters.setTimezone("UTC");
        jobParameters.setCron("0 0 0 * * ?");
        jobParameters.setEnabled(true);
        jobParameters.setAllNodes(true);
        jobParameters.setAllNodesPool(2);
        jobParameters.setNodesLimit(1);
        jobParameters.setClusterGroupId(clusterGroup.getId());
        jobParameters.setScheduleGroupId(scheduleGroup.getId());
        jobParameters.setStrategy(ScheduleExecutionStrategy.CIRCULAR);
        jobParameters.setNotifyOnFailure(true);
        jobParameters.setActionIdentifier("action.type");
        jobParameters.setActionDefinition("action.data".getBytes());

        scheduleJob = scheduleJobManagementService.createJob(jobParameters);
        quartzManagementService.disableJob(scheduleJob.getId());

        control.reset();

        EasyMock.expect(actionAgent.executeAction(
            EasyMock.anyLong(),
            EasyMock.<String>anyObject(),
            EasyMock.<byte[]>anyObject(),
            EasyMock.eq(clusterNode2.getAddress())
        )).andReturn(new ActionAgentResult(true, null));

        control.replay();

        AutomaticJobExecutionParameters jobExecutionParameters = new AutomaticJobExecutionParameters();
        jobExecutionParameters.setScheduledTime(ChronometerUtils.parseMoment("2012-02-20 10:00:00.000 UTC"));
        jobExecutionParameters.setFiredTime(ChronometerUtils.parseMoment("2012-02-20 10:00:00.231 UTC"));
        jobExecutionParameters.setNextFireTime(null);

        ScheduleExecution scheduleExecution = scheduleJobExecutorService.executeAutomaticJob(scheduleJob.getId(),
            jobExecutionParameters);
        Assert.assertNotNull(scheduleExecution);

        control.verify();

        ScheduleExecutionNode scheduleExecutionNode;
        ScheduleExecutionResult scheduleExecutionResult;

        scheduleExecution = scheduleExecutionManagementService.findExecution(scheduleExecution.getId());
        Assert.assertEquals(ScheduleExecutionStatus.SUCCEED, scheduleExecution.getStatus());
        Assert.assertEquals(1, scheduleExecution.getNodes().size());
        Assert.assertEquals(1, scheduleExecution.getResults().size());

        scheduleExecutionNode =scheduleExecution.getNodes().get(0);
        Assert.assertNotNull(scheduleExecutionNode);
        Assert.assertEquals(clusterNode2.getAddress(), scheduleExecutionNode.getAddress());
        scheduleExecutionResult = scheduleExecutionNode.getResult();
        Assert.assertNotNull(scheduleExecutionResult);
        Assert.assertTrue(scheduleExecutionResult.isSucceed());
    }

    @Test
    public void testOneFailedAutomaticAllExecution() throws Exception {
        ScheduleJobCreateParameters jobParameters = new ScheduleJobCreateParameters();
        jobParameters.setName("Test Job");
        jobParameters.setDescription("Nothing to do");
        jobParameters.setTimezone("UTC");
        jobParameters.setCron("0 0 0 * * ?");
        jobParameters.setEnabled(true);
        jobParameters.setAllNodes(true);
        jobParameters.setAllNodesPool(2);
        jobParameters.setClusterGroupId(clusterGroup.getId());
        jobParameters.setScheduleGroupId(scheduleGroup.getId());
        jobParameters.setStrategy(ScheduleExecutionStrategy.CIRCULAR);
        jobParameters.setNotifyOnFailure(true);
        jobParameters.setActionIdentifier("action.type");
        jobParameters.setActionDefinition("action.data".getBytes());

        scheduleJob = scheduleJobManagementService.createJob(jobParameters);
        quartzManagementService.disableJob(scheduleJob.getId());

        control.reset();

        EasyMock.expect(actionAgent.executeAction(
            EasyMock.anyLong(),
            EasyMock.<String>anyObject(),
            EasyMock.<byte[]>anyObject(),
            EasyMock.eq(clusterNode2.getAddress())
        )).andReturn(new ActionAgentResult(false, null));

        EasyMock.expect(actionAgent.executeAction(
            EasyMock.anyLong(),
            EasyMock.<String>anyObject(),
            EasyMock.<byte[]>anyObject(),
            EasyMock.eq(clusterNode1.getAddress())
        )).andReturn(new ActionAgentResult(true, null));

        mailService.notifyJobExecutionFailed(
            EasyMock.<ScheduleExecution>anyObject()
        );

        control.replay();

        AutomaticJobExecutionParameters jobExecutionParameters = new AutomaticJobExecutionParameters();
        jobExecutionParameters.setScheduledTime(ChronometerUtils.parseMoment("2012-02-20 10:00:00.000 UTC"));
        jobExecutionParameters.setFiredTime(ChronometerUtils.parseMoment("2012-02-20 10:00:00.231 UTC"));
        jobExecutionParameters.setNextFireTime(null);

        ScheduleExecution scheduleExecution = scheduleJobExecutorService.executeAutomaticJob(scheduleJob.getId(),
            jobExecutionParameters);
        Assert.assertNotNull(scheduleExecution);

        control.verify();

        ScheduleExecutionNode scheduleExecutionNode;
        ScheduleExecutionResult scheduleExecutionResult;

        scheduleExecution = scheduleExecutionManagementService.findExecution(scheduleExecution.getId());
        Assert.assertEquals(ScheduleExecutionStatus.FAILED, scheduleExecution.getStatus());
        Assert.assertEquals(2, scheduleExecution.getNodes().size());
        Assert.assertEquals(2, scheduleExecution.getResults().size());

        scheduleExecutionNode =scheduleExecution.getNodes().get(0);
        Assert.assertNotNull(scheduleExecutionNode);
        Assert.assertEquals(clusterNode2.getAddress(), scheduleExecutionNode.getAddress());
        scheduleExecutionResult = scheduleExecutionNode.getResult();
        Assert.assertNotNull(scheduleExecutionResult);
        Assert.assertFalse(scheduleExecutionResult.isSucceed());

        scheduleExecutionNode =scheduleExecution.getNodes().get(1);
        Assert.assertNotNull(scheduleExecutionNode);
        Assert.assertEquals(clusterNode1.getAddress(), scheduleExecutionNode.getAddress());
        scheduleExecutionResult = scheduleExecutionNode.getResult();
        Assert.assertNotNull(scheduleExecutionResult);
        Assert.assertTrue(scheduleExecutionResult.isSucceed());
    }

    @Test
    public void testAllFailedAutomaticAllExecution() throws Exception {
        ScheduleJobCreateParameters jobParameters = new ScheduleJobCreateParameters();
        jobParameters.setName("Test Job");
        jobParameters.setDescription("Nothing to do");
        jobParameters.setTimezone("UTC");
        jobParameters.setCron("0 0 0 * * ?");
        jobParameters.setEnabled(true);
        jobParameters.setAllNodes(true);
        jobParameters.setAllNodesPool(2);
        jobParameters.setClusterGroupId(clusterGroup.getId());
        jobParameters.setScheduleGroupId(scheduleGroup.getId());
        jobParameters.setStrategy(ScheduleExecutionStrategy.CIRCULAR);
        jobParameters.setNotifyOnFailure(true);
        jobParameters.setActionIdentifier("action.type");
        jobParameters.setActionDefinition("action.data".getBytes());

        scheduleJob = scheduleJobManagementService.createJob(jobParameters);
        quartzManagementService.disableJob(scheduleJob.getId());

        control.reset();

        EasyMock.expect(actionAgent.executeAction(
            EasyMock.anyLong(),
            EasyMock.<String>anyObject(),
            EasyMock.<byte[]>anyObject(),
            EasyMock.eq(clusterNode2.getAddress())
        )).andReturn(new ActionAgentResult(false, null));

        EasyMock.expect(actionAgent.executeAction(
            EasyMock.anyLong(),
            EasyMock.<String>anyObject(),
            EasyMock.<byte[]>anyObject(),
            EasyMock.eq(clusterNode1.getAddress())
        )).andReturn(new ActionAgentResult(false, null));

        mailService.notifyJobExecutionFailed(
            EasyMock.<ScheduleExecution>anyObject()
        );

        control.replay();

        AutomaticJobExecutionParameters jobExecutionParameters = new AutomaticJobExecutionParameters();
        jobExecutionParameters.setScheduledTime(ChronometerUtils.parseMoment("2012-02-20 10:00:00.000 UTC"));
        jobExecutionParameters.setFiredTime(ChronometerUtils.parseMoment("2012-02-20 10:00:00.231 UTC"));
        jobExecutionParameters.setNextFireTime(null);

        ScheduleExecution scheduleExecution = scheduleJobExecutorService.executeAutomaticJob(scheduleJob.getId(),
            jobExecutionParameters);
        Assert.assertNotNull(scheduleExecution);

        control.verify();

        ScheduleExecutionNode scheduleExecutionNode;
        ScheduleExecutionResult scheduleExecutionResult;

        scheduleExecution = scheduleExecutionManagementService.findExecution(scheduleExecution.getId());
        Assert.assertEquals(ScheduleExecutionStatus.FAILED, scheduleExecution.getStatus());
        Assert.assertEquals(2, scheduleExecution.getNodes().size());
        Assert.assertEquals(2, scheduleExecution.getResults().size());

        scheduleExecutionNode =scheduleExecution.getNodes().get(0);
        Assert.assertNotNull(scheduleExecutionNode);
        Assert.assertEquals(clusterNode2.getAddress(), scheduleExecutionNode.getAddress());
        scheduleExecutionResult = scheduleExecutionNode.getResult();
        Assert.assertNotNull(scheduleExecutionResult);
        Assert.assertFalse(scheduleExecutionResult.isSucceed());

        scheduleExecutionNode =scheduleExecution.getNodes().get(1);
        Assert.assertNotNull(scheduleExecutionNode);
        Assert.assertEquals(clusterNode1.getAddress(), scheduleExecutionNode.getAddress());
        scheduleExecutionResult = scheduleExecutionNode.getResult();
        Assert.assertNotNull(scheduleExecutionResult);
        Assert.assertFalse(scheduleExecutionResult.isSucceed());
    }

    @Test
    public void testExceptionAutomaticAllExecution() throws Exception {
        ScheduleJobActionParameters actionParameters = new ScheduleJobActionParameters();
        actionParameters.setIdentifier("action.type");
        actionParameters.setDefinition("action.data".getBytes());

        ScheduleJobCreateParameters jobParameters = new ScheduleJobCreateParameters();
        jobParameters.setName("Test Job");
        jobParameters.setDescription("Nothing to do");
        jobParameters.setTimezone("UTC");
        jobParameters.setCron("0 0 0 * * ?");
        jobParameters.setEnabled(true);
        jobParameters.setAllNodes(true);
        jobParameters.setAllNodesPool(2);
        jobParameters.setClusterGroupId(clusterGroup.getId());
        jobParameters.setScheduleGroupId(scheduleGroup.getId());
        jobParameters.setStrategy(ScheduleExecutionStrategy.CIRCULAR);
        jobParameters.setNotifyOnFailure(true);
        jobParameters.setActionIdentifier("action.type");
        jobParameters.setActionDefinition("action.data".getBytes());

        scheduleJob = scheduleJobManagementService.createJob(jobParameters);
        quartzManagementService.disableJob(scheduleJob.getId());

        control.reset();

        EasyMock.expect(actionAgent.executeAction(
            EasyMock.anyLong(),
            EasyMock.<String>anyObject(),
            EasyMock.<byte[]>anyObject(),
            EasyMock.eq(clusterNode2.getAddress())
        )).andThrow(new IllegalStateException("Test exception"));

        EasyMock.expect(actionAgent.executeAction(
            EasyMock.anyLong(),
            EasyMock.<String>anyObject(),
            EasyMock.<byte[]>anyObject(),
            EasyMock.eq(clusterNode1.getAddress())
        )).andReturn(new ActionAgentResult(true, null));

        mailService.notifyJobExecutionFailed(
            EasyMock.<ScheduleExecution>anyObject()
        );

        control.replay();

        AutomaticJobExecutionParameters jobExecutionParameters = new AutomaticJobExecutionParameters();
        jobExecutionParameters.setScheduledTime(ChronometerUtils.parseMoment("2012-02-20 10:00:00.000 UTC"));
        jobExecutionParameters.setFiredTime(ChronometerUtils.parseMoment("2012-02-20 10:00:00.231 UTC"));
        jobExecutionParameters.setNextFireTime(null);

        ScheduleExecution scheduleExecution = scheduleJobExecutorService.executeAutomaticJob(scheduleJob.getId(),
            jobExecutionParameters);
        Assert.assertNotNull(scheduleExecution);

        control.verify();

        ScheduleExecutionNode scheduleExecutionNode;
        ScheduleExecutionResult scheduleExecutionResult;

        scheduleExecution = scheduleExecutionManagementService.findExecution(scheduleExecution.getId());
        Assert.assertEquals(ScheduleExecutionStatus.EXCEPTION, scheduleExecution.getStatus());
        Assert.assertEquals(2, scheduleExecution.getNodes().size());
        Assert.assertEquals(2, scheduleExecution.getResults().size());

        scheduleExecutionNode =scheduleExecution.getNodes().get(0);
        Assert.assertNotNull(scheduleExecutionNode);
        Assert.assertEquals(clusterNode2.getAddress(), scheduleExecutionNode.getAddress());
        scheduleExecutionResult = scheduleExecutionNode.getResult();
        Assert.assertNotNull(scheduleExecutionResult);
        Assert.assertFalse(scheduleExecutionResult.isSucceed());

        scheduleExecutionNode =scheduleExecution.getNodes().get(1);
        Assert.assertNotNull(scheduleExecutionNode);
        Assert.assertEquals(clusterNode1.getAddress(), scheduleExecutionNode.getAddress());
        scheduleExecutionResult = scheduleExecutionNode.getResult();
        Assert.assertNotNull(scheduleExecutionResult);
        Assert.assertTrue(scheduleExecutionResult.isSucceed());
    }

}
TOP

Related Classes of org.qzerver.model.service.job.executor.impl.ScheduleJobExecutorServiceAllParallelTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.