001: package com.mockrunner.test.web;
002:
003: import java.io.IOException;
004:
005: import javax.servlet.Filter;
006: import javax.servlet.FilterChain;
007: import javax.servlet.FilterConfig;
008: import javax.servlet.ServletException;
009: import javax.servlet.ServletRequest;
010: import javax.servlet.ServletResponse;
011: import javax.servlet.http.HttpServlet;
012:
013: import com.mockrunner.mock.web.MockFilterChain;
014: import com.mockrunner.mock.web.MockHttpServletRequest;
015: import com.mockrunner.mock.web.MockHttpServletResponse;
016:
017: import junit.framework.TestCase;
018:
019: public class MockFilterChainTest extends TestCase {
020: private MockFilterChain chain;
021:
022: protected void setUp() throws Exception {
023: super .setUp();
024: chain = new MockFilterChain();
025: }
026:
027: public void testNoServlet() throws Exception {
028: chain.doFilter(null, null);
029: TestServlet servlet = new TestServlet();
030: chain.setServlet(servlet);
031: chain.doFilter(null, null);
032: assertTrue(servlet.wasServiceCalled());
033: chain.release();
034: servlet.reset();
035: chain.doFilter(null, null);
036: assertFalse(servlet.wasServiceCalled());
037: }
038:
039: public void testFilterInstance() throws Exception {
040: try {
041: chain.addFilter(String.class);
042: fail();
043: } catch (IllegalArgumentException exc) {
044: //should throw exception
045: }
046: chain.addFilter(TestFilter.class);
047: }
048:
049: public void testDoFilter() throws Exception {
050: TestFilter filter1 = new TestFilter();
051: TestFilter filter2 = new TestFilter();
052: chain.addFilter(filter1);
053: chain.addFilter(filter2);
054: TestServlet servlet = new TestServlet();
055: chain.setServlet(servlet);
056: chain.doFilter(null, null);
057: assertTrue(filter1.wasDoFilterCalled());
058: assertTrue(filter2.wasDoFilterCalled());
059: assertTrue(servlet.wasServiceCalled());
060: filter1.reset();
061: filter2.reset();
062: servlet.reset();
063: filter1.setDoChain(false);
064: chain.doFilter(null, null);
065: assertTrue(filter1.wasDoFilterCalled());
066: assertFalse(filter2.wasDoFilterCalled());
067: assertFalse(servlet.wasServiceCalled());
068: assertNull(chain.getLastRequest());
069: assertNull(chain.getLastResponse());
070: }
071:
072: public void testRequestAndResponseList() throws Exception {
073: TestFilter filter1 = new TestFilter();
074: TestFilter filter2 = new TestFilter();
075: TestFilter filter3 = new TestFilter();
076: MockHttpServletRequest request1 = new MockHttpServletRequest();
077: MockHttpServletRequest request3 = new MockHttpServletRequest();
078: MockHttpServletResponse response1 = new MockHttpServletResponse();
079: MockHttpServletResponse response2 = new MockHttpServletResponse();
080: filter3.setRequest(request3);
081: filter2.setResponse(response2);
082: chain.addFilter(filter1);
083: chain.addFilter(filter2);
084: chain.addFilter(filter3);
085: TestServlet servlet = new TestServlet();
086: chain.setServlet(servlet);
087: chain.doFilter(request1, response1);
088: assertEquals(4, chain.getRequestList().size());
089: assertEquals(4, chain.getResponseList().size());
090: assertSame(request1, chain.getRequestList().get(0));
091: assertSame(request1, chain.getRequestList().get(1));
092: assertSame(request1, chain.getRequestList().get(2));
093: assertSame(request3, chain.getRequestList().get(3));
094: assertSame(request3, chain.getLastRequest());
095: assertSame(response1, chain.getResponseList().get(0));
096: assertSame(response1, chain.getResponseList().get(1));
097: assertSame(response2, chain.getResponseList().get(2));
098: assertSame(response2, chain.getResponseList().get(3));
099: assertSame(response2, chain.getLastResponse());
100: }
101:
102: public void testLastRequestAndResponse() throws Exception {
103: TestFilter filter1 = new TestFilter();
104: TestFilter filter2 = new TestFilter();
105: chain.addFilter(filter1);
106: chain.addFilter(filter2);
107: MockHttpServletRequest request = new MockHttpServletRequest();
108: MockHttpServletResponse response = new MockHttpServletResponse();
109: assertNull(chain.getLastRequest());
110: assertNull(chain.getLastResponse());
111: chain.doFilter(request, response);
112: assertSame(request, chain.getLastRequest());
113: assertSame(response, chain.getLastResponse());
114: }
115:
116: public void testReset() throws Exception {
117: MockHttpServletRequest request = new MockHttpServletRequest();
118: MockHttpServletResponse response = new MockHttpServletResponse();
119: SkipTestFilter filter1 = new SkipTestFilter();
120: TestFilter filter2 = new TestFilter();
121: chain.addFilter(filter1);
122: chain.addFilter(filter2);
123: chain.doFilter(request, response);
124: assertFalse(filter2.wasDoFilterCalled());
125: chain.reset();
126: chain.doFilter(request, response);
127: assertFalse(filter2.wasDoFilterCalled());
128: }
129:
130: public static class SkipTestFilter implements Filter {
131: public void init(FilterConfig config) throws ServletException {
132:
133: }
134:
135: public void doFilter(ServletRequest request,
136: ServletResponse response, FilterChain chain)
137: throws IOException, ServletException {
138:
139: }
140:
141: public void destroy() {
142:
143: }
144: }
145:
146: public static class TestFilter implements Filter {
147: private boolean doFilterCalled = false;
148: private boolean doChain = true;
149: private ServletRequest request;
150: private ServletResponse response;
151:
152: public void init(FilterConfig config) throws ServletException {
153:
154: }
155:
156: public void doFilter(ServletRequest request,
157: ServletResponse response, FilterChain chain)
158: throws IOException, ServletException {
159: doFilterCalled = true;
160: if (doChain) {
161: if (null != this .request) {
162: request = this .request;
163: }
164: if (null != this .response) {
165: response = this .response;
166: }
167: chain.doFilter(request, response);
168: }
169: }
170:
171: public void destroy() {
172:
173: }
174:
175: public void setDoChain(boolean doChain) {
176: this .doChain = doChain;
177: }
178:
179: public void setRequest(ServletRequest request) {
180: this .request = request;
181: }
182:
183: public void setResponse(ServletResponse response) {
184: this .response = response;
185: }
186:
187: public boolean wasDoFilterCalled() {
188: return doFilterCalled;
189: }
190:
191: public void reset() {
192: doFilterCalled = false;
193: }
194: }
195:
196: public static class TestServlet extends HttpServlet {
197: private boolean serviceCalled = false;
198:
199: public void service(ServletRequest request,
200: ServletResponse response) throws ServletException,
201: IOException {
202: serviceCalled = true;
203: }
204:
205: public void reset() {
206: serviceCalled = false;
207: }
208:
209: public boolean wasServiceCalled() {
210: return serviceCalled;
211: }
212: }
213: }
|