You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by sz...@apache.org on 2017/08/21 22:19:23 UTC

incubator-ratis git commit: RATIS-108. Add a timeout for all the tests.

Repository: incubator-ratis
Updated Branches:
  refs/heads/master c0c3a3748 -> 704072c5c


RATIS-108. Add a timeout for all the tests.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/704072c5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/704072c5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/704072c5

Branch: refs/heads/master
Commit: 704072c5c4df67704ba0df38e965857672551fd7
Parents: c0c3a37
Author: Tsz-Wo Nicholas Sze <sz...@hortonworks.com>
Authored: Mon Aug 21 14:52:30 2017 -0700
Committer: Tsz-Wo Nicholas Sze <sz...@hortonworks.com>
Committed: Mon Aug 21 14:52:30 2017 -0700

----------------------------------------------------------------------
 .../test/java/org/apache/ratis/BaseTest.java    | 72 ++++++++++++++++++++
 .../org/apache/ratis/util/TestLifeCycle.java    |  3 +-
 .../org/apache/ratis/util/TestTimeDuration.java |  2 +-
 .../ratis/util/TestTraditionalBinaryPrefix.java |  2 +-
 .../java/org/apache/ratis/TestBatchAppend.java  | 10 +--
 .../org/apache/ratis/TestRestartRaftPeer.java   | 10 +--
 .../examples/arithmetic/TestArithmetic.java     |  3 +-
 .../arithmetic/expression/TestExpression.java   | 15 ++--
 .../TestRaftStateMachineException.java          |  7 +-
 .../org/apache/ratis/grpc/TestRaftStream.java   |  4 +-
 .../apache/ratis/hadooprpc/HadoopFactory.java   |  1 -
 .../hadooprpc/server/HadoopRpcService.java      |  2 +-
 .../java/org/apache/ratis/MiniRaftCluster.java  |  2 +-
 .../java/org/apache/ratis/RaftBasicTests.java   | 10 +--
 .../ratis/RaftNotLeaderExceptionBaseTest.java   | 10 +--
 .../org/apache/ratis/RaftRetryCacheTests.java   | 11 +--
 .../java/org/apache/ratis/RaftTestUtil.java     | 54 ++++++---------
 .../org/apache/ratis/protocol/TestRaftId.java   |  8 ++-
 .../apache/ratis/server/TestRaftServerJmx.java  | 12 +---
 .../impl/RaftReconfigurationBaseTest.java       |  6 +-
 .../server/impl/ReinitializationBaseTest.java   |  8 +--
 .../ratis/server/storage/TestCacheEviction.java |  6 +-
 .../server/storage/TestRaftLogReadWrite.java    | 12 ++--
 .../server/storage/TestRaftLogSegment.java      | 10 +--
 .../ratis/server/storage/TestRaftStorage.java   |  6 +-
 .../server/storage/TestSegmentedRaftLog.java    | 15 ++--
 .../statemachine/RaftSnapshotBaseTest.java      |  3 +-
 .../ratis/statemachine/TestStateMachine.java    |  8 +--
 28 files changed, 151 insertions(+), 161 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-common/src/test/java/org/apache/ratis/BaseTest.java
