Improve IndexEventHandlerTest tests in High-Availability plugin

Improve CurrentThreadScheduledExecutorService to avoid running tasks in
one thread, that end up with stack overflow exception. Executor creates
new thread with defined name for the task, it runs.
Replace deprecated method verifyZeroInteractions with
verifyNoInteractions method.

Bug: Issue 16046
Change-Id: I44b1119c7aa3565f60c103e73232a3a1860e801f
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java
index 578dc17..81f16e4 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java
@@ -22,7 +22,7 @@
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
 import static org.mockito.Mockito.when;
 
 import com.ericsson.gerrit.plugins.highavailability.Configuration;
@@ -76,6 +76,7 @@
   private static final String OTHER_UUID = "4";
   private static final Integer INDEX_WAIT_TIMEOUT_MS = 5;
   private static final int MAX_TEST_PARALLELISM = 4;
+  private static final String EXECUTOR_THREAD_NAME = "EXECUTOR_THREAD";
 
   private IndexEventHandler indexEventHandler;
   @Mock private Forwarder forwarder;
@@ -91,6 +92,7 @@
   @Mock private RequestContext mockCtx;
   @Mock private Configuration configuration;
   private IndexEventLocks idLocks;
+  private Thread executorThread;
 
   private CurrentRequestContext currCtx =
       new CurrentRequestContext(null, null, null) {
@@ -155,6 +157,7 @@
   @Test
   public void shouldIndexInRemoteOnChangeIndexedEvent() throws Exception {
     indexEventHandler.onChangeIndexed(PROJECT_NAME, changeId.get());
+    executorThread.join();
     verify(forwarder).indexChange(eq(PROJECT_NAME), eq(CHANGE_ID), any());
   }
 
@@ -257,7 +260,7 @@
     setUpIndexEventHandler(currCtx, locks);
 
     indexEventHandler.onChangeIndexed(PROJECT_NAME, changeId.get());
-
+    executorThread.join();
     verify(locks, times(2)).withLock(any(), any(), any());
     verify(forwarder, times(1)).indexChange(eq(PROJECT_NAME), eq(CHANGE_ID), any());
   }
@@ -276,9 +279,8 @@
     when(httpCfg.maxTries()).thenReturn(10);
     when(cfg.http()).thenReturn(httpCfg);
     setUpIndexEventHandler(currCtx, locks, cfg);
-
     indexEventHandler.onChangeIndexed(PROJECT_NAME, changeId.get());
-
+    executorThread.join();
     verify(locks, times(11)).withLock(any(), any(), any());
     verify(forwarder, never()).indexChange(eq(PROJECT_NAME), eq(CHANGE_ID), any());
   }
@@ -299,7 +301,7 @@
     setUpIndexEventHandler(currCtx, locks, cfg);
 
     indexEventHandler.onChangeIndexed(PROJECT_NAME, changeId.get());
-
+    executorThread.join();
     verify(locks, times(1)).withLock(any(), any(), any());
     verify(forwarder, never()).indexChange(eq(PROJECT_NAME), eq(CHANGE_ID), any());
   }
@@ -319,8 +321,9 @@
     setUpIndexEventHandler(currCtx, locks);
 
     indexEventHandler.onChangeIndexed(PROJECT_NAME, changeId.get());
+    executorThread.join();
     indexEventHandler.onAccountIndexed(accountId.get());
-
+    executorThread.join();
     verify(forwarder, never()).indexChange(eq(PROJECT_NAME), eq(CHANGE_ID), any());
     verify(forwarder).indexAccount(eq(ACCOUNT_ID), any());
   }
@@ -333,29 +336,32 @@
     Configuration.Index cfgIndex = mock(Configuration.Index.class);
     when(cfgMock.index()).thenReturn(cfgIndex);
     when(cfgIndex.synchronizeForced()).thenReturn(true);
-
     setUpIndexEventHandler(new CurrentRequestContext(threadLocalCtxMock, cfgMock, oneOffCtxMock));
+
     indexEventHandler.onChangeIndexed(PROJECT_NAME, changeId.get());
+    executorThread.join();
     verify(forwarder).indexChange(eq(PROJECT_NAME), eq(CHANGE_ID), any());
   }
 
   @Test
   public void shouldIndexInRemoteOnAccountIndexedEvent() throws Exception {
     indexEventHandler.onAccountIndexed(accountId.get());
+    executorThread.join();
     verify(forwarder).indexAccount(eq(ACCOUNT_ID), any());
   }
 
   @Test
   public void shouldDeleteFromIndexInRemoteOnChangeDeletedEvent() throws Exception {
     indexEventHandler.onChangeDeleted(changeId.get());
+    executorThread.join();
     verify(forwarder).deleteChangeFromIndex(eq(CHANGE_ID), any());
-    verifyZeroInteractions(
-        changeCheckerMock); // Deleted changes should not be checked against NoteDb
+    verifyNoInteractions(changeCheckerMock); // Deleted changes should not be checked against NoteDb
   }
 
   @Test
   public void shouldIndexInRemoteOnGroupIndexedEvent() throws Exception {
     indexEventHandler.onGroupIndexed(accountGroupUUID.get());
+    executorThread.join();
     verify(forwarder).indexGroup(eq(UUID), any());
   }
 
@@ -365,7 +371,7 @@
     indexEventHandler.onChangeIndexed(PROJECT_NAME, changeId.get());
     indexEventHandler.onChangeDeleted(changeId.get());
     Context.unsetForwardedEvent();
-    verifyZeroInteractions(forwarder);
+    verifyNoInteractions(forwarder);
   }
 
   @Test
@@ -374,7 +380,7 @@
     indexEventHandler.onAccountIndexed(accountId.get());
     indexEventHandler.onAccountIndexed(accountId.get());
     Context.unsetForwardedEvent();
-    verifyZeroInteractions(forwarder);
+    verifyNoInteractions(forwarder);
   }
 
   @Test
@@ -383,7 +389,7 @@
     indexEventHandler.onGroupIndexed(accountGroupUUID.get());
     indexEventHandler.onGroupIndexed(accountGroupUUID.get());
     Context.unsetForwardedEvent();
-    verifyZeroInteractions(forwarder);
+    verifyNoInteractions(forwarder);
   }
 
   @Test
@@ -684,7 +690,6 @@
   }
 
   private class CurrentThreadScheduledExecutorService implements ScheduledExecutorService {
-
     @Override
     public void shutdown() {}
 
@@ -750,7 +755,9 @@
 
     @Override
     public void execute(Runnable command) {
-      command.run();
+      executorThread = new Thread(command);
+      executorThread.setName(EXECUTOR_THREAD_NAME);
+      executorThread.start();
     }
 
     @Override