Hi Juan, I had a similar problem, except that I'm using tapestry-acegi. However, tapestry-spring and tapestry-acegi seem very similar, so perhaps what I've done may help you...
I have an IOC module TestInfrastructureModule that is included only in my tests. It contains this contribution: import static org.mockito.Mockito.mock; /** * Ensure that there are valid HTTP request/response objects in the test, otherwise the ACEGI integration tends to blow up. */ public static void contributeRequestHandler(OrderedConfiguration<RequestFilter> config, final RequestGlobals requestGlobals) { RequestFilter filter = new RequestFilter() { public boolean service(Request request, Response response, RequestHandler handler) throws IOException { requestGlobals.storeServletRequestResponse(mock (HttpServletRequest.class), mock(HttpServletResponse.class)); return handler.service(request, response); } }; config.add("EnsureNonNullHttpRequestAndResponse", filter, "before:*"); } Notice that I'm using Mockito to mock the request and response with the mock() method. However, you can use your mock/stub/fake of choice for the request and response. I don't know if this will work for spring-security, but it's worth a try... Paul p.stavrini...@albourne.com wrote on 17/07/2009 10:34:00: > > > So yes, i could create a mock of the security module in our > > application but then how to test that the security is working through > > the application? > Okay I agree that for integration tests you probably need a tool > like Selenium or HtmlUnit (HtmlUnit is a headless browser based > tool)... I *think I recall reading a post not so long ago that > Tapestry support was in the pipeline, but I stand to be corrected on that. > > > How to assure that one of the developers didn't > > forget to add security to a page or event? > For lack of a better solution, if you do use testify with mocks then > test only your code and not the module, that way you can check for > the presence of the annotations at least, so you can probably put > something superficial togeather using: > getClass().isAnnotationPresent() > getClass().getAnnotation() > which gives you some coverage at least. > > Cheers > Peter > > > ----- Original Message ----- > From: "Juan E. Maya" <maya.j...@gmail.com> > To: "Tapestry users" <users@tapestry.apache.org> > Sent: Friday, 17 July, 2009 11:48:29 GMT +02:00 Athens, Beirut, > Bucharest, Istanbul > Subject: Re: Tapestry-Spring Security & Page Testing > > Oh Peter yes i understand you, and i totally agree with you. I think i > didn't explain myself very well. So let me elaborate a bit more. Maybe > u have different opinion. > > We want to test our application thoroughly therefore we are using unit > tests and integrations tests. We want like to test every piece of > functionality. > > The problem arose when we wanted to test our security module. The > security module is written in top of Tapestry-Spring-Security. The > only way we have found to create tests for this module has been using > Selenium (Tapestry-Test) but our Continuous server can't launch a > browser instance. When using Testify or tapestry page unit tests an > exception is thrown because HttpServletRequest is not present. > > So yes, i could create a mock of the security module in our > application but then how to test that the security is working through > the application? How to assure that one of the developers didn't > forget to add security to a page or event? > > Thanks a lot for your help! > > On Fri, Jul 17, 2009 at 10:30 AM, <p.stavrini...@albourne.com> wrote: > > How you test is up to you Juan, but if I may be so bold as to give > you a humble opinion: I think testing is not worthwhile if you don't > isolate portions of code from their dependencies to validate their > behavior, in other words if you include too much, you will just be > rewriting everything and will eventually need tests for your tests. > If you want to do integration tests then test only integration, and > not the behavior or state of units as such, keep those as separate unit tests. > > > > Sorry, but I don't think I can provide you the solution you > want... but I don't know what will. > > > > Kind regards, > > Peter > > > > ----- Original Message ----- > > From: "Juan E. Maya" <maya.j...@gmail.com> > > To: "Tapestry users" <users@tapestry.apache.org> > > Sent: Friday, 17 July, 2009 11:14:11 GMT +02:00 Athens, Beirut, > Bucharest, Istanbul > > Subject: Re: Tapestry-Spring Security & Page Testing > > > > Yes i tried and although it's possible i would be removing the > > security module from the tests and that's actually one of the critical > > things we want to test when testing the pages. > > > > Fri, Jul 17, 2009 at 9:53 AM, Peter > > Stavrinides<p.stavrini...@albourne.com> wrote: > >> Have you tried to use a Mock object for this? > >> > >> Peter > >> ----- Original Message ----- > >> From: "Juan E. Maya" <maya.j...@gmail.com> > >> To: "Tapestry users" <users@tapestry.apache.org> > >> Sent: Friday, 17 July, 2009 10:25:15 GMT +02:00 Athens, Beirut, > Bucharest, Istanbul > >> Subject: Re: Tapestry-Spring Security & Page Testing > >> > >> Oh sorry for that. I thought it was the page for tapestry-test. I am > >> actually already using testify. > >> > >> The problem i was referring occurs because Spring-Security detects > >> that the render of a page doesn't come from an HttpServletRequest > >> (Correct me if i am wrong). I could just not use the security module > >> at all in my tests but then security will not take part on the testing > >> and i am not so eager to this. > >> > >> > >> On Fri, Jul 17, 2009 at 7:39 AM, Peter > >> Stavrinides<p.stavrini...@albourne.com> wrote: > >>> Testify is not selenium, its basic unit and integration testing, > built on top of Tapestry and page tester you do you need a browser. > >>> > >>> ----- Original Message ----- > >>> From: "Juan E. Maya" <maya.j...@gmail.com> > >>> To: "Tapestry users" <users@tapestry.apache.org> > >>> Sent: Thursday, 16 July, 2009 17:54:23 GMT +02:00 Athens, > Beirut, Bucharest, Istanbul > >>> Subject: Re: Tapestry-Spring Security & Page Testing > >>> > >>> I had already look at it, but due to restrictions in the test server > >>> we can't launch an instance of a browser to execute the test. > >>> > >>> Thanks anyway Peter > >>> > >>> On Thu, Jul 16, 2009 at 4:26 PM, <p.stavrini...@albourne.com> wrote: > >>>> Look at the project Tapestry testify: > >>>> https://tapestry.formos.com/nightly/tapestry-testify/ > >>>> > >>>> This should give you the tools you need to test your pages > precisely, you also will need to include a mocking framework > (EasyMock or Mockito) with testify. > >>>> > >>>> good luck, > >>>> Peter > >>>> > >>>> ----- Original Message ----- > >>>> From: "Juan E. Maya" <maya.j...@gmail.com> > >>>> To: "Tapestry users" <users@tapestry.apache.org> > >>>> Sent: Thursday, 16 July, 2009 17:09:23 GMT +02:00 Athens, > Beirut, Bucharest, Istanbul > >>>> Subject: Re: Tapestry-Spring Security & Page Testing > >>>> > >>>> 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<maya.j...@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-unsubscr...@tapestry.apache.org > >>>> For additional commands, e-mail: users-h...@tapestry.apache.org > >>>> > >>>> > >>>> --------------------------------------------------------------------- > >>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > >>>> For additional commands, e-mail: users-h...@tapestry.apache.org > >>>> > >>>> > >>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > >>> For additional commands, e-mail: users-h...@tapestry.apache.org > >>> > >>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > >>> For additional commands, e-mail: users-h...@tapestry.apache.org > >>> > >>> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > >> For additional commands, e-mail: users-h...@tapestry.apache.org > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > >> For additional commands, e-mail: users-h...@tapestry.apache.org > >> > >> > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > For additional commands, e-mail: users-h...@tapestry.apache.org > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > For additional commands, e-mail: users-h...@tapestry.apache.org > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > --- This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden. Please refer to http://www.db.com/en/content/eu_disclosures.htm for additional EU corporate and regulatory disclosures.