package net.sf.appstatus.batch;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.util.UUID;
import net.sf.appstatus.core.AppStatus;
import net.sf.appstatus.core.batch.AbstractBatchProgressMonitor;
import net.sf.appstatus.core.batch.IBatchProgressMonitor;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* Test the failed feature.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/appstatus-jdbc-test-config.xml" })
public class NullPointerWhenStepFailedTest {
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
AppStatus appStatus;
private final Logger logger = LoggerFactory.getLogger(NullPointerWhenStepFailedTest.class);
@Before
public void setup() {
jdbcTemplate.execute("TRUNCATE SCHEMA public AND COMMIT");
}
private void step1(IBatchProgressMonitor stepMonitor) throws Exception {
stepMonitor.setLogger(this.logger);
stepMonitor.beginTask("step1", "Do the step 1", 1);
Thread.sleep(1000);
stepMonitor.fail("Test fail feature");
}
@Test
public void testMonitorIsNotSuccessfulWhenAJobFailed() throws Exception {
String uuid = UUID.randomUUID().toString();
IBatchProgressMonitor monitor = appStatus.getBatchProgressMonitor("test", "test", uuid);
monitor.setLogger(this.logger);
monitor.beginTask("job", "Do the job", 1);
monitor.fail("Test fail feature");
assertThat(((AbstractBatchProgressMonitor) monitor).isSuccess(), is(false));
}
@Test
public void testMonitorIsNotSuccessfulWhenAStepFailed() throws Exception {
String uuid = UUID.randomUUID().toString();
IBatchProgressMonitor jobMonitor = appStatus.getBatchProgressMonitor("test", "test", uuid);
jobMonitor.setLogger(this.logger);
jobMonitor.beginTask("job", "Do the job", 1);
step1(jobMonitor.createSubTask(1));
assertThat(((AbstractBatchProgressMonitor) jobMonitor).isSuccess(), is(false));
}
@Test
public void testBasicScenario() throws Exception {
String uuid = UUID.randomUUID().toString();
IBatchProgressMonitor m = appStatus.getBatchProgressMonitor("Batch name", "Batch group", uuid);
m.setLogger(this.logger);
// Before first task
m.message("Test message");
m.setCurrentItem("");
assertThat(((AbstractBatchProgressMonitor) m).getProgress(), is(-1f));
assertThat(appStatus.getBatchManager().getRunningBatches().get(0).getProgressStatus(), is( -1f));
// Task 1
m.beginTask("Task 1 name", "Task 1 description ", 4);
assertThat(((AbstractBatchProgressMonitor) m).getProgress(), is(0f));
assertThat(appStatus.getBatchManager().getRunningBatches().get(0).getProgressStatus(), is( 0f));
m.worked(1);
assertThat(((AbstractBatchProgressMonitor) m).getProgress(), is(1f));
m.message("Test message");
m.reject("rejected1", "for testing");
assertThat(((AbstractBatchProgressMonitor) m).getRejectedItems().size(), is(1));
assertThat(appStatus.getBatchManager().getRunningBatches().get(0).getRejectedItemsId().get(0), is( "rejected1"));
assertThat(appStatus.getBatchManager().getRunningBatches().get(0).getProgressStatus(), is( 25f));
IBatchProgressMonitor m1 = m.createSubTask(3);
m1.beginTask("Sub task 1", "Sub task 1 description", 1);
m1.worked(1);
m1.done();
assertThat(((AbstractBatchProgressMonitor) m).getProgress(), is(4f));
assertThat(appStatus.getBatchManager().getRunningBatches().get(0).getProgressStatus(), is( 100f));
m.done();
assertThat(((AbstractBatchProgressMonitor) m).isSuccess(), is(true));
assertThat(((AbstractBatchProgressMonitor) m).getProgress(), is(4f));
}
}