1 package com.atlassian.johnson.filters;
2
3 import com.atlassian.johnson.DefaultJohnsonEventContainer;
4 import com.atlassian.johnson.event.Event;
5 import org.junit.Test;
6
7 import javax.servlet.http.HttpServletResponse;
8 import java.io.ByteArrayOutputStream;
9 import java.io.IOException;
10 import java.io.PrintWriter;
11 import java.util.Collection;
12 import java.util.Collections;
13 import java.util.List;
14
15 import static org.easymock.EasyMock.*;
16 import static org.junit.Assert.*;
17
18
19
20
21 public class JohnsonXmlRpcAndSoapFilterTest
22 {
23 private static final String ERROR_MSG = "TEST ERROR MESSAGE";
24 private static final String NOT_SETUP_ERROR_MESG = "The application has not yet been setup.";
25
26 @Test
27 public void testHandleErrorSoapJohnsonFilter() throws IOException
28 {
29 JohnsonSoapFilter johnsonSoapFilter = new JohnsonSoapFilter()
30 {
31 @Override
32 protected String buildSoapFault(String errorMessage)
33 {
34 return getSoapFaultMessage(ERROR_MSG);
35 }
36
37 @Override
38 protected String getStringForEvents(Collection events)
39 {
40 return null;
41 }
42 };
43 testHandleError(johnsonSoapFilter, getSoapFaultMessage(ERROR_MSG));
44 }
45
46 @Test
47 public void testHandleErrorXmlRpcJohnsonFilter() throws IOException
48 {
49 JohnsonXmlRpcFilter johnsonXmlRpcFilter = new JohnsonXmlRpcFilter()
50 {
51 @Override
52 protected String buildXmlRpcErrorMessage(String error, int faultCode)
53 {
54 return getXmlRpcFaultMessage(ERROR_MSG);
55 }
56
57 @Override
58 protected String getStringForEvents(Collection events)
59 {
60 return null;
61 }
62 };
63 testHandleError(johnsonXmlRpcFilter, getXmlRpcFaultMessage(ERROR_MSG));
64 }
65
66 @Test
67 public void testBuildXmlRpcErrorMessage()
68 {
69 JohnsonXmlRpcFilter filter = new JohnsonXmlRpcFilter();
70 assertEquals(getXmlRpcFaultMessage(ERROR_MSG),
71 filter.buildXmlRpcErrorMessage(ERROR_MSG, JohnsonXmlRpcFilter.FAULT_CODE));
72 }
73
74 @Test
75 public void testHandleNotSetupXmlRpcJohnsonFilter() throws IOException
76 {
77 JohnsonXmlRpcFilter filter = new JohnsonXmlRpcFilter();
78 testHandleNotSetup(filter, getXmlRpcFaultMessage(NOT_SETUP_ERROR_MESG));
79 }
80
81 @Test
82 public void testHandleNotSetupSoapJohnsonFilter() throws IOException
83 {
84 JohnsonSoapFilter filter = new JohnsonSoapFilter();
85 testHandleNotSetup(filter, getSoapFaultMessage(NOT_SETUP_ERROR_MESG));
86 }
87
88 private String getSoapFaultMessage(String notSetupErrorMesg)
89 {
90 return "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
91 "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n" +
92 " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
93 " <soapenv:Body>\n" +
94 " <soapenv:Fault>\n" +
95 " <faultcode>soapenv:Server</faultcode>\n" +
96 " <faultstring>" +
97 notSetupErrorMesg +
98 " </faultstring>\n" +
99 " </soapenv:Fault>\n" +
100 " </soapenv:Body>\n" +
101 "</soapenv:Envelope>";
102 }
103
104 private String getXmlRpcFaultMessage(String errorMessage)
105 {
106 return "<?xml version=\"1.0\"?>\n" +
107
108 "<methodResponse>\n" +
109 " <fault>\n" +
110 " <value>\n" +
111 " <struct>\n" +
112 " <member>\n" +
113 " <name>faultString</name>\n" +
114 " <value>" + errorMessage + "</value>\n" +
115 " </member>\n" +
116 " <member>\n" +
117 " <name>faultCode</name>\n" +
118 " <value>\n" +
119 " <int>" + JohnsonXmlRpcFilter.FAULT_CODE + "</int>\n" +
120 " </value>\n" +
121 " </member>\n" +
122 " </struct>\n" +
123 " </value>\n" +
124 " </fault>\n" +
125 "</methodResponse>";
126 }
127
128 private void testHandleError(AbstractJohnsonFilter filter, String message) throws IOException
129 {
130 ByteArrayOutputStream stream = new ByteArrayOutputStream(1024);
131 PrintWriter writer = new PrintWriter(stream);
132
133 HttpServletResponse response = createStrictMock(HttpServletResponse.class);
134 response.setContentType(eq(AbstractJohnsonFilter.TEXT_XML_UTF8_CONTENT_TYPE));
135 response.setStatus(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE));
136 expect(response.getWriter()).andReturn(writer);
137
138 replay(response);
139 filter.handleError(new DefaultJohnsonEventContainer()
140 {
141 public List<Event> getEvents()
142 {
143 return Collections.emptyList();
144 }
145 }, null, response);
146 verify(response);
147
148 writer.flush();
149 assertEquals(message, stream.toString());
150 }
151
152 private void testHandleNotSetup(AbstractJohnsonFilter filter, String message) throws IOException
153 {
154 ByteArrayOutputStream stream = new ByteArrayOutputStream(512);
155 PrintWriter writer = new PrintWriter(stream);
156
157 HttpServletResponse response = createStrictMock(HttpServletResponse.class);
158 response.setContentType(eq(AbstractJohnsonFilter.TEXT_XML_UTF8_CONTENT_TYPE));
159 response.setStatus(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE));
160 expect(response.getWriter()).andReturn(writer);
161
162 replay(response);
163 filter.handleNotSetup(null, response);
164 verify(response);
165
166 writer.flush();
167 assertEquals(message, stream.toString());
168 }
169 }