azkaban-aplcache

Remove sleep in TriggerInstanceProcessorTest (#1753) -

5/8/2018 1:30:49 AM

Details

diff --git a/azkaban-web-server/src/test/java/azkaban/flowtrigger/TriggerInstanceProcessorTest.java b/azkaban-web-server/src/test/java/azkaban/flowtrigger/TriggerInstanceProcessorTest.java
index cb95603..9c61e84 100644
--- a/azkaban-web-server/src/test/java/azkaban/flowtrigger/TriggerInstanceProcessorTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/flowtrigger/TriggerInstanceProcessorTest.java
@@ -15,10 +15,9 @@
  */
 package azkaban.flowtrigger;
 
-import static java.lang.Thread.sleep;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -34,29 +33,22 @@ import azkaban.utils.Emailer;
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 import org.assertj.core.util.Lists;
 import org.assertj.core.util.Maps;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 
 
 public class TriggerInstanceProcessorTest {
 
   private static final String EMAIL = "test@email.com";
-  private static FlowTriggerInstanceLoader triggerInstLoader;
-  private static ExecutorManager executorManager;
-  private static Emailer emailer;
-  private static TriggerInstanceProcessor processor;
-
-  @BeforeClass
-  public static void setup() throws Exception {
-    triggerInstLoader = mock(FlowTriggerInstanceLoader.class);
-    executorManager = mock(ExecutorManager.class);
-    when(executorManager.submitExecutableFlow(any(), anyString())).thenReturn("return");
-    emailer = mock(Emailer.class);
-    doNothing().when(emailer).sendEmail(any(), any(), any());
-    processor = new TriggerInstanceProcessor(executorManager, triggerInstLoader, emailer);
-  }
+  private FlowTriggerInstanceLoader triggerInstLoader;
+  private ExecutorManager executorManager;
+  private Emailer emailer;
+  private TriggerInstanceProcessor processor;
+  private CountDownLatch sendEmailLatch;
 
   private static TriggerInstance createTriggerInstance() {
     final FlowTrigger flowTrigger = new FlowTrigger(
@@ -73,26 +65,41 @@ public class TriggerInstanceProcessorTest {
         "test", depInstList, -1, proj);
   }
 
+  @Before
+  public void setUp() throws Exception {
+    this.triggerInstLoader = mock(FlowTriggerInstanceLoader.class);
+    this.executorManager = mock(ExecutorManager.class);
+    when(this.executorManager.submitExecutableFlow(any(), anyString())).thenReturn("return");
+    this.emailer = mock(Emailer.class);
+    this.sendEmailLatch = new CountDownLatch(1);
+    doAnswer(invocation -> {
+      this.sendEmailLatch.countDown();
+      return null;
+    }).when(this.emailer).sendEmail(any(), any(), any());
+    this.processor = new TriggerInstanceProcessor(this.executorManager, this.triggerInstLoader,
+        this.emailer);
+  }
+
   @Test
   public void testProcessSucceed() throws ExecutorManagerException {
     final TriggerInstance triggerInstance = createTriggerInstance();
-    processor.processSucceed(triggerInstance);
-    verify(executorManager).submitExecutableFlow(any(), anyString());
-    verify(triggerInstLoader).updateAssociatedFlowExecId(triggerInstance);
+    this.processor.processSucceed(triggerInstance);
+    verify(this.executorManager).submitExecutableFlow(any(), anyString());
+    verify(this.triggerInstLoader).updateAssociatedFlowExecId(triggerInstance);
   }
 
   @Test
-  public void testProcessTermination() throws ExecutorManagerException, InterruptedException {
+  public void testProcessTermination() throws Exception {
     final TriggerInstance triggerInstance = createTriggerInstance();
-    processor.processTermination(triggerInstance);
-    sleep(1000);
-    verify(emailer).sendEmail(any(), any(), any());
+    this.processor.processTermination(triggerInstance);
+    this.sendEmailLatch.await(10L, TimeUnit.SECONDS);
+    verify(this.emailer).sendEmail(any(), any(), any());
   }
 
   @Test
-  public void testNewInstance() throws ExecutorManagerException {
+  public void testNewInstance() {
     final TriggerInstance triggerInstance = createTriggerInstance();
-    processor.processNewInstance(triggerInstance);
-    verify(triggerInstLoader).uploadTriggerInstance(triggerInstance);
+    this.processor.processNewInstance(triggerInstance);
+    verify(this.triggerInstLoader).uploadTriggerInstance(triggerInstance);
   }
 }