/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.gwt.server.mvc;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockServletConfig;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/org/geomajas/spring/geomajasContext.xml",
"/org/geomajas/gwt/server/mvc/mockWebContext.xml" })
public class GeomajasControllerTest {
@Autowired
@Qualifier("defaultController")
GeomajasController defaultController;
@Autowired
@Qualifier("customController")
GeomajasController customController;
@Test
public void testNonWebContext() throws ServletException, IOException {
// create mock context that loads from the classpath
MockServletConfig config = new MockServletConfig();
MockHttpServletRequest request = new MockHttpServletRequest(config.getServletContext());
MockHttpServletResponse response = new MockHttpServletResponse();
GeomajasController c = new GeomajasController();
c.init(config);
try {
c.doPost(request, response);
Assert.fail("Should fail outside web context");
} catch (RuntimeException e) {
}
}
@Test
public void testMockWebContext() throws ServletException, IOException {
// create mock context that loads from the classpath
MockServletConfig config = new MockServletConfig();
MockHttpServletRequest request = new MockHttpServletRequest(config.getServletContext());
request.setContentType("text/x-gwt-rpc");
request.setCharacterEncoding("UTF-8");
request.setContent(("6|0|10|http://apps.geomajas.org/explorer/be.geosparc.Explorer/"
+ "|54044FB0C988344F1715C8B91330B0A2|org.geomajas.gwt.client.GeomajasService|"
+ "execute|org.geomajas.gwt.client.command.GwtCommand/4093389776|command.configuration.GetMap|"
+ "org.geomajas.command.dto.GetMapConfigurationRequest/104733661|explorer|mainMap|"
+ "ss.TqRPfHFh24NVxB|1|2|3|4|1|5|5|6|7|8|9|0|10|").getBytes("UTF-8"));
request.addHeader("X-GWT-Permutation", "54044FB0C988344F1715C8B91330B0A2");
request.addHeader("X-GWT-Module-Base", "http://test/module/");
MockHttpServletResponse response = new MockHttpServletResponse();
defaultController.setServletConfig(config);
defaultController.doPost(request, response);
// expect the message of the out-dated 1.3 policy of GWT
Assert.assertTrue(response.getContentAsString().contains(
"Type \\x27org.geomajas.gwt.client.command.GwtCommand\\x27 was not assignable"
+ " to \\x27com.google.gwt.user.client.rpc.IsSerializable\\x27"));
}
@Test
public void testSerializationPolicy() throws UnsupportedEncodingException, ServletException {
// create mock context that loads from the classpath
MockServletConfig config = new MockServletConfig();
MockHttpServletRequest request = new MockHttpServletRequest(config.getServletContext());
request.setContentType("text/x-gwt-rpc");
request.setCharacterEncoding("UTF-8");
request.setContent(("6|0|10|http://apps.geomajas.org/explorer/be.geosparc.Explorer/"
+ "|54044FB0C988344F1715C8B91330B0A2|org.geomajas.gwt.client.GeomajasService|"
+ "execute|org.geomajas.gwt.client.command.GwtCommand/4093389776|command.configuration.GetMap|"
+ "org.geomajas.command.dto.GetMapConfigurationRequest/104733661|explorer|mainMap|"
+ "ss.TqRPfHFh24NVxB|1|2|3|4|1|5|5|6|7|8|9|0|10|").getBytes("UTF-8"));
request.addHeader("X-GWT-Permutation", "54044FB0C988344F1715C8B91330B0A2");
request.addHeader("X-GWT-Module-Base", "http://test/module/");
MockHttpServletResponse response = new MockHttpServletResponse();
customController.setServletConfig(config);
customController.doPost(request, response);
// expect the message that the type is missing from our policy file
Assert.assertTrue(response.getContentAsString().contains(
"Type \\x27org.geomajas.gwt.client.command.GwtCommand\\x27 was not included in the set of types"));
}
}