Kaynağa Gözat

Improved InputReader testing.

didfet 10 yıl önce
ebeveyn
işleme
1db93560b3

+ 4 - 0
src/main/java/info/fetter/logstashforwarder/Event.java

@@ -56,4 +56,8 @@ public class Event {
 	public Map<String,byte[]> getKeyValues() {
 		return keyValues;
 	}
+	
+	public byte[] getValue(String fieldName) {
+		return keyValues.get(fieldName);
+	}
 }

+ 0 - 1
src/main/java/info/fetter/logstashforwarder/FileReader.java

@@ -25,7 +25,6 @@ import java.io.RandomAccessFile;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import org.apache.log4j.Logger;

+ 50 - 16
src/test/java/info/fetter/logstashforwarder/InputReaderTest.java

@@ -20,21 +20,17 @@ package info.fetter.logstashforwarder;
 import static org.apache.log4j.Level.*;
 import info.fetter.logstashforwarder.util.AdapterException;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
 import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-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;
+import static org.junit.Assert.*;
 
 public class InputReaderTest {
 	Logger logger = Logger.getLogger(InputReaderTest.class);
@@ -52,39 +48,77 @@ public class InputReaderTest {
 
 	@Test
 	public void testInputReader1() throws IOException, InterruptedException, AdapterException {
+		int numberOfEvents = 0;
 		PipedInputStream in = new PipedInputStream();
 		PipedOutputStream out = new PipedOutputStream(in);
 		PrintWriter writer = new PrintWriter(out);
 		InputReader reader = new InputReader(2, in, null);
-		reader.setAdapter(new MockProtocolAdapter());
+		MockProtocolAdapter adapter = new MockProtocolAdapter();
+		reader.setAdapter(adapter);
 
-		reader.readInput();
+		numberOfEvents = reader.readInput();
+		assertEquals(0, numberOfEvents);
 
 		writer.println("line1");
 		writer.flush();
-		reader.readInput();
+		numberOfEvents = reader.readInput();
+		assertEquals(1, numberOfEvents);
+		assertArrayEquals("line1".getBytes(), adapter.getLastEvents().get(0).getValue("line"));
 
 		writer.print("line2");
 		writer.flush();
-		reader.readInput();
+		numberOfEvents = reader.readInput();
+		assertEquals(0, numberOfEvents);
 
 		writer.println();
 		writer.flush();
-		reader.readInput();
+		numberOfEvents = reader.readInput();
+		assertEquals(1, numberOfEvents);
+		assertArrayEquals("line2".getBytes(), adapter.getLastEvents().get(0).getValue("line"));
 
 		writer.println("line3");
 		writer.println("line4");
 		writer.println("line5");
 		writer.flush();
-		reader.readInput();
+		numberOfEvents = reader.readInput();
+		assertEquals(2, numberOfEvents);
+		assertArrayEquals("line3".getBytes(), adapter.getLastEvents().get(0).getValue("line"));
+		assertArrayEquals("line4".getBytes(), adapter.getLastEvents().get(1).getValue("line"));
+
+		numberOfEvents = reader.readInput();
+		assertEquals(1, numberOfEvents);
+		assertArrayEquals("line5".getBytes(), adapter.getLastEvents().get(0).getValue("line"));
+		
+		numberOfEvents = reader.readInput();
+		assertEquals(0, numberOfEvents);
+
+		assertEquals(0, in.available());
 
-		reader.readInput();
-		reader.readInput();
+		writer.close();
+	}
+	
+	@Test
+	public void testInputReaderCloseStream() throws AdapterException, IOException {
+		int numberOfEvents = 0;
+		PipedInputStream in = new PipedInputStream();
+		PipedOutputStream out = new PipedOutputStream(in);
+		PrintWriter writer = new PrintWriter(out);
+		InputReader reader = new InputReader(2, in, null);
+		MockProtocolAdapter adapter = new MockProtocolAdapter();
+		reader.setAdapter(adapter);
 
-		while(in.available() > 0) {
-			logger.trace("read : " + in.read());
-		}
+		numberOfEvents = reader.readInput();
+		assertEquals(0, numberOfEvents);
 
+		writer.println("line1");
+		writer.flush();
+		numberOfEvents = reader.readInput();
+		assertEquals(1, numberOfEvents);
+		assertArrayEquals("line1".getBytes(), adapter.getLastEvents().get(0).getValue("line"));
+		
 		writer.close();
+		in.close();
+		
+		numberOfEvents = reader.readInput();
 	}
 }

+ 7 - 0
src/test/java/info/fetter/logstashforwarder/MockProtocolAdapter.java

@@ -17,12 +17,14 @@ package info.fetter.logstashforwarder;
  *
  */
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.log4j.Logger;
 
 public class MockProtocolAdapter implements ProtocolAdapter {
 	private static Logger logger = Logger.getLogger(MockProtocolAdapter.class);
+	private List<Event> lastEvents;
 
 	public int sendEvents(List<Event> eventList) {
 		for(Event event : eventList) {
@@ -31,8 +33,13 @@ public class MockProtocolAdapter implements ProtocolAdapter {
 				logger.trace("-- " + key  + ":" + new String(event.getKeyValues().get(key)));
 			}
 		}
+		lastEvents = new ArrayList<Event>(eventList);
 		return eventList.size();
 	}
+	
+	public List<Event> getLastEvents() {
+		return lastEvents;
+	}
 
 	public void close() {
 		// not implemented