Browse Source

ZOOKEEPER-3263: JAVA9/11 Warnings: Illegal reflective access in zookeer's kerberosUtil

Fixes warning messages of JDK 9/11 by upgrading libraries and refactoring `KerberosUtils` based on experiences of [HADOOP-10848](https://issues.apache.org/jira/browse/HADOOP-10848)

Reviewers please run unit tests with various JDK versions including 9 and 11, because CI only runs on JDK 8. Thanks.

Target branches are master and 3.5

Author: Andor Molnar <andor@apache.org>

Reviewers: Enrico Olivelli <eolivelli@apache.org>

Closes #950 from anmolnar/ZOOKEEPER-3263
Andor Molnar 6 years ago
parent
commit
777f0c15e7

+ 3 - 3
build.xml

@@ -40,11 +40,11 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle.ant">
     <property name="netty.version" value="4.1.29.Final"/>
 
     <property name="junit.version" value="4.12"/>
-    <property name="mockito.version" value="1.8.5"/>
+    <property name="mockito.version" value="2.27.0"/>
     <property name="checkstyle.version" value="7.1.2"/>
     <property name="commons-collections.version" value="3.2.2"/>
 
-    <property name="bouncycastle.version" value="1.60"/>
+    <property name="bouncycastle.version" value="1.61"/>
 
     <property name="jdiff.version" value="1.0.9"/>
     <property name="xerces.version" value="1.4.4"/>
@@ -161,7 +161,7 @@ xmlns:cs="antlib:com.puppycrawl.tools.checkstyle.ant">
     <property name="contrib.dir" value="${basedir}/zookeeper-contrib"/>
     <property name="recipes.dir" value="${basedir}/zookeeper-recipes"/>
 
-    <property name="ivy.version" value="2.4.0"/>
+    <property name="ivy.version" value="2.5.0-rc1"/>
     <property name="ivy.url"
               value="https://repo1.maven.org/maven2/org/apache/ivy/ivy" />
     <property name="ivy.home" value="${user.home}/.ant" />

+ 1 - 1
ivy.xml

@@ -68,7 +68,7 @@
       <exclude org="junit" module="junit"/>
     </dependency>
     <dependency org="junit" name="junit" rev="${junit.version}" conf="test->default"/>
-	<dependency org="org.mockito" name="mockito-all" rev="${mockito.version}"
+	<dependency org="org.mockito" name="mockito-core" rev="${mockito.version}"
                conf="test->default"/>
     <dependency org="com.puppycrawl.tools" name="checkstyle" rev="${checkstyle.version}"
                 conf="test->default">

+ 3 - 3
pom.xml

@@ -274,7 +274,7 @@
     <audience-annotations.version>0.5.0</audience-annotations.version>
     <junit.version>4.12</junit.version>
     <log4j.version>1.2.17</log4j.version>
-    <mockito.version>1.8.5</mockito.version>
+    <mockito.version>2.27.0</mockito.version>
     <hamcrest.version>1.3</hamcrest.version>
     <commons-cli.version>1.2</commons-cli.version>
     <netty.version>4.1.29.Final</netty.version>
@@ -284,7 +284,7 @@
     <jline.version>2.11</jline.version>
     <snappy.version>1.1.7</snappy.version>
     <kerby.version>1.1.0</kerby.version>
-    <bouncycastle.version>1.60</bouncycastle.version>
+    <bouncycastle.version>1.61</bouncycastle.version>
     <commons-collections.version>3.2.2</commons-collections.version>
     <commons-lang.version>2.6</commons-lang.version>
     <dropwizard.version>3.2.5</dropwizard.version>
@@ -394,7 +394,7 @@
       </dependency>
       <dependency>
         <groupId>org.mockito</groupId>
-        <artifactId>mockito-all</artifactId>
+        <artifactId>mockito-core</artifactId>
         <version>${mockito.version}</version>
       </dependency>
       <dependency>

+ 1 - 1
zookeeper-docs/pom.xml

@@ -38,7 +38,7 @@
       <plugin>
         <groupId>com.ruleoftech</groupId>
         <artifactId>markdown-page-generator-plugin</artifactId>
-        <version>0.10</version>
+        <version>2.1.0</version>
         <executions>
           <execution>
             <phase>process-sources</phase>

+ 1 - 1
zookeeper-server/pom.xml

@@ -141,7 +141,7 @@
     </dependency>
     <dependency>
       <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
+      <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>

+ 3 - 21
zookeeper-server/src/main/java/org/apache/zookeeper/server/util/KerberosUtil.java

@@ -18,28 +18,10 @@
 
 package org.apache.zookeeper.server.util;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
+import javax.security.auth.kerberos.KerberosPrincipal;
 
 public class KerberosUtil {
-
-  public static String getDefaultRealm() 
-      throws ClassNotFoundException, NoSuchMethodException, 
-      IllegalArgumentException, IllegalAccessException, 
-      InvocationTargetException {
-    Object kerbConf;
-    Class<?> classRef;
-    Method getInstanceMethod;
-    Method getDefaultRealmMethod;
-    if (System.getProperty("java.vendor").contains("IBM")) {
-      classRef = Class.forName("com.ibm.security.krb5.internal.Config");
-    } else {
-      classRef = Class.forName("sun.security.krb5.Config");
-    }
-    getInstanceMethod = classRef.getMethod("getInstance", new Class<?>[0]);
-    kerbConf = getInstanceMethod.invoke(classRef, new Object[0]);
-    getDefaultRealmMethod = classRef.getDeclaredMethod("getDefaultRealm",
-         new Class<?>[0]);
-    return (String)getDefaultRealmMethod.invoke(kerbConf, new Object[0]);
+  public static String getDefaultRealm() throws IllegalArgumentException {
+    return new KerberosPrincipal("tmp", 1).getRealm();
   }
 }

+ 1 - 1
zookeeper-server/src/test/java/org/apache/zookeeper/ClientReconnectTest.java

@@ -18,7 +18,7 @@
 package org.apache.zookeeper;
 
 
-import static org.mockito.Matchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 

+ 5 - 2
zookeeper-server/src/test/java/org/apache/zookeeper/server/ConnectionMetricsTest.java

@@ -35,12 +35,15 @@ import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.nio.ByteBuffer;
-import java.nio.channels.*;
+import java.nio.channels.SelectableChannel;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.Selector;
+import java.nio.channels.SocketChannel;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import static org.apache.zookeeper.server.NIOServerCnxnFactory.ZOOKEEPER_NIO_SESSIONLESS_CNXN_TIMEOUT;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 

+ 6 - 6
zookeeper-server/src/test/java/org/apache/zookeeper/server/FinalRequestProcessorTest.java

@@ -43,9 +43,9 @@ import java.util.List;
 import static org.hamcrest.Matchers.equalTo;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -81,11 +81,11 @@ public class FinalRequestProcessorTest {
         doAnswer(new Answer() {
             @Override
             public Object answer(InvocationOnMock invocationOnMock) {
-                replyHeaders[0] = (ReplyHeader) invocationOnMock.getArguments()[0];
-                responseRecord[0] = (Record) invocationOnMock.getArguments()[1];
+                replyHeaders[0] = invocationOnMock.getArgument(0);
+                responseRecord[0] = invocationOnMock.getArgument(1);
                 return null;
             }
-        }).when(cnxn).sendResponse(any(ReplyHeader.class), any(Record.class), anyString());
+        }).when(cnxn).sendResponse(any(), any(), anyString());
 
         GetACLRequest getACLRequest = new GetACLRequest();
         getACLRequest.setPath(testPath);

+ 6 - 4
zookeeper-server/src/test/java/org/apache/zookeeper/server/PrepRequestProcessorMetricsTest.java

@@ -36,15 +36,17 @@ import org.slf4j.LoggerFactory;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.*;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 import static org.hamcrest.number.OrderingComparison.greaterThan;
 import static org.hamcrest.number.OrderingComparison.greaterThanOrEqualTo;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.anyString;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.*;
 
 public class PrepRequestProcessorMetricsTest extends ZKTestCase {

+ 2 - 2
zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/LeaderBeanTest.java

@@ -47,8 +47,8 @@ import java.util.Map;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertNotEquals;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;

+ 3 - 3
zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/LearnerHandlerMetricsTest.java

@@ -24,7 +24,7 @@ import org.apache.zookeeper.server.ServerMetrics;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.mockito.Matchers;
+import org.mockito.ArgumentMatchers;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
@@ -35,7 +35,7 @@ import java.net.Socket;
 import java.util.Map;
 
 import static org.hamcrest.number.OrderingComparison.greaterThan;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -66,7 +66,7 @@ public class LearnerHandlerMetricsTest {
                 Thread.sleep(5);
                 return  null;
             }
-        }).when(oa).writeRecord(any(QuorumPacket.class), Matchers.anyString());
+        }).when(oa).writeRecord(any(QuorumPacket.class), ArgumentMatchers.anyString());
 
         learnerHandler = new MockLearnerHandler(socket, leader);
         learnerHandler.setOutputArchive(oa);

