Я играю с Spring Security и сейчас пытаюсь получить некоторые знания о тестировании моего REST-контроллера с точки зрения безопасности.
Итак, я подготовил свой тестовый класс с:
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setup() {
mvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
содержит тестовые случаи в основном следующей или похожей формы:
@Test
public void handleSecuredRequest_shouldReturn200_withAdminUser() throws Exception{
ResultActions action = mvc.perform(get("/secured").with(user("admin").roles("ADMIN")));
int status = action.andReturn().getResponse().getStatus();
assertTrue("expected status code = 200 ; current status code = " + status, status == 200);
}
То, чего я не мог достичь до сих пор, было вещами, касающимися сессий.
В первую очередь мне было бы интересно убедиться, что сессия-недействительность выполняется правильно.
Как мне этого добиться?
EDIT:
Мне удалось найти что-то близкое к решению, сделав следующее на основе
https://stackoverflow.com/a/26281932/6294605:
@Test
public void logout_shouldInvalidateSession_withLoggedInUser() throws Exception{
ResultActions action = mvc.perform(get("/userAsJSON").with(user("user")));
MockHttpSession session = (MockHttpSession) action.andReturn().getRequest().getSession();
ResultActions action2 = mvc.perform(post("/logout").session(session));
ResultActions action3 = mvc.perform(get("/userAsJSON").session(session));
int status3 = action3.andReturn().getResponse().getStatus();
assertTrue("expected status code = 401 ; current status code = " + status3, status3 == 401);
}
Но я не совсем доволен этим.
- Требуется выполнить несколько шагов, чтобы позволить мне проверить, что я хочу.
- В результате 1 .: он не отделен от некоторых других вещей для правильного функционирования (например, конечная точка "/ userAsJSON", возвращающая 401 для неаутентифицированных пользователей).
- Исходя из 2 .: требуется дополнительное внимание, чтобы убедиться, что существуют контрольные примеры, обеспечивающие соответствие формальным требованиям, предъявляемым к моему тесту.
Так что я бы хотел, чтобы вариант был менее подвержен ошибкам.
Есть идеи?