#5297 Implement monitor feedback, Add corresponding tests
[taxeditor.git] / eu.etaxonomy.taxeditor.test / src / test / java / eu / etaxonomy / taxeditor / service / ProgressMonitorServiceTest.java
index e132f71a20ba3f1a69da93df3b364db47ebd9060..b4d2c3344691d8907fc41f0b30286a1f0fc22526 100644 (file)
@@ -9,6 +9,10 @@
  */
 package eu.etaxonomy.taxeditor.service;
 
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.UUID;
 
 import org.apache.log4j.Logger;
@@ -22,6 +26,7 @@ import eu.etaxonomy.cdm.api.service.ITestService;
 import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
 import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitor;
 import eu.etaxonomy.taxeditor.httpinvoker.RemotingSessionAwareTest;
+import eu.etaxonomy.taxeditor.operation.IFeedbackGenerator;
 import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
@@ -47,16 +52,17 @@ public class ProgressMonitorServiceTest extends RemotingSessionAwareTest {
 
     @Test
     public void testMonitLongRunningMethod() throws InterruptedException {
-        UUID uuid = testService.monitLongRunningMethod(null);
+        UUID uuid = testService.monitLongRunningMethod(null, null);
         int pollInterval = 1000;
         RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor();
         expectedMonitor.setResult("Success");
         expectedMonitor.addReport("Report");
         expectedMonitor.done();
-        IRemotingProgressMonitor remotingMonitor = CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor",
+        CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor",
                 uuid,
                 pollInterval,
                 new MockPostMoniteredOperationEnabled(expectedMonitor, uuid),
+                (IFeedbackGenerator)null,
                 new NullProgressMonitor());
     }
 
@@ -64,7 +70,7 @@ public class ProgressMonitorServiceTest extends RemotingSessionAwareTest {
     public void testMonitLongRunningMethodByChangingUser() throws InterruptedException {
 
         IllegalStateException ise = new IllegalStateException("IllegalStateException");
-        UUID uuid = testService.monitLongRunningMethod(ise);
+        UUID uuid = testService.monitLongRunningMethod(ise, null);
         authenticateExtraUser();
         IRemotingProgressMonitor monitor = progressMonitorService.getRemotingMonitor(uuid);
         Assert.assertNull(monitor);
@@ -74,23 +80,24 @@ public class ProgressMonitorServiceTest extends RemotingSessionAwareTest {
     @Test
     public void testMonitLongRunningMethodWithException() throws InterruptedException {
         IllegalStateException ise = new IllegalStateException("IllegalStateException");
-        UUID uuid = testService.monitLongRunningMethod(ise);
+        UUID uuid = testService.monitLongRunningMethod(ise, null);
         int pollInterval = 1000;
         RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor();
         expectedMonitor.setResult(ise);
         expectedMonitor.setIsFailed(true);
         expectedMonitor.done();
-        IRemotingProgressMonitor remotingMonitor = CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor",
+        CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor",
                 uuid,
                 pollInterval,
                 new MockPostMoniteredOperationEnabled(expectedMonitor, uuid),
+                (IFeedbackGenerator)null,
                 new NullProgressMonitor());
     }
 
     @Test
-    public void testMonitLongRunningMethodWithInterrupt() throws InterruptedException {
+    public void testMonitLongRunningMethodWithInterrupt() {
         IllegalStateException ise = new IllegalStateException("Interrupted Exception");
-        final UUID uuid = testService.monitLongRunningMethod(ise);
+        final UUID uuid = testService.monitLongRunningMethod(ise, null);
         final int pollInterval = 1000;
         final RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor();
         expectedMonitor.setResult(ise);
@@ -102,16 +109,16 @@ public class ProgressMonitorServiceTest extends RemotingSessionAwareTest {
             @Override
             public void run() {
                 try {
-                    IRemotingProgressMonitor remotingMonitor = CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor",
+                    CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor",
                             uuid,
                             pollInterval,
                             null,
+                            (IFeedbackGenerator)null,
                             new NullProgressMonitor());
                 } catch (InterruptedException e) {
 
                 }
             }
-
         };
         thread.start();
         while(!progressMonitorService.isMonitorThreadRunning(uuid)) {}
@@ -128,7 +135,7 @@ public class ProgressMonitorServiceTest extends RemotingSessionAwareTest {
     @Test
     public void testMonitLongRunningMethodWithCancellation() throws InterruptedException {
 
-        final UUID uuid = testService.monitLongRunningMethod(null);
+        final UUID uuid = testService.monitLongRunningMethod(null, null);
         final int pollInterval = 1000;
         final RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor();
         expectedMonitor.setResult("Cancelled");
@@ -139,10 +146,11 @@ public class ProgressMonitorServiceTest extends RemotingSessionAwareTest {
             @Override
             public void run() {
                 try {
-                    IRemotingProgressMonitor remotingMonitor = CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor",
+                    CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor",
                             uuid,
                             pollInterval,
                             null,
+                            (IFeedbackGenerator)null,
                             new NullProgressMonitor());
                 } catch (InterruptedException e) {
 
@@ -159,6 +167,49 @@ public class ProgressMonitorServiceTest extends RemotingSessionAwareTest {
 
     }
 
+    @Test
+    public void testMonitLongRunningMethodWithWaitForFeedback() throws InterruptedException {
+
+        List<String> feedbacks = Arrays.asList("feedback1", "feedback2");
+        List<IFeedbackGenerator> feebackGenerators = new ArrayList<IFeedbackGenerator>();
+        final RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor();
+        expectedMonitor.setResult("Success");
+        for(String feedback : feedbacks) {
+            feebackGenerators.add(new MockFeedbackGenerator(feedback));
+            expectedMonitor.addReport(feedback);
+        }
+        expectedMonitor.addReport("Report");
+        expectedMonitor.done();
+
+        final UUID uuid = testService.monitLongRunningMethod(null, feedbacks);
+        final int pollInterval = 1000;
+
+        CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor",
+                uuid,
+                pollInterval,
+                new MockPostMoniteredOperationEnabled(expectedMonitor, uuid),
+                feebackGenerators,
+                new NullProgressMonitor());
+
+        feebackGenerators.remove(1);
+
+        final UUID newUuid = testService.monitLongRunningMethod(null, feedbacks);
+
+        try {
+            CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor",
+                    newUuid,
+                    pollInterval,
+                    new MockPostMoniteredOperationEnabled(expectedMonitor, newUuid),
+                    feebackGenerators,
+                    new NullProgressMonitor());
+            Assert.fail("Exception due to inconsistent number of feedback generators not thrown");
+        } catch(IllegalStateException ise) {
+
+        }
+
+
+    }
+
 
     class MockPostMoniteredOperationEnabled implements IPostMoniteredOperationEnabled {
 
@@ -188,6 +239,22 @@ public class ProgressMonitorServiceTest extends RemotingSessionAwareTest {
             Assert.assertEquals(expectedMonitor.isDone(), monitor.isDone());
             Assert.assertTrue(!progressMonitorService.isMonitorThreadRunning(monitorUuid));
         }
+    }
+
+    class MockFeedbackGenerator implements IFeedbackGenerator {
+
+        private String feedback;
+
+        public MockFeedbackGenerator(String feedback) {
+            this.feedback = feedback;
+        }
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public Serializable generateFeedback() {
+            return feedback;
+        }
 
     }
 }