/* * Copyright (c) 2014 Red Hat, Inc. and/or its affiliates. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Cheng Fang - Initial API and implementation */ package org.jberet.support.io; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.util.concurrent.TimeUnit; import javax.batch.operations.JobOperator; import javax.batch.runtime.BatchRuntime; import javax.batch.runtime.BatchStatus; import org.jberet.runtime.JobExecutionImpl; import org.junit.Assert; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * A test class that writes batch data to {@link MockItemWriter}. */ public final class MockItemWriterTest { static final String jobName = "org.jberet.support.io.MockItemWriterTest"; private static final JobOperator jobOperator = BatchRuntime.getJobOperator(); @Test public void toConsoleDefault() throws Exception { verifyJobExecution(jobOperator.start(jobName, null), BatchStatus.COMPLETED); } @Test public void toConsole() throws Exception { final Properties jobParams = new Properties(); jobParams.setProperty("toConsole", Boolean.TRUE.toString()); verifyJobExecution(jobOperator.start(jobName, jobParams), BatchStatus.COMPLETED); } @Test public void noop() throws Exception { final Properties jobParams = new Properties(); jobParams.setProperty("toConsole", Boolean.FALSE.toString()); verifyJobExecution(jobOperator.start(jobName, jobParams), BatchStatus.COMPLETED); } @Test public void toFile() throws Exception { final Properties jobParams = new Properties(); jobParams.setProperty("toFile", new File(CsvItemReaderWriterTest.tmpdir, "MockItemWriterTest-toFile.txt").getAbsolutePath()); verifyJobExecution(jobOperator.start(jobName, jobParams), BatchStatus.COMPLETED); } @Test public void toClass() throws Exception { if (DataHolder.data != null) { DataHolder.data.clear(); } final Properties jobParams = new Properties(); jobParams.setProperty("toClass", DataHolder.class.getName()); verifyJobExecution(jobOperator.start(jobName, jobParams), BatchStatus.COMPLETED); Assert.assertEquals(true, DataHolder.data.size() > 0); System.out.printf("data list size : %s, first item: %s%n", DataHolder.data.size(), DataHolder.data.get(0)); } @Test public void toClassUninitialized() throws Exception { if (DataHolderUninitialized.data != null) { DataHolderUninitialized.data.clear(); } final Properties jobParams = new Properties(); jobParams.setProperty("toClass", DataHolderUninitialized.class.getName()); verifyJobExecution(jobOperator.start(jobName, jobParams), BatchStatus.COMPLETED); Assert.assertEquals(true, DataHolderUninitialized.data.size() > 0); System.out.printf("data list size : %s, first item: %s%n", DataHolderUninitialized.data.size(), DataHolderUninitialized.data.get(0)); } public static void verifyJobExecution(final long jobExecutionId, final BatchStatus expected) throws Exception { final JobExecutionImpl jobExecution = (JobExecutionImpl) jobOperator.getJobExecution(jobExecutionId); jobExecution.awaitTermination(5, TimeUnit.MINUTES); assertEquals(expected, jobExecution.getBatchStatus()); } public static final class DataHolder { public static final List data = new ArrayList(); } public static final class DataHolderUninitialized { public static volatile List data; } }