@Test public void testNormal01() throws Exception { // start mock fluentd int port = MockFluentd.randomPort(); String host = "localhost"; final List<Event> elist = new ArrayList<Event>(); MockFluentd fluentd = new MockFluentd( port, new MockFluentd.MockProcess() { public void process(MessagePack msgpack, Socket socket) throws IOException { BufferedInputStream in = new BufferedInputStream(socket.getInputStream()); try { Unpacker unpacker = msgpack.createUnpacker(in); while (true) { Event e = unpacker.read(Event.class); elist.add(e); } // socket.close(); } catch (EOFException e) { // ignore } } }); FixedThreadManager threadManager = new FixedThreadManager(1); threadManager.submit(fluentd); // start loggers FluentLogger logger = FluentLogger.getLogger("testtag", host, port); { Map<String, Object> data = new HashMap<String, Object>(); data.put("k1", "v1"); data.put("k2", "v2"); logger.log("test01", data); } { Map<String, Object> data = new HashMap<String, Object>(); data.put("k3", "v3"); data.put("k4", "v4"); logger.log("test01", data); } // close loggers logger.close(); Thread.sleep(2000); // close mock fluentd fluentd.close(); // wait for unpacking event data on fluentd threadManager.join(); // check data assertEquals(2, elist.size()); assertEquals("testtag.test01", elist.get(0).tag); assertEquals("testtag.test01", elist.get(1).tag); }
@Test public void testReconnection() throws Exception { // start mock fluentd int port = MockFluentd.randomPort(); String host = "localhost"; final List<Event> elist1 = new ArrayList<Event>(); FixedThreadManager threadManager = new FixedThreadManager(2); MockFluentd fluentd1 = new MockFluentd( port, new MockFluentd.MockProcess() { public void process(MessagePack msgpack, Socket socket) throws IOException { BufferedInputStream in = new BufferedInputStream(socket.getInputStream()); try { Unpacker unpacker = msgpack.createUnpacker(in); while (true) { Event e = unpacker.read(Event.class); elist1.add(e); if (elist1.size() >= 1) break; } socket.close(); } catch (EOFException e) { // ignore } } }); threadManager.submit(fluentd1); // start loggers FluentLogger logger = FluentLogger.getLogger("testtag", host, port); { Map<String, Object> data = new HashMap<String, Object>(); data.put("k1", "v1"); data.put("k2", "v2"); logger.log("test01", data); } TimeUnit.MILLISECONDS.sleep(500); _logger.info("Closing the current fluentd instance"); fluentd1.closeClientSockets(); fluentd1.close(); TimeUnit.MILLISECONDS.sleep(500); { Map<String, Object> data = new HashMap<String, Object>(); data.put("k3", "v3"); data.put("k4", "v4"); logger.log("test01", data); } final List<Event> elist2 = new ArrayList<Event>(); MockFluentd fluentd2 = new MockFluentd( port, new MockFluentd.MockProcess() { public void process(MessagePack msgpack, Socket socket) throws IOException { BufferedInputStream in = new BufferedInputStream(socket.getInputStream()); try { Unpacker unpacker = msgpack.createUnpacker(in); while (true) { Event e = unpacker.read(Event.class); elist2.add(e); } // socket.close(); } catch (EOFException e) { // ignore } } }); threadManager.submit(fluentd2); TimeUnit.MILLISECONDS.sleep(500); { Map<String, Object> data = new HashMap<String, Object>(); data.put("k5", "v5"); data.put("k6", "v6"); logger.log("test01", data); } // close loggers FluentLogger.closeAll(); Thread.sleep(2000); fluentd2.close(); // wait for unpacking event data on fluentd TimeUnit.MILLISECONDS.sleep(2000); threadManager.join(); // check data assertEquals(1, elist1.size()); assertEquals("testtag.test01", elist1.get(0).tag); assertEquals(2, elist2.size()); assertEquals("testtag.test01", elist2.get(0).tag); assertEquals("testtag.test01", elist2.get(1).tag); }