View Javadoc

1   package com.atlassian.johnson.filters;
2   
3   import com.atlassian.johnson.JohnsonEventContainer;
4   import com.atlassian.johnson.event.Event;
5   import com.atlassian.johnson.event.EventLevel;
6   import com.atlassian.johnson.event.EventType;
7   import com.google.common.collect.Lists;
8   import org.junit.Test;
9   import org.junit.runner.RunWith;
10  import org.mockito.Mock;
11  import org.mockito.runners.MockitoJUnitRunner;
12  
13  import javax.servlet.http.HttpServletResponse;
14  import java.io.IOException;
15  import java.io.PrintWriter;
16  
17  import static org.mockito.Mockito.eq;
18  import static org.mockito.Mockito.verify;
19  import static org.mockito.Mockito.when;
20  
21  @RunWith(MockitoJUnitRunner.class)
22  public class Johnson503FilterTest {
23  
24      private static final EventType DEFAULT_EVENT_TYPE = new EventType("event-type", "event-type-desc");
25  
26      @Mock
27      private JohnsonEventContainer eventContainer;
28      @Mock
29      private HttpServletResponse response;
30      @Mock
31      private PrintWriter writer;
32  
33      @Test
34      public void testHandleErrorWithNullContainer() throws IOException {
35          when(response.getWriter()).thenReturn(writer);
36  
37          new Johnson503Filter().handleError(null, null, response);
38  
39          verify(response).setStatus(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE));
40          verify(response).getWriter();
41          verify(writer).flush();
42      }
43  
44      @Test
45      public void testHandleErrorWithEmptyContainer() throws IOException {
46          when(response.getWriter()).thenReturn(writer);
47  
48          new Johnson503Filter().handleError(eventContainer, null, response);
49  
50          verify(eventContainer).hasEvents();
51          verify(response).setStatus(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE));
52          verify(response).getWriter();
53          verify(writer).flush();
54      }
55  
56      @Test
57      public void testHandleErrorWithWarningOnly() throws IOException {
58          when(eventContainer.hasEvents()).thenReturn(Boolean.TRUE);
59          when(eventContainer.getEvents()).thenReturn(Lists.newArrayList(createEvent(EventLevel.WARNING)));
60          when(response.getWriter()).thenReturn(writer);
61  
62          new Johnson503Filter().handleError(eventContainer, null, response);
63  
64          verify(eventContainer).hasEvents();
65          verify(response).setStatus(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE));
66          verify(response).setHeader(eq("Retry-After"), eq("30"));
67          verify(writer).flush();
68      }
69  
70      @Test
71      public void testHandleErrorWithErrorOnly() throws IOException {
72          when(eventContainer.hasEvents()).thenReturn(Boolean.TRUE);
73          when(eventContainer.getEvents()).thenReturn(Lists.newArrayList(createEvent(EventLevel.ERROR)));
74          when(response.getWriter()).thenReturn(writer);
75  
76          new Johnson503Filter().handleError(eventContainer, null, response);
77  
78          verify(eventContainer).hasEvents();
79          verify(response).setStatus(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE));
80          verify(writer).flush();
81      }
82  
83      @Test
84      public void testHandleErrorWithCustomLevel() throws IOException {
85          when(eventContainer.hasEvents()).thenReturn(Boolean.TRUE);
86          when(eventContainer.getEvents()).thenReturn(Lists.newArrayList(createEvent("my-level")));
87          when(response.getWriter()).thenReturn(writer);
88  
89          new Johnson503Filter().handleError(eventContainer, null, response);
90  
91          verify(eventContainer).hasEvents();
92          verify(response).setStatus(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE));
93          verify(writer).flush();
94      }
95  
96      @Test
97      public void testHandleErrorWithErrorAndWarningOnly() throws IOException {
98          when(eventContainer.hasEvents()).thenReturn(Boolean.TRUE);
99          when(eventContainer.getEvents()).thenReturn(Lists.newArrayList(createEvent(EventLevel.ERROR), createEvent(EventLevel.WARNING)));
100         when(response.getWriter()).thenReturn(writer);
101 
102         new Johnson503Filter().handleError(eventContainer, null, response);
103 
104         verify(response).setStatus(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE));
105         verify(writer).flush();
106     }
107 
108     @Test
109     public void testHandleNotSetup() throws IOException {
110         when(response.getWriter()).thenReturn(writer);
111 
112         new Johnson503Filter().handleNotSetup(null, response);
113 
114         verify(response).setStatus(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE));
115         verify(writer).flush();
116     }
117 
118     private Event createEvent(String eventLevel) {
119         return new Event(DEFAULT_EVENT_TYPE, "event-desc", createEventLevel(eventLevel));
120     }
121 
122     private EventLevel createEventLevel(String eventLevel) {
123         return new EventLevel(eventLevel, "event-level-desc");
124     }
125 }