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

Reply via email to