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.

Reply via email to