----------------------------------------------------------------------
diff --git a/ratis-common/src/test/java/org/apache/ratis/BaseTest.java b/ratis-common/src/test/java/org/apache/ratis/BaseTest.java
new file mode 100644
index 0000000..659da0b
--- /dev/null
+++ b/ratis-common/src/test/java/org/apache/ratis/BaseTest.java
@@ -0,0 +1,72 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ratis;
+
+import org.apache.log4j.Level;
+import org.apache.ratis.conf.ConfUtils;
+import org.apache.ratis.util.JavaUtils;
+import org.apache.ratis.util.LogUtils;
+import org.junit.Rule;
+import org.junit.rules.Timeout;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.function.Supplier;
+
+public abstract class BaseTest {
+  public final Logger LOG = LoggerFactory.getLogger(getClass());
+
+  {
+    LogUtils.setLogLevel(ConfUtils.LOG, Level.WARN);
+  }
+
+  @Rule
+  public final Timeout globalTimeout = new Timeout(getGlobalTimeoutMs());
+
+  public int getGlobalTimeoutMs() {
+    return 100_000;
+  }
+
+  private static final Supplier<File> rootTestDir = JavaUtils.memoize(
+      () -> JavaUtils.callAsUnchecked(() -> {
+        final File dir = new File(System.getProperty("test.build.data", "target/test/data"),
+            Long.toHexString(ThreadLocalRandom.current().nextLong()));
+        if (dir.exists() && !dir.isDirectory()) {
+          throw new IOException(dir + " already exists and is not a directory");
+        } else if (!dir.exists() && !dir.mkdirs()) {
+          throw new IOException("Cannot create test directory " + dir);
+        }
+        return dir;
+      }));
+
+
+  public static File getRootTestDir() {
+    return rootTestDir.get();
+  }
+
+  public static File getClassTestDir(Class<?> caller) {
+    return new File(getRootTestDir(), caller.getSimpleName());
+  }
+
+  public File getTestDir() {
+    return getClassTestDir(getClass());
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-common/src/test/java/org/apache/ratis/util/TestLifeCycle.java
----------------------------------------------------------------------
diff --git a/ratis-common/src/test/java/org/apache/ratis/util/TestLifeCycle.java b/ratis-common/src/test/java/org/apache/ratis/util/TestLifeCycle.java
index 82816c9..9782792 100644
--- a/ratis-common/src/test/java/org/apache/ratis/util/TestLifeCycle.java
+++ b/ratis-common/src/test/java/org/apache/ratis/util/TestLifeCycle.java
@@ -17,7 +17,6 @@
  */
 package org.apache.ratis.util;
 
-import org.apache.ratis.util.LifeCycle;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -31,7 +30,7 @@ public class TestLifeCycle {
    * {@link LifeCycle} uses predecessors to validate transitions
    * while this test uses successors.
    */
-  @Test
+  @Test(timeout = 1000)
   public void testIsValid() throws Exception {
     final Map<LifeCycle.State, List<LifeCycle.State>> successors
         = new EnumMap<>(LifeCycle.State.class);

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-common/src/test/java/org/apache/ratis/util/TestTimeDuration.java
----------------------------------------------------------------------
diff --git a/ratis-common/src/test/java/org/apache/ratis/util/TestTimeDuration.java b/ratis-common/src/test/java/org/apache/ratis/util/TestTimeDuration.java
index a724fb3..06d9301 100644
--- a/ratis-common/src/test/java/org/apache/ratis/util/TestTimeDuration.java
+++ b/ratis-common/src/test/java/org/apache/ratis/util/TestTimeDuration.java
@@ -30,7 +30,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
 public class TestTimeDuration {
-  @Test(timeout = 10000)
+  @Test(timeout = 1000)
   public void testTimeDuration() throws Exception {
     Arrays.asList(TimeUnit.values())
         .forEach(a -> assertNotNull(Abbreviation.valueOf(a.name())));

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-common/src/test/java/org/apache/ratis/util/TestTraditionalBinaryPrefix.java
----------------------------------------------------------------------
diff --git a/ratis-common/src/test/java/org/apache/ratis/util/TestTraditionalBinaryPrefix.java b/ratis-common/src/test/java/org/apache/ratis/util/TestTraditionalBinaryPrefix.java
index f8068a9..26a62da 100644
--- a/ratis-common/src/test/java/org/apache/ratis/util/TestTraditionalBinaryPrefix.java
+++ b/ratis-common/src/test/java/org/apache/ratis/util/TestTraditionalBinaryPrefix.java
@@ -25,7 +25,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
 public class TestTraditionalBinaryPrefix {
-  @Test(timeout = 10000)
+  @Test(timeout = 1000)
   public void testTraditionalBinaryPrefix() throws Exception {
     //test string2long(..)
     String[] symbol = {"k", "m", "g", "t", "p", "e"};

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-examples/src/test/java/org/apache/ratis/TestBatchAppend.java
----------------------------------------------------------------------
diff --git a/ratis-examples/src/test/java/org/apache/ratis/TestBatchAppend.java b/ratis-examples/src/test/java/org/apache/ratis/TestBatchAppend.java
index 0cd863b..d95a233 100644
--- a/ratis-examples/src/test/java/org/apache/ratis/TestBatchAppend.java
+++ b/ratis-examples/src/test/java/org/apache/ratis/TestBatchAppend.java
@@ -31,13 +31,9 @@ import org.apache.ratis.util.LogUtils;
 import org.apache.ratis.util.SizeInBytes;
 import org.junit.After;
 import org.junit.Assert;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.Timeout;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -52,8 +48,7 @@ import java.util.stream.Stream;
  * Enable raft.server.log.appender.batch.enabled and test LogAppender
  */
 @RunWith(Parameterized.class)
-public class TestBatchAppend {
-  static Logger LOG = LoggerFactory.getLogger(TestBatchAppend.class);
+public class TestBatchAppend extends BaseTest {
   static {
     LogUtils.setLogLevel(RaftServerImpl.LOG, Level.DEBUG);
     LogUtils.setLogLevel(RaftClient.LOG, Level.DEBUG);
@@ -76,9 +71,6 @@ public class TestBatchAppend {
   @Parameterized.Parameter
   public MiniRaftCluster cluster;
 
-  @Rule
-  public Timeout globalTimeout = new Timeout(60 * 1000);
-
   @After
   public void tearDown() {
     if (cluster != null) {

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-examples/src/test/java/org/apache/ratis/TestRestartRaftPeer.java
----------------------------------------------------------------------
diff --git a/ratis-examples/src/test/java/org/apache/ratis/TestRestartRaftPeer.java b/ratis-examples/src/test/java/org/apache/ratis/TestRestartRaftPeer.java
index 62f325f..b6d9eab 100644
--- a/ratis-examples/src/test/java/org/apache/ratis/TestRestartRaftPeer.java
+++ b/ratis-examples/src/test/java/org/apache/ratis/TestRestartRaftPeer.java
@@ -31,13 +31,9 @@ import org.apache.ratis.statemachine.StateMachine;
 import org.apache.ratis.util.LogUtils;
 import org.apache.ratis.util.SizeInBytes;
 import org.junit.Assert;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.Timeout;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -47,8 +43,7 @@ import java.util.Collection;
  * Test restarting raft peers.
  */
 @RunWith(Parameterized.class)
-public class TestRestartRaftPeer {
-  static Logger LOG = LoggerFactory.getLogger(TestRestartRaftPeer.class);
+public class TestRestartRaftPeer extends BaseTest {
   static {
     LogUtils.setLogLevel(RaftServerImpl.LOG, Level.DEBUG);
     LogUtils.setLogLevel(RaftLog.LOG, Level.DEBUG);
@@ -67,9 +62,6 @@ public class TestRestartRaftPeer {
   @Parameterized.Parameter
   public MiniRaftCluster cluster;
 
-  @Rule
-  public Timeout globalTimeout = new Timeout(60 * 1000);
-
   @Test
   public void restartFollower() throws Exception {
     cluster.start();

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-examples/src/test/java/org/apache/ratis/examples/arithmetic/TestArithmetic.java
----------------------------------------------------------------------
diff --git a/ratis-examples/src/test/java/org/apache/ratis/examples/arithmetic/TestArithmetic.java b/ratis-examples/src/test/java/org/apache/ratis/examples/arithmetic/TestArithmetic.java
index 5ffb70f..6a16316 100644
--- a/ratis-examples/src/test/java/org/apache/ratis/examples/arithmetic/TestArithmetic.java
+++ b/ratis-examples/src/test/java/org/apache/ratis/examples/arithmetic/TestArithmetic.java
@@ -19,6 +19,7 @@ package org.apache.ratis.examples.arithmetic;
 
 
 import org.apache.log4j.Level;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.MiniRaftCluster;
 import org.apache.ratis.RaftTestUtil;
 import org.apache.ratis.client.RaftClient;
@@ -36,7 +37,7 @@ import java.io.IOException;
 import java.util.Collection;
 
 @RunWith(Parameterized.class)
-public class TestArithmetic {
+public class TestArithmetic extends BaseTest {
   static {
     LogUtils.setLogLevel(ArithmeticStateMachine.LOG, Level.ALL);
   }

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-examples/src/test/java/org/apache/ratis/examples/arithmetic/expression/TestExpression.java
----------------------------------------------------------------------
diff --git a/ratis-examples/src/test/java/org/apache/ratis/examples/arithmetic/expression/TestExpression.java b/ratis-examples/src/test/java/org/apache/ratis/examples/arithmetic/expression/TestExpression.java
index a2d6e29..a21c11f 100644
--- a/ratis-examples/src/test/java/org/apache/ratis/examples/arithmetic/expression/TestExpression.java
+++ b/ratis-examples/src/test/java/org/apache/ratis/examples/arithmetic/expression/TestExpression.java
@@ -18,21 +18,18 @@
 package org.apache.ratis.examples.arithmetic.expression;
 
 
-import org.apache.ratis.examples.arithmetic.expression.BinaryExpression;
-import org.apache.ratis.examples.arithmetic.expression.DoubleValue;
-import org.apache.ratis.examples.arithmetic.expression.Expression;
-import org.apache.ratis.examples.arithmetic.expression.UnaryExpression;
-import org.apache.ratis.examples.arithmetic.expression.Variable;
+import org.apache.ratis.BaseTest;
 import org.junit.Assert;
 import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.Random;
 import java.util.concurrent.ThreadLocalRandom;
 
-public class TestExpression {
-  static final Logger LOG = LoggerFactory.getLogger(TestExpression.class);
+public class TestExpression extends BaseTest {
+  @Override
+  public int getGlobalTimeoutMs() {
+    return 1000;
+  }
 
   @Test
   public void testArithmeticUtils() throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-examples/src/test/java/org/apache/ratis/statemachine/TestRaftStateMachineException.java
----------------------------------------------------------------------
diff --git a/ratis-examples/src/test/java/org/apache/ratis/statemachine/TestRaftStateMachineException.java b/ratis-examples/src/test/java/org/apache/ratis/statemachine/TestRaftStateMachineException.java
index 5845ca9..f893cd3 100644
--- a/ratis-examples/src/test/java/org/apache/ratis/statemachine/TestRaftStateMachineException.java
+++ b/ratis-examples/src/test/java/org/apache/ratis/statemachine/TestRaftStateMachineException.java
@@ -18,6 +18,7 @@
 package org.apache.ratis.statemachine;
 
 import org.apache.log4j.Level;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.MiniRaftCluster;
 import org.apache.ratis.RaftTestUtil;
 import org.apache.ratis.client.RaftClient;
@@ -33,8 +34,6 @@ import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -43,9 +42,7 @@ import java.util.concurrent.CompletableFuture;
 import static org.junit.Assert.fail;
 
 @RunWith(Parameterized.class)
-public class TestRaftStateMachineException {
-  public static final Logger LOG = LoggerFactory.getLogger(TestRaftStateMachineException.class);
-
+public class TestRaftStateMachineException extends BaseTest {
   static {
     LogUtils.setLogLevel(RaftServerImpl.LOG, Level.DEBUG);
     LogUtils.setLogLevel(RaftLog.LOG, Level.DEBUG);

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-grpc/src/test/java/org/apache/ratis/grpc/TestRaftStream.java
----------------------------------------------------------------------
diff --git a/ratis-grpc/src/test/java/org/apache/ratis/grpc/TestRaftStream.java b/ratis-grpc/src/test/java/org/apache/ratis/grpc/TestRaftStream.java
index c67572b..ccd6c10 100644
--- a/ratis-grpc/src/test/java/org/apache/ratis/grpc/TestRaftStream.java
+++ b/ratis-grpc/src/test/java/org/apache/ratis/grpc/TestRaftStream.java
@@ -18,6 +18,7 @@
 package org.apache.ratis.grpc;
 
 import org.apache.log4j.Level;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.RaftTestUtil;
 import org.apache.ratis.conf.RaftProperties;
 import org.apache.ratis.server.protocol.TermIndex;
@@ -45,11 +46,10 @@ import java.util.function.Supplier;
 import static org.apache.ratis.RaftTestUtil.waitForLeader;
 import static org.junit.Assert.fail;
 
-public class TestRaftStream {
+public class TestRaftStream extends BaseTest {
   static {
     LogUtils.setLogLevel(AppendStreamer.LOG, Level.ALL);
   }
-  static final Logger LOG = LoggerFactory.getLogger(TestRaftStream.class);
 
   private static final RaftProperties prop = new RaftProperties();
   private static final int NUM_SERVERS = 3;

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-hadoop/src/main/java/org/apache/ratis/hadooprpc/HadoopFactory.java
----------------------------------------------------------------------
diff --git a/ratis-hadoop/src/main/java/org/apache/ratis/hadooprpc/HadoopFactory.java b/ratis-hadoop/src/main/java/org/apache/ratis/hadooprpc/HadoopFactory.java
index f6c4885..75fe363 100644
--- a/ratis-hadoop/src/main/java/org/apache/ratis/hadooprpc/HadoopFactory.java
+++ b/ratis-hadoop/src/main/java/org/apache/ratis/hadooprpc/HadoopFactory.java
@@ -24,7 +24,6 @@ import org.apache.ratis.hadooprpc.client.HadoopClientRpc;
 import org.apache.ratis.hadooprpc.server.HadoopRpcService;
 import org.apache.ratis.rpc.SupportedRpcType;
 import org.apache.ratis.server.RaftServer;
-import org.apache.ratis.server.impl.RaftServerImpl;
 import org.apache.ratis.server.impl.ServerFactory;
 
 public class HadoopFactory extends ServerFactory.BaseFactory implements ClientFactory {

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-hadoop/src/main/java/org/apache/ratis/hadooprpc/server/HadoopRpcService.java
----------------------------------------------------------------------
diff --git a/ratis-hadoop/src/main/java/org/apache/ratis/hadooprpc/server/HadoopRpcService.java b/ratis-hadoop/src/main/java/org/apache/ratis/hadooprpc/server/HadoopRpcService.java
index 15afde8..0a7b430 100644
--- a/ratis-hadoop/src/main/java/org/apache/ratis/hadooprpc/server/HadoopRpcService.java
+++ b/ratis-hadoop/src/main/java/org/apache/ratis/hadooprpc/server/HadoopRpcService.java
@@ -92,7 +92,7 @@ public class HadoopRpcService implements RaftServerRpc {
 
   private HadoopRpcService(RaftServer server, final Configuration conf) {
     this.proxies = new PeerProxyMap<>(
-        p -> new Proxy(RaftServerProtocolPB.class, p.getAddress(), conf));
+        p -> new Proxy<>(RaftServerProtocolPB.class, p.getAddress(), conf));
     this.id = server.getId();
     try {
       this.ipcServer = newRpcServer(server, conf);

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java b/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java
index c47966f..f003127 100644
--- a/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java
+++ b/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java
@@ -108,7 +108,7 @@ public abstract class MiniRaftCluster {
   }
 
   private File getStorageDir(RaftPeerId id) {
-    return new File(RaftTestUtil.getTestBaseDirectory()
+    return new File(BaseTest.getRootTestDir()
         + "/" + getClass().getSimpleName() + "/" + id);
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java b/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
index 26eda15..b227e47 100644
--- a/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
+++ b/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
@@ -23,9 +23,6 @@ import org.apache.ratis.conf.RaftProperties;
 import org.apache.ratis.protocol.RaftPeerId;
 import org.apache.ratis.server.impl.RaftServerImpl;
 import org.junit.*;
-import org.junit.rules.Timeout;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import static org.apache.ratis.RaftTestUtil.waitAndKillLeader;
 import static org.apache.ratis.RaftTestUtil.waitForLeader;
@@ -37,9 +34,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-public abstract class RaftBasicTests {
-  public static final Logger LOG = LoggerFactory.getLogger(RaftBasicTests.class);
-
+public abstract class RaftBasicTests extends BaseTest {
   public static final int NUM_SERVERS = 5;
 
   protected static final RaftProperties properties = new RaftProperties();
@@ -50,9 +45,6 @@ public abstract class RaftBasicTests {
     return properties;
   }
 
-  @Rule
-  public Timeout globalTimeout = new Timeout(120 * 1000);
-
   @Before
   public void setup() throws IOException {
     Assert.assertNull(getCluster().getLeader());

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/RaftNotLeaderExceptionBaseTest.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/RaftNotLeaderExceptionBaseTest.java b/ratis-server/src/test/java/org/apache/ratis/RaftNotLeaderExceptionBaseTest.java
index 43c9fff..119409c 100644
--- a/ratis-server/src/test/java/org/apache/ratis/RaftNotLeaderExceptionBaseTest.java
+++ b/ratis-server/src/test/java/org/apache/ratis/RaftNotLeaderExceptionBaseTest.java
@@ -27,9 +27,6 @@ import org.apache.ratis.server.impl.RaftServerImpl;
 import org.apache.ratis.server.storage.RaftLog;
 import org.apache.ratis.util.LogUtils;
 import org.junit.*;
-import org.junit.rules.Timeout;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -37,20 +34,15 @@ import java.util.Collection;
 
 import static org.apache.ratis.server.impl.RaftServerConstants.DEFAULT_CALLID;
 
-public abstract class RaftNotLeaderExceptionBaseTest {
+public abstract class RaftNotLeaderExceptionBaseTest extends BaseTest {
   static {
     LogUtils.setLogLevel(RaftServerImpl.LOG, Level.DEBUG);
     LogUtils.setLogLevel(RaftLog.LOG, Level.DEBUG);
     LogUtils.setLogLevel(RaftClient.LOG, Level.DEBUG);
   }
 
-  public static final Logger LOG =
-      LoggerFactory.getLogger(RaftNotLeaderExceptionBaseTest.class);
   public static final int NUM_PEERS = 5;
 
-  @Rule
-  public Timeout globalTimeout = new Timeout(60 * 1000);
-
   private MiniRaftCluster cluster;
 
   public abstract MiniRaftCluster.Factory<?> getFactory();

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/RaftRetryCacheTests.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/RaftRetryCacheTests.java b/ratis-server/src/test/java/org/apache/ratis/RaftRetryCacheTests.java
index 4317be1..3398a0f 100644
--- a/ratis-server/src/test/java/org/apache/ratis/RaftRetryCacheTests.java
+++ b/ratis-server/src/test/java/org/apache/ratis/RaftRetryCacheTests.java
@@ -31,20 +31,14 @@ import org.apache.ratis.server.impl.RaftServerTestUtil;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.Timeout;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 
 import static java.util.Arrays.asList;
 import static org.apache.ratis.server.impl.RaftServerConstants.DEFAULT_CALLID;
 
-public abstract class RaftRetryCacheTests {
-  public static final Logger LOG = LoggerFactory.getLogger(RaftRetryCacheTests.class);
-
+public abstract class RaftRetryCacheTests extends BaseTest {
   public static final int NUM_SERVERS = 3;
   protected static final RaftProperties properties = new RaftProperties();
 
@@ -54,9 +48,6 @@ public abstract class RaftRetryCacheTests {
     return properties;
   }
 
-  @Rule
-  public Timeout globalTimeout = new Timeout(120 * 1000);
-
   @Before
   public void setup() throws IOException {
     Assert.assertNull(getCluster().getLeader());

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java b/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java
index ddeaf8f..46ff7d8 100644
--- a/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java
+++ b/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java
@@ -48,28 +48,24 @@ import java.util.function.BooleanSupplier;
 import java.util.function.IntSupplier;
 
 public interface RaftTestUtil {
-  public static final LogEntryProto[] EMPTY_LOGENTRY_ARRAY = new LogEntryProto[0];
-  static final Logger LOG = LoggerFactory.getLogger(RaftTestUtil.class);
 
-  static String getTestBaseDirectory() {
-    return System.getProperty("test.build.data", "target/test/data");
-  }
+  Logger LOG = LoggerFactory.getLogger(RaftTestUtil.class);
 
-  public static RaftServerImpl getImplAsUnchecked(RaftServerProxy proxy) {
+  static RaftServerImpl getImplAsUnchecked(RaftServerProxy proxy) {
     return JavaUtils.callAsUnchecked(proxy::getImpl);
   }
 
-  public static RaftServerImpl waitForLeader(MiniRaftCluster cluster)
+  static RaftServerImpl waitForLeader(MiniRaftCluster cluster)
       throws InterruptedException {
     return waitForLeader(cluster, false);
   }
 
-  public static RaftServerImpl waitForLeader(
+  static RaftServerImpl waitForLeader(
       MiniRaftCluster cluster, boolean tolerateMultipleLeaders) throws InterruptedException {
     return waitForLeader(cluster, tolerateMultipleLeaders, null);
   }
 
-  public static RaftServerImpl waitForLeader(
+  static RaftServerImpl waitForLeader(
       MiniRaftCluster cluster, boolean tolerateMultipleLeaders, RaftGroupId groupId)
       throws InterruptedException {
     final long sleepTime = (cluster.getMaxTimeout() * 3) >> 1;
@@ -89,7 +85,7 @@ public interface RaftTestUtil {
     return leader;
   }
 
-  public static RaftServerImpl waitForLeader(
+  static RaftServerImpl waitForLeader(
       MiniRaftCluster cluster, final String leaderId) throws InterruptedException {
     LOG.info(cluster.printServers());
     for(int i = 0; !cluster.tryEnforceLeader(leaderId) && i < 10; i++) {
@@ -104,7 +100,7 @@ public interface RaftTestUtil {
     return leader;
   }
 
-  public static String waitAndKillLeader(MiniRaftCluster cluster,
+  static String waitAndKillLeader(MiniRaftCluster cluster,
       boolean expectLeader) throws InterruptedException {
     final RaftServerImpl leader = waitForLeader(cluster);
     if (!expectLeader) {
@@ -117,7 +113,7 @@ public interface RaftTestUtil {
     return leader != null ? leader.getId().toString() : null;
   }
 
-  public static boolean logEntriesContains(RaftLog log,
+  static boolean logEntriesContains(RaftLog log,
       SimpleMessage... expectedMessages) {
     int idxEntries = 0;
     int idxExpected = 0;
@@ -137,7 +133,7 @@ public interface RaftTestUtil {
     return idxExpected == expectedMessages.length;
   }
 
-  public static void assertLogEntries(Collection<RaftServerProxy> servers,
+  static void assertLogEntries(Collection<RaftServerProxy> servers,
       SimpleMessage... expectedMessages) {
     final int size = servers.size();
     final long count = MiniRaftCluster.getServerStream(servers)
@@ -151,7 +147,7 @@ public interface RaftTestUtil {
     }
   }
 
-  public static void assertLogEntries(RaftLog log, TermIndex[] entries,
+  static void assertLogEntries(RaftLog log, TermIndex[] entries,
       long startIndex, long expertedTerm, SimpleMessage... expectedMessages) {
     Assert.assertEquals(expectedMessages.length, entries.length);
     for(int i = 0; i < entries.length; i++) {
@@ -168,11 +164,11 @@ public interface RaftTestUtil {
     }
   }
 
-  public static ByteString toByteString(String string) {
+  static ByteString toByteString(String string) {
     return ByteString.copyFrom(string, StandardCharsets.UTF_8);
   }
 
-  public static class SimpleMessage implements Message {
+  class SimpleMessage implements Message {
     public static SimpleMessage[] create(int numMessages) {
       return create(numMessages, "m");
     }
@@ -219,7 +215,7 @@ public interface RaftTestUtil {
     }
   }
 
-  public static class SimpleOperation {
+  class SimpleOperation {
     private final String op;
 
     public SimpleOperation(String op) {
@@ -248,32 +244,20 @@ public interface RaftTestUtil {
     }
   }
 
-  public static File getTestDir(Class<?> caller) throws IOException {
-    File dir = new File(System.getProperty("test.build.data", "target/test/data")
-            + "/" + Long.toHexString(ThreadLocalRandom.current().nextLong()),
-            caller.getSimpleName());
-    if (dir.exists() && !dir.isDirectory()) {
-      throw new IOException(dir + " already exists and is not a directory");
-    } else if (!dir.exists() && !dir.mkdirs()) {
-      throw new IOException("Cannot create directory " + dir);
-    }
-    return dir;
-  }
-
-  public static void block(BooleanSupplier isBlocked) throws InterruptedException {
+  static void block(BooleanSupplier isBlocked) throws InterruptedException {
     for(; isBlocked.getAsBoolean(); ) {
       RaftServerConfigKeys.Rpc.TIMEOUT_MAX_DEFAULT.sleep();
     }
   }
 
-  public static void delay(IntSupplier getDelayMs) throws InterruptedException {
+  static void delay(IntSupplier getDelayMs) throws InterruptedException {
     final int t = getDelayMs.getAsInt();
     if (t > 0) {
       Thread.sleep(t);
     }
   }
 
-  public static <T extends Throwable> void attempt(
+  static <T extends Throwable> void attempt(
       int n, long sleepMs, CheckedRunnable<T> runnable)
       throws T, InterruptedException {
     for(int i = 1; i <= n; i++) {
@@ -293,7 +277,7 @@ public interface RaftTestUtil {
     }
   }
 
-  public static RaftPeerId changeLeader(MiniRaftCluster cluster, RaftPeerId oldLeader)
+  static RaftPeerId changeLeader(MiniRaftCluster cluster, RaftPeerId oldLeader)
       throws InterruptedException {
     cluster.setBlockRequestsFrom(oldLeader.toString(), true);
     RaftPeerId newLeader = oldLeader;
@@ -304,7 +288,7 @@ public interface RaftTestUtil {
     return newLeader;
   }
 
-  public static <SERVER extends RaftServer> void blockQueueAndSetDelay(
+  static <SERVER extends RaftServer> void blockQueueAndSetDelay(
       Collection<SERVER> servers,
       DelayLocalExecutionInjection injection, String leaderId, int delayMs,
       long maxTimeout) throws InterruptedException {
@@ -331,7 +315,7 @@ public interface RaftTestUtil {
     Thread.sleep(3 * maxTimeout);
   }
 
-  public static void setBlockRequestsFrom(String src, boolean block) {
+  static void setBlockRequestsFrom(String src, boolean block) {
     if (block) {
       BlockRequestHandlingInjection.getInstance().blockRequestor(src);
     } else {

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/protocol/TestRaftId.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/protocol/TestRaftId.java b/ratis-server/src/test/java/org/apache/ratis/protocol/TestRaftId.java
index b5806d5..b4688fd 100644
--- a/ratis-server/src/test/java/org/apache/ratis/protocol/TestRaftId.java
+++ b/ratis-server/src/test/java/org/apache/ratis/protocol/TestRaftId.java
@@ -17,11 +17,17 @@
  */
 package org.apache.ratis.protocol;
 
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.shaded.com.google.protobuf.ByteString;
 import org.junit.Assert;
 import org.junit.Test;
 
-public class TestRaftId {
+public class TestRaftId extends BaseTest {
+  @Override
+  public int getGlobalTimeoutMs() {
+    return 1000;
+  }
+
   @Test
   public void testClientId() {
     final ClientId id = ClientId.createId();

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/server/TestRaftServerJmx.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/server/TestRaftServerJmx.java b/ratis-server/src/test/java/org/apache/ratis/server/TestRaftServerJmx.java
index ae96c02..7533760 100644
--- a/ratis-server/src/test/java/org/apache/ratis/server/TestRaftServerJmx.java
+++ b/ratis-server/src/test/java/org/apache/ratis/server/TestRaftServerJmx.java
@@ -18,17 +18,14 @@
 package org.apache.ratis.server;
 
 import org.apache.log4j.Level;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.MiniRaftCluster;
-import org.apache.ratis.RaftBasicTests;
 import org.apache.ratis.client.RaftClient;
 import org.apache.ratis.conf.RaftProperties;
 import org.apache.ratis.server.impl.RaftServerImpl;
 import org.apache.ratis.server.simulation.MiniRaftClusterWithSimulatedRpc;
 import org.apache.ratis.util.LogUtils;
 import org.junit.*;
-import org.junit.rules.Timeout;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import javax.management.MBeanServer;
 import javax.management.ObjectInstance;
@@ -39,14 +36,12 @@ import java.util.Set;
 
 import static org.apache.ratis.RaftTestUtil.waitForLeader;
 
-public class TestRaftServerJmx {
+public class TestRaftServerJmx extends BaseTest {
   static {
     LogUtils.setLogLevel(RaftServerImpl.LOG, Level.DEBUG);
     LogUtils.setLogLevel(RaftClient.LOG, Level.DEBUG);
   }
 
-  public static final Logger LOG = LoggerFactory.getLogger(RaftBasicTests.class);
-
   public static final int NUM_SERVERS = 5;
 
   protected static final RaftProperties properties = new RaftProperties();
@@ -62,9 +57,6 @@ public class TestRaftServerJmx {
     return properties;
   }
 
-  @Rule
-  public Timeout globalTimeout = new Timeout(120 * 1000);
-
   @Before
   public void setup() throws IOException {
     Assert.assertNull(getCluster().getLeader());

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/server/impl/RaftReconfigurationBaseTest.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/server/impl/RaftReconfigurationBaseTest.java b/ratis-server/src/test/java/org/apache/ratis/server/impl/RaftReconfigurationBaseTest.java
index 2a80b37..f1d640a 100644
--- a/ratis-server/src/test/java/org/apache/ratis/server/impl/RaftReconfigurationBaseTest.java
+++ b/ratis-server/src/test/java/org/apache/ratis/server/impl/RaftReconfigurationBaseTest.java
@@ -18,6 +18,7 @@
 package org.apache.ratis.server.impl;
 
 import org.apache.log4j.Level;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.MiniRaftCluster;
 import org.apache.ratis.MiniRaftCluster.PeerChanges;
 import org.apache.ratis.RaftTestUtil;
@@ -34,8 +35,6 @@ import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.mockito.internal.util.reflection.Whitebox;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -52,12 +51,11 @@ import static org.apache.ratis.server.impl.RaftServerConstants.DEFAULT_CALLID;
 import static org.apache.ratis.server.impl.RaftServerTestUtil.waitAndCheckNewConf;
 import static org.apache.ratis.shaded.proto.RaftProtos.LogEntryProto.LogEntryBodyCase.CONFIGURATIONENTRY;
 
-public abstract class RaftReconfigurationBaseTest {
+public abstract class RaftReconfigurationBaseTest extends BaseTest {
   static {
     LogUtils.setLogLevel(RaftServerImpl.LOG, Level.DEBUG);
     LogUtils.setLogLevel(RaftClient.LOG, Level.DEBUG);
   }
-  static final Logger LOG = LoggerFactory.getLogger(RaftReconfigurationBaseTest.class);
 
   protected static final RaftProperties prop = new RaftProperties();
   

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/server/impl/ReinitializationBaseTest.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/server/impl/ReinitializationBaseTest.java b/ratis-server/src/test/java/org/apache/ratis/server/impl/ReinitializationBaseTest.java
index a4ac287..5595b76 100644
--- a/ratis-server/src/test/java/org/apache/ratis/server/impl/ReinitializationBaseTest.java
+++ b/ratis-server/src/test/java/org/apache/ratis/server/impl/ReinitializationBaseTest.java
@@ -18,10 +18,10 @@
 package org.apache.ratis.server.impl;
 
 import org.apache.log4j.Level;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.MiniRaftCluster;
 import org.apache.ratis.RaftTestUtil;
 import org.apache.ratis.client.RaftClient;
-import org.apache.ratis.conf.ConfUtils;
 import org.apache.ratis.conf.RaftProperties;
 import org.apache.ratis.protocol.RaftGroup;
 import org.apache.ratis.protocol.RaftGroupId;
@@ -31,8 +31,6 @@ import org.apache.ratis.util.JavaUtils;
 import org.apache.ratis.util.LogUtils;
 import org.junit.Assert;
 import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -43,13 +41,11 @@ import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
-public abstract class ReinitializationBaseTest {
+public abstract class ReinitializationBaseTest extends BaseTest {
   static {
     LogUtils.setLogLevel(RaftServerImpl.LOG, Level.DEBUG);
     LogUtils.setLogLevel(RaftClient.LOG, Level.DEBUG);
-    LogUtils.setLogLevel(ConfUtils.LOG, Level.OFF);
   }
-  static final Logger LOG = LoggerFactory.getLogger(ReinitializationBaseTest.class);
 
   static final RaftProperties prop = new RaftProperties();
 

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/server/storage/TestCacheEviction.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestCacheEviction.java b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestCacheEviction.java
index 9961837..456403e 100644
--- a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestCacheEviction.java
+++ b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestCacheEviction.java
@@ -17,8 +17,8 @@
  */
 package org.apache.ratis.server.storage;
 
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.MiniRaftCluster;
-import org.apache.ratis.RaftTestUtil;
 import org.apache.ratis.RaftTestUtil.SimpleOperation;
 import org.apache.ratis.conf.RaftProperties;
 import org.apache.ratis.protocol.ClientId;
@@ -42,7 +42,7 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
-public class TestCacheEviction {
+public class TestCacheEviction extends BaseTest {
   private static final CacheInvalidationPolicy policy = new CacheInvalidationPolicyDefault();
   private static final ClientId clientId = ClientId.createId();
   private static final long callId = 0;
@@ -154,7 +154,7 @@ public class TestCacheEviction {
     final RaftPeerId peerId = RaftPeerId.valueOf("s0");
     final int maxCachedNum = RaftServerConfigKeys.Log.maxCachedSegmentNum(prop);
 
-    File storageDir = RaftTestUtil.getTestDir(TestSegmentedRaftLog.class);
+    File storageDir = getTestDir();
     RaftServerConfigKeys.setStorageDir(prop, storageDir);
     RaftStorage storage = new RaftStorage(storageDir, RaftServerConstants.StartupOption.REGULAR);
 

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogReadWrite.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogReadWrite.java b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogReadWrite.java
index f1e3566..dffd996 100644
--- a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogReadWrite.java
+++ b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogReadWrite.java
@@ -17,10 +17,9 @@
  */
 package org.apache.ratis.server.storage;
 
-import org.apache.ratis.RaftTestUtil;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.RaftTestUtil.SimpleOperation;
 import org.apache.ratis.conf.RaftProperties;
-import org.apache.ratis.util.SizeInBytes;
 import org.apache.ratis.protocol.ChecksumException;
 import org.apache.ratis.protocol.ClientId;
 import org.apache.ratis.server.RaftServerConfigKeys;
@@ -30,12 +29,11 @@ import org.apache.ratis.shaded.com.google.protobuf.CodedOutputStream;
 import org.apache.ratis.shaded.proto.RaftProtos.LogEntryProto;
 import org.apache.ratis.util.FileUtils;
 import org.apache.ratis.util.ProtoUtils;
+import org.apache.ratis.util.SizeInBytes;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -48,9 +46,7 @@ import java.util.List;
 /**
  * Test basic functionality of LogReader, LogInputStream, and LogOutputStream.
  */
-public class TestRaftLogReadWrite {
-  private static final Logger LOG = LoggerFactory.getLogger(TestRaftLogReadWrite.class);
-
+public class TestRaftLogReadWrite extends BaseTest {
   private static final ClientId clientId = ClientId.createId();
   private static final long callId = 0;
 
@@ -59,7 +55,7 @@ public class TestRaftLogReadWrite {
 
   @Before
   public void setup() throws Exception {
-    storageDir = RaftTestUtil.getTestDir(TestRaftLogReadWrite.class);
+    storageDir = getTestDir();
     properties = new RaftProperties();
     RaftServerConfigKeys.setStorageDir(properties, storageDir);
   }

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java
index 769f923..931a6ec 100644
--- a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java
+++ b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java
@@ -17,18 +17,18 @@
  */
 package org.apache.ratis.server.storage;
 
-import org.apache.ratis.RaftTestUtil;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.RaftTestUtil.SimpleOperation;
 import org.apache.ratis.conf.RaftProperties;
-import org.apache.ratis.server.storage.LogSegment.LogRecordWithEntry;
-import org.apache.ratis.util.SizeInBytes;
 import org.apache.ratis.protocol.ClientId;
 import org.apache.ratis.server.RaftServerConfigKeys;
 import org.apache.ratis.server.impl.RaftServerConstants.StartupOption;
+import org.apache.ratis.server.storage.LogSegment.LogRecordWithEntry;
 import org.apache.ratis.shaded.proto.RaftProtos.LogEntryProto;
 import org.apache.ratis.shaded.proto.RaftProtos.SMLogEntryProto;
 import org.apache.ratis.util.FileUtils;
 import org.apache.ratis.util.ProtoUtils;
+import org.apache.ratis.util.SizeInBytes;
 import org.apache.ratis.util.TraditionalBinaryPrefix;
 import org.junit.After;
 import org.junit.Assert;
@@ -47,7 +47,7 @@ import static org.apache.ratis.server.storage.LogSegment.getEntrySize;
 /**
  * Test basic functionality of {@link LogSegment}
  */
-public class TestRaftLogSegment {
+public class TestRaftLogSegment extends BaseTest {
   private static final ClientId clientId = ClientId.createId();
   private static final long callId = 0;
 
@@ -56,7 +56,7 @@ public class TestRaftLogSegment {
 
   @Before
   public void setup() throws Exception {
-    storageDir = RaftTestUtil.getTestDir(TestRaftLogSegment.class);
+    storageDir = getTestDir();
     RaftServerConfigKeys.setStorageDir(properties, storageDir);
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java
index d8ca627..1673fe9 100644
--- a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java
+++ b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java
@@ -17,7 +17,7 @@
  */
 package org.apache.ratis.server.storage;
 
-import org.apache.ratis.RaftTestUtil;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.io.nativeio.NativeIO;
 import org.apache.ratis.server.impl.RaftServerConstants.StartupOption;
 import org.apache.ratis.server.protocol.TermIndex;
@@ -37,12 +37,12 @@ import java.util.concurrent.ThreadLocalRandom;
 /**
  * Test RaftStorage and RaftStorageDirectory
  */
-public class TestRaftStorage {
+public class TestRaftStorage extends BaseTest {
   private File storageDir;
 
   @Before
   public void setup() throws Exception {
-    storageDir = RaftTestUtil.getTestDir(TestRaftStorage.class);
+    storageDir = getTestDir();
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/server/storage/TestSegmentedRaftLog.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestSegmentedRaftLog.java b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestSegmentedRaftLog.java
index 811ba6d..c6a97da 100644
--- a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestSegmentedRaftLog.java
+++ b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestSegmentedRaftLog.java
@@ -18,7 +18,7 @@
 package org.apache.ratis.server.storage;
 
 import org.apache.log4j.Level;
-import org.apache.ratis.RaftTestUtil;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.RaftTestUtil.SimpleOperation;
 import org.apache.ratis.conf.RaftProperties;
 import org.apache.ratis.protocol.ClientId;
@@ -43,9 +43,8 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.function.Supplier;
-import java.util.stream.Collectors;
 
-public class TestSegmentedRaftLog {
+public class TestSegmentedRaftLog extends BaseTest {
   static {
     LogUtils.setLogLevel(RaftLogWorker.LOG, Level.DEBUG);
   }
@@ -74,7 +73,7 @@ public class TestSegmentedRaftLog {
 
   @Before
   public void setup() throws Exception {
-    storageDir = RaftTestUtil.getTestDir(TestSegmentedRaftLog.class);
+    storageDir = getTestDir();
     properties = new RaftProperties();
     RaftServerConfigKeys.setStorageDir(properties, storageDir);
     storage = new RaftStorage(storageDir, RaftServerConstants.StartupOption.REGULAR);
@@ -150,8 +149,7 @@ public class TestSegmentedRaftLog {
               throw new RuntimeException(e);
             }
           })
-          .collect(Collectors.toList())
-          .toArray(RaftTestUtil.EMPTY_LOGENTRY_ARRAY);
+          .toArray(LogEntryProto[]::new);
       Assert.assertArrayEquals(entries, entriesFromLog);
       Assert.assertEquals(entries[entries.length - 1], getLastEntry(raftLog));
     }
@@ -289,10 +287,9 @@ public class TestSegmentedRaftLog {
               throw new RuntimeException(e);
             }
           })
-          .collect(Collectors.toList())
-          .toArray(RaftTestUtil.EMPTY_LOGENTRY_ARRAY);
+          .toArray(LogEntryProto[]::new);
       LogEntryProto[] expectedArray = expected.subList(offset, offset + size)
-          .toArray(RaftTestUtil.EMPTY_LOGENTRY_ARRAY);
+          .stream().toArray(LogEntryProto[]::new);
       Assert.assertArrayEquals(expectedArray, entriesFromLog);
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java b/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java
index c7adec8..c243eaf 100644
--- a/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java
+++ b/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java
@@ -18,6 +18,7 @@
 package org.apache.ratis.statemachine;
 
 import org.apache.log4j.Level;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.MiniRaftCluster;
 import org.apache.ratis.RaftTestUtil;
 import org.apache.ratis.RaftTestUtil.SimpleMessage;
@@ -48,7 +49,7 @@ import java.util.List;
 
 import static org.apache.ratis.server.impl.RaftServerConstants.DEFAULT_CALLID;
 
-public abstract class RaftSnapshotBaseTest {
+public abstract class RaftSnapshotBaseTest extends BaseTest {
   static {
     LogUtils.setLogLevel(RaftServerImpl.LOG, Level.DEBUG);
     LogUtils.setLogLevel(RaftLog.LOG, Level.DEBUG);

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/704072c5/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java b/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java
index a5f2c07..f41e764 100644
--- a/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java
+++ b/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java
@@ -18,6 +18,7 @@
 package org.apache.ratis.statemachine;
 
 import org.apache.log4j.Level;
+import org.apache.ratis.BaseTest;
 import org.apache.ratis.MiniRaftCluster;
 import org.apache.ratis.RaftTestUtil;
 import org.apache.ratis.client.RaftClient;
@@ -32,12 +33,10 @@ import org.apache.ratis.server.simulation.MiniRaftClusterWithSimulatedRpc;
 import org.apache.ratis.shaded.proto.RaftProtos.SMLogEntryProto;
 import org.apache.ratis.util.LogUtils;
 import org.junit.*;
-import org.junit.rules.Timeout;
 
 import java.io.IOException;
 import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -50,7 +49,7 @@ import static org.junit.Assert.*;
 /**
  * Test StateMachine related functionality
  */
-public class TestStateMachine {
+public class TestStateMachine extends BaseTest {
   static {
     LogUtils.setLogLevel(RaftServerImpl.LOG, Level.DEBUG);
     LogUtils.setLogLevel(RaftClient.LOG, Level.DEBUG);
@@ -67,9 +66,6 @@ public class TestStateMachine {
 
   private MiniRaftClusterWithSimulatedRpc cluster;
 
-  @Rule
-  public Timeout globalTimeout = new Timeout(60 * 1000);
-
   @Before
   public void setup() throws IOException {
   }