diff --git a/mule-migration-tool-engine/src/main/java/com/mulesoft/tools/migration/engine/MigrationJob.java b/mule-migration-tool-engine/src/main/java/com/mulesoft/tools/migration/engine/MigrationJob.java index a17e6a389..d8c2abf40 100644 --- a/mule-migration-tool-engine/src/main/java/com/mulesoft/tools/migration/engine/MigrationJob.java +++ b/mule-migration-tool-engine/src/main/java/com/mulesoft/tools/migration/engine/MigrationJob.java @@ -94,6 +94,7 @@ public void execute(MigrationReport report) throws Exception { applicationModel = generateTargetApplicationModel(outputProject, targetProjectType, sourceProjectBasePath, projectParentGAV, projectGAV); try { + MigrationTaskException firstMigrationTaskException = null; for (AbstractMigrationTask task : migrationTasks) { if (task.getApplicableProjectTypes().contains(targetProjectType)) { task.setApplicationModel(applicationModel); @@ -108,6 +109,9 @@ public void execute(MigrationReport report) throws Exception { if (cancelOnError) { throw ex; } else { + if (firstMigrationTaskException == null) { + firstMigrationTaskException = ex; + } logger.error("Failed to apply task, rolling back and continuing with the next one.", ex); } } catch (RuntimeException e) { @@ -116,6 +120,9 @@ public void execute(MigrationReport report) throws Exception { } } } + if (firstMigrationTaskException != null) { + throw firstMigrationTaskException; + } } finally { generateReport(report, applicationModel); } diff --git a/mule-migration-tool-engine/src/test/java/com/mulesoft/tools/migration/engine/MigrationJobTest.java b/mule-migration-tool-engine/src/test/java/com/mulesoft/tools/migration/engine/MigrationJobTest.java index 99b642540..42acc7221 100644 --- a/mule-migration-tool-engine/src/test/java/com/mulesoft/tools/migration/engine/MigrationJobTest.java +++ b/mule-migration-tool-engine/src/test/java/com/mulesoft/tools/migration/engine/MigrationJobTest.java @@ -14,6 +14,7 @@ import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; @@ -133,16 +134,27 @@ public void executeWithTaskThatFailsNotStopExecution() throws Exception { .withOuputVersion(MULE_413_VERSION) .build(); - AbstractMigrationTask migrationTask = mock(AbstractMigrationTask.class); + AbstractMigrationTask migrationTask1 = mock(AbstractMigrationTask.class); doThrow(MigrationTaskException.class) - .when(migrationTask) + .when(migrationTask1) .execute(any(MigrationReport.class)); - when(migrationTask.getApplicableProjectTypes()).thenReturn(singleton(MULE_FOUR_APPLICATION)); + when(migrationTask1.getApplicableProjectTypes()).thenReturn(singleton(MULE_FOUR_APPLICATION)); - migrationTasks.add(migrationTask); + AbstractMigrationTask migrationTask2 = mock(AbstractMigrationTask.class); + when(migrationTask2.getApplicableProjectTypes()).thenReturn(singleton(MULE_FOUR_APPLICATION)); + + migrationTasks.add(migrationTask1); + migrationTasks.add(migrationTask2); Whitebox.setInternalState(migrationJob, "migrationTasks", migrationTasks); - migrationJob.execute(new DefaultMigrationReport()); - verify(migrationTask, times(1)).execute(any(MigrationReport.class)); + try { + migrationJob.execute(new DefaultMigrationReport()); + fail("expected MigrationTaskException"); + } catch (MigrationTaskException mte) { + verify(migrationTask1, times(1)).execute(any(MigrationReport.class)); + verify(migrationTask2, times(1)).execute(any(MigrationReport.class)); + } catch (Exception e) { + fail("expected MigrationTaskException"); + } } @Test(expected = MigrationTaskException.class)