This is awesome Paul :) Thanks a lot! This is exactly what i need. Thanks a lot
On Fri, Jul 17, 2009 at 3:43 PM, Paul Field<paul.fi...@db.com> wrote: > 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. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org