View Javadoc

1   // Copyright (C) 2012 Philip Aston
2   // All rights reserved.
3   //
4   // This file is part of The Grinder software distribution. Refer to
5   // the file LICENSE which is part of The Grinder distribution for
6   // licensing details. The Grinder distribution is available on the
7   // Internet at http://grinder.sourceforge.net/
8   //
9   // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
10  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
11  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
12  // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
13  // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
14  // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
15  // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
16  // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
17  // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
18  // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
19  // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
20  // OF THE POSSIBILITY OF SUCH DAMAGE.
21  
22  package net.grinder.util.logback;
23  
24  import static org.junit.Assert.assertEquals;
25  import static org.junit.Assert.assertTrue;
26  import static org.mockito.Matchers.isA;
27  import static org.mockito.Mockito.doThrow;
28  import static org.mockito.Mockito.mock;
29  import static org.mockito.Mockito.verify;
30  import static org.mockito.Mockito.when;
31  
32  import java.io.ByteArrayOutputStream;
33  import java.io.IOException;
34  import java.io.OutputStream;
35  
36  import org.junit.Before;
37  import org.junit.Test;
38  import org.mockito.Mock;
39  import org.mockito.MockitoAnnotations;
40  
41  import ch.qos.logback.classic.spi.ILoggingEvent;
42  import ch.qos.logback.core.Context;
43  import ch.qos.logback.core.CoreConstants;
44  import ch.qos.logback.core.status.ErrorStatus;
45  import ch.qos.logback.core.status.StatusManager;
46  
47  
48  /**
49   * Unit tests for {@link BufferedEchoMessageEncoder}.
50   *
51   * @author Philip Aston
52   */
53  public class TestBufferedEchoMessageEncoder {
54    private final BufferedEchoMessageEncoder m_encoder =
55      new BufferedEchoMessageEncoder();
56  
57    @Mock private ILoggingEvent m_event;
58  
59    @Before public void setUp() {
60      MockitoAnnotations.initMocks(this);
61    }
62  
63    @Test public void testBufferSize() {
64  
65      assertTrue(m_encoder.getBufferSize() > 0);
66  
67      m_encoder.setBufferSize(1234);
68      assertEquals(1234, m_encoder.getBufferSize());
69    }
70  
71    @Test(expected=IllegalStateException.class)
72    public void testCantSetBuferSizeAfterInitialised() throws Exception {
73      m_encoder.init(null);
74  
75      m_encoder.setBufferSize(256);
76    }
77  
78    @Test public void testDoEncode() throws Exception {
79      final ByteArrayOutputStream baos = new ByteArrayOutputStream();
80  
81      m_encoder.init(baos);
82      m_encoder.start();
83  
84      when(m_event.getMessage()).thenReturn("hello");
85      m_encoder.doEncode(m_event);
86      when(m_event.getMessage()).thenReturn("world");
87      m_encoder.doEncode(m_event);
88      m_encoder.close();
89  
90      assertEquals("hello" + CoreConstants.LINE_SEPARATOR +
91                   "world" + CoreConstants.LINE_SEPARATOR, baos.toString());
92    }
93  
94    @Test public void testBadClose() throws Exception {
95      final Context context = mock(Context.class);
96      final StatusManager statusManager = mock(StatusManager.class);
97  
98      when(context.getStatusManager()).thenReturn(statusManager);
99  
100     final OutputStream os = mock(OutputStream.class);
101 
102     doThrow(new IOException()).when(os).flush();
103 
104     m_encoder.setContext(context);
105     m_encoder.init(os);
106     m_encoder.start();
107     m_encoder.close();
108 
109     verify(statusManager).add(isA(ErrorStatus.class));
110   }
111 
112 }