bump mockito version and added tests
diff --git a/pom.xml b/pom.xml
index 7c52e2b..9a39e0f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -115,6 +115,15 @@
</excludePackageNames>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
</plugins>
</build>
<dependencies>
@@ -153,9 +162,10 @@
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
<scope>test</scope>
+ <version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
@@ -199,7 +209,7 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
- <version>1.10.19</version>
+ <version>3.10.0</version>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java b/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java
index 4701eca..56d54e6 100644
--- a/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java
+++ b/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java
@@ -652,7 +652,8 @@
String[] stackFrames = ExceptionUtils.getStackFrames(e);
StringBuilder stackExcerpt = new StringBuilder();
// skip the first line, it contains the name of the exception
- for (int i=1;i< STACKTRACE_DEPTH;i++) {
+ int depth = Math.min(STACKTRACE_DEPTH, stackFrames.length);
+ for (int i=1;i< depth ;i++) {
stackExcerpt.append(stackFrames[i]).append("\n");
}
location = "triggered by this code:\n" + stackExcerpt.toString();
diff --git a/src/test/java/org/apache/sling/commons/scheduler/impl/QuartzSchedulerTest.java b/src/test/java/org/apache/sling/commons/scheduler/impl/QuartzSchedulerTest.java
index 4905672..c46f94b 100644
--- a/src/test/java/org/apache/sling/commons/scheduler/impl/QuartzSchedulerTest.java
+++ b/src/test/java/org/apache/sling/commons/scheduler/impl/QuartzSchedulerTest.java
@@ -20,6 +20,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
@@ -40,7 +41,11 @@
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import static org.mockito.Mockito.lenient;
import org.mockito.runners.MockitoJUnitRunner;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
@@ -50,6 +55,12 @@
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
import org.quartz.impl.matchers.GroupMatcher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import ch.qos.logback.classic.Level;
+
+
@RunWith(MockitoJUnitRunner.class)
public class QuartzSchedulerTest {
@@ -234,7 +245,7 @@
public void testBundleChangedWithStartedBundle() throws SchedulerException {
String firstJob = "testName1";
String secondJob = "testName2";
- when(bundle.getBundleId()).thenReturn(2L);
+ lenient().when(bundle.getBundleId()).thenReturn(2L);
quartzScheduler.addJob(1L, 1L, firstJob, new Thread(), new HashMap<String, Serializable>(), "0 * * * * ?", true);
quartzScheduler.addJob(2L, 2L, secondJob, new Thread(), new HashMap<String, Serializable>(), "0 * * * * ?", true);
@@ -251,7 +262,7 @@
String firstJob = "testName1";
String secondJob = "testName2";
Long bundleIdToRemove = 2L;
- when(bundle.getBundleId()).thenReturn(bundleIdToRemove);
+ lenient().when(bundle.getBundleId()).thenReturn(bundleIdToRemove);
quartzScheduler.addJob(1L, 1L, firstJob, new Thread(), new HashMap<String, Serializable>(), "0 * * * * ?", true);
quartzScheduler.addJob(bundleIdToRemove, 2L, secondJob, new Thread(), new HashMap<String, Serializable>(), "0 * * * * ?", true);
@@ -367,4 +378,32 @@
assertNull(jobDetail.getJobDataMap().get(QuartzScheduler.DATA_MAP_PROVIDED_NAME));
assertNotNull(jobDetail.getJobDataMap().get(QuartzScheduler.DATA_MAP_NAME));
}
+
+ @Test
+ public void testDefaultThreadPoolLogging() throws Exception {
+
+ // Create a spy on the logger and enable debugging on it
+ Field logger = quartzScheduler.getClass().getDeclaredField("defaultThreadPoolLogger");
+ logger.setAccessible(true);
+ logger.get(quartzScheduler);
+ ch.qos.logback.classic.Logger threadpoolLogger = (ch.qos.logback.classic.Logger) logger.get(quartzScheduler);
+ threadpoolLogger.setLevel(Level.DEBUG);
+ ch.qos.logback.classic.Logger spy = Mockito.spy(threadpoolLogger);
+ logger.set(quartzScheduler, spy);
+
+ ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
+
+ assertTrue(quartzScheduler.schedule(2L, 2L, new Thread(), new InternalScheduleOptions(TriggerBuilder.newTrigger())));
+ Mockito.verify(spy).isDebugEnabled();
+ Mockito.verify(spy).debug(Mockito.matches("Scheduled job using the default threadpool;.+"),argument.capture());
+ assertTrue(argument.getValue().startsWith("triggered by this code:"));
+ Mockito.reset(spy);
+
+ InternalScheduleOptions options = new InternalScheduleOptions(TriggerBuilder.newTrigger());
+ options.componenentName = "org.some.component.name";
+ assertTrue(quartzScheduler.schedule(2L, 2L, new Thread(), options));
+ Mockito.verify(spy).isDebugEnabled();
+ Mockito.verify(spy).debug(Mockito.matches("Scheduled job using the default threadpool;.+"),argument.capture());
+ assertTrue(argument.getValue().equals("defined by OSGI annotations on component with name org.some.component.name"));
+ }
}
diff --git a/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000..1f0955d
--- /dev/null
+++ b/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline