package de.langmi.spring.batch.examples.readers.file.gzip;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.PassThroughLineMapper;
import org.springframework.batch.test.MetaDataInstanceFactory;
import org.springframework.core.io.FileSystemResource;
/**
* Tests if a FlatFileItemReader works with the selfmade GZipBufferedReaderFactory
* and if it reads .gz and normal files successfully.
*
* @author Michael R. Lange
*/
public class GzippedFlatFileItemReaderTest {
/** Reader under test. */
private FlatFileItemReader<String> reader = new FlatFileItemReader<String>();
private static final String PATH_TO_COMPRESSED_TEST_FILE = "src/test/resources/input/file/gzip/input.txt.gz";
private static final String PATH_TO_UNCOMPRESSED_TEST_FILE = "src/test/resources/input/file/gzip/input.txt";
private static final int EXPECTED_COUNT = 20;
/**
* Read compressed test.
*
* @throws Exception
*/
@Test
public void readCompressed() throws Exception {
// setup the reader
reader.setBufferedReaderFactory(new GZipBufferedReaderFactory());
reader.setLineMapper(new PassThroughLineMapper());
reader.setResource(new FileSystemResource(PATH_TO_COMPRESSED_TEST_FILE));
// open with dummy execution context
reader.open(MetaDataInstanceFactory.createStepExecution().getExecutionContext());
// read
try {
int count = 0;
String line;
while ((line = reader.read()) != null) {
assertEquals(String.valueOf(count), line);
count++;
}
assertEquals(count, EXPECTED_COUNT);
} finally {
reader.close();
}
}
/**
* Read uncompressed test.
*
* @throws Exception
*/
@Test
public void readUncompressed() throws Exception {
// setup the reader
reader.setBufferedReaderFactory(new GZipBufferedReaderFactory());
reader.setLineMapper(new PassThroughLineMapper());
reader.setResource(new FileSystemResource(PATH_TO_UNCOMPRESSED_TEST_FILE));
// open with dummy execution context
reader.open(MetaDataInstanceFactory.createStepExecution().getExecutionContext());
// read
try {
int count = 0;
String line;
while ((line = reader.read()) != null) {
assertEquals(String.valueOf(count), line);
count++;
}
assertEquals(count, EXPECTED_COUNT);
} finally {
reader.close();
}
}
}