You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by "Juan E. Maya" <ma...@gmail.com> on 2009/07/15 09:04:16 UTC

Tapestry-Spring Security & Page Testing

Does anybody has found a way to unit test pages of an application that
use Tapestry-Spring Security?

I always get the error:


java.lang.RuntimeException: java.io.IOException: Can only process
HttpServletRequest
	at org.apache.tapestry5.test.PageTester.renderPage(PageTester.java:200)
	at com.rinco.misacas.web.test.SimplePageTest.simpleTest(SimplePageTest.java:53)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:478)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:617)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:885)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:110)
	at org.testng.TestRunner.runWorkers(TestRunner.java:712)
	at org.testng.TestRunner.privateRun(TestRunner.java:582)
	at org.testng.TestRunner.run(TestRunner.java:477)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:324)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:319)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:292)
	at org.testng.SuiteRunner.run(SuiteRunner.java:198)
	at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:823)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:790)
	at org.testng.TestNG.run(TestNG.java:708)
	at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73)
	at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:124)
Caused by: java.io.IOException: Can only process HttpServletRequest
	at nu.localhost.tapestry5.springsecurity.services.internal.RequestFilterWrapper.service(RequestFilterWrapper.java:64)
	at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
	at com.rinco.misacas.web.services.MisacasModule$1.service(MisacasModule.java:109)
	at $RequestFilter_1227d30e8e0.service($RequestFilter_1227d30e8e0.java)
	at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
	at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
	at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
	at org.apache.tapestry5.services.TapestryModule$4.service(TapestryModule.java:778)
	at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
	at org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:767)
	at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
	at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:85)
	at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
	at org.apache.tapestry5.internal.test.EndOfRequestCleanupFilter.service(EndOfRequestCleanupFilter.java:42)
	at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
	at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:90)
	at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:81)
	at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
	at org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:103)
	at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
	at $RequestHandler_1227d30e8b9.service($RequestHandler_1227d30e8b9.java)
	at org.apache.tapestry5.test.PageTester.renderPage(PageTester.java:173)
	... 23 more
Caused by: javax.servlet.ServletException: Can only process HttpServletRequest
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:46)
	at nu.localhost.tapestry5.springsecurity.services.internal.RequestFilterWrapper.service(RequestFilterWrapper.java:55)
	... 44 more

After running a test like this:

       @Test
	public void simpleTest() {
                private  PageTester MISACAS_tester_TESTER = new
PageTester(APP_NAME, APP_PACKAGE, APP_CONTEXT);
		Document doc = tester.renderPage("Index");
                Assert.notNull(doc.getElementById("featuredItems"));
	}

Of course this is natural, as HTTP is not being used to render the
pages during test, what would like to know is if it's possible to
avoid the execution of the Security RequestHandler ? I though about
overriding the handler for tests or forcing the test to avoid loading
the security module but i haven't been able to achieve any of those :S

Any ideas?

Thanks a lot!

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Tapestry-Spring Security & Page Testing

Posted by "Juan E. Maya" <ma...@gmail.com>.
I came to the conclusion (maybe i am wrong) that this is not possible
(at least now) using Spring-security. Sadly this is a deal breaker for
me :S

The nice thing is that thanks to tapestry modularity it was extremely
easy to replace the security to use Chennilleit Access! I am really
looking forward for CK new release :)

On Wed, Jul 15, 2009 at 9:04 AM, Juan E. Maya<ma...@gmail.com> wrote:
> Does anybody has found a way to unit test pages of an application that
> use Tapestry-Spring Security?
>
> I always get the error:
>
>
> java.lang.RuntimeException: java.io.IOException: Can only process
> HttpServletRequest
>        at org.apache.tapestry5.test.PageTester.renderPage(PageTester.java:200)
>        at com.rinco.misacas.web.test.SimplePageTest.simpleTest(SimplePageTest.java:53)
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>        at java.lang.reflect.Method.invoke(Method.java:585)
>        at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580)
>        at org.testng.internal.Invoker.invokeMethod(Invoker.java:478)
>        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:617)
>        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:885)
>        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
>        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:110)
>        at org.testng.TestRunner.runWorkers(TestRunner.java:712)
>        at org.testng.TestRunner.privateRun(TestRunner.java:582)
>        at org.testng.TestRunner.run(TestRunner.java:477)
>        at org.testng.SuiteRunner.runTest(SuiteRunner.java:324)
>        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:319)
>        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:292)
>        at org.testng.SuiteRunner.run(SuiteRunner.java:198)
>        at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:823)
>        at org.testng.TestNG.runSuitesLocally(TestNG.java:790)
>        at org.testng.TestNG.run(TestNG.java:708)
>        at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73)
>        at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:124)
> Caused by: java.io.IOException: Can only process HttpServletRequest
>        at nu.localhost.tapestry5.springsecurity.services.internal.RequestFilterWrapper.service(RequestFilterWrapper.java:64)
>        at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
>        at com.rinco.misacas.web.services.MisacasModule$1.service(MisacasModule.java:109)
>        at $RequestFilter_1227d30e8e0.service($RequestFilter_1227d30e8e0.java)
>        at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
>        at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
>        at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
>        at org.apache.tapestry5.services.TapestryModule$4.service(TapestryModule.java:778)
>        at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
>        at org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:767)
>        at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
>        at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:85)
>        at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
>        at org.apache.tapestry5.internal.test.EndOfRequestCleanupFilter.service(EndOfRequestCleanupFilter.java:42)
>        at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
>        at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:90)
>        at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:81)
>        at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
>        at org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:103)
>        at $RequestHandler_1227d30e8e4.service($RequestHandler_1227d30e8e4.java)
>        at $RequestHandler_1227d30e8b9.service($RequestHandler_1227d30e8b9.java)
>        at org.apache.tapestry5.test.PageTester.renderPage(PageTester.java:173)
>        ... 23 more
> Caused by: javax.servlet.ServletException: Can only process HttpServletRequest
>        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:46)
>        at nu.localhost.tapestry5.springsecurity.services.internal.RequestFilterWrapper.service(RequestFilterWrapper.java:55)
>        ... 44 more
>
> After running a test like this:
>
>       @Test
>        public void simpleTest() {
>                private  PageTester MISACAS_tester_TESTER = new
> PageTester(APP_NAME, APP_PACKAGE, APP_CONTEXT);
>                Document doc = tester.renderPage("Index");
>                Assert.notNull(doc.getElementById("featuredItems"));
>        }
>
> Of course this is natural, as HTTP is not being used to render the
> pages during test, what would like to know is if it's possible to
> avoid the execution of the Security RequestHandler ? I though about
> overriding the handler for tests or forcing the test to avoid loading
> the security module but i haven't been able to achieve any of those :S
>
> Any ideas?
>
> Thanks a lot!
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org