/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 1999-2015, QOS.ch. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ package ch.qos.logback.core.net; import java.io.IOException; import java.io.ObjectOutputStream; import org.junit.Before; import org.junit.Test; import org.mockito.InOrder; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; /** * Unit tests for {@link ch.qos.logback.core.net.AutoFlushingObjectWriter}. * * @author Sebastian Gröbler */ public class AutoFlushingObjectWriterTest { private InstrumentedObjectOutputStream objectOutputStream; @Before public void beforeEachTest() throws IOException { objectOutputStream = spy(new InstrumentedObjectOutputStream()); } @Test public void writesToUnderlyingObjectOutputStream() throws IOException { // given ObjectWriter objectWriter = new AutoFlushingObjectWriter(objectOutputStream, 2); String object = "foo"; // when objectWriter.write(object); // then verify(objectOutputStream).writeObjectOverride(object); } @Test public void flushesAfterWrite() throws IOException { // given ObjectWriter objectWriter = new AutoFlushingObjectWriter(objectOutputStream, 2); String object = "foo"; // when objectWriter.write(object); // then InOrder inOrder = inOrder(objectOutputStream); inOrder.verify(objectOutputStream).writeObjectOverride(object); inOrder.verify(objectOutputStream).flush(); } @Test public void resetsObjectOutputStreamAccordingToGivenResetFrequency() throws IOException { // given ObjectWriter objectWriter = new AutoFlushingObjectWriter(objectOutputStream, 2); String object = "foo"; // when objectWriter.write(object); objectWriter.write(object); objectWriter.write(object); objectWriter.write(object); // then InOrder inOrder = inOrder(objectOutputStream); inOrder.verify(objectOutputStream).writeObjectOverride(object); inOrder.verify(objectOutputStream).writeObjectOverride(object); inOrder.verify(objectOutputStream).reset(); inOrder.verify(objectOutputStream).writeObjectOverride(object); inOrder.verify(objectOutputStream).writeObjectOverride(object); inOrder.verify(objectOutputStream).reset(); } private static class InstrumentedObjectOutputStream extends ObjectOutputStream { protected InstrumentedObjectOutputStream() throws IOException, SecurityException { } @Override protected void writeObjectOverride(final Object obj) throws IOException { // nop } @Override public void flush() throws IOException { // nop } @Override public void reset() throws IOException { // nop } } }