DRILL-6208: Fix FunctionInitializerTest#testConcurrentFunctionBodyLoad to use Mockito instead of JMockit
closes #1149 Project: http://git-wip-us.apache.org/repos/asf/drill/repo Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/36159e22 Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/36159e22 Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/36159e22 Branch: refs/heads/master Commit: 36159e2282153dbce52b8345d19e9bd95d67d377 Parents: 863ff0b Author: Arina Ielchiieva <arina.yelchiy...@gmail.com> Authored: Sat Mar 3 21:00:50 2018 +0200 Committer: Arina Ielchiieva <arina.yelchiy...@gmail.com> Committed: Sun Mar 4 17:46:55 2018 +0200 ---------------------------------------------------------------------- .../drill/exec/expr/fn/FunctionInitializer.java | 5 +-- .../exec/expr/fn/FunctionInitializerTest.java | 33 ++++++++++---------- 2 files changed, 20 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/drill/blob/36159e22/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionInitializer.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionInitializer.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionInitializer.java index 20b1d12..e9d98f2 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionInitializer.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionInitializer.java @@ -17,13 +17,13 @@ */ package org.apache.drill.exec.expr.fn; -import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.util.List; import java.util.Map; +import com.google.common.annotations.VisibleForTesting; import org.apache.drill.common.exceptions.UserException; import org.apache.drill.common.util.DrillFileUtils; import org.codehaus.commons.compiler.CompileException; @@ -126,7 +126,8 @@ public class FunctionInitializer { * @return compilation unit * @throws IOException if did not find class or could not load it */ - private CompilationUnit convertToCompilationUnit(Class<?> clazz) throws IOException { + @VisibleForTesting + CompilationUnit convertToCompilationUnit(Class<?> clazz) throws IOException { String path = clazz.getName(); path = path.replaceFirst("\\$.*", ""); path = path.replace(".", DrillFileUtils.SEPARATOR); http://git-wip-us.apache.org/repos/asf/drill/blob/36159e22/exec/java-exec/src/test/java/org/apache/drill/exec/expr/fn/FunctionInitializerTest.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/expr/fn/FunctionInitializerTest.java b/exec/java-exec/src/test/java/org/apache/drill/exec/expr/fn/FunctionInitializerTest.java index c2d4bdb..edbd341 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/expr/fn/FunctionInitializerTest.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/expr/fn/FunctionInitializerTest.java @@ -17,18 +17,17 @@ package org.apache.drill.exec.expr.fn; import com.google.common.collect.Lists; -import mockit.Invocation; -import mockit.Mock; -import mockit.MockUp; -import mockit.integration.junit4.JMockit; import org.apache.drill.categories.SqlFunctionTest; import org.apache.drill.test.TestTools; import org.apache.drill.exec.util.JarUtil; -import org.codehaus.janino.Java; +import org.codehaus.janino.Java.CompilationUnit; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.stubbing.Answer; import java.net.URL; import java.net.URLClassLoader; @@ -45,9 +44,11 @@ import java.util.concurrent.atomic.AtomicInteger; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.spy; - -@RunWith(JMockit.class) +@RunWith(MockitoJUnitRunner.class) @Category(SqlFunctionTest.class) public class FunctionInitializerTest { @@ -92,16 +93,16 @@ public class FunctionInitializerTest { @Test public void testConcurrentFunctionBodyLoad() throws Exception { - final FunctionInitializer functionInitializer = new FunctionInitializer(CLASS_NAME, classLoader); - + final FunctionInitializer spyFunctionInitializer = spy(new FunctionInitializer(CLASS_NAME, classLoader)); final AtomicInteger counter = new AtomicInteger(); - new MockUp<FunctionInitializer>() { - @Mock - Java.CompilationUnit convertToCompilationUnit(Invocation inv, Class<?> clazz) { + + doAnswer(new Answer<CompilationUnit>() { + @Override + public CompilationUnit answer(InvocationOnMock invocation) throws Throwable { counter.incrementAndGet(); - return inv.proceed(); + return (CompilationUnit) invocation.callRealMethod(); } - }; + }).when(spyFunctionInitializer).convertToCompilationUnit(any(Class.class)); int threadsNumber = 5; ExecutorService executor = Executors.newFixedThreadPool(threadsNumber); @@ -109,8 +110,8 @@ public class FunctionInitializerTest { try { List<Future<String>> results = executor.invokeAll(Collections.nCopies(threadsNumber, new Callable<String>() { @Override - public String call() throws Exception { - return functionInitializer.getMethod("eval"); + public String call() { + return spyFunctionInitializer.getMethod("eval"); } }));