тестирование картирования securityConfig в Grails + Acegi - PullRequest
0 голосов
/ 01 октября 2010

Я пишу тестовые случаи для проекта, который все еще использует плагин Acegi (не более новый плагин Spring Core Security), и на данный момент мне удалось сделать то, что этот сайт (http://www.zorched.net/2008/09/01/grails-testing-acegi-security/)

)

предложил определить, какой пользователь в данный момент вошел в систему. Однако в моем контроллере есть вещи, которые выглядят так:

def list = {
     // code for an "admin account"
}

def list_others = {
     // code for other accounts
}

Теперь я не проверяю контроллер, вошедший в систему. Вместо этого я определил их в SecurityConfig.groovy как:

security {
     ...
     requestMapString = """\
          /someController/list=ROLE_ADMIN
          /someController/list_others=ROLE_OTHERS
     """
     ...
}

Следовательно, если бы у меня был тест, который выглядел так:

void testTrial() {
     // define here that otherUser has a role of ROLE_OTHERS

     authenticate(otherUser, "other") // this calls the authenticate methode in the site I gave earlier
     controller.list()

     // I do an assertion here to check where this goes to
}

Дело в том, что, когда я делаю утверждение, конечно, список расскажет мне, что он перенаправлен в list.gsp ... даже если «залогиненный» пользователь имеет роль ROLE_OTHERS, а не администратор.

Однако, что мне нужно, это как проверить, что только авторизованный пользователь должен иметь доступ? В этом случае, учитывая, что вызов * .list () и вошедший в систему пользователь имеет роль ROLE_OTHERS, я должен был быть перенаправлен на «запрещенную» страницу.

Помощь? Спасибо!

1 Ответ

1 голос
/ 01 октября 2010

Для этого вам понадобятся функциональные тесты. Модульные тесты - это просто классы Groovy или Java, а также некоторые насмешки. Там нет контекста приложения Spring, нет Hibernate, нет базы данных, и что наиболее важно для этого случая нет плагинов.

Интеграционные тесты дают вам больше функциональности, но даже там запросы в основном симулируются, и, поскольку нет контейнера, не срабатывают фильтры. Spring Security (который использует плагин Acegi) основан на цепочке фильтров сервлетов. Поэтому, если вы хотите проверить, правильно ли применяются ваши правила безопасности, вам понадобится работающий сервер, а значит, функциональные тесты.

Существует несколько вариантов функционального тестирования, наиболее популярными из которых являются WebTest: http://grails.org/plugin/webtest, плагин Functional Testing: http://grails.org/plugin/functional-test, и плагин Selenium RC: http://grails.org/plugin/selenium-rc.

Самым новым является Geb: http://grails.org/plugin/geb. Руководство находится по адресу http://geb.codehaus.org/, и недавно здесь было написано сообщение: http://blog.springsource.com/2010/08/28/the-future-of-functional-web-testing/

...