public void securityContextPropagation()
throws Exception
{
final String category = "test" ;
final String service = "securityContextPropagation" ;
final MockCourier mockCourier = new PropagationMockCourier() ;
MockRegistry.register(category, service, mockCourier) ;
final ServiceInvoker si = new ServiceInvoker(category, service) ;
final Message message = MessageFactory.getInstance().getMessage() ;
assertNull("securityContext", SecurityContext.getSecurityContext()) ;
assertNull("message context", message.getContext().getContext(SecurityService.CONTEXT)) ;
final SealedObject securityContext = SecurityContext.encryptContext(new SecurityContext()) ;
SecurityContext.setSecurityContext(securityContext) ;
assertNotNull("securityContext", SecurityContext.getSecurityContext()) ;
si.deliverAsync(message) ;
assertNotSame("messages", message, mockCourier.message) ;
assertNull("message context", message.getContext().getContext(SecurityService.CONTEXT)) ;
assertNotNull("delivered message context", mockCourier.message.getContext().getContext(SecurityService.CONTEXT)) ;
assertNotNull("securityContext", SecurityContext.getSecurityContext()) ;
mockCourier.reset();
si.deliverAsync(message) ;
assertNotSame("messages", message, mockCourier.message) ;
assertNull("message context", message.getContext().getContext(SecurityService.CONTEXT)) ;
assertNotNull("delivered message context", mockCourier.message.getContext().getContext(SecurityService.CONTEXT)) ;