You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by ij...@apache.org on 2021/09/23 12:10:14 UTC

[kafka] branch trunk updated: MINOR: Replace EasyMock with Mockito in connect:basic-auth-extension (#11321)

This is an automated email from the ASF dual-hosted git repository.

ijuma pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 509c165  MINOR: Replace EasyMock with Mockito in connect:basic-auth-extension (#11321)
509c165 is described below

commit 509c1653fd0d107196fbf599a01d7899f6222160
Author: dengziming <sw...@163.com>
AuthorDate: Thu Sep 23 20:08:06 2021 +0800

    MINOR: Replace EasyMock with Mockito in connect:basic-auth-extension (#11321)
    
    Reviewers: Ismael Juma <is...@juma.me.uk>
---
 build.gradle                                       |   2 +-
 .../BasicAuthSecurityRestExtensionTest.java        |  29 +++---
 .../auth/extension/JaasBasicAuthFilterTest.java    | 114 ++++++++++++---------
 3 files changed, 82 insertions(+), 63 deletions(-)

diff --git a/build.gradle b/build.gradle
index c71de99..7610d4e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2517,7 +2517,7 @@ project(':connect:basic-auth-extension') {
     implementation libs.jaxrsApi
 
     testImplementation libs.bcpkix
-    testImplementation libs.easymock
+    testImplementation libs.mockitoCore
     testImplementation libs.junitJupiter
     testImplementation project(':clients').sourceSets.test.output
 
diff --git a/connect/basic-auth-extension/src/test/java/org/apache/kafka/connect/rest/basic/auth/extension/BasicAuthSecurityRestExtensionTest.java b/connect/basic-auth-extension/src/test/java/org/apache/kafka/connect/rest/basic/auth/extension/BasicAuthSecurityRestExtensionTest.java
index a0ec4bb..b1b5b1e 100644
--- a/connect/basic-auth-extension/src/test/java/org/apache/kafka/connect/rest/basic/auth/extension/BasicAuthSecurityRestExtensionTest.java
+++ b/connect/basic-auth-extension/src/test/java/org/apache/kafka/connect/rest/basic/auth/extension/BasicAuthSecurityRestExtensionTest.java
@@ -19,11 +19,10 @@ package org.apache.kafka.connect.rest.basic.auth.extension;
 
 import org.apache.kafka.connect.errors.ConnectException;
 import org.apache.kafka.connect.rest.ConnectRestExtensionContext;
-import org.easymock.Capture;
-import org.easymock.EasyMock;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
 
 import javax.security.auth.login.Configuration;
 import javax.ws.rs.core.Configurable;
@@ -37,6 +36,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 public class BasicAuthSecurityRestExtensionTest {
 
@@ -55,20 +56,18 @@ public class BasicAuthSecurityRestExtensionTest {
     @SuppressWarnings("unchecked")
     @Test
     public void testJaasConfigurationNotOverwritten() {
-        Capture<JaasBasicAuthFilter> jaasFilter = EasyMock.newCapture();
-        Configurable<? extends Configurable<?>> configurable = EasyMock.mock(Configurable.class);
-        EasyMock.expect(configurable.register(EasyMock.capture(jaasFilter))).andReturn(null);
-  
-        ConnectRestExtensionContext context = EasyMock.mock(ConnectRestExtensionContext.class);
-        EasyMock.expect(context.configurable()).andReturn((Configurable) configurable);
-
-        EasyMock.replay(configurable, context);
-  
+        ArgumentCaptor<JaasBasicAuthFilter> jaasFilter = ArgumentCaptor.forClass(JaasBasicAuthFilter.class);
+        Configurable<? extends Configurable<?>> configurable = mock(Configurable.class);
+        when(configurable.register(jaasFilter.capture())).thenReturn(null);
+
+        ConnectRestExtensionContext context = mock(ConnectRestExtensionContext.class);
+        when(context.configurable()).thenReturn((Configurable) configurable);
+
         BasicAuthSecurityRestExtension extension = new BasicAuthSecurityRestExtension();
-        Configuration overwrittenConfiguration = EasyMock.mock(Configuration.class);
+        Configuration overwrittenConfiguration = mock(Configuration.class);
         Configuration.setConfiguration(overwrittenConfiguration);
         extension.register(context);
-  
+
         assertNotEquals(overwrittenConfiguration, jaasFilter.getValue().configuration,
             "Overwritten JAAS configuration should not be used by basic auth REST extension");
     }
@@ -87,7 +86,7 @@ public class BasicAuthSecurityRestExtensionTest {
     @Test
     public void testGoodJaasConfigInitialization() {
         AtomicBoolean configurationInitializerEvaluated = new AtomicBoolean(false);
-        Configuration mockConfiguration = EasyMock.mock(Configuration.class);
+        Configuration mockConfiguration = mock(Configuration.class);
         Supplier<Configuration> configuration = BasicAuthSecurityRestExtension.initializeConfiguration(() -> {
             configurationInitializerEvaluated.set(true);
             return mockConfiguration;
@@ -109,7 +108,7 @@ public class BasicAuthSecurityRestExtensionTest {
         Exception thrownException = assertThrows(Exception.class, () -> extension.configure(Collections.emptyMap()));
         assertEquals(jaasConfigurationException, thrownException);
 
-        thrownException = assertThrows(Exception.class, () -> extension.register(EasyMock.mock(ConnectRestExtensionContext.class)));
+        thrownException = assertThrows(Exception.class, () -> extension.register(mock(ConnectRestExtensionContext.class)));
         assertEquals(jaasConfigurationException, thrownException);
     }
 }
diff --git a/connect/basic-auth-extension/src/test/java/org/apache/kafka/connect/rest/basic/auth/extension/JaasBasicAuthFilterTest.java b/connect/basic-auth-extension/src/test/java/org/apache/kafka/connect/rest/basic/auth/extension/JaasBasicAuthFilterTest.java
index c6c674a..561095f 100644
--- a/connect/basic-auth-extension/src/test/java/org/apache/kafka/connect/rest/basic/auth/extension/JaasBasicAuthFilterTest.java
+++ b/connect/basic-auth-extension/src/test/java/org/apache/kafka/connect/rest/basic/auth/extension/JaasBasicAuthFilterTest.java
@@ -25,7 +25,6 @@ import javax.ws.rs.core.UriInfo;
 
 import org.apache.kafka.common.security.authenticator.TestJaasConfig;
 import org.apache.kafka.connect.errors.ConnectException;
-import org.easymock.EasyMock;
 import org.junit.jupiter.api.Test;
 
 import java.io.File;
@@ -41,8 +40,11 @@ import java.util.Map;
 import javax.ws.rs.container.ContainerRequestContext;
 import javax.ws.rs.core.Response;
 
-import static org.easymock.EasyMock.replay;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 public class JaasBasicAuthFilterTest {
 
@@ -53,110 +55,133 @@ public class JaasBasicAuthFilterTest {
     public void testSuccess() throws IOException {
         File credentialFile = setupPropertyLoginFile(true);
         JaasBasicAuthFilter jaasBasicAuthFilter = setupJaasFilter("KafkaConnect", credentialFile.getPath());
-        ContainerRequestContext requestContext = setMock("Basic", "user", "password", false);
+        ContainerRequestContext requestContext = setMock("Basic", "user", "password");
         jaasBasicAuthFilter.filter(requestContext);
+
+        verify(requestContext).getMethod();
+        verify(requestContext).getHeaderString(JaasBasicAuthFilter.AUTHORIZATION);
     }
 
     @Test
     public void testEmptyCredentialsFile() throws IOException {
         File credentialFile = setupPropertyLoginFile(false);
         JaasBasicAuthFilter jaasBasicAuthFilter = setupJaasFilter("KafkaConnect", credentialFile.getPath());
-        ContainerRequestContext requestContext = setMock("Basic", "user", "password", false);
+        ContainerRequestContext requestContext = setMock("Basic", "user", "password");
         jaasBasicAuthFilter.filter(requestContext);
-        EasyMock.verify(requestContext);
+
+        verify(requestContext).getMethod();
+        verify(requestContext).getHeaderString(JaasBasicAuthFilter.AUTHORIZATION);
     }
 
     @Test
     public void testBadCredential() throws IOException {
         File credentialFile = setupPropertyLoginFile(true);
         JaasBasicAuthFilter jaasBasicAuthFilter = setupJaasFilter("KafkaConnect", credentialFile.getPath());
-        ContainerRequestContext requestContext = setMock("Basic", "user1", "password", true);
+        ContainerRequestContext requestContext = setMock("Basic", "user1", "password");
         jaasBasicAuthFilter.filter(requestContext);
-        EasyMock.verify(requestContext);
+
+        verify(requestContext).abortWith(any(Response.class));
+        verify(requestContext).getMethod();
+        verify(requestContext).getHeaderString(JaasBasicAuthFilter.AUTHORIZATION);
     }
 
     @Test
     public void testBadPassword() throws IOException {
         File credentialFile = setupPropertyLoginFile(true);
         JaasBasicAuthFilter jaasBasicAuthFilter = setupJaasFilter("KafkaConnect", credentialFile.getPath());
-        ContainerRequestContext requestContext = setMock("Basic", "user", "password1", true);
+        ContainerRequestContext requestContext = setMock("Basic", "user", "password1");
         jaasBasicAuthFilter.filter(requestContext);
-        EasyMock.verify(requestContext);
+
+        verify(requestContext).abortWith(any(Response.class));
+        verify(requestContext).getMethod();
+        verify(requestContext).getHeaderString(JaasBasicAuthFilter.AUTHORIZATION);
     }
 
     @Test
     public void testUnknownBearer() throws IOException {
         File credentialFile = setupPropertyLoginFile(true);
         JaasBasicAuthFilter jaasBasicAuthFilter = setupJaasFilter("KafkaConnect", credentialFile.getPath());
-        ContainerRequestContext requestContext = setMock("Unknown", "user", "password", true);
+        ContainerRequestContext requestContext = setMock("Unknown", "user", "password");
         jaasBasicAuthFilter.filter(requestContext);
-        EasyMock.verify(requestContext);
+
+        verify(requestContext).abortWith(any(Response.class));
+        verify(requestContext).getMethod();
+        verify(requestContext).getHeaderString(JaasBasicAuthFilter.AUTHORIZATION);
     }
 
     @Test
     public void testUnknownLoginModule() throws IOException {
         File credentialFile = setupPropertyLoginFile(true);
         JaasBasicAuthFilter jaasBasicAuthFilter = setupJaasFilter("KafkaConnect1", credentialFile.getPath());
-        ContainerRequestContext requestContext = setMock("Basic", "user", "password", true);
+        ContainerRequestContext requestContext = setMock("Basic", "user", "password");
         jaasBasicAuthFilter.filter(requestContext);
-        EasyMock.verify(requestContext);
+
+        verify(requestContext).abortWith(any(Response.class));
+        verify(requestContext).getMethod();
+        verify(requestContext).getHeaderString(JaasBasicAuthFilter.AUTHORIZATION);
     }
 
     @Test
     public void testUnknownCredentialsFile() throws IOException {
         JaasBasicAuthFilter jaasBasicAuthFilter = setupJaasFilter("KafkaConnect", "/tmp/testcrednetial");
-        ContainerRequestContext requestContext = setMock("Basic", "user", "password", true);
+        ContainerRequestContext requestContext = setMock("Basic", "user", "password");
         jaasBasicAuthFilter.filter(requestContext);
-        EasyMock.verify(requestContext);
+
+        verify(requestContext).abortWith(any(Response.class));
+        verify(requestContext).getMethod();
+        verify(requestContext).getHeaderString(JaasBasicAuthFilter.AUTHORIZATION);
     }
 
     @Test
     public void testNoFileOption() throws IOException {
         JaasBasicAuthFilter jaasBasicAuthFilter = setupJaasFilter("KafkaConnect", null);
-        ContainerRequestContext requestContext = setMock("Basic", "user", "password", true);
+        ContainerRequestContext requestContext = setMock("Basic", "user", "password");
         jaasBasicAuthFilter.filter(requestContext);
-        EasyMock.verify(requestContext);
+
+        verify(requestContext).abortWith(any(Response.class));
+        verify(requestContext).getMethod();
+        verify(requestContext).getHeaderString(JaasBasicAuthFilter.AUTHORIZATION);
     }
 
     @Test
     public void testPostWithoutAppropriateCredential() throws IOException {
-        UriInfo uriInfo = EasyMock.strictMock(UriInfo.class);
-        EasyMock.expect(uriInfo.getPath()).andReturn("connectors/connName/tasks");
-
-        ContainerRequestContext requestContext = EasyMock.strictMock(ContainerRequestContext.class);
-        EasyMock.expect(requestContext.getMethod()).andReturn(HttpMethod.POST);
-        EasyMock.expect(requestContext.getUriInfo()).andReturn(uriInfo);
+        UriInfo uriInfo = mock(UriInfo.class);
+        when(uriInfo.getPath()).thenReturn("connectors/connName/tasks");
 
-        replay(uriInfo, requestContext);
+        ContainerRequestContext requestContext = mock(ContainerRequestContext.class);
+        when(requestContext.getMethod()).thenReturn(HttpMethod.POST);
+        when(requestContext.getUriInfo()).thenReturn(uriInfo);
 
         File credentialFile = setupPropertyLoginFile(true);
         JaasBasicAuthFilter jaasBasicAuthFilter = setupJaasFilter("KafkaConnect1", credentialFile.getPath());
 
         jaasBasicAuthFilter.filter(requestContext);
-        EasyMock.verify(requestContext);
+
+        verify(uriInfo).getPath();
+        verify(requestContext).getMethod();
+        verify(requestContext).getUriInfo();
     }
 
     @Test
     public void testPostNotChangingConnectorTask() throws IOException {
-        UriInfo uriInfo = EasyMock.strictMock(UriInfo.class);
-        EasyMock.expect(uriInfo.getPath()).andReturn("local:randomport/connectors/connName");
+        UriInfo uriInfo = mock(UriInfo.class);
+        when(uriInfo.getPath()).thenReturn("local:randomport/connectors/connName");
 
-        ContainerRequestContext requestContext = EasyMock.strictMock(ContainerRequestContext.class);
-        EasyMock.expect(requestContext.getMethod()).andReturn(HttpMethod.POST);
-        EasyMock.expect(requestContext.getUriInfo()).andReturn(uriInfo);
+        ContainerRequestContext requestContext = mock(ContainerRequestContext.class);
+        when(requestContext.getMethod()).thenReturn(HttpMethod.POST);
+        when(requestContext.getUriInfo()).thenReturn(uriInfo);
         String authHeader = "Basic" + Base64.getEncoder().encodeToString(("user" + ":" + "password").getBytes());
-        EasyMock.expect(requestContext.getHeaderString(JaasBasicAuthFilter.AUTHORIZATION))
-            .andReturn(authHeader);
-        requestContext.abortWith(EasyMock.anyObject(Response.class));
-        EasyMock.expectLastCall();
-
-        replay(uriInfo, requestContext);
+        when(requestContext.getHeaderString(JaasBasicAuthFilter.AUTHORIZATION))
+            .thenReturn(authHeader);
 
         File credentialFile = setupPropertyLoginFile(true);
         JaasBasicAuthFilter jaasBasicAuthFilter = setupJaasFilter("KafkaConnect", credentialFile.getPath());
 
         jaasBasicAuthFilter.filter(requestContext);
-        EasyMock.verify(requestContext);
+
+        verify(requestContext).abortWith(any(Response.class));
+        verify(requestContext).getUriInfo();
+        verify(requestContext).getUriInfo();
     }
 
     @Test
@@ -177,16 +202,11 @@ public class JaasBasicAuthFilterTest {
         return authorization + " " + Base64.getEncoder().encodeToString((username + ":" + password).getBytes());
     }
 
-    private ContainerRequestContext setMock(String authorization, String username, String password, boolean exceptionCase) {
-        ContainerRequestContext requestContext = EasyMock.strictMock(ContainerRequestContext.class);
-        EasyMock.expect(requestContext.getMethod()).andReturn(HttpMethod.GET);
-        EasyMock.expect(requestContext.getHeaderString(JaasBasicAuthFilter.AUTHORIZATION))
-            .andReturn(authHeader(authorization, username, password));
-        if (exceptionCase) {
-            requestContext.abortWith(EasyMock.anyObject(Response.class));
-            EasyMock.expectLastCall();
-        }
-        replay(requestContext);
+    private ContainerRequestContext setMock(String authorization, String username, String password) {
+        ContainerRequestContext requestContext = mock(ContainerRequestContext.class);
+        when(requestContext.getMethod()).thenReturn(HttpMethod.GET);
+        when(requestContext.getHeaderString(JaasBasicAuthFilter.AUTHORIZATION))
+            .thenReturn(authHeader(authorization, username, password));
         return requestContext;
     }