Skip to content

Commit 6ff5481

Browse files
committed
all test for ci
1 parent 77fe114 commit 6ff5481

4 files changed

Lines changed: 276 additions & 9 deletions

File tree

pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,6 @@
4040
</properties>
4141

4242
<dependencies>
43-
<dependency>
44-
<groupId>junit</groupId>
45-
<artifactId>junit</artifactId>
46-
<version>4.11</version>
47-
<scope>test</scope>
48-
</dependency>
4943
<dependency>
5044
<groupId>com.google.guava</groupId>
5145
<artifactId>guava</artifactId>

prerender-java.iml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
</content>
1111
<orderEntry type="inheritedJdk" />
1212
<orderEntry type="sourceFolder" forTests="false" />
13+
<orderEntry type="library" name="Maven: com.google.guava:guava:cdi1.0:15.0" level="project" />
1314
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.11" level="project" />
1415
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
15-
<orderEntry type="library" name="Maven: com.google.guava:guava:cdi1.0:15.0" level="project" />
1616
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-all:1.9.5" level="project" />
1717
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
1818
<orderEntry type="library" name="Maven: commons-io:commons-io:2.4" level="project" />

src/main/java/com/github/greengerong/PreRenderSEOFilter.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,14 @@ public class PreRenderSEOFilter implements Filter {
3939
@Override
4040
public void init(FilterConfig filterConfig) throws ServletException {
4141
this.prerenderConfig = new PrerenderConfig(filterConfig);
42-
this.httpClient = prerenderConfig.getHttpClient();
42+
this.httpClient = getHttpClient();
4343
this.preRenderEventHandler = prerenderConfig.getEventHandler();
4444
}
4545

46+
protected CloseableHttpClient getHttpClient() {
47+
return prerenderConfig.getHttpClient();
48+
}
49+
4650
@Override
4751
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
4852
throws IOException, ServletException {
@@ -77,7 +81,7 @@ private boolean beforeRender(HttpServletRequest request, HttpServletResponse res
7781

7882
private boolean proxyPrerenderedPageResponse(HttpServletRequest request, HttpServletResponse response) throws IOException, URISyntaxException {
7983
final String apiUrl = getApiUrl(getFullUrl(request));
80-
final HttpGet getMethod = new HttpGet(apiUrl);
84+
final HttpGet getMethod = getHttpGet(apiUrl);
8185
copyRequestHeaders(request, getMethod);
8286
withPrerenderToken(getMethod);
8387
CloseableHttpResponse proxyResponse = httpClient.execute(getMethod);
@@ -94,6 +98,10 @@ private boolean proxyPrerenderedPageResponse(HttpServletRequest request, HttpSer
9498
return false;
9599
}
96100

101+
protected HttpGet getHttpGet(String apiUrl) {
102+
return new HttpGet(apiUrl);
103+
}
104+
97105
private void afterRender(HttpServletRequest request, CloseableHttpResponse proxyResponse) {
98106
if (preRenderEventHandler != null) {
99107
preRenderEventHandler.afterRender(request, proxyResponse);
Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,269 @@
11
package com.github.greengerong;
22

3+
import com.google.common.collect.Maps;
4+
import org.apache.http.Header;
5+
import org.apache.http.StatusLine;
6+
import org.apache.http.client.methods.CloseableHttpResponse;
7+
import org.apache.http.client.methods.HttpGet;
8+
import org.apache.http.client.methods.HttpPost;
9+
import org.apache.http.impl.client.CloseableHttpClient;
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
import org.junit.runner.RunWith;
13+
import org.mockito.Mock;
14+
import org.mockito.runners.MockitoJUnitRunner;
15+
16+
import javax.servlet.FilterChain;
17+
import javax.servlet.FilterConfig;
18+
import javax.servlet.http.HttpServletRequest;
19+
import javax.servlet.http.HttpServletResponse;
20+
import java.util.Enumeration;
21+
import java.util.HashMap;
22+
23+
import static org.mockito.Mockito.*;
24+
25+
@RunWith(MockitoJUnitRunner.class)
326
public class PreRenderSEOFilterTest {
27+
28+
public static final int NOT_FOUND = 404;
29+
private PreRenderSEOFilter preRenderSEOFilter;
30+
31+
@Mock
32+
private CloseableHttpClient httpClient;
33+
34+
@Mock
35+
private FilterConfig filterConfig;
36+
37+
@Mock
38+
private HttpServletRequest servletRequest;
39+
40+
@Mock
41+
private HttpServletResponse servletResponse;
42+
43+
@Mock
44+
private FilterChain filterChain;
45+
46+
@Mock
47+
private HttpGet httpGet;
48+
49+
@Before
50+
public void setUp() throws Exception {
51+
preRenderSEOFilter = new PreRenderSEOFilter() {
52+
@Override
53+
protected CloseableHttpClient getHttpClient() {
54+
return httpClient;
55+
}
56+
57+
@Override
58+
protected HttpGet getHttpGet(String apiUrl) {
59+
return httpGet;
60+
}
61+
};
62+
}
63+
64+
@Test
65+
public void should_not_handle_when_non_get_request() throws Exception {
66+
//given
67+
preRenderSEOFilter.init(filterConfig);
68+
when(servletRequest.getRequestURL()).thenReturn(new StringBuffer());
69+
when(servletRequest.getMethod()).thenReturn(HttpPost.METHOD_NAME);
70+
71+
//when
72+
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
73+
74+
//then
75+
verify(httpClient, never()).execute(httpGet);
76+
verify(filterChain).doFilter(servletRequest, servletResponse);
77+
}
78+
79+
@Test
80+
public void should_handle_when_url_with_escaped_fragment_() throws Exception {
81+
//given
82+
preRenderSEOFilter.init(filterConfig);
83+
final CloseableHttpResponse httpResponse = mock(CloseableHttpResponse.class);
84+
final StatusLine statusLine = mock(StatusLine.class);
85+
86+
when(servletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost/test"));
87+
when(servletRequest.getMethod()).thenReturn(HttpGet.METHOD_NAME);
88+
when(servletRequest.getHeaderNames()).thenReturn(mock(Enumeration.class));
89+
when(httpClient.execute(httpGet)).thenReturn(httpResponse);
90+
when(httpResponse.getStatusLine()).thenReturn(statusLine);
91+
final HashMap<String, String> map = Maps.newHashMap();
92+
map.put("_escaped_fragment_", "");
93+
when(servletRequest.getParameterMap()).thenReturn(map);
94+
when(statusLine.getStatusCode()).thenReturn(PreRenderSEOFilter.HTTP_OK);
95+
when(httpResponse.getAllHeaders()).thenReturn(new Header[0]);
96+
//when
97+
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
98+
99+
//then
100+
verify(httpClient).execute(httpGet);
101+
verify(filterChain, never()).doFilter(servletRequest, servletResponse);
102+
}
103+
104+
@Test
105+
public void should_not_handle_when_user_agent_is_not_crawler() throws Exception {
106+
//given
107+
preRenderSEOFilter.init(filterConfig);
108+
109+
when(servletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost/test"));
110+
when(servletRequest.getMethod()).thenReturn(HttpGet.METHOD_NAME);
111+
when(servletRequest.getParameterMap()).thenReturn(Maps.<String, String>newHashMap());
112+
when(servletRequest.getHeader("User-Agent")).thenReturn("no");
113+
//when
114+
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
115+
116+
//then
117+
verify(httpClient, never()).execute(httpGet);
118+
verify(filterChain).doFilter(servletRequest, servletResponse);
119+
}
120+
121+
@Test
122+
public void should_not_handle_when_url_is_a_resource() throws Exception {
123+
//given
124+
when(filterConfig.getInitParameter("crawlerUserAgents")).thenReturn("crawler1,crawler2");
125+
preRenderSEOFilter.init(filterConfig);
126+
127+
when(servletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost/test.js"));
128+
when(servletRequest.getMethod()).thenReturn(HttpGet.METHOD_NAME);
129+
when(servletRequest.getParameterMap()).thenReturn(Maps.<String, String>newHashMap());
130+
when(servletRequest.getHeader("User-Agent")).thenReturn("crawler1");
131+
//when
132+
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
133+
134+
//then
135+
verify(httpClient, never()).execute(httpGet);
136+
verify(filterChain).doFilter(servletRequest, servletResponse);
137+
}
138+
139+
@Test
140+
public void should_not_handle_when_white_list_is_not_empty_and_url_is_not_in_white_list() throws Exception {
141+
//given
142+
when(filterConfig.getInitParameter("crawlerUserAgents")).thenReturn("crawler1,crawler2");
143+
when(filterConfig.getInitParameter("whitelist")).thenReturn("whitelist1,whitelist2");
144+
preRenderSEOFilter.init(filterConfig);
145+
146+
when(servletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost/test"));
147+
when(servletRequest.getMethod()).thenReturn(HttpGet.METHOD_NAME);
148+
when(servletRequest.getParameterMap()).thenReturn(Maps.<String, String>newHashMap());
149+
when(servletRequest.getHeader("User-Agent")).thenReturn("crawler1");
150+
//when
151+
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
152+
153+
//then
154+
verify(httpClient, never()).execute(httpGet);
155+
verify(filterChain).doFilter(servletRequest, servletResponse);
156+
}
157+
158+
@Test
159+
public void should_not_handle_when_black_list_is_not_empty_and_url_is_in_black_list() throws Exception {
160+
//given
161+
when(filterConfig.getInitParameter("crawlerUserAgents")).thenReturn("crawler1,crawler2");
162+
when(filterConfig.getInitParameter("blacklist")).thenReturn("blacklist1,http://localhost/test");
163+
preRenderSEOFilter.init(filterConfig);
164+
165+
when(servletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost/test"));
166+
when(servletRequest.getMethod()).thenReturn(HttpGet.METHOD_NAME);
167+
when(servletRequest.getParameterMap()).thenReturn(Maps.<String, String>newHashMap());
168+
when(servletRequest.getHeader("User-Agent")).thenReturn("crawler1");
169+
//when
170+
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
171+
172+
//then
173+
verify(httpClient, never()).execute(httpGet);
174+
verify(filterChain).doFilter(servletRequest, servletResponse);
175+
}
176+
177+
@Test
178+
public void should_handle_when_user_agent_is_crawler_and_url_is_not_resource_and_white_list_is_empty_and_black_list_is_empty() throws Exception {
179+
//given
180+
when(filterConfig.getInitParameter("crawlerUserAgents")).thenReturn("crawler1,crawler2");
181+
preRenderSEOFilter.init(filterConfig);
182+
183+
final CloseableHttpResponse httpResponse = mock(CloseableHttpResponse.class);
184+
final StatusLine statusLine = mock(StatusLine.class);
185+
186+
when(servletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost/test"));
187+
when(servletRequest.getMethod()).thenReturn(HttpGet.METHOD_NAME);
188+
when(servletRequest.getHeader("User-Agent")).thenReturn("crawler1");
189+
190+
when(servletRequest.getHeaderNames()).thenReturn(mock(Enumeration.class));
191+
when(httpClient.execute(httpGet)).thenReturn(httpResponse);
192+
when(httpResponse.getStatusLine()).thenReturn(statusLine);
193+
final HashMap<String, String> map = Maps.newHashMap();
194+
map.put("_escaped_fragment_", "");
195+
when(servletRequest.getParameterMap()).thenReturn(map);
196+
when(statusLine.getStatusCode()).thenReturn(PreRenderSEOFilter.HTTP_OK);
197+
when(httpResponse.getAllHeaders()).thenReturn(new Header[0]);
198+
199+
//when
200+
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
201+
202+
//then
203+
verify(httpClient).execute(httpGet);
204+
verify(filterChain, never()).doFilter(servletRequest, servletResponse);
205+
}
206+
207+
@Test
208+
public void should_not_handle_when_every_thing_is_ok_but_prerender_server_response_is_not_200() throws Exception {
209+
//given
210+
when(filterConfig.getInitParameter("crawlerUserAgents")).thenReturn("crawler1,crawler2");
211+
preRenderSEOFilter.init(filterConfig);
212+
213+
final CloseableHttpResponse httpResponse = mock(CloseableHttpResponse.class);
214+
final StatusLine statusLine = mock(StatusLine.class);
215+
216+
when(servletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost/test"));
217+
when(servletRequest.getMethod()).thenReturn(HttpGet.METHOD_NAME);
218+
when(servletRequest.getHeader("User-Agent")).thenReturn("crawler1");
219+
220+
when(servletRequest.getHeaderNames()).thenReturn(mock(Enumeration.class));
221+
when(httpClient.execute(httpGet)).thenReturn(httpResponse);
222+
when(httpResponse.getStatusLine()).thenReturn(statusLine);
223+
final HashMap<String, String> map = Maps.newHashMap();
224+
map.put("_escaped_fragment_", "");
225+
when(servletRequest.getParameterMap()).thenReturn(map);
226+
when(statusLine.getStatusCode()).thenReturn(NOT_FOUND);
227+
228+
//when
229+
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
230+
231+
//then
232+
verify(httpClient).execute(httpGet);
233+
verify(filterChain).doFilter(servletRequest, servletResponse);
234+
}
235+
236+
237+
@Test
238+
public void should_handle_when_user_agent_is_crawler_and_url_is_not_resource_and_in_white_list_and_not_in_black_list() throws Exception {
239+
//given
240+
when(filterConfig.getInitParameter("crawlerUserAgents")).thenReturn("crawler1,crawler2");
241+
when(filterConfig.getInitParameter("whitelist")).thenReturn("whitelist1,http://localhost/test");
242+
when(filterConfig.getInitParameter("blacklist")).thenReturn("blacklist1,blacklist2");
243+
244+
preRenderSEOFilter.init(filterConfig);
245+
246+
final CloseableHttpResponse httpResponse = mock(CloseableHttpResponse.class);
247+
final StatusLine statusLine = mock(StatusLine.class);
248+
249+
when(servletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost/test"));
250+
when(servletRequest.getMethod()).thenReturn(HttpGet.METHOD_NAME);
251+
when(servletRequest.getHeader("User-Agent")).thenReturn("crawler1");
252+
253+
when(servletRequest.getHeaderNames()).thenReturn(mock(Enumeration.class));
254+
when(httpClient.execute(httpGet)).thenReturn(httpResponse);
255+
when(httpResponse.getStatusLine()).thenReturn(statusLine);
256+
final HashMap<String, String> map = Maps.newHashMap();
257+
map.put("_escaped_fragment_", "");
258+
when(servletRequest.getParameterMap()).thenReturn(map);
259+
when(statusLine.getStatusCode()).thenReturn(PreRenderSEOFilter.HTTP_OK);
260+
when(httpResponse.getAllHeaders()).thenReturn(new Header[0]);
261+
262+
//when
263+
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
264+
265+
//then
266+
verify(httpClient).execute(httpGet);
267+
verify(filterChain, never()).doFilter(servletRequest, servletResponse);
268+
}
4269
}

0 commit comments

Comments
 (0)