+ 6 - 6
zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/LearnerHandlerTest.java

@@ -41,7 +41,7 @@ import org.apache.zookeeper.server.quorum.Leader.Proposal;
 import org.apache.zookeeper.server.util.ZxidUtils;
 import org.junit.Before;
 import org.junit.Test;
-import org.mockito.Matchers;
+import org.mockito.ArgumentMatchers;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 import org.slf4j.Logger;
@@ -137,11 +137,11 @@ public class LearnerHandlerTest extends ZKTestCase {
         // Intercept when startForwarding is called
         leader = mock(Leader.class);
         when(
-                leader.startForwarding(Matchers.any(LearnerHandler.class),
-                        Matchers.anyLong())).thenAnswer(new Answer() {
-            public Object answer(InvocationOnMock invocation) {
-                currentZxid = (Long) invocation.getArguments()[1];
-                return 0;
+                leader.startForwarding(ArgumentMatchers.any(LearnerHandler.class),
+                        ArgumentMatchers.anyLong())).thenAnswer(new Answer<Long>() {
+            public Long answer(InvocationOnMock invocation) {
+                currentZxid = invocation.getArgument(1);
+                return 0L;
             }
         });
         when(leader.getZKDatabase()).thenReturn(db);

+ 1 - 1
zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/LocalPeerBeanTest.java

@@ -22,7 +22,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 

+ 1 - 1
zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java

@@ -20,7 +20,7 @@ package org.apache.zookeeper.server.quorum;
 
 import static org.apache.zookeeper.test.ClientBase.CONNECTION_TIMEOUT;
 import static org.apache.zookeeper.test.ClientBase.createEmptyTestDir;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;

+ 1 - 1
zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/RemotePeerBeanTest.java

@@ -24,7 +24,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 
 import java.net.InetSocketAddress;
 

+ 1 - 1
zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/WatchLeakTest.java

@@ -17,7 +17,7 @@
 
 package org.apache.zookeeper.server.quorum;
 
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 import static org.junit.Assert.*;

+ 3 - 3
zookeeper-server/src/test/java/org/apache/zookeeper/server/util/SerializeUtilsTest.java

@@ -34,9 +34,9 @@ import java.io.IOException;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;