Ver Fonte

Use powermock for testing servlet 3.0 functionality instead of distinct classpaths

Rob Winch há 13 anos atrás
pai
commit
2fba10ab61

+ 1 - 1
gradle/javaprojects.gradle

@@ -12,7 +12,7 @@ hsqlVersion = '1.8.0.10'
 slf4jVersion = '1.6.1'
 logbackVersion = '0.9.29'
 cglibVersion = '2.2'
-powerMockVersion = '1.4.10'
+powerMockVersion = '1.4.12'
 
 bundlorProperties = [
     version: version,

+ 28 - 8
web/src/test/java/org/springframework/security/web/authentication/rememberme/AbstractRememberMeServicesServlet3Tests.java

@@ -1,26 +1,46 @@
 package org.springframework.security.web.authentication.rememberme;
 
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Matchers.same;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import static org.powermock.api.mockito.PowerMockito.mock;
+import static org.powermock.api.mockito.PowerMockito.spy;
+import static org.powermock.api.mockito.PowerMockito.verifyStatic;
+import static org.powermock.api.mockito.PowerMockito.when;
+
+import java.lang.reflect.Method;
 
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.web.authentication.rememberme.AbstractRememberMeServicesTests.MockRememberMeServices;
 import org.springframework.util.ReflectionUtils;
 
 /**
- * Note: This test will fail in the IDE since it needs to be ran with servlet 3.0 and servlet 2.5 is also on the classpath.
  *
  * @author Rob Winch
  */
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({Method.class, ReflectionUtils.class})
 public class AbstractRememberMeServicesServlet3Tests {
+    @Mock
+    private Method method;
+
+    @Before
+    public void setUp() throws Exception {
+        spy(ReflectionUtils.class);
+
+        when(ReflectionUtils.findMethod(Cookie.class, "setHttpOnly", boolean.class)).thenReturn(method);
+    }
 
     @Test
     public void httpOnlySetInServlet30DefaultConstructor() throws Exception {
@@ -31,8 +51,8 @@ public class AbstractRememberMeServicesServlet3Tests {
         MockRememberMeServices services = new MockRememberMeServices();
         services.setCookie(new String[] {"mycookie"}, 1000, request, response);
         verify(response).addCookie(cookie.capture());
-        Cookie rememberme = cookie.getValue();
-        assertTrue((Boolean)ReflectionUtils.invokeMethod(rememberme.getClass().getMethod("isHttpOnly"),rememberme));
+        verifyStatic();
+        ReflectionUtils.invokeMethod(same(method), eq(cookie.getValue()), eq(true));
     }
 
     @Test
@@ -44,7 +64,7 @@ public class AbstractRememberMeServicesServlet3Tests {
         MockRememberMeServices services = new MockRememberMeServices("key",mock(UserDetailsService.class));
         services.setCookie(new String[] {"mycookie"}, 1000, request, response);
         verify(response).addCookie(cookie.capture());
-        Cookie rememberme = cookie.getValue();
-        assertTrue((Boolean)ReflectionUtils.invokeMethod(rememberme.getClass().getMethod("isHttpOnly"),rememberme));
+        verifyStatic();
+        ReflectionUtils.invokeMethod(same(method), eq(cookie.getValue()), eq(true));
     }
 }

+ 9 - 30
web/web.gradle

@@ -1,9 +1,3 @@
-// Web module build file
-configurations {
-    servlet3Test
-    servlet3Test.exclude group: 'javax.servlet', name: 'sevlet-api'
-}
-
 dependencies {
     compile project(':spring-security-core'),
             'aopalliance:aopalliance:1.0',
@@ -17,30 +11,15 @@ dependencies {
 
     provided 'javax.servlet:servlet-api:2.5'
 
-    servlet3Test 'org.jboss.spec.javax.servlet:jboss-servlet-api_3.0_spec:1.0.0.Final'
-
     testCompile project(':spring-security-core').sourceSets.test.classes,
                 'commons-codec:commons-codec:1.3',
-                "org.springframework:spring-test:$springVersion"
-    testRuntime "hsqldb:hsqldb:$hsqlVersion"
-}
+                "org.springframework:spring-test:$springVersion",
+                "org.powermock:powermock-core:$powerMockVersion",
+                "org.powermock:powermock-api-support:$powerMockVersion",
+                "org.powermock:powermock-module-junit4-common:$powerMockVersion",
+                "org.powermock:powermock-module-junit4:$powerMockVersion",
+                "org.powermock:powermock-api-mockito:$powerMockVersion",
+                "org.powermock:powermock-reflect:$powerMockVersion"
 
-configurations.testRuntime.allDependencies.each {
-    if( !(it.group == 'javax.servlet' && it.name == 'servlet-api') ) {
-        configurations.servlet3Test.addDependency it
-    }
-}
-
-test {
-    exclude '**/*Servlet3Tests.class'
-}
-
-task servlet3Test(type: Test, dependsOn: testClasses) {
-    testClassesDir = sourceSets.test.classesDir
-    logging.captureStandardOutput(LogLevel.INFO)
-    classpath = sourceSets.main.classes + sourceSets.test.classes + configurations.servlet3Test
-    maxParallelForks = 1
-    testReport = false
-    include '**/*Servlet3Tests.class'
-}
-check.dependsOn servlet3Test
+    testRuntime "hsqldb:hsqldb:$hsqlVersion"
+}