diff --git a/README.md b/README.md
index 4eaf5ae..b5a2bcd 100644
--- a/README.md
+++ b/README.md
@@ -20,9 +20,9 @@ So logstash-forwarder-java is a solution for those who want a portable, lightwei
## How to install it ?
Download one of the following archives :
- - [logstash-forwarder-java-0.2.4-bin.zip](https://github.com/didfet/logstash-forwarder-java/releases/download/0.2.4/logstash-forwarder-java-0.2.4-bin.zip)
- - [logstash-forwarder-java-0.2.4-bin.tar.gz](https://github.com/didfet/logstash-forwarder-java/releases/download/0.2.4/logstash-forwarder-java-0.2.4-bin.tar.gz)
- - [logstash-forwarder-java-0.2.4-bin.tar.bz2](https://github.com/didfet/logstash-forwarder-java/releases/download/0.2.4/logstash-forwarder-java-0.2.4-bin.tar.bz2)
+ - [logstash-forwarder-java-0.2.6-bin.zip](https://github.com/toliman7/logstash-forwarder-java/releases/download/0.2.6/logstash-forwarder-java-0.2.6-bin.zip)
+ - [logstash-forwarder-java-0.2.6-bin.tar.gz](https://github.com/toliman7/logstash-forwarder-java/releases/download/0.2.6/logstash-forwarder-java-0.2.6-bin.tar.gz)
+ - [logstash-forwarder-java-0.2.6-bin.tar.bz2](https://github.com/toliman7/logstash-forwarder-java/releases/download/0.2.6/logstash-forwarder-java-0.2.6-bin.tar.bz2)
Or download the maven project and run maven package. Then you can install one of the archives located in the target directory.
diff --git a/pom.xml b/pom.xml
index dd9c863..64e597e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,12 +3,14 @@
4.0.0
logstash-forwarder-java
logstash-forwarder-java
- 0.2.5-SNAPSHOT
+ 0.2.8-SNAPSHOT
logstash-forwarder-java
Java version of logstash forwarder
https://github.com/didfet/logstash-forwarder-java
UTF-8
+ 1.7
+ 1.7
@@ -81,6 +83,9 @@
2.5.3
src/assembly/tarball.xml
+
+ jar-with-dependencies
+
@@ -141,7 +146,7 @@
com.fasterxml.jackson.core
jackson-databind
- 2.1.5
+ 2.12.0
junit
@@ -166,5 +171,4 @@
1.2
-
diff --git a/src/main/java/info/fetter/logstashforwarder/FileReader.java b/src/main/java/info/fetter/logstashforwarder/FileReader.java
index 8ee23b6..50d5ba1 100644
--- a/src/main/java/info/fetter/logstashforwarder/FileReader.java
+++ b/src/main/java/info/fetter/logstashforwarder/FileReader.java
@@ -1,242 +1,242 @@
-package info.fetter.logstashforwarder;
-
-/*
- * Copyright 2015 Didier Fetter
- * Copyright 2017 Alberto González Palomo https://sentido-labs.com
- *
- * Licensed 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.
- *
- */
-
-import info.fetter.logstashforwarder.util.AdapterException;
-import info.fetter.logstashforwarder.util.RandomAccessFile;
-
-import java.io.File;
-import java.io.IOException;
-//import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.log4j.Logger;
-
-
-public class FileReader extends Reader {
- private static Logger logger = Logger.getLogger(FileReader.class);
- private static final byte[] ZIP_MAGIC = new byte[] {(byte) 0x50, (byte) 0x4b, (byte) 0x03, (byte) 0x04};
- private static final byte[] LZW_MAGIC = new byte[] {(byte) 0x1f, (byte) 0x9d};
- private static final byte[] LZH_MAGIC = new byte[] {(byte) 0x1f, (byte) 0xa0};
- private static final byte[] GZ_MAGIC = new byte[] {(byte) 0x1f, (byte) 0x8b, (byte) 0x08};
- private static final byte[][] MAGICS = new byte[][] {ZIP_MAGIC, LZW_MAGIC, LZH_MAGIC, GZ_MAGIC};
- private Map pointerMap;
- ByteBuffer bufferedLines = ByteBuffer.allocate(BYTEBUFFER_CAPACITY);
-
- public FileReader(int spoolSize) {
- super(spoolSize);
- }
-
- public int readFiles(Collection fileList) throws AdapterException {
- int eventCount = 0;
- if(logger.isTraceEnabled()) {
- logger.trace("Reading " + fileList.size() + " file(s)");
- }
- pointerMap = new HashMap(fileList.size(),1);
- for(FileState state : fileList) {
- eventCount += readFile(state, spoolSize - eventCount);
- }
- if(eventCount > 0) {
- try {
- adapter.sendEvents(eventList);
- } catch(AdapterException e) {
- eventList.clear(); // Be sure no events will be sent twice after reconnect
- throw e;
- }
- }
- for(FileState state : fileList) {
- state.setPointer(pointerMap.get(state.getFile()));
- }
- eventList.clear();
- return eventCount; // Return number of events sent to adapter
- }
-
- private int readFile(FileState state, int spaceLeftInSpool) {
- File file = state.getFile();
- long pointer = state.getPointer();
- int numberOfEvents = 0;
- try {
- if(state.isDeleted() || state.getRandomAccessFile() == null) { // Don't try to read this file
- if(logger.isTraceEnabled()) {
- logger.trace("File : " + file + " has been deleted");
- }
- } else if(state.getRandomAccessFile().isEmpty()) {
- if(logger.isTraceEnabled()) {
- logger.trace("File : " + file + " is empty");
- }
- } else {
- int eventListSizeBefore = eventList.size();
- if(logger.isTraceEnabled()) {
- logger.trace("File : " + file + " pointer : " + pointer);
- logger.trace("Space left in spool : " + spaceLeftInSpool);
- }
- if(isCompressedFile(state)) {
- pointer = file.length();
- } else {
- pointer = readLines(state, spaceLeftInSpool);
- }
- numberOfEvents = eventList.size() - eventListSizeBefore;
- }
- } catch(IOException e) {
- logger.warn("Exception raised while reading file : " + state.getFile(), e);
- }
- pointerMap.put(file, pointer);
- return numberOfEvents; // Return number of events read
- }
-
- private boolean isCompressedFile(FileState state) {
- RandomAccessFile reader = state.getRandomAccessFile();
-
- try {
- for(byte[] magic : MAGICS) {
- byte[] fileBytes = new byte[magic.length];
- reader.seek(0);
- int read = reader.read(fileBytes);
- if (read != magic.length) {
- continue;
- }
- if(Arrays.equals(magic, fileBytes)) {
- logger.debug("Compressed file detected : " + state.getFile());
- return true;
- }
- }
- } catch(IOException e) {
- logger.warn("Exception raised while reading file : " + state.getFile(), e);
- }
- return false;
- }
-
- private static byte[] extractBytes(ByteBuffer byteBuffer)
- {
- byte[] bytes = new byte[byteBuffer.position()];
- byteBuffer.rewind();
- byteBuffer.get(bytes);
- byteBuffer.clear();
- return bytes;
- }
-
- private static void copyLineToBuffer(byte[] line, ByteBuffer byteBuffer) {
- if(line.length <= byteBuffer.remaining()) {
- byteBuffer.put(line);
- } else {
- byteBuffer.put(line, 0, byteBuffer.remaining());
- }
- }
-
- private long readLines(FileState state, int spaceLeftInSpool) {
- RandomAccessFile reader = state.getRandomAccessFile();
- long pos = state.getPointer();
- Multiline multiline = state.getMultiline();
- try {
- reader.seek(pos);
- byte[] line = readLine(reader);
- bufferedLines.clear();
-
- if(multiline != null && multiline.isPrevious()) {
- spaceLeftInSpool--;
- }
- while (line != null && spaceLeftInSpool > 0) {
- if(logger.isDebugEnabled()) {
- logger.debug("-- Read line : " + new String(line));
- logger.debug("-- Space left in spool : " + spaceLeftInSpool);
- }
- pos = reader.getFilePointer();
- if(multiline == null) {
- addEvent(state, pos, line);
- spaceLeftInSpool--;
- }
- else {
- if(logger.isDebugEnabled()) {
- logger.debug("-- Multiline : " + multiline + " matches " + multiline.isPatternFound(line));
- }
- if(multiline.isPatternFound(line)) {
- // buffer the line
- if(bufferedLines.position() > 0 && bufferedLines.hasRemaining()) {
- bufferedLines.put(Multiline.JOINT);
- }
- copyLineToBuffer(line, bufferedLines);
- }
- else {
- if(multiline.isPrevious()) {
- // did not match, so new event started
- if (bufferedLines.position() > 0) {
- addEvent(state, pos, extractBytes(bufferedLines));
- spaceLeftInSpool--;
- }
- copyLineToBuffer(line, bufferedLines);
- }
- else {
- // did not match, add the current line
- if(bufferedLines.position() > 0) {
- if(bufferedLines.hasRemaining()) {
- bufferedLines.put(Multiline.JOINT);
- }
- copyLineToBuffer(line, bufferedLines);
- addEvent(state, pos, extractBytes(bufferedLines));
- spaceLeftInSpool--;
- }
- else {
- addEvent(state, pos, line);
- spaceLeftInSpool--;
- }
- }
- }
- }
- line = readLine(reader);
- }
- if(bufferedLines.position() > 0) {
- addEvent(state, pos, extractBytes(bufferedLines)); // send any buffered lines left
- }
- reader.seek(pos); // Ensure we can re-read if necessary
- } catch(IOException e) {
- logger.warn("Exception raised while reading file : " + state.getFile(), e);
- }
- return pos;
- }
-
- private byte[] readLine(RandomAccessFile reader) throws IOException {
- byteBuffer.clear();
- int ch;
- boolean seenCR = false;
- while((ch=reader.read()) != -1) {
- switch(ch) {
- case '\n':
- return extractBytes(byteBuffer);
- case '\r':
- seenCR = true;
- break;
- default:
- if (seenCR) {
- if(byteBuffer.hasRemaining()) {
- byteBuffer.put((byte) '\r');
- }
- seenCR = false;
- }
- if(byteBuffer.hasRemaining()) {
- byteBuffer.put((byte)ch);
- }
- }
- }
- return null;
- }
-
-}
+package info.fetter.logstashforwarder;
+
+/*
+ * Copyright 2015 Didier Fetter
+ * Copyright 2017 Alberto González Palomo https://sentido-labs.com
+ *
+ * Licensed 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.
+ *
+ */
+
+import info.fetter.logstashforwarder.util.AdapterException;
+import info.fetter.logstashforwarder.util.RandomAccessFile;
+
+import java.io.File;
+import java.io.IOException;
+//import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.log4j.Logger;
+
+
+public class FileReader extends Reader {
+ private static Logger logger = Logger.getLogger(FileReader.class);
+ private static final byte[] ZIP_MAGIC = new byte[] {(byte) 0x50, (byte) 0x4b, (byte) 0x03, (byte) 0x04};
+ private static final byte[] LZW_MAGIC = new byte[] {(byte) 0x1f, (byte) 0x9d};
+ private static final byte[] LZH_MAGIC = new byte[] {(byte) 0x1f, (byte) 0xa0};
+ private static final byte[] GZ_MAGIC = new byte[] {(byte) 0x1f, (byte) 0x8b, (byte) 0x08};
+ private static final byte[][] MAGICS = new byte[][] {ZIP_MAGIC, LZW_MAGIC, LZH_MAGIC, GZ_MAGIC};
+ private Map pointerMap;
+ ByteBuffer bufferedLines = ByteBuffer.allocate(BYTEBUFFER_CAPACITY);
+
+ public FileReader(int spoolSize) {
+ super(spoolSize);
+ }
+
+ public int readFiles(Collection fileList) throws AdapterException {
+ int eventCount = 0;
+ if(logger.isTraceEnabled()) {
+ logger.trace("Reading " + fileList.size() + " file(s)");
+ }
+ pointerMap = new HashMap(fileList.size(),1);
+ for(FileState state : fileList) {
+ eventCount += readFile(state, spoolSize - eventCount);
+ }
+ if(eventCount > 0) {
+ try {
+ adapter.sendEvents(eventList);
+ } catch(AdapterException e) {
+ eventList.clear(); // Be sure no events will be sent twice after reconnect
+ throw e;
+ }
+ }
+ for(FileState state : fileList) {
+ state.setPointer(pointerMap.get(state.getFile()));
+ }
+ eventList.clear();
+ return eventCount; // Return number of events sent to adapter
+ }
+
+ private int readFile(FileState state, int spaceLeftInSpool) {
+ File file = state.getFile();
+ long pointer = state.getPointer();
+ int numberOfEvents = 0;
+ try {
+ if(state.isDeleted() || state.getRandomAccessFile() == null) { // Don't try to read this file
+ if(logger.isTraceEnabled()) {
+ logger.trace("File : " + file + " has been deleted");
+ }
+ } else if(state.getRandomAccessFile().isEmpty()) {
+ if(logger.isTraceEnabled()) {
+ logger.trace("File : " + file + " is empty");
+ }
+ } else {
+ int eventListSizeBefore = eventList.size();
+ if(logger.isTraceEnabled()) {
+ logger.trace("File : " + file + " pointer : " + pointer);
+ logger.trace("Space left in spool : " + spaceLeftInSpool);
+ }
+ if(isCompressedFile(state)) {
+ pointer = file.length();
+ } else {
+ pointer = readLines(state, spaceLeftInSpool);
+ }
+ numberOfEvents = eventList.size() - eventListSizeBefore;
+ }
+ } catch(IOException e) {
+ logger.warn("Exception raised while reading file : " + state.getFile(), e);
+ }
+ pointerMap.put(file, pointer);
+ return numberOfEvents; // Return number of events read
+ }
+
+ private boolean isCompressedFile(FileState state) {
+ RandomAccessFile reader = state.getRandomAccessFile();
+
+ try {
+ for(byte[] magic : MAGICS) {
+ byte[] fileBytes = new byte[magic.length];
+ reader.seek(0);
+ int read = reader.read(fileBytes);
+ if (read != magic.length) {
+ continue;
+ }
+ if(Arrays.equals(magic, fileBytes)) {
+ logger.debug("Compressed file detected : " + state.getFile());
+ return true;
+ }
+ }
+ } catch(IOException e) {
+ logger.warn("Exception raised while reading file : " + state.getFile(), e);
+ }
+ return false;
+ }
+
+ private static byte[] extractBytes(ByteBuffer byteBuffer)
+ {
+ byte[] bytes = new byte[byteBuffer.position()];
+ byteBuffer.rewind();
+ byteBuffer.get(bytes);
+ byteBuffer.clear();
+ return bytes;
+ }
+
+ private static void copyLineToBuffer(byte[] line, ByteBuffer byteBuffer) {
+ if(line.length <= byteBuffer.remaining()) {
+ byteBuffer.put(line);
+ } else {
+ byteBuffer.put(line, 0, byteBuffer.remaining());
+ }
+ }
+
+ private long readLines(FileState state, int spaceLeftInSpool) {
+ RandomAccessFile reader = state.getRandomAccessFile();
+ long pos = state.getPointer();
+ Multiline multiline = state.getMultiline();
+ try {
+ reader.seek(pos);
+ byte[] line = readLine(reader);
+ bufferedLines.clear();
+
+ while (line != null && spaceLeftInSpool > 0) {
+ if(logger.isDebugEnabled()) {
+ logger.debug("-- Read line : " + new String(line));
+ logger.debug("-- Space left in spool : " + spaceLeftInSpool);
+ }
+ long prevPos = pos;
+ pos = reader.getFilePointer();
+ if(multiline == null) {
+ addEvent(state, pos, line);
+ spaceLeftInSpool--;
+ }
+ else {
+ if(logger.isDebugEnabled()) {
+ logger.debug("-- Multiline : " + multiline + " matches " + multiline.isPatternFound(line));
+ }
+ if(multiline.isPatternFound(line)) {
+ // buffer the line
+ if(bufferedLines.position() > 0 && bufferedLines.hasRemaining()) {
+ bufferedLines.put(Multiline.JOINT);
+ }
+ copyLineToBuffer(line, bufferedLines);
+ }
+ else {
+ if(multiline.isPrevious()) {
+ // did not match, so new event started
+ if (bufferedLines.position() > 0) {
+ addEvent(state, prevPos, extractBytes(bufferedLines));
+ spaceLeftInSpool--;
+ }
+ if (spaceLeftInSpool > 0)
+ copyLineToBuffer(line, bufferedLines);
+ else
+ pos = prevPos;
+ }
+ else {
+ // did not match, add the current line
+ if(bufferedLines.position() > 0) {
+ if(bufferedLines.hasRemaining()) {
+ bufferedLines.put(Multiline.JOINT);
+ }
+ copyLineToBuffer(line, bufferedLines);
+ addEvent(state, pos, extractBytes(bufferedLines));
+ }
+ else {
+ addEvent(state, pos, line);
+ }
+ spaceLeftInSpool--;
+ }
+ }
+ }
+ line = readLine(reader);
+ }
+ if(bufferedLines.position() > 0) {
+ addEvent(state, pos, extractBytes(bufferedLines)); // send any buffered lines left
+ }
+ reader.seek(pos); // Ensure we can re-read if necessary
+ } catch(IOException e) {
+ logger.warn("Exception raised while reading file : " + state.getFile(), e);
+ }
+ return pos;
+ }
+
+ private byte[] readLine(RandomAccessFile reader) throws IOException {
+ byteBuffer.clear();
+ int ch;
+ boolean seenCR = false;
+ while((ch=reader.read()) != -1) {
+ switch(ch) {
+ case '\n':
+ return extractBytes(byteBuffer);
+ case '\r':
+ seenCR = true;
+ break;
+ default:
+ if (seenCR) {
+ if(byteBuffer.hasRemaining()) {
+ byteBuffer.put((byte) '\r');
+ }
+ seenCR = false;
+ }
+ if(byteBuffer.hasRemaining()) {
+ byteBuffer.put((byte)ch);
+ }
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/test/java/info/fetter/logstashforwarder/FileReaderTest.java b/src/test/java/info/fetter/logstashforwarder/FileReaderTest.java
index ca9b97a..f932ba6 100644
--- a/src/test/java/info/fetter/logstashforwarder/FileReaderTest.java
+++ b/src/test/java/info/fetter/logstashforwarder/FileReaderTest.java
@@ -1,99 +1,205 @@
-package info.fetter.logstashforwarder;
-
-/*
- * Copyright 2015 Didier Fetter
- *
- * Licensed 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.
- *
- */
-
-import static org.apache.log4j.Level.*;
-import info.fetter.logstashforwarder.util.AdapterException;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.log4j.BasicConfigurator;
-import org.apache.log4j.Logger;
-import org.apache.log4j.spi.RootLogger;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class FileReaderTest {
- Logger logger = Logger.getLogger(FileReaderTest.class);
-
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- BasicConfigurator.configure();
- RootLogger.getRootLogger().setLevel(TRACE);
- }
-
- @AfterClass
- public static void tearDownAfterClass() throws Exception {
- BasicConfigurator.resetConfiguration();
- }
-
- @Test
- public void testFileReader1() throws IOException, InterruptedException, AdapterException {
- FileReader reader = new FileReader(2);
- reader.setAdapter(new MockProtocolAdapter());
- List fileList = new ArrayList(1);
- File file1 = new File("testFileReader1.txt");
- FileUtils.write(file1, "testFileReader1 line1\n");
- FileUtils.write(file1, " nl line12\n", true);
- FileUtils.write(file1, "testFileReader1 line2\n", true);
- FileUtils.write(file1, "testFileReader1 line3\n", true);
- Thread.sleep(500);
- FileState state = new FileState(file1);
- fileList.add(state);
- state.setFields(new Event().addField("testFileReader1", "testFileReader1"));
- Map m = new HashMap();
- m.put("pattern", " nl");
- m.put("negate", "false");
- state.setMultiline(new Multiline(m));
- reader.readFiles(fileList);
- reader.readFiles(fileList);
- reader.readFiles(fileList);
- //FileUtils.forceDelete(file1);
- }
-
- @Test
- public void testFileReader2() throws IOException, InterruptedException, AdapterException {
- FileReader reader = new FileReader(2);
- reader.setAdapter(new MockProtocolAdapter());
- List fileList = new ArrayList(1);
- File file1 = new File("testFileReader1.txt");
- FileUtils.write(file1, "testFileReader1 line1\n");
- FileUtils.write(file1, " nl line12\n", true);
- FileUtils.write(file1, "testFileReader1 line2\n", true);
- FileUtils.write(file1, "testFileReader1 line3\n", true);
- Thread.sleep(500);
- FileState state = new FileState(file1);
- fileList.add(state);
- state.setFields(new Event().addField("testFileReader1", "testFileReader1"));
- Map m = new HashMap();
- m.put("pattern", "testFileReader1");
- m.put("negate", "true");
- state.setMultiline(new Multiline(m));
- reader.readFiles(fileList);
- reader.readFiles(fileList);
- reader.readFiles(fileList);
- //FileUtils.forceDelete(file1);
- }
-}
+package info.fetter.logstashforwarder;
+
+/*
+ * Copyright 2015 Didier Fetter
+ *
+ * Licensed 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.
+ *
+ */
+
+import static junit.framework.TestCase.assertEquals;
+import static org.apache.log4j.Level.*;
+import info.fetter.logstashforwarder.util.AdapterException;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.log4j.BasicConfigurator;
+import org.apache.log4j.Logger;
+import org.apache.log4j.spi.RootLogger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class FileReaderTest {
+ Logger logger = Logger.getLogger(FileReaderTest.class);
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ BasicConfigurator.configure();
+ RootLogger.getRootLogger().setLevel(TRACE);
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() throws Exception {
+ BasicConfigurator.resetConfiguration();
+ }
+
+ @Test
+ public void testFileReader1() throws IOException, InterruptedException, AdapterException {
+ FileReader reader = new FileReader(2);
+ reader.setAdapter(new MockProtocolAdapter());
+ List fileList = new ArrayList(1);
+ File file1 = new File("testFileReader1.txt");
+ FileUtils.write(file1, "testFileReader1 line1\n");
+ FileUtils.write(file1, " nl line12\n", true);
+ FileUtils.write(file1, " nl line13\n", true);
+ FileUtils.write(file1, "testFileReader1 line2\n", true);
+ FileUtils.write(file1, "testFileReader1 line3\n", true);
+ Thread.sleep(500);
+ FileState state = new FileState(file1);
+ fileList.add(state);
+ state.setFields(new Event().addField("testFileReader1", "testFileReader1"));
+ Map m = new HashMap();
+ m.put("pattern", " nl");
+ m.put("negate", "false");
+ state.setMultiline(new Multiline(m));
+ assertEquals(2, reader.readFiles(fileList));
+ assertEquals(1, reader.readFiles(fileList));
+ assertEquals(0, reader.readFiles(fileList));
+ FileUtils.forceDelete(file1);
+ }
+
+ @Test
+ public void testFileReader2() throws IOException, InterruptedException, AdapterException {
+ FileReader reader = new FileReader(2);
+ reader.setAdapter(new MockProtocolAdapter());
+ List fileList = new ArrayList(1);
+ File file1 = new File("testFileReader1.txt");
+ FileUtils.write(file1, "testFileReader1 line1\n");
+ FileUtils.write(file1, " nl line12\n", true);
+ FileUtils.write(file1, " nl line13\n", true);
+ FileUtils.write(file1, "testFileReader1 line2\n", true);
+ FileUtils.write(file1, "testFileReader1 line3\n", true);
+ Thread.sleep(500);
+ FileState state = new FileState(file1);
+ fileList.add(state);
+ state.setFields(new Event().addField("testFileReader1", "testFileReader1"));
+ Map m = new HashMap();
+ m.put("pattern", "testFileReader1");
+ m.put("negate", "true");
+ state.setMultiline(new Multiline(m));
+ assertEquals(2, reader.readFiles(fileList));
+ assertEquals(1, reader.readFiles(fileList));
+ assertEquals(0, reader.readFiles(fileList));
+ FileUtils.forceDelete(file1);
+ }
+
+ @Test
+ public void testFileReader3() throws IOException, InterruptedException, AdapterException {
+ FileReader reader = new FileReader(2);
+ reader.setAdapter(new MockProtocolAdapter());
+ List fileList = new ArrayList(1);
+ File file1 = new File("testFileReader1.txt");
+ FileUtils.write(file1, "1234 line1\n");
+ FileUtils.write(file1, " nl line12\n", true);
+ FileUtils.write(file1, " nl line13\n", true);
+ FileUtils.write(file1, "2345 line2\n", true);
+ FileUtils.write(file1, "5524 line3\n", true);
+ FileUtils.write(file1, "7478 line4\n", true);
+ FileUtils.write(file1, " nl line42\n", true);
+ FileUtils.write(file1, "8234 line5\n", true);
+ FileUtils.write(file1, " nl line52\n", true);
+ Thread.sleep(500);
+ FileState state = new FileState(file1);
+ fileList.add(state);
+ state.setFields(new Event().addField("testFileReader1", "testFileReader1"));
+ Map m = new HashMap();
+ m.put("pattern", "^[0-9]{4}");
+ m.put("negate", "true");
+ state.setMultiline(new Multiline(m));
+ assertEquals(2, reader.readFiles(fileList));
+ assertEquals(2, reader.readFiles(fileList));
+ assertEquals(1, reader.readFiles(fileList));
+ assertEquals(0, reader.readFiles(fileList));
+ FileUtils.forceDelete(file1);
+ }
+
+ @Test
+ public void testFileReader4() throws IOException, InterruptedException, AdapterException {
+ FileReader reader = new FileReader(2);
+ reader.setAdapter(new MockProtocolAdapter());
+ List fileList = new ArrayList(1);
+ File file1 = new File("testFileReader1.txt");
+ FileUtils.write(file1, "1234 line1\n");
+ FileUtils.write(file1, " nl line12\n", true);
+ FileUtils.write(file1, "8234 line5\n", true);
+ FileUtils.write(file1, " nl line52\n", true);
+ Thread.sleep(500);
+ FileState state = new FileState(file1);
+ fileList.add(state);
+ state.setFields(new Event().addField("testFileReader1", "testFileReader1"));
+ Map m = new HashMap();
+ m.put("pattern", "^[0-9]{4}");
+ m.put("negate", "true");
+ state.setMultiline(new Multiline(m));
+ assertEquals(2, reader.readFiles(fileList));
+ assertEquals(0, reader.readFiles(fileList));
+ FileUtils.forceDelete(file1);
+ }
+
+ @Test
+ public void testFileReader5() throws IOException, InterruptedException, AdapterException {
+ FileReader reader = new FileReader(2);
+ reader.setAdapter(new MockProtocolAdapter());
+ List fileList = new ArrayList(1);
+ File file1 = new File("testFileReader1.txt");
+ FileUtils.write(file1, "testFileReader1 line1\n");
+ FileUtils.write(file1, "testFileReader1 line2\n", true);
+ FileUtils.write(file1, "testFileReader1 line3\n", true);
+ Thread.sleep(500);
+ FileState state = new FileState(file1);
+ fileList.add(state);
+ state.setFields(new Event().addField("testFileReader1", "testFileReader1"));
+ assertEquals(2, reader.readFiles(fileList));
+ assertEquals(1, reader.readFiles(fileList));
+ assertEquals(0, reader.readFiles(fileList));
+ FileUtils.forceDelete(file1);
+ }
+
+ @Test
+ public void testFileReader6() throws IOException, InterruptedException, AdapterException {
+ FileReader reader = new FileReader(100);
+ reader.setAdapter(new MockProtocolAdapter());
+ List fileList = new ArrayList(1);
+ File file1 = new File("testFileReader6.txt");
+ FileUtils.write(file1, "0000 line1\n");
+ for (int i=0; i<700; i+=7) {
+ FileUtils.write(file1, String.format("%04d line\n", i), true);
+ FileUtils.write(file1, String.format(" nl line%04d\n", i+1), true);
+ FileUtils.write(file1, String.format("%04d line\n", i+2), true);
+ FileUtils.write(file1, String.format("%04d line\n", i+3), true);
+ FileUtils.write(file1, String.format("%04d line\n", i+4), true);
+ FileUtils.write(file1, String.format(" nl line%04d\n", i+5), true);
+ FileUtils.write(file1, String.format(" nl line%04d\n", i+6), true);
+ }
+ Thread.sleep(500);
+ FileState state = new FileState(file1);
+ fileList.add(state);
+ state.setFields(new Event().addField("testFileReader6", "testFileReader6"));
+ Map m = new HashMap();
+ m.put("pattern", "^[0-9]{4}");
+ m.put("negate", "true");
+ state.setMultiline(new Multiline(m));
+ for (int i=0; i<4; i++)
+ assertEquals(100, reader.readFiles(fileList));
+ assertEquals(1, reader.readFiles(fileList));
+ assertEquals(0, reader.readFiles(fileList));
+ FileUtils.forceDelete(file1);
+ }
+}