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 junit.framework.TestCase;
8   import org.easymock.MockControl;
9   
10  import javax.servlet.http.HttpServletResponse;
11  import java.io.ByteArrayOutputStream;
12  import java.io.IOException;
13  import java.io.PrintWriter;
14  import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicBoolean;
15  
16  /**
17   *
18   */
19  public class TestJohnson503Filter extends TestCase
20  {
21  
22      private static final EventType DEFAULT_EVENT_TYPE = new EventType("event-type", "event-type-desc");
23  
24      public void testHandleErrorWithNullContainer() throws IOException
25      {
26          Johnson503Filter johnson503Filter = new Johnson503Filter();
27          final AtomicBoolean flushCalled = new AtomicBoolean(false);
28          PrintWriter writer = new PrintWriter(new ByteArrayOutputStream())
29          {
30              public void flush()
31              {
32                  flushCalled.set(true);
33              }
34          };
35          MockControl responseMockCtrl = MockControl.createStrictControl(HttpServletResponse.class);
36  
37          HttpServletResponse response = (HttpServletResponse) responseMockCtrl.getMock();
38          response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
39          responseMockCtrl.setVoidCallable();
40          response.getWriter();
41          responseMockCtrl.setReturnValue(writer);
42          responseMockCtrl.replay();
43  
44          johnson503Filter.handleError(null, null, response);
45          responseMockCtrl.verify();
46          assertTrue(flushCalled.get());
47      }
48  
49      public void testHandleErrorWithEmptyContainer() throws IOException
50      {
51          Johnson503Filter johnson503Filter = new Johnson503Filter();
52          final AtomicBoolean flushCalled = new AtomicBoolean(false);
53          PrintWriter writer = new PrintWriter(new ByteArrayOutputStream())
54          {
55              public void flush()
56              {
57                  flushCalled.set(true);
58              }
59          };
60          MockControl responseMockCtrl = MockControl.createStrictControl(HttpServletResponse.class);
61  
62          HttpServletResponse response = (HttpServletResponse) responseMockCtrl.getMock();
63          response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
64          responseMockCtrl.setVoidCallable();
65          response.getWriter();
66          responseMockCtrl.setReturnValue(writer);
67          responseMockCtrl.replay();
68  
69          johnson503Filter.handleError(createContainer(), null, response);
70          responseMockCtrl.verify();
71          assertTrue(flushCalled.get());
72      }
73  
74      public void testHandleErrorWithWarningOnly() throws IOException
75      {
76          Johnson503Filter johnson503Filter = new Johnson503Filter();
77          final AtomicBoolean flushCalled = new AtomicBoolean(false);
78          PrintWriter writer = new PrintWriter(new ByteArrayOutputStream())
79          {
80              public void flush()
81              {
82                  flushCalled.set(true);
83              }
84          };
85          MockControl responseMockCtrl = MockControl.createStrictControl(HttpServletResponse.class);
86  
87          HttpServletResponse response = (HttpServletResponse) responseMockCtrl.getMock();
88          response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
89          responseMockCtrl.setVoidCallable();
90          response.setHeader("Retry-After", "30");
91          responseMockCtrl.setVoidCallable();
92          response.getWriter();
93          responseMockCtrl.setReturnValue(writer);
94          responseMockCtrl.replay();
95  
96          johnson503Filter.handleError(createContainer(EventLevel.WARNING), null, response);
97          responseMockCtrl.verify();
98          assertTrue(flushCalled.get());
99      }
100 
101     public void testHandleErrorWithErrorOnly() throws IOException
102     {
103         Johnson503Filter johnson503Filter = new Johnson503Filter();
104         final AtomicBoolean flushCalled = new AtomicBoolean(false);
105         PrintWriter writer = new PrintWriter(new ByteArrayOutputStream())
106         {
107             public void flush()
108             {
109                 flushCalled.set(true);
110             }
111         };
112         MockControl responseMockCtrl = MockControl.createStrictControl(HttpServletResponse.class);
113 
114         HttpServletResponse response = (HttpServletResponse) responseMockCtrl.getMock();
115         response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
116         responseMockCtrl.setVoidCallable();
117         response.getWriter();
118         responseMockCtrl.setReturnValue(writer);
119         responseMockCtrl.replay();
120 
121         johnson503Filter.handleError(createContainer(EventLevel.ERROR), null, response);
122         responseMockCtrl.verify();
123         assertTrue(flushCalled.get());
124     }
125     public void testHandleErrorWithCustomLevel() throws IOException
126     {
127         Johnson503Filter johnson503Filter = new Johnson503Filter();
128         final AtomicBoolean flushCalled = new AtomicBoolean(false);
129         PrintWriter writer = new PrintWriter(new ByteArrayOutputStream())
130         {
131             public void flush()
132             {
133                 flushCalled.set(true);
134             }
135         };
136         MockControl responseMockCtrl = MockControl.createStrictControl(HttpServletResponse.class);
137 
138         HttpServletResponse response = (HttpServletResponse) responseMockCtrl.getMock();
139         response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
140         responseMockCtrl.setVoidCallable();
141         response.getWriter();
142         responseMockCtrl.setReturnValue(writer);
143         responseMockCtrl.replay();
144 
145         johnson503Filter.handleError(createContainer("my-level"), null, response);
146         responseMockCtrl.verify();
147         assertTrue(flushCalled.get());
148     }
149 
150     public void testHandleErrorWithErrorAndWarningOnly() throws IOException
151     {
152         Johnson503Filter johnson503Filter = new Johnson503Filter();
153         final AtomicBoolean flushCalled = new AtomicBoolean(false);
154         PrintWriter writer = new PrintWriter(new ByteArrayOutputStream())
155         {
156             public void flush()
157             {
158                 flushCalled.set(true);
159             }
160         };
161         MockControl responseMockCtrl = MockControl.createStrictControl(HttpServletResponse.class);
162 
163         HttpServletResponse response = (HttpServletResponse) responseMockCtrl.getMock();
164         response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
165         responseMockCtrl.setVoidCallable();
166         response.getWriter();
167         responseMockCtrl.setReturnValue(writer);
168         responseMockCtrl.replay();
169 
170         johnson503Filter.handleError(createContainer(EventLevel.ERROR, EventLevel.WARNING), null, response);
171         responseMockCtrl.verify();
172         assertTrue(flushCalled.get());
173     }
174 
175     public void testHandleNotSetup() throws IOException
176     {
177         Johnson503Filter johnson503Filter = new Johnson503Filter();
178         final AtomicBoolean flushCalled = new AtomicBoolean(false);
179         PrintWriter writer = new PrintWriter(new ByteArrayOutputStream())
180         {
181             public void flush()
182             {
183                 flushCalled.set(true);
184             }
185         };
186         MockControl responseMockCtrl = MockControl.createStrictControl(HttpServletResponse.class);
187 
188         HttpServletResponse response = (HttpServletResponse) responseMockCtrl.getMock();
189         response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
190         responseMockCtrl.setVoidCallable();
191         response.getWriter();
192         responseMockCtrl.setReturnValue(writer);
193         responseMockCtrl.replay();
194 
195         johnson503Filter.handleNotSetup(null, response);
196         responseMockCtrl.verify();
197         assertTrue(flushCalled.get());
198     }
199 
200     private JohnsonEventContainer createContainer(final String... eventLevels) {
201         final JohnsonEventContainer container = new JohnsonEventContainer();
202         for (String eventLevel : eventLevels) {
203             container.addEvent(createEvent(createEventLevel(eventLevel)));
204         }
205         return container;
206     }
207 
208     private Event createEvent(final EventLevel eventLevel) {
209         return new Event(DEFAULT_EVENT_TYPE,"event-desc", eventLevel);
210     }
211 
212     private EventLevel createEventLevel(final String eventLevel) {
213         return new EventLevel(eventLevel, "event-level-desc");
214     }
215 
216 }