I get an org.apache.openejb.rest.ThreadLocalSecurityContext in the
UserService, but with an empty UserPrincipal.
I found out, that the ApplicationComposer calls the
ThreadLocalContextManager which creates an empty ThreadLocalSecurityContext
instance.  So the question is where to hook in to replace either the
complete manager or the securityContext with a custom one.

2014-11-06 19:13 GMT+01:00 Romain Manni-Bucau <rmannibu...@gmail.com>:

> Hi
>
> You mean you get null? Normally nothing special is needed
>
>
> Romain Manni-Bucau
> @rmannibucau
> http://www.tomitribe.com
> http://rmannibucau.wordpress.com
> https://github.com/rmannibucau
>
>
> 2014-11-06 17:35 GMT+00:00 Ulrich Metzger <ulr...@muehlgasse.de>:
> > Hi list,
> > does anybody know how to mock a SecurityContext which gets injected in a
> > Service Class exposed as Rest service in a junit test?
> >
> > Here is the Service Class (the get method checks the currently logged in
> > user):
> > ##################### ...
> > @Path("/user")
> > @Produces(MediaType.APPLICATION_JSON)
> > @Stateless
> > @Lock(LockType.READ)
> > public class UserService {
> >
> >      @Context
> >     private SecurityContext context;
> >
> >     /**
> >      * returns logged in user
> >      */
> >     @Path("/get")
> >     @GET
> >     @Lock(LockType.WRITE)
> >     public Response get() {
> >         try {
> >             User user = ((UserPrincipal)
> > context.getUserPrincipal()).getUser();
> >             return Response.ok(getDefaultGson().toJson(user),
> > MediaType.APPLICATION_JSON_TYPE).build();
> >         } catch (Exception e) {
> >             logger.debug("no user principal in context");
> >             return Response.status(Status.FORBIDDEN).build();
> >         }
> >     }
> >
> > ... #########################
> >
> > the JUnit tests uses the ApplicationComposer and looks like this:
> >
> > ....#########################
> >
> > @EnableServices(value = "jaxrs")
> > @RunWith(ApplicationComposer.class)
> >
> > public class UserServiceTest {
> >
> >     @Module
> >     @Classes(value = { UserService.class}, cdi = true) // scan these
> classes
> >     public WebApp war() {
> >         return new WebApp() // define rest Application
> >                 .contextRoot("UserServiceTest");
> >     }
> >
> >     @Test
> >     public void get() throws IOException, NamingException {
> >         final Response message = WebClient.create("http://localhost:4204
> ")
> >                 .path("/UserServiceTest/user/get").get(Response.class);
> >         assertEquals(403, message.getStatus());
> >     }
> >
> > ....###################
> >  I tried several hours to find an example how to create a SecurityContext
> > mock in the test, which than is injected in the UserService with no luck.
> > I hope someone has a hint for me.
> >
> > Uli
>

Reply via email to