This is an automated email from the ASF dual-hosted git repository.
xvrl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new d105519 Replace use of PowerMock with Mockito (#12282)
d105519 is described below
commit d105519558951aa289992d05043194b8b7ceaee4
Author: Xavier Léauté <[email protected]>
AuthorDate: Sun Feb 27 22:47:09 2022 -0800
Replace use of PowerMock with Mockito (#12282)
Mockito now supports all our needs and plays much better with recent Java
versions.
Migrating to Mockito also simplifies running the kind of tests that
required PowerMock in the past.
* replace all uses of powermock with mockito-inline
* upgrade mockito to 4.3.1 and fix use of deprecated methods
* import mockito bom to align all our mockito dependencies
* add powermock to forbidden-apis to avoid accidentally reintroducing it in
the future
---
codestyle/druid-forbidden-apis.txt | 2 +
core/pom.xml | 6 +-
extensions-core/lookups-cached-global/pom.xml | 19 +-
.../NamespaceLookupExtractorFactoryTest.java | 329 ++++++++-------------
extensions-core/testing-tools/pom.xml | 5 -
indexing-hadoop/pom.xml | 16 +-
.../druid/indexer/HadoopDruidIndexerJobTest.java | 80 +++--
.../indexer/MetadataStorageUpdaterJobTest.java | 75 +++--
.../seekablestream/SequenceMetadataTest.java | 2 +-
licenses.yaml | 13 +-
pom.xml | 26 +-
.../server/coordinator/duty/KillAuditLogTest.java | 2 +-
.../coordinator/duty/KillCompactionConfigTest.java | 8 +-
.../duty/KillDatasourceMetadataTest.java | 4 +-
.../server/coordinator/duty/KillRulesTest.java | 2 +-
.../coordinator/duty/KillSupervisorsTest.java | 2 +-
16 files changed, 221 insertions(+), 370 deletions(-)
diff --git a/codestyle/druid-forbidden-apis.txt
b/codestyle/druid-forbidden-apis.txt
index 5ae020a..a8d66c2 100644
--- a/codestyle/druid-forbidden-apis.txt
+++ b/codestyle/druid-forbidden-apis.txt
@@ -58,3 +58,5 @@ com.google.common.io.BaseEncoding#base64()
@defaultMessage Use com.google.errorprone.annotations.concurrent.GuardedBy
javax.annotation.concurrent.GuardedBy
com.amazonaws.annotation.GuardedBy
+
+org.powermock.** @ Use Mockito instead of Powermock for compatibility with
newer Java versions
diff --git a/core/pom.xml b/core/pom.xml
index bbec04d..9daa8bf 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -341,14 +341,12 @@
</dependency>
<dependency>
<groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <version>${mockito.version}</version>
+ <artifactId>mockito-inline</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
- <artifactId>mockito-inline</artifactId>
- <version>${mockito.version}</version>
+ <artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/extensions-core/lookups-cached-global/pom.xml
b/extensions-core/lookups-cached-global/pom.xml
index f35cebf..4335d31 100644
--- a/extensions-core/lookups-cached-global/pom.xml
+++ b/extensions-core/lookups-cached-global/pom.xml
@@ -145,26 +145,15 @@
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>org.objenesis</groupId>
- <artifactId>objenesis</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-core</artifactId>
- <scope>test</scope>
</dependency>
<dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-module-junit4</artifactId>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-inline</artifactId>
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-api-easymock</artifactId>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
diff --git
a/extensions-core/lookups-cached-global/src/test/java/org/apache/druid/query/lookup/NamespaceLookupExtractorFactoryTest.java
b/extensions-core/lookups-cached-global/src/test/java/org/apache/druid/query/lookup/NamespaceLookupExtractorFactoryTest.java
index 25ed3c8..3515ebe 100644
---
a/extensions-core/lookups-cached-global/src/test/java/org/apache/druid/query/lookup/NamespaceLookupExtractorFactoryTest.java
+++
b/extensions-core/lookups-cached-global/src/test/java/org/apache/druid/query/lookup/NamespaceLookupExtractorFactoryTest.java
@@ -26,10 +26,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
-import com.google.inject.Binder;
import com.google.inject.Injector;
import com.google.inject.Key;
-import com.google.inject.Module;
import org.apache.druid.common.config.NullHandling;
import org.apache.druid.guice.GuiceInjectors;
import org.apache.druid.guice.JsonConfigProvider;
@@ -43,36 +41,29 @@ import
org.apache.druid.query.lookup.namespace.ExtractionNamespace;
import org.apache.druid.query.lookup.namespace.UriExtractionNamespace;
import org.apache.druid.server.DruidNode;
import org.apache.druid.server.lookup.namespace.cache.CacheScheduler;
-import
org.apache.druid.server.lookup.namespace.cache.NamespaceExtractionCacheManager;
-import org.easymock.EasyMock;
-import org.easymock.IExpectationSetters;
import org.joda.time.Period;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
import javax.ws.rs.core.Response;
import java.util.HashMap;
import java.util.Map;
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({
- NamespaceExtractionCacheManager.class,
- CacheScheduler.class,
- CacheScheduler.VersionedCache.class,
- CacheScheduler.Entry.class
-})
-// defer classloading of the following classes to the system classloader
-// since they need to be loaded in the right Java module in JDK9 and above
-@PowerMockIgnore({"javax.net.ssl.*", "javax.xml.*", "com.sun.xml.*"})
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.atMostOnce;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
public class NamespaceLookupExtractorFactoryTest
{
static {
@@ -82,13 +73,12 @@ public class NamespaceLookupExtractorFactoryTest
private final ObjectMapper mapper = new DefaultObjectMapper();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
- private final CacheScheduler scheduler =
PowerMock.createStrictMock(CacheScheduler.class);
- private final CacheScheduler.Entry entry =
PowerMock.createStrictMock(CacheScheduler.Entry.class);
+ private final CacheScheduler scheduler = mock(CacheScheduler.class);
+ private final CacheScheduler.Entry entry = mock(CacheScheduler.Entry.class);
private final CacheScheduler.VersionedCache versionedCache =
- PowerMock.createStrictMock(CacheScheduler.VersionedCache.class);
+ mock(CacheScheduler.VersionedCache.class);
+
@Before
public void setUp()
@@ -123,7 +113,6 @@ public class NamespaceLookupExtractorFactoryTest
temporaryFolder.newFolder().toURI(),
null, null,
new UriExtractionNamespace.ObjectMapperFlatDataParser(mapper),
-
Period.millis(0),
null,
null
@@ -144,24 +133,17 @@ public class NamespaceLookupExtractorFactoryTest
@Test
public void testMissingSpec()
{
- expectedException.expectMessage("extractionNamespace should be specified");
- new NamespaceLookupExtractorFactory(null, null);
+ Assert.assertThrows(
+ "extractionNamespace should be specified", NullPointerException.class,
+ () -> new NamespaceLookupExtractorFactory(null, null)
+ );
}
@Test
- public void testSimpleStartStop()
+ public void testSimpleStartStop() throws Exception
{
- final ExtractionNamespace extractionNamespace = new ExtractionNamespace()
- {
- @Override
- public long getPollMs()
- {
- return 0;
- }
- };
+ final ExtractionNamespace extractionNamespace = () -> 0;
expectScheduleAndWaitOnce(extractionNamespace);
- expectEntryCloseOnce();
- mockReplay();
final NamespaceLookupExtractorFactory namespaceLookupExtractorFactory =
new NamespaceLookupExtractorFactory(
extractionNamespace,
@@ -169,23 +151,17 @@ public class NamespaceLookupExtractorFactoryTest
);
Assert.assertTrue(namespaceLookupExtractorFactory.start());
Assert.assertTrue(namespaceLookupExtractorFactory.close());
- mockVerify();
+
+ verify(scheduler).scheduleAndWait(extractionNamespace, 60000L);
+ verify(entry).close();
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
}
@Test
public void testStartReturnsImmediately()
{
- final ExtractionNamespace extractionNamespace = new ExtractionNamespace()
- {
- @Override
- public long getPollMs()
- {
- return 0;
- }
- };
-
EasyMock.expect(scheduler.schedule(EasyMock.eq(extractionNamespace))).andReturn(entry).once();
- expectEntryCloseOnce();
- mockReplay();
+ final ExtractionNamespace extractionNamespace = () -> 0;
+ when(scheduler.schedule(extractionNamespace)).thenReturn(entry);
final NamespaceLookupExtractorFactory namespaceLookupExtractorFactory =
new NamespaceLookupExtractorFactory(
extractionNamespace,
@@ -195,29 +171,18 @@ public class NamespaceLookupExtractorFactoryTest
);
Assert.assertTrue(namespaceLookupExtractorFactory.start());
Assert.assertTrue(namespaceLookupExtractorFactory.close());
- mockVerify();
- }
- private void expectEntryCloseOnce()
- {
- entry.close();
- EasyMock.expectLastCall().once();
+ verify(scheduler).schedule(any());
+ verify(entry).close();
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
}
@Test
public void testStartReturnsImmediatelyAndFails() throws InterruptedException
{
- final ExtractionNamespace extractionNamespace = new ExtractionNamespace()
- {
- @Override
- public long getPollMs()
- {
- return 0;
- }
- };
-
EasyMock.expect(scheduler.scheduleAndWait(EasyMock.eq(extractionNamespace),
EasyMock.eq(1L)))
- .andReturn(null).once();
- mockReplay();
+ final ExtractionNamespace extractionNamespace = () -> 0;
+ when(scheduler.scheduleAndWait(extractionNamespace, 1L))
+ .thenReturn(null);
final NamespaceLookupExtractorFactory namespaceLookupExtractorFactory =
new NamespaceLookupExtractorFactory(
extractionNamespace,
@@ -226,23 +191,16 @@ public class NamespaceLookupExtractorFactoryTest
scheduler
);
Assert.assertFalse(namespaceLookupExtractorFactory.start());
- mockVerify();
+
+ verify(scheduler).scheduleAndWait(extractionNamespace, 1L);
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
}
@Test
- public void testSimpleStartStopStop()
+ public void testSimpleStartStopStop() throws Exception
{
- final ExtractionNamespace extractionNamespace = new ExtractionNamespace()
- {
- @Override
- public long getPollMs()
- {
- return 0;
- }
- };
+ final ExtractionNamespace extractionNamespace = () -> 0;
expectScheduleAndWaitOnce(extractionNamespace);
- expectEntryCloseOnce();
- mockReplay();
final NamespaceLookupExtractorFactory namespaceLookupExtractorFactory =
new NamespaceLookupExtractorFactory(
extractionNamespace,
@@ -251,22 +209,17 @@ public class NamespaceLookupExtractorFactoryTest
Assert.assertTrue(namespaceLookupExtractorFactory.start());
Assert.assertTrue(namespaceLookupExtractorFactory.close());
Assert.assertTrue(namespaceLookupExtractorFactory.close());
- mockVerify();
+
+ verify(entry).close();
+ verify(scheduler).scheduleAndWait(extractionNamespace, 60000L);
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
}
@Test
- public void testSimpleStartStart()
+ public void testSimpleStartStart() throws Exception
{
- final ExtractionNamespace extractionNamespace = new ExtractionNamespace()
- {
- @Override
- public long getPollMs()
- {
- return 0;
- }
- };
+ final ExtractionNamespace extractionNamespace = () -> 0;
expectScheduleAndWaitOnce(extractionNamespace);
- mockReplay();
final NamespaceLookupExtractorFactory namespaceLookupExtractorFactory =
new NamespaceLookupExtractorFactory(
extractionNamespace,
@@ -274,27 +227,21 @@ public class NamespaceLookupExtractorFactoryTest
);
Assert.assertTrue(namespaceLookupExtractorFactory.start());
Assert.assertTrue(namespaceLookupExtractorFactory.start());
- mockVerify();
+
+ verify(scheduler).scheduleAndWait(extractionNamespace, 60000L);
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
}
@Test
- public void testSimpleStartGetStop()
+ public void testSimpleStartGetStop() throws Exception
{
- final ExtractionNamespace extractionNamespace = new ExtractionNamespace()
- {
- @Override
- public long getPollMs()
- {
- return 0;
- }
- };
+ final ExtractionNamespace extractionNamespace = () -> 0;
expectScheduleAndWaitOnce(extractionNamespace);
- expectEntryGetCacheStateOnce(versionedCache);
- expectEmptyCache();
- expectVersionOnce("0");
- expectEntryCloseOnce();
- mockReplay();
+ when(entry.getCacheState()).thenReturn(versionedCache);
+ when(entry.getCache()).thenReturn(new HashMap<String, String>());
+ when(versionedCache.getCache()).thenReturn(new HashMap<>());
+ when(versionedCache.getVersion()).thenReturn("0");
final NamespaceLookupExtractorFactory namespaceLookupExtractorFactory =
new NamespaceLookupExtractorFactory(
extractionNamespace,
@@ -304,18 +251,18 @@ public class NamespaceLookupExtractorFactoryTest
final LookupExtractor extractor = namespaceLookupExtractorFactory.get();
Assert.assertNull(extractor.apply("foo"));
Assert.assertTrue(namespaceLookupExtractorFactory.close());
- mockVerify();
- }
- private void expectEmptyCache()
- {
- EasyMock.expect(entry.getCache()).andReturn(new HashMap<String,
String>()).anyTimes();
- EasyMock.expect(versionedCache.getCache()).andReturn(new HashMap<String,
String>()).anyTimes();
+ verify(scheduler).scheduleAndWait(extractionNamespace, 60000L);
+ verify(entry).getCacheState();
+ verify(entry).close();
+ verify(versionedCache).getVersion();
+ verify(versionedCache, atLeastOnce()).getCache();
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
}
@Test
- public void testSimpleStartRacyGetDuringDelete()
+ public void testSimpleStartRacyGetDuringDelete() throws Exception
{
final ExtractionNamespace extractionNamespace = new ExtractionNamespace()
{
@@ -326,48 +273,27 @@ public class NamespaceLookupExtractorFactoryTest
}
};
expectScheduleAndWaitOnce(extractionNamespace);
- expectEntryGetCacheStateOnce(CacheScheduler.NoCache.ENTRY_CLOSED);
-
- mockReplay();
+
when(entry.getCacheState()).thenReturn(CacheScheduler.NoCache.ENTRY_CLOSED);
final NamespaceLookupExtractorFactory namespaceLookupExtractorFactory =
new NamespaceLookupExtractorFactory(
extractionNamespace,
scheduler
);
Assert.assertTrue(namespaceLookupExtractorFactory.start());
- try {
- namespaceLookupExtractorFactory.get();
- Assert.fail("Should have thrown ISE");
- }
- catch (ISE ise) {
- // NOOP
- }
+ Assert.assertThrows(ISE.class, () ->
namespaceLookupExtractorFactory.get());
- mockVerify();
- }
-
- private void expectEntryGetCacheStateOnce(final CacheScheduler.CacheState
versionedCache)
- {
- EasyMock.expect(entry.getCacheState()).andReturn(versionedCache).once();
- }
-
- private IExpectationSetters<String> expectVersionOnce(String version)
- {
- return
EasyMock.expect(versionedCache.getVersion()).andReturn(version).once();
- }
-
- private void expectFooBarCache()
- {
- EasyMock.expect(versionedCache.getCache()).andReturn(new
HashMap<>(ImmutableMap.of("foo", "bar"))).once();
+ verify(scheduler).scheduleAndWait(extractionNamespace, 60000L);
+ verify(entry).getCacheState();
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
}
private void expectScheduleAndWaitOnce(ExtractionNamespace
extractionNamespace)
{
try {
- EasyMock.expect(scheduler.scheduleAndWait(
- EasyMock.eq(extractionNamespace),
- EasyMock.eq(60000L)
- )).andReturn(entry).once();
+ when(scheduler.scheduleAndWait(
+ extractionNamespace,
+ 60000L
+ )).thenReturn(entry);
}
catch (InterruptedException e) {
throw new AssertionError(e);
@@ -376,7 +302,7 @@ public class NamespaceLookupExtractorFactoryTest
@Test
- public void testStartFailsToSchedule()
+ public void testStartFailsToSchedule() throws Exception
{
final ExtractionNamespace extractionNamespace = new ExtractionNamespace()
{
@@ -387,15 +313,14 @@ public class NamespaceLookupExtractorFactoryTest
}
};
try {
- EasyMock.expect(scheduler.scheduleAndWait(
- EasyMock.eq(extractionNamespace),
- EasyMock.eq(60000L)
- )).andReturn(null).once();
+ when(scheduler.scheduleAndWait(
+ extractionNamespace,
+ 60000L
+ )).thenReturn(null);
}
catch (InterruptedException e) {
throw new AssertionError(e);
}
- mockReplay();
final NamespaceLookupExtractorFactory namespaceLookupExtractorFactory =
new NamespaceLookupExtractorFactory(
extractionNamespace,
@@ -404,15 +329,21 @@ public class NamespaceLookupExtractorFactoryTest
Assert.assertFalse(namespaceLookupExtractorFactory.start());
// true because it never fully started
Assert.assertTrue(namespaceLookupExtractorFactory.close());
- mockVerify();
+
+ verify(scheduler).scheduleAndWait(
+ extractionNamespace,
+ 60000L
+ );
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
}
@Test
public void testReplaces()
{
- final ExtractionNamespace en1 =
PowerMock.createStrictMock(ExtractionNamespace.class), en2 =
PowerMock.createStrictMock(
- ExtractionNamespace.class);
- PowerMock.replay(en1, en2);
+ final ExtractionNamespace
+ en1 = mock(ExtractionNamespace.class),
+ en2 = mock(ExtractionNamespace.class);
+
final NamespaceLookupExtractorFactory f1 = new
NamespaceLookupExtractorFactory(
en1,
scheduler
@@ -427,21 +358,15 @@ public class NamespaceLookupExtractorFactoryTest
Assert.assertFalse(f1.replaces(f1b));
Assert.assertFalse(f1b.replaces(f1));
Assert.assertFalse(f1.replaces(f1));
-
Assert.assertTrue(f1.replaces(EasyMock.createNiceMock(LookupExtractorFactory.class)));
- PowerMock.verify(en1, en2);
+ Assert.assertTrue(f1.replaces(mock(LookupExtractorFactory.class)));
+
+ verifyNoInteractions(en1, en2);
}
@Test(expected = ISE.class)
public void testMustBeStarted()
{
- final ExtractionNamespace extractionNamespace = new ExtractionNamespace()
- {
- @Override
- public long getPollMs()
- {
- return 0;
- }
- };
+ final ExtractionNamespace extractionNamespace = () -> 0;
final NamespaceLookupExtractorFactory namespaceLookupExtractorFactory =
new NamespaceLookupExtractorFactory(
extractionNamespace,
@@ -521,7 +446,8 @@ public class NamespaceLookupExtractorFactoryTest
final String str2 = "{ \"type\": \"cachedNamespace\",
\"extractionNamespace\": { \"type\": \"uri\", \"uriPrefix\":
\"s3://bucket/prefix/\", \"fileRegex\": \"foo.*\\\\.gz\",
\"namespaceParseSpec\": { \"format\": \"customJson\", \"keyFieldName\":
\"someKey\", \"valueFieldName\": \"someVal\" }, \"pollPeriod\": \"PT5M\" } } }";
final NamespaceLookupExtractorFactory factory2 =
(NamespaceLookupExtractorFactory) mapper.readValue(str2,
LookupExtractorFactory.class);
- Assert.assertTrue(factory1.getCacheScheduler() ==
factory2.getCacheScheduler());
+
+ Assert.assertSame(factory1.getCacheScheduler(),
factory2.getCacheScheduler());
}
private Injector makeInjector()
@@ -529,18 +455,11 @@ public class NamespaceLookupExtractorFactoryTest
return Initialization.makeInjectorWithModules(
GuiceInjectors.makeStartupInjector(),
ImmutableList.of(
- new Module()
- {
- @Override
- public void configure(Binder binder)
- {
- JsonConfigProvider.bindInstance(
- binder,
- Key.get(DruidNode.class, Self.class),
- new DruidNode("test-inject", null, false, null, null,
true, false)
- );
- }
- }
+ binder -> JsonConfigProvider.bindInstance(
+ binder,
+ Key.get(DruidNode.class, Self.class),
+ new DruidNode("test-inject", null, false, null, null, true,
false)
+ )
)
);
}
@@ -548,11 +467,9 @@ public class NamespaceLookupExtractorFactoryTest
@Test
public void testExceptionalIntrospectionHandler() throws Exception
{
- final ExtractionNamespace extractionNamespace =
PowerMock.createStrictMock(ExtractionNamespace.class);
-
EasyMock.expect(scheduler.scheduleAndWait(EasyMock.eq(extractionNamespace),
EasyMock.anyLong()))
- .andReturn(entry)
- .once();
- mockReplay();
+ final ExtractionNamespace extractionNamespace =
mock(ExtractionNamespace.class);
+ when(scheduler.scheduleAndWait(eq(extractionNamespace),
anyLong())).thenReturn(entry);
+
final LookupExtractorFactory lookupExtractorFactory = new
NamespaceLookupExtractorFactory(
extractionNamespace,
scheduler
@@ -563,33 +480,21 @@ public class NamespaceLookupExtractorFactoryTest
Assert.assertNotNull(handler);
final Class<? extends LookupIntrospectHandler> clazz = handler.getClass();
- mockVerify();
- mockReset();
-
EasyMock.expect(entry.getCacheState()).andReturn(CacheScheduler.NoCache.CACHE_NOT_INITIALIZED).once();
- mockReplay();
+ verify(scheduler).scheduleAndWait(eq(extractionNamespace), anyLong());
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
+
+ reset(scheduler, entry, versionedCache);
+
+
when(entry.getCacheState()).thenReturn(CacheScheduler.NoCache.CACHE_NOT_INITIALIZED);
final Response response = (Response)
clazz.getMethod("getVersion").invoke(handler);
Assert.assertEquals(404, response.getStatus());
+ verify(entry).getCacheState();
validateNotFound("getKeys", handler, clazz);
validateNotFound("getValues", handler, clazz);
validateNotFound("getMap", handler, clazz);
- mockVerify();
- }
-
- private void mockReplay()
- {
- PowerMock.replay(scheduler, entry, versionedCache);
- }
-
- private void mockReset()
- {
- PowerMock.reset(scheduler, entry, versionedCache);
- }
-
- private void mockVerify()
- {
- PowerMock.verify(scheduler, entry, versionedCache);
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
}
private void validateNotFound(
@@ -598,13 +503,21 @@ public class NamespaceLookupExtractorFactoryTest
Class<? extends LookupIntrospectHandler> clazz
) throws Exception
{
- mockVerify();
- mockReset();
- expectEntryGetCacheStateOnce(versionedCache);
- expectEmptyCache();
- EasyMock.expect(versionedCache.getVersion()).andThrow(new ISE("some
exception")).once();
- mockReplay();
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
+ reset(scheduler, entry, versionedCache);
+
+ when(entry.getCacheState()).thenReturn(versionedCache);
+ when(entry.getCache()).thenReturn(new HashMap<String, String>());
+ when(versionedCache.getCache()).thenReturn(new HashMap<>());
+ when(versionedCache.getVersion()).thenThrow(new ISE("some exception"));
+
final Response response = (Response)
clazz.getMethod(method).invoke(handler);
Assert.assertEquals(404, response.getStatus());
+
+ verify(entry).getCacheState();
+ verify(entry, atMostOnce()).getCache();
+ verify(versionedCache, atMostOnce()).getCache();
+ verify(versionedCache).getVersion();
+ verifyNoMoreInteractions(scheduler, entry, versionedCache);
}
}
diff --git a/extensions-core/testing-tools/pom.xml
b/extensions-core/testing-tools/pom.xml
index 1b0410c..42c22af 100644
--- a/extensions-core/testing-tools/pom.xml
+++ b/extensions-core/testing-tools/pom.xml
@@ -137,11 +137,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<scope>test</scope>
diff --git a/indexing-hadoop/pom.xml b/indexing-hadoop/pom.xml
index 5616847..8d87cbb 100644
--- a/indexing-hadoop/pom.xml
+++ b/indexing-hadoop/pom.xml
@@ -159,22 +159,12 @@
</dependency>
<dependency>
<groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
+ <artifactId>mockito-inline</artifactId>
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-module-junit4</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-api-easymock</artifactId>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
diff --git
a/indexing-hadoop/src/test/java/org/apache/druid/indexer/HadoopDruidIndexerJobTest.java
b/indexing-hadoop/src/test/java/org/apache/druid/indexer/HadoopDruidIndexerJobTest.java
index 26e6ca2..38b3b1a 100644
---
a/indexing-hadoop/src/test/java/org/apache/druid/indexer/HadoopDruidIndexerJobTest.java
+++
b/indexing-hadoop/src/test/java/org/apache/druid/indexer/HadoopDruidIndexerJobTest.java
@@ -19,64 +19,56 @@
package org.apache.druid.indexer;
-import org.easymock.Capture;
-import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import
org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.ArgumentCaptor;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
import java.util.List;
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({
- JobHelper.class,
- IndexGeneratorJob.class
-})
-@PowerMockIgnore({"javax.net.ssl.*", "org.apache.logging.log4j.*"})
-@SuppressStaticInitializationFor({
- "org.apache.druid.indexer.HadoopDruidIndexerConfig",
- "org.apache.druid.indexer.JobHelper",
- "org.apache.druid.indexer.IndexGeneratorJob"
-})
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
public class HadoopDruidIndexerJobTest
{
- private HadoopDruidIndexerConfig config;
- private MetadataStorageUpdaterJobHandler handler;
- private HadoopDruidIndexerJob target;
-
@Test
public void test_run()
{
- config = PowerMock.createMock(HadoopDruidIndexerConfig.class);
- handler = PowerMock.createMock(MetadataStorageUpdaterJobHandler.class);
- PowerMock.mockStaticNice(JobHelper.class);
- PowerMock.mockStaticNice(IndexGeneratorJob.class);
- config.verify();
- EasyMock.expectLastCall();
- EasyMock.expect(config.isUpdaterJobSpecSet()).andReturn(false).anyTimes();
- config.setHadoopJobIdFileName(EasyMock.anyString());
- EasyMock.expectLastCall();
- JobHelper.ensurePaths(config);
- EasyMock.expectLastCall();
- Capture<List<Jobby>> capturedJobs = Capture.newInstance();
-
EasyMock.expect(JobHelper.runJobs(EasyMock.capture(capturedJobs))).andReturn(true);
-
EasyMock.expect(IndexGeneratorJob.getPublishedSegmentAndIndexZipFilePaths(EasyMock.anyObject())).andReturn(null);
+ HadoopDruidIndexerConfig config = mock(HadoopDruidIndexerConfig.class);
+ MetadataStorageUpdaterJobHandler handler =
mock(MetadataStorageUpdaterJobHandler.class);
+ try (MockedStatic<JobHelper> jobHelperMock =
Mockito.mockStatic(JobHelper.class)) {
+ try (final MockedStatic<IndexGeneratorJob> indexGeneratorJobMock =
Mockito.mockStatic(IndexGeneratorJob.class)) {
+ when(config.isUpdaterJobSpecSet()).thenReturn(false);
+
+ jobHelperMock.when(() -> JobHelper.runJobs(any())).thenReturn(true);
+ indexGeneratorJobMock.when(() ->
IndexGeneratorJob.getPublishedSegmentAndIndexZipFilePaths(any())).thenReturn(null);
+
+ HadoopDruidIndexerJob target = new HadoopDruidIndexerJob(config,
handler);
+ target.run();
+ ArgumentCaptor<List<Jobby>> capturedJobs =
ArgumentCaptor.forClass(List.class);
+ jobHelperMock.verify(() -> JobHelper.runJobs(capturedJobs.capture()));
- PowerMock.replayAll();
+ List<Jobby> jobs = capturedJobs.getValue();
+ Assert.assertEquals(2, jobs.size());
+ jobs.stream().filter(job -> !(job instanceof
IndexGeneratorJob)).forEach(job -> Assert.assertTrue(job.run()));
- target = new HadoopDruidIndexerJob(config, handler);
- target.run();
+ jobHelperMock.verify(() -> JobHelper.ensurePaths(config));
+ jobHelperMock.verifyNoMoreInteractions();
- List<Jobby> jobs = capturedJobs.getValue();
- Assert.assertEquals(2, jobs.size());
- jobs.stream().filter(job -> !(job instanceof
IndexGeneratorJob)).forEach(job -> Assert.assertTrue(job.run()));
+ indexGeneratorJobMock.verify(() ->
IndexGeneratorJob.getPublishedSegmentAndIndexZipFilePaths(any()));
+ indexGeneratorJobMock.verifyNoMoreInteractions();
- PowerMock.verifyAll();
+ verify(config).verify();
+ verify(config, atLeastOnce()).isUpdaterJobSpecSet();
+ verify(config).setHadoopJobIdFileName(null);
+ verifyNoMoreInteractions(config);
+ }
+ }
}
}
diff --git
a/indexing-hadoop/src/test/java/org/apache/druid/indexer/MetadataStorageUpdaterJobTest.java
b/indexing-hadoop/src/test/java/org/apache/druid/indexer/MetadataStorageUpdaterJobTest.java
index 0589030..606b93d 100644
---
a/indexing-hadoop/src/test/java/org/apache/druid/indexer/MetadataStorageUpdaterJobTest.java
+++
b/indexing-hadoop/src/test/java/org/apache/druid/indexer/MetadataStorageUpdaterJobTest.java
@@ -21,28 +21,18 @@ package org.apache.druid.indexer;
import com.google.common.collect.ImmutableList;
import org.apache.druid.indexer.updater.MetadataStorageUpdaterJobSpec;
-import org.easymock.EasyMock;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import
org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
import java.util.List;
import java.util.stream.Collectors;
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({
- IndexGeneratorJob.class
-})
-@PowerMockIgnore({"javax.net.ssl.*"})
-@SuppressStaticInitializationFor({
- "org.apache.druid.indexer.HadoopIngestionSpec",
- "org.apache.druid.indexer.HadoopDruidIndexerConfig",
- "org.apache.druid.indexer.IndexGeneratorJob"
-})
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
public class MetadataStorageUpdaterJobTest
{
private static final List<DataSegmentAndIndexZipFilePath>
DATA_SEGMENT_AND_INDEX_ZIP_FILE_PATHS = ImmutableList.of(
@@ -59,30 +49,39 @@ public class MetadataStorageUpdaterJobTest
@Test
public void test_run()
{
- metadataUpdateSpec =
PowerMock.createMock(MetadataStorageUpdaterJobSpec.class);
- ioConfig = PowerMock.createMock(HadoopIOConfig.class);
- spec = PowerMock.createMock(HadoopIngestionSpec.class);
- config = PowerMock.createMock(HadoopDruidIndexerConfig.class);
- handler = PowerMock.createMock(MetadataStorageUpdaterJobHandler.class);
- PowerMock.mockStaticNice(IndexGeneratorJob.class);
+ metadataUpdateSpec = mock(MetadataStorageUpdaterJobSpec.class);
+ ioConfig = mock(HadoopIOConfig.class);
+ spec = mock(HadoopIngestionSpec.class);
+ config = mock(HadoopDruidIndexerConfig.class);
+ handler = mock(MetadataStorageUpdaterJobHandler.class);
+
+ try (MockedStatic<IndexGeneratorJob> mockedStatic =
Mockito.mockStatic(IndexGeneratorJob.class)) {
+ mockedStatic.when(() ->
IndexGeneratorJob.getPublishedSegmentAndIndexZipFilePaths(config))
+ .thenReturn(DATA_SEGMENT_AND_INDEX_ZIP_FILE_PATHS);
+
+
+ when(metadataUpdateSpec.getSegmentTable()).thenReturn(SEGMENT_TABLE);
+ when(ioConfig.getMetadataUpdateSpec()).thenReturn(metadataUpdateSpec);
+ when(spec.getIOConfig()).thenReturn(ioConfig);
+ when(config.getSchema()).thenReturn(spec);
+
-
EasyMock.expect(metadataUpdateSpec.getSegmentTable()).andReturn(SEGMENT_TABLE);
-
EasyMock.expect(ioConfig.getMetadataUpdateSpec()).andReturn(metadataUpdateSpec);
- EasyMock.expect(spec.getIOConfig()).andReturn(ioConfig);
- EasyMock.expect(config.getSchema()).andReturn(spec);
-
EasyMock.expect(IndexGeneratorJob.getPublishedSegmentAndIndexZipFilePaths(config))
- .andReturn(DATA_SEGMENT_AND_INDEX_ZIP_FILE_PATHS);
- handler.publishSegments(
- SEGMENT_TABLE,
- DATA_SEGMENT_AND_INDEX_ZIP_FILE_PATHS.stream().map(s ->
s.getSegment()).collect(
- Collectors.toList()), HadoopDruidIndexerConfig.JSON_MAPPER);
- EasyMock.expectLastCall();
- target = new MetadataStorageUpdaterJob(config, handler);
+ target = new MetadataStorageUpdaterJob(config, handler);
- PowerMock.replayAll();
+ target.run();
- target.run();
+ verify(handler).publishSegments(
+ SEGMENT_TABLE,
+ DATA_SEGMENT_AND_INDEX_ZIP_FILE_PATHS.stream().map(s ->
s.getSegment()).collect(
+ Collectors.toList()), HadoopDruidIndexerConfig.JSON_MAPPER
+ );
- PowerMock.verifyAll();
+ verify(metadataUpdateSpec).getSegmentTable();
+ verify(ioConfig).getMetadataUpdateSpec();
+ verify(spec).getIOConfig();
+ verify(config).getSchema();
+ mockedStatic.verify(() ->
IndexGeneratorJob.getPublishedSegmentAndIndexZipFilePaths(config));
+ verifyNoMoreInteractions(handler, metadataUpdateSpec, ioConfig, spec,
config);
+ }
}
}
diff --git
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SequenceMetadataTest.java
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SequenceMetadataTest.java
index 537b6c4..9f03d5f 100644
---
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SequenceMetadataTest.java
+++
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SequenceMetadataTest.java
@@ -121,7 +121,7 @@ public class SequenceMetadataTest
@Test
public void
testPublishAnnotatedSegmentsSucceedIfDropSegmentsAndOverwriteSegmentsNullAndEmpty()
throws Exception
{
-
Mockito.when(mockSeekableStreamIndexTaskRunner.deserializePartitionsFromMetadata(ArgumentMatchers.anyObject(),
ArgumentMatchers.anyObject())).thenReturn(mockSeekableStreamEndSequenceNumbers);
+
Mockito.when(mockSeekableStreamIndexTaskRunner.deserializePartitionsFromMetadata(ArgumentMatchers.any(),
ArgumentMatchers.any())).thenReturn(mockSeekableStreamEndSequenceNumbers);
Mockito.when(mockSeekableStreamEndSequenceNumbers.getPartitionSequenceNumberMap()).thenReturn(ImmutableMap.of());
Mockito.when(mockTaskToolbox.getTaskActionClient()).thenReturn(mockTaskActionClient);
DataSegment dataSegment = DataSegment.builder()
diff --git a/licenses.yaml b/licenses.yaml
index 3ff8072..93333e0 100644
--- a/licenses.yaml
+++ b/licenses.yaml
@@ -823,18 +823,9 @@ name: net.bytebuddy byte-buddy
license_category: binary
module: extensions/druid-pac4j
license_name: Apache License version 2.0
-version: 1.9.10
+version: 1.12.7
libraries:
- net.bytebuddy: byte-buddy
-
----
-
-name: net.bytebuddy byte-buddy-agent
-license_category: binary
-module: extensions/druid-pac4j
-license_name: Apache License version 2.0
-version: 1.9.10
-libraries:
- net.bytebuddy: byte-buddy-agent
---
@@ -843,7 +834,7 @@ name: org.mockito mockito-core
license_category: binary
module: extensions/druid-pac4j
license_name: MIT License
-version: 2.28.2
+version: 4.3.1
libraries:
- org.mockito: mockito-core
diff --git a/pom.xml b/pom.xml
index 7662aca..c4829cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,8 +108,7 @@
<slf4j.version>1.7.12</slf4j.version>
<!-- If compiling with different hadoop version also modify default
hadoop coordinates in TaskConfig.java -->
<hadoop.compile.version>2.8.5</hadoop.compile.version>
- <mockito.version>3.8.0</mockito.version>
- <powermock.version>2.0.9</powermock.version>
+ <mockito.version>4.3.1</mockito.version>
<aws.sdk.version>1.12.37</aws.sdk.version>
<caffeine.version>2.8.0</caffeine.version>
<jacoco.version>0.8.7</jacoco.version>
@@ -924,27 +923,10 @@
</dependency>
<dependency>
<groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
+ <artifactId>mockito-bom</artifactId>
<version>${mockito.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-core</artifactId>
- <version>${powermock.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-module-junit4</artifactId>
- <version>${powermock.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-api-easymock</artifactId>
- <version>${powermock.version}</version>
- <scope>test</scope>
+ <scope>import</scope>
+ <type>pom</type>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
diff --git
a/server/src/test/java/org/apache/druid/server/coordinator/duty/KillAuditLogTest.java
b/server/src/test/java/org/apache/druid/server/coordinator/duty/KillAuditLogTest.java
index 5f3139d..926b80e 100644
---
a/server/src/test/java/org/apache/druid/server/coordinator/duty/KillAuditLogTest.java
+++
b/server/src/test/java/org/apache/druid/server/coordinator/duty/KillAuditLogTest.java
@@ -76,7 +76,7 @@ public class KillAuditLogTest
);
killAuditLog = new KillAuditLog(mockAuditManager, druidCoordinatorConfig);
killAuditLog.run(mockDruidCoordinatorRuntimeParams);
- Mockito.verifyZeroInteractions(mockAuditManager);
+ Mockito.verifyNoInteractions(mockAuditManager);
}
@Test
diff --git
a/server/src/test/java/org/apache/druid/server/coordinator/duty/KillCompactionConfigTest.java
b/server/src/test/java/org/apache/druid/server/coordinator/duty/KillCompactionConfigTest.java
index a836364..f2a224a 100644
---
a/server/src/test/java/org/apache/druid/server/coordinator/duty/KillCompactionConfigTest.java
+++
b/server/src/test/java/org/apache/druid/server/coordinator/duty/KillCompactionConfigTest.java
@@ -114,9 +114,9 @@ public class KillCompactionConfigTest
mockConnectorConfig
);
killCompactionConfig.run(mockDruidCoordinatorRuntimeParams);
- Mockito.verifyZeroInteractions(mockSqlSegmentsMetadataManager);
- Mockito.verifyZeroInteractions(mockJacksonConfigManager);
- Mockito.verifyZeroInteractions(mockServiceEmitter);
+ Mockito.verifyNoInteractions(mockSqlSegmentsMetadataManager);
+ Mockito.verifyNoInteractions(mockJacksonConfigManager);
+ Mockito.verifyNoInteractions(mockServiceEmitter);
}
@Test
@@ -199,7 +199,7 @@ public class KillCompactionConfigTest
mockConnectorConfig
);
killCompactionConfig.run(mockDruidCoordinatorRuntimeParams);
- Mockito.verifyZeroInteractions(mockSqlSegmentsMetadataManager);
+ Mockito.verifyNoInteractions(mockSqlSegmentsMetadataManager);
final ArgumentCaptor<ServiceEventBuilder> emittedEventCaptor =
ArgumentCaptor.forClass(ServiceEventBuilder.class);
Mockito.verify(mockServiceEmitter).emit(emittedEventCaptor.capture());
Assert.assertEquals(KillCompactionConfig.COUNT_METRIC,
emittedEventCaptor.getValue().build(ImmutableMap.of()).toMap().get("metric"));
diff --git
a/server/src/test/java/org/apache/druid/server/coordinator/duty/KillDatasourceMetadataTest.java
b/server/src/test/java/org/apache/druid/server/coordinator/duty/KillDatasourceMetadataTest.java
index dee5461..0af57de 100644
---
a/server/src/test/java/org/apache/druid/server/coordinator/duty/KillDatasourceMetadataTest.java
+++
b/server/src/test/java/org/apache/druid/server/coordinator/duty/KillDatasourceMetadataTest.java
@@ -85,8 +85,8 @@ public class KillDatasourceMetadataTest
);
killDatasourceMetadata = new
KillDatasourceMetadata(druidCoordinatorConfig,
mockIndexerMetadataStorageCoordinator, mockMetadataSupervisorManager);
killDatasourceMetadata.run(mockDruidCoordinatorRuntimeParams);
- Mockito.verifyZeroInteractions(mockIndexerMetadataStorageCoordinator);
- Mockito.verifyZeroInteractions(mockMetadataSupervisorManager);
+ Mockito.verifyNoInteractions(mockIndexerMetadataStorageCoordinator);
+ Mockito.verifyNoInteractions(mockMetadataSupervisorManager);
}
@Test
diff --git
a/server/src/test/java/org/apache/druid/server/coordinator/duty/KillRulesTest.java
b/server/src/test/java/org/apache/druid/server/coordinator/duty/KillRulesTest.java
index b95e8d7..86a5d2c 100644
---
a/server/src/test/java/org/apache/druid/server/coordinator/duty/KillRulesTest.java
+++
b/server/src/test/java/org/apache/druid/server/coordinator/duty/KillRulesTest.java
@@ -83,7 +83,7 @@ public class KillRulesTest
);
killRules = new KillRules(druidCoordinatorConfig);
killRules.run(mockDruidCoordinatorRuntimeParams);
- Mockito.verifyZeroInteractions(mockRuleManager);
+ Mockito.verifyNoInteractions(mockRuleManager);
}
@Test
diff --git
a/server/src/test/java/org/apache/druid/server/coordinator/duty/KillSupervisorsTest.java
b/server/src/test/java/org/apache/druid/server/coordinator/duty/KillSupervisorsTest.java
index bd88bb9..c5fa2d7 100644
---
a/server/src/test/java/org/apache/druid/server/coordinator/duty/KillSupervisorsTest.java
+++
b/server/src/test/java/org/apache/druid/server/coordinator/duty/KillSupervisorsTest.java
@@ -76,7 +76,7 @@ public class KillSupervisorsTest
);
killSupervisors = new KillSupervisors(druidCoordinatorConfig,
mockMetadataSupervisorManager);
killSupervisors.run(mockDruidCoordinatorRuntimeParams);
- Mockito.verifyZeroInteractions(mockMetadataSupervisorManager);
+ Mockito.verifyNoInteractions(mockMetadataSupervisorManager);
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]