Since you want to test functions implemented using Spring AOP, you need to use the Spring TestContext to run the tests using the application context.
Then you create a basic test with a minimal security configuration:
abstract-security-test.xml :
<security:authentication-manager alias="authenticationManager"> <security:authentication-provider user-service-ref = "userService" /> </security:authentication-manager> <security:global-method-security pre-post-annotations="enabled" /> <bean id = "userService" class = "..." />
AbstractSecurityTest.java :
@ContextConfiguration("abstract-security-test.xml") abstract public class AbstractSecurityTest { @Autowired private AuthenticationManager am; @After public void clear() { SecurityContextHolder.clearContext(); } protected void login(String name, String password) { Authentication auth = new UsernamePasswordAuthenticationToken(name, password); SecurityContextHolder.getContext().setAuthentication(am.authenticate(auth)); } }
Now you can use it in your tests:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(...) public class CreatePostControllerSecurityTest extends AbstractSecurityTest { ... @Test @ExpectedException(AuthenticationCredentialsNotFoundException.class) public void testNoAuth() { controller.modifyContent(...); } @Test @ExpectedException(AccessDeniedException.class) public void testAccessDenied() { login("userWithoutAccessRight", "..."); controller.modifyContent(...); } @Test public void testAuthOK() { login("userWithAccessRight", "..."); controller.modifyContent(...); } }
axtavt Mar 23 '11 at 10:45 2011-03-23 10:45
source share