Ложный дайджест аутентификации в RestEasy - PullRequest
4 голосов
/ 10 марта 2011

Я использую RestEasy для разработки REST-сервера и использую диспетчер макетов (org.jboss.resteasy.mockMockDispatcherFactory) для тестирования сервиса в моих модульных тестах.Мой сервис требует дайджест-аутентификации, и я хотел бы сделать это частью моего тестирования.

Каждый из моих сервисов принимает параметр @Context SecurityContext securityContext.

Есть ли какой-либо способ ввести фальшивку SecurityContextв диспетчере, чтобы я мог проверить, правильно ли работают мои методы безопасности?

1 Ответ

2 голосов
/ 07 июля 2012

Вы должны добавить SecurityContext в карту данных контекста в ResteasyProviderFactory.

public class SecurityContextTest  {

    @Path("/")
    public static class Service {
        @Context
        SecurityContext context;

        @GET
        public String get(){
            return context.getAuthenticationScheme();
        }
    }

    public static class FakeSecurityContext extends ServletSecurityContext {

        public FakeSecurityContext() {
            super(null);
        }

        @Override
        public String getAuthenticationScheme() {
            return "unit-test-scheme";
        }
    }

    @Test
    public void securityContextTest() throws Exception {
        Dispatcher dispatcher = MockDispatcherFactory.createDispatcher();
        dispatcher.getRegistry().addSingletonResource(new Service());
        ResteasyProviderFactory.getContextDataMap().put(SecurityContext.class, new FakeSecurityContext());

        MockHttpRequest request = MockHttpRequest.get("/");
        MockHttpResponse response = new MockHttpResponse();

        dispatcher.invoke(request, response);

        assertEquals("unit-test-scheme", response.getContentAsString());
    }
}
...