dev@grizzly.java.net

Re: new test to show ServletMapping failed ?

From: Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
Date: Tue, 14 Apr 2009 10:25:46 -0400

Salut,

Survivant 00 wrote:
> here a little unit test modified to test this case
>
> context = /test
> servletPath = /servlet1
> mapping = *.1
> mapping = /1
> mapping = *.a
>
> URL = http://localhost:port/test/servlet1/test.1
> URL = http://localhost:port/test/servlet1/1
> URL = http://localhost:port/test/servlet1/test.a
>
> when I try the 3th test.. I obtain the response for
> http://localhost:port/test/servlet1/test.1 instead. For me it's a
> bug.. or it's me that didn't set the ServletAdapter correctly.
>
> someone can test it please.

Commit your code but put __testComplexAliasMapping() (so the test is not
executed). I will take a look.

Thanks!!

-- Jeanfrancois


>
>
> /*
> *
> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
> *
> * Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
> *
> * The contents of this file are subject to the terms of either the GNU
> * General Public License Version 2 only ("GPL") or the Common Development
> * and Distribution License("CDDL") (collectively, the "License"). You
> * may not use this file except in compliance with the License. You can
> obtain
> * a copy of the License at
> https://glassfish.dev.java.net/public/CDDL+GPL.html
> * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the
> specific
> * language governing permissions and limitations under the License.
> *
> * When distributing the software, include this License Header Notice in
> each
> * file and include the License file at
> glassfish/bootstrap/legal/LICENSE.txt.
> * Sun designates this particular file as subject to the "Classpath"
> exception
> * as provided by Sun in the GPL Version 2 section of the License file that
> * accompanied this code. If applicable, add the following below the
> License
> * Header, with the fields enclosed by brackets [] replaced by your own
> * identifying information: "Portions Copyrighted [year]
> * [name of copyright owner]"
> *
> * Contributor(s):
> *
> * If you wish your version of this file to be governed by only the CDDL or
> * only the GPL Version 2, indicate your decision by adding "[Contributor]
> * elects to include this software in this distribution under the [CDDL
> or GPL
> * Version 2] license." If you don't indicate a single choice of license, a
> * recipient has the option to distribute your version of this file under
> * either the CDDL, the GPL Version 2 or to extend the choice of license to
> * its licensees as provided above. However, if you add GPL Version 2 code
> * and therefore, elected the GPL Version 2 license, then the option applies
> * only if the new code is made subject to such option by the copyright
> * holder.
> *
> */
> package com.sun.grizzly.http;
>
> import java.io.BufferedReader;
> import java.io.IOException;
> import java.io.InputStreamReader;
> import java.net.HttpURLConnection;
> import java.net.URL;
> import java.util.logging.Logger;
>
> import javax.servlet.ServletException;
> import javax.servlet.http.HttpServlet;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
>
> import junit.framework.TestCase;
>
> import com.sun.grizzly.http.embed.GrizzlyWebServer;
> import com.sun.grizzly.http.servlet.ServletAdapter;
>
> /**
> * {_at_link GrizzlyWebServer} tests.
> *
> * @author Hubert Iwaniuk
> * @since Jan 22, 2009
> */
> public class ComplexGrizzlyWebServerTest extends TestCase {
>
> public static final int PORT = 18890 + 10;
> private static Logger logger = Logger.getLogger("grizzly.test");
> private GrizzlyWebServer gws;
>
> /**
> * Want to test multiple servletMapping
> *
> * examples :
> *
> * context = /test
> * servletPath = /servlet1
> * mapping = *.1
> * mapping = /1
> *
> * URL = http://localhost:port/test/servlet1/test.1
> * URL = http://localhost:port/test/servlet1/1
> *
> * @throws IOException
> */
> public void testComplexAliasMapping() throws IOException {
> System.out.println("testComplexAliasMapping");
> try {
> startGrizzlyWebServer(PORT);
> String[] aliases = new String[] { "/1", "/2", "/3", "/*.a" };
>
> String context = "/test";
> String servletPath = "/servlet";
> String rootFolder = ".";
>
> for (String alias : aliases) {
> addAdapter(context + servletPath + alias, context,
> servletPath, rootFolder);
> }
>
> for (String alias : aliases) {
> HttpURLConnection conn = getConnection(context +
> servletPath + alias);
> assertEquals(HttpServletResponse.SC_OK,
> getResponseCodeFromAlias(conn));
> assertEquals(context + servletPath + alias,
> readResponse(conn));
> }
>
> //special test
> String url = context + servletPath + "/test.a";
> HttpURLConnection conn = getConnection(url);
> assertEquals(HttpServletResponse.SC_OK,
> getResponseCodeFromAlias(conn));
> assertEquals(url, readResponse(conn));
>
> } finally {
> stopGrizzlyWebServer();
> }
> }
>
> private String readResponse(HttpURLConnection conn) throws IOException {
> BufferedReader reader = new BufferedReader(new
> InputStreamReader(conn.getInputStream()));
> return reader.readLine();
> }
>
> private HttpURLConnection getConnection(String alias) throws
> IOException {
> logger.info <http://logger.info>("sending request to " + alias);
> URL url = new URL("http", "localhost", PORT, alias);
> HttpURLConnection urlConn = (HttpURLConnection)
> url.openConnection();
> urlConn.connect();
> return urlConn;
> }
>
> private int getResponseCodeFromAlias(HttpURLConnection urlConn)
> throws IOException {
> return urlConn.getResponseCode();
> }
>
> private ServletAdapter addAdapter(final String alias, final String
> context, final String servletPath, final String rootFolder) {
> ServletAdapter adapter = new ServletAdapter(new HttpServlet() {
>
> @Override
> protected void doGet(HttpServletRequest req,
> HttpServletResponse resp) throws ServletException, IOException {
> logger.info <http://logger.info>(alias + " received
> request " + req.getRequestURI());
> resp.setStatus(HttpServletResponse.SC_OK);
> resp.getWriter().write(alias);
> }
> });
>
> adapter.setContextPath(context);
> adapter.setServletPath(servletPath);
> adapter.setRootFolder(rootFolder);
>
>
> gws.addGrizzlyAdapter(adapter, new String[] { alias });
> return adapter;
> }
>
> private void startGrizzlyWebServer(int port) throws IOException {
> gws = new GrizzlyWebServer(port);
> gws.start();
> }
>
> private void stopGrizzlyWebServer() {
> gws.stop();
> }
> }
>