瀏覽代碼

SEC-2631: Add inmemory-jc MockMvc integration tests

Rob Winch 11 年之前
父節點
當前提交
1bff58577c

+ 2 - 0
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")
 }

+ 75 - 3
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 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
-    public void securityConfigurationLoads() {}
-}
+    @WithMockUser
+    public void logoutSuccess() throws Exception {
+        mvc.perform(logout())
+                .andExpect(redirectedUrl("/login?logout"))
+                .andExpect(unauthenticated());
+    }
+}