users@jersey.java.net

Basic Authentication in junit TestContainer

From: Patrick Duin <Patrick.Duin_at_mpi.nl>
Date: Wed, 25 Aug 2010 13:48:44 +0200

Hello,

I am trying to upgrade jersey in my application from 1.1.5 to 1.3 and
I am running into some troubles with my authentication in junit tests.
I am using the grizzly test container with an extra Filter that adds a
UserPrinciple to my HttpServletRequest.
My test extends com.sun.jersey.test.framework.JerseyTest and overrides:

     @Override
     protected AppDescriptor configure() {
         WebAppDescriptor.Builder builder = new
WebAppDescriptor
.Builder
(ComponentRegistryRestService
.class.getPackage().getName()).addFilter(DummySecurityFilter.class,
"DummySecurityFilter");
         return builder.build();
     }


My root resource has the HttpServletRequest injected in a field like
this:
     @Context
     private HttpServletRequest request;

In my tests I then create a request with the proper authentication in
the header. This works fine for most of my tests. I have one test that
does some concurrent requests, it fails sometimes. The Grizzly
FilterChain is not threadsafe and fails on a nullpointer when using
extra filters (this is in the grizzly version 1.9.18-i used by jersey-
test-framework-grizzly-1.3). It is supposed to be fixed in grizzly
1.9.19 version. Is there any workaround at the moment, am I doing
something wrong to get this server authentication working?

What I have tried:
- Use newer version of grizzly, but that is not compatible with the
Jersey-test-framework-grizzly at the moment.
- Use jersey-test-framework-http but I keep getting the error: SEVERE:
Missing dependency for field: private
javax.servlet.http.HttpServletRequest
  I was using this in my old 1.1.5 implementation without troubles. I
cannot seem to get rid of this error unless I use Grizzly
TestContainer. Should I register the HttpServletRequest in the
resourceConfig somewhere?

Kind Regards,
   Patrick.

ps: sticking to jersey 1.1.5 (with a ContainerRequestFilter instead of
a javax.servlet.Filter) for now.