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