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