1 package org.eclipse.equinox.http.servlet.tests;
2 
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.net.URLEncoder;
6 import java.util.Dictionary;
7 import java.util.Hashtable;
8 import java.util.concurrent.atomic.AtomicReference;
9 
10 import javax.servlet.Servlet;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 
15 import org.eclipse.equinox.http.servlet.testbase.BaseTest;
16 import org.junit.Assert;
17 import org.junit.Test;
18 import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
19 
20 public class Bug562843_2_Test extends BaseTest {
21 
22 	@Test
test_Bug562843_testEncodedSpace()23 	public void test_Bug562843_testEncodedSpace() throws Exception {
24 		final AtomicReference<String> requestURI = new AtomicReference<>();
25 		final AtomicReference<String> servletPath = new AtomicReference<>();
26 		final AtomicReference<String> pathInfo = new AtomicReference<>();
27 		Servlet servlet = new HttpServlet() {
28 			private static final long serialVersionUID = 1L;
29 			@Override
30 			protected void doGet(
31 				final HttpServletRequest req, final HttpServletResponse resp)
32 				throws IOException {
33 				requestURI.set(req.getRequestURI());
34 				servletPath.set(req.getServletPath());
35 				pathInfo.set(req.getPathInfo());
36 				PrintWriter writer = resp.getWriter();
37 				writer.write("OK");
38 			}
39 		};
40 		Dictionary<String, Object> props = new Hashtable<>();
41 		props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, "Bug 562843");
42 		props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/Bug562843/*");
43 		registrations.add(getBundleContext().registerService(Servlet.class, servlet, props));
44 		String path = "Bug562843/" + URLEncoder.encode("topic .html", "UTF-8");
45 		String result = requestAdvisor.request(path);
46 		Assert.assertEquals("OK", result);
47 		Assert.assertEquals("/Bug562843/topic+.html", requestURI.get());
48 		Assert.assertEquals("/Bug562843", servletPath.get());
49 		Assert.assertEquals("/topic .html", pathInfo.get());
50 	}
51 
52 
53 	@Test
test_Bug562843_testEncodedPercentSign()54 	public void test_Bug562843_testEncodedPercentSign() throws Exception {
55 		final AtomicReference<String> requestURI = new AtomicReference<>();
56 		final AtomicReference<String> servletPath = new AtomicReference<>();
57 		final AtomicReference<String> pathInfo = new AtomicReference<>();
58 		Servlet servlet = new HttpServlet() {
59 			private static final long serialVersionUID = 1L;
60 			@Override
61 			protected void doGet(
62 				final HttpServletRequest req, final HttpServletResponse resp)
63 				throws IOException {
64 				requestURI.set(req.getRequestURI());
65 				servletPath.set(req.getServletPath());
66 				pathInfo.set(req.getPathInfo());
67 				PrintWriter writer = resp.getWriter();
68 				writer.write("OK");
69 			}
70 		};
71 		Dictionary<String, Object> props = new Hashtable<>();
72 		props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, "Bug 562843");
73 		props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/Bug562843/*");
74 		registrations.add(getBundleContext().registerService(Servlet.class, servlet, props));
75 		String path = "Bug562843/" + URLEncoder.encode("topic%.html", "UTF-8");
76 		String result = requestAdvisor.request(path);
77 		Assert.assertEquals("OK", result);
78 		Assert.assertEquals("/Bug562843/topic%25.html", requestURI.get());
79 		Assert.assertEquals("/Bug562843", servletPath.get());
80 		Assert.assertEquals("/topic%.html", pathInfo.get());
81 	}
82 
83 }
84