From 1bff58577c7eb279f36e54c7e4d74aea24eee1f5 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 12 Jun 2014 10:54:23 -0500 Subject: [PATCH] SEC-2631: Add inmemory-jc MockMvc integration tests --- samples/inmemory-jc/build.gradle | 2 + .../samples/config/SecurityConfigTests.java | 78 ++++++++++++++++++- 2 files changed, 77 insertions(+), 3 deletions(-) diff --git a/samples/inmemory-jc/build.gradle b/samples/inmemory-jc/build.gradle index 685bbbe62a..5040ae48f5 100644 --- a/samples/inmemory-jc/build.gradle +++ b/samples/inmemory-jc/build.gradle @@ -22,4 +22,6 @@ dependencies { runtime "opensymphony:sitemesh:2.4.2", 'cglib:cglib-nodep:2.2.2', 'ch.qos.logback:logback-classic:0.9.30' + + testCompile project(":spring-security-test") } \ No newline at end of file diff --git a/samples/inmemory-jc/src/test/java/org/springframework/security/samples/config/SecurityConfigTests.java b/samples/inmemory-jc/src/test/java/org/springframework/security/samples/config/SecurityConfigTests.java index 53e0c04696..fbb3233ff1 100644 --- a/samples/inmemory-jc/src/test/java/org/springframework/security/samples/config/SecurityConfigTests.java +++ b/samples/inmemory-jc/src/test/java/org/springframework/security/samples/config/SecurityConfigTests.java @@ -15,19 +15,91 @@ */ package org.springframework.security.samples.config; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.*; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; +import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import javax.servlet.Filter; + +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.samples.mvc.config.WebMvcConfiguration; +import org.springframework.security.test.context.DefaultSecurityTestExecutionListeners; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.security.test.context.support.WithSecurityContextTestExcecutionListener; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; +import org.springframework.test.context.support.DirtiesContextTestExecutionListener; +import org.springframework.test.context.transaction.TransactionalTestExecutionListener; +import org.springframework.test.context.web.ServletTestExecutionListener; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; /** * @author Rob Winch * */ @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes=SecurityConfig.class) +@ContextConfiguration(classes={RootConfiguration.class, WebMvcConfiguration.class}) +@WebAppConfiguration +@DefaultSecurityTestExecutionListeners public class SecurityConfigTests { + private MockMvc mvc; + + @Autowired + private WebApplicationContext context; + + @Autowired + private Filter springSecurityFilterChain; + + @Before + public void setup() { + mvc = MockMvcBuilders + .webAppContextSetup(context) + .addFilters(springSecurityFilterChain) + .defaultRequest(get("/").with(testSecurityContext())) + .build(); + } @Test - public void securityConfigurationLoads() {} -} + public void requestProtectedResourceRequiresAuthentication() throws Exception { + mvc.perform(get("/")) + .andExpect(redirectedUrl("http://localhost/login")); + } + + @Test + public void loginSuccess() throws Exception { + mvc.perform(formLogin()) + .andExpect(redirectedUrl("/")); + } + + @Test + public void loginFailure() throws Exception { + mvc.perform(formLogin().password("invalid")) + .andExpect(redirectedUrl("/login?error")); + } + + @Test + @WithMockUser + public void requestProtectedResourceWithUser() throws Exception { + mvc.perform(get("/")) + .andExpect(status().isOk()); + } + + @Test + @WithMockUser + public void logoutSuccess() throws Exception { + mvc.perform(logout()) + .andExpect(redirectedUrl("/login?logout")) + .andExpect(unauthenticated()); + } +} \ No newline at end of file