Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresCalculationService.cs
===================================================================
diff -u -rbd73023d5f8926a411da214fb5ce522056a0e30a -rce5d60b8a5c520faec45cce64de6957dce747449
--- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresCalculationService.cs (.../ClosingStructuresCalculationService.cs) (revision bd73023d5f8926a411da214fb5ce522056a0e30a)
+++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresCalculationService.cs (.../ClosingStructuresCalculationService.cs) (revision ce5d60b8a5c520faec45cce64de6957dce747449)
@@ -85,6 +85,8 @@
CalculationServiceHelper.LogCalculationBeginTime(calculationName);
+ var exceptionThrown = false;
+
try
{
calculator.Calculate(input);
@@ -101,14 +103,41 @@
{
if (!canceled)
{
- log.ErrorFormat(Resources.ClosingStructuresCalculationService_Calculate_Error_in_closing_structures_0_calculation, calculationName);
+ var lastErrorContent = calculator.LastErrorContent;
+ if (string.IsNullOrEmpty(lastErrorContent))
+ {
+ log.ErrorFormat(Resources.ClosingStructuresCalculationService_Calculate_Unexplained_error_in_closing_structures_0_calculation,
+ calculationName);
+ }
+ else
+ {
+ log.ErrorFormat(Resources.ClosingStructuresCalculationService_Calculate_Error_in_closing_structures_0_calculation_click_details_for_last_error_1,
+ calculationName, lastErrorContent);
+ }
+
+ exceptionThrown = true;
throw;
}
}
finally
{
- log.InfoFormat(Resources.ClosingStructuresCalculationService_Calculate_Calculation_temporary_directory_can_be_found_on_location_0, calculator.OutputDirectory);
- CalculationServiceHelper.LogCalculationEndTime(calculationName);
+ try
+ {
+ var lastErrorContent = calculator.LastErrorContent;
+ if (!exceptionThrown && !string.IsNullOrEmpty(lastErrorContent))
+ {
+ log.ErrorFormat(Resources.ClosingStructuresCalculationService_Calculate_Error_in_closing_structures_0_calculation_click_details_for_last_error_1,
+ calculationName, lastErrorContent);
+
+ throw new HydraRingFileParserException(lastErrorContent);
+ }
+ }
+ finally
+ {
+ log.InfoFormat(Resources.ClosingStructuresCalculationService_Calculate_Calculation_temporary_directory_can_be_found_on_location_0,
+ calculator.OutputDirectory);
+ CalculationServiceHelper.LogCalculationEndTime(calculationName);
+ }
}
}
Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/Properties/Resources.Designer.cs
===================================================================
diff -u -rbd73023d5f8926a411da214fb5ce522056a0e30a -rce5d60b8a5c520faec45cce64de6957dce747449
--- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision bd73023d5f8926a411da214fb5ce522056a0e30a)
+++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision ce5d60b8a5c520faec45cce64de6957dce747449)
@@ -92,13 +92,24 @@
}
///
- /// Looks up a localized string similar to De berekening voor kunstwerk sluiten '{0}' is niet gelukt..
+ /// Looks up a localized string similar to De berekening voor kunstwerk sluiten '{0}' is niet gelukt. Bekijk het foutrapport door op details te klikken.
+ ///{1}.
///
- internal static string ClosingStructuresCalculationService_Calculate_Error_in_closing_structures_0_calculation {
+ internal static string ClosingStructuresCalculationService_Calculate_Error_in_closing_structures_0_calculation_click_details_for_last_error_1 {
get {
return ResourceManager.GetString("ClosingStructuresCalculationService_Calculate_Error_in_closing_structures_0_calcu" +
- "lation", resourceCulture);
+ "lation_click_details_for_last_error_1", resourceCulture);
}
}
+
+ ///
+ /// Looks up a localized string similar to De berekening voor kunstwerk sluiten '{0}' is niet gelukt. Er is geen foutrapport beschikbaar..
+ ///
+ internal static string ClosingStructuresCalculationService_Calculate_Unexplained_error_in_closing_structures_0_calculation {
+ get {
+ return ResourceManager.GetString("ClosingStructuresCalculationService_Calculate_Unexplained_error_in_closing_struct" +
+ "ures_0_calculation", resourceCulture);
+ }
+ }
}
}
Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/Properties/Resources.resx
===================================================================
diff -u -rbd73023d5f8926a411da214fb5ce522056a0e30a -rce5d60b8a5c520faec45cce64de6957dce747449
--- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/Properties/Resources.resx (.../Resources.resx) (revision bd73023d5f8926a411da214fb5ce522056a0e30a)
+++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/Properties/Resources.resx (.../Resources.resx) (revision ce5d60b8a5c520faec45cce64de6957dce747449)
@@ -117,10 +117,14 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- De berekening voor kunstwerk sluiten '{0}' is niet gelukt.
+
+ De berekening voor kunstwerk sluiten '{0}' is niet gelukt. Er is geen foutrapport beschikbaar.
Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie: {0}. Gedetailleerde invoer en uitvoer kan in de bestanden op deze locatie worden gevonden.
+
+ De berekening voor kunstwerk sluiten '{0}' is niet gelukt. Bekijk het foutrapport door op details te klikken.
+{1}
+
\ No newline at end of file
Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructureFailureMechanismContextTreeNodeInfoTest.cs
===================================================================
diff -u -r379d603ad7570ee56a65fecc920e56ca24279065 -rce5d60b8a5c520faec45cce64de6957dce747449
--- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructureFailureMechanismContextTreeNodeInfoTest.cs (.../ClosingStructureFailureMechanismContextTreeNodeInfoTest.cs) (revision 379d603ad7570ee56a65fecc920e56ca24279065)
+++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructureFailureMechanismContextTreeNodeInfoTest.cs (.../ClosingStructureFailureMechanismContextTreeNodeInfoTest.cs) (revision ce5d60b8a5c520faec45cce64de6957dce747449)
@@ -580,9 +580,9 @@
RingtoetsCommonFormsResources.CalculateAllIcon);
TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuValidateAllIndex,
- "Alles &valideren",
- "Valideer alle berekeningen binnen dit toetsspoor.",
- RingtoetsCommonFormsResources.ValidateAllIcon);
+ "Alles &valideren",
+ "Valideer alle berekeningen binnen dit toetsspoor.",
+ RingtoetsCommonFormsResources.ValidateAllIcon);
}
}
}
@@ -659,13 +659,15 @@
StringAssert.StartsWith("Validatie van 'A' gestart om: ", messageList[0]);
StringAssert.StartsWith("Validatie van 'A' beëindigd om: ", messageList[1]);
StringAssert.StartsWith("Berekening van 'A' gestart om: ", messageList[2]);
- Assert.AreEqual("De berekening voor kunstwerk sluiten 'A' is niet gelukt.", messageList[3]);
+ StringAssert.StartsWith("De berekening voor kunstwerk sluiten 'A' is niet gelukt. Bekijk het foutrapport door op details te klikken.",
+ messageList[3]);
StringAssert.StartsWith("Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie:", messageList[4]);
StringAssert.StartsWith("Berekening van 'A' beëindigd om: ", messageList[5]);
StringAssert.StartsWith("Validatie van 'B' gestart om: ", messageList[6]);
StringAssert.StartsWith("Validatie van 'B' beëindigd om: ", messageList[7]);
StringAssert.StartsWith("Berekening van 'B' gestart om: ", messageList[8]);
- Assert.AreEqual("De berekening voor kunstwerk sluiten 'B' is niet gelukt.", messageList[9]);
+ StringAssert.StartsWith("De berekening voor kunstwerk sluiten 'B' is niet gelukt. Bekijk het foutrapport door op details te klikken.",
+ messageList[9]);
StringAssert.StartsWith("Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie:", messageList[10]);
StringAssert.StartsWith("Berekening van 'B' beëindigd om: ", messageList[11]);
Assert.AreEqual("Uitvoeren van 'A' is mislukt.", messageList[12]);
Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructuresCalculationGroupContextTreeNodeInfoTest.cs
===================================================================
diff -u -rbd73023d5f8926a411da214fb5ce522056a0e30a -rce5d60b8a5c520faec45cce64de6957dce747449
--- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructuresCalculationGroupContextTreeNodeInfoTest.cs (.../ClosingStructuresCalculationGroupContextTreeNodeInfoTest.cs) (revision bd73023d5f8926a411da214fb5ce522056a0e30a)
+++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructuresCalculationGroupContextTreeNodeInfoTest.cs (.../ClosingStructuresCalculationGroupContextTreeNodeInfoTest.cs) (revision ce5d60b8a5c520faec45cce64de6957dce747449)
@@ -698,13 +698,15 @@
StringAssert.StartsWith("Validatie van 'A' gestart om: ", messageList[0]);
StringAssert.StartsWith("Validatie van 'A' beëindigd om: ", messageList[1]);
StringAssert.StartsWith("Berekening van 'A' gestart om: ", messageList[2]);
- Assert.AreEqual("De berekening voor kunstwerk sluiten 'A' is niet gelukt.", messageList[3]);
+ StringAssert.StartsWith("De berekening voor kunstwerk sluiten 'A' is niet gelukt. Bekijk het foutrapport door op details te klikken.",
+ messageList[3]);
StringAssert.StartsWith("Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie:", messageList[4]);
StringAssert.StartsWith("Berekening van 'A' beëindigd om: ", messageList[5]);
StringAssert.StartsWith("Validatie van 'B' gestart om: ", messageList[6]);
StringAssert.StartsWith("Validatie van 'B' beëindigd om: ", messageList[7]);
StringAssert.StartsWith("Berekening van 'B' gestart om: ", messageList[8]);
- Assert.AreEqual("De berekening voor kunstwerk sluiten 'B' is niet gelukt.", messageList[9]);
+ StringAssert.StartsWith("De berekening voor kunstwerk sluiten 'B' is niet gelukt. Bekijk het foutrapport door op details te klikken.",
+ messageList[9]);
StringAssert.StartsWith("Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie:", messageList[10]);
StringAssert.StartsWith("Berekening van 'B' beëindigd om: ", messageList[11]);
Assert.AreEqual("Uitvoeren van 'A' is mislukt.", messageList[12]);
Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Integration.Test/ClosingStructuresCalculationActivityIntegrationTest.cs
===================================================================
diff -u -rbd73023d5f8926a411da214fb5ce522056a0e30a -rce5d60b8a5c520faec45cce64de6957dce747449
--- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Integration.Test/ClosingStructuresCalculationActivityIntegrationTest.cs (.../ClosingStructuresCalculationActivityIntegrationTest.cs) (revision bd73023d5f8926a411da214fb5ce522056a0e30a)
+++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Integration.Test/ClosingStructuresCalculationActivityIntegrationTest.cs (.../ClosingStructuresCalculationActivityIntegrationTest.cs) (revision ce5d60b8a5c520faec45cce64de6957dce747449)
@@ -35,6 +35,7 @@
using Ringtoets.Common.Data.FailureMechanism;
using Ringtoets.Common.Data.Structures;
using Ringtoets.Common.IO.FileImporters;
+using Ringtoets.HydraRing.Calculation.Calculator.Factory;
using Ringtoets.HydraRing.Calculation.TestUtil.Calculator;
using Ringtoets.HydraRing.Data;
using Ringtoets.Integration.Data;
@@ -47,7 +48,7 @@
private readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Service, "HydraRingCalculation");
[Test]
- public void Run_ClosingStructuresCalculationInvalidInput_LogValidationStartAndEndWithError()
+ public void Run_CalculationInvalidInput_LogValidationStartAndEndWithError()
{
// Setup
var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike)
@@ -85,7 +86,7 @@
}
[Test]
- public void Run_ValidClosingStructuresCalculation_PerformClosingStructuresValidationAndCalculationAndLogStartAndEnd()
+ public void Run_ValidCalculation_PerformValidationAndCalculationAndLogStartAndEnd()
{
// Setup
var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike);
@@ -126,15 +127,15 @@
StringAssert.StartsWith(string.Format("Validatie van '{0}' gestart om: ", calculation.Name), msgs[0]);
StringAssert.StartsWith(string.Format("Validatie van '{0}' beëindigd om: ", calculation.Name), msgs[1]);
StringAssert.StartsWith(string.Format("Berekening van '{0}' gestart om: ", calculation.Name), msgs[2]);
- StringAssert.StartsWith(string.Format("Berekening van '{0}' beëindigd om: ", calculation.Name), msgs[4]);
StringAssert.StartsWith("Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie:", msgs[3]);
+ StringAssert.StartsWith(string.Format("Berekening van '{0}' beëindigd om: ", calculation.Name), msgs[4]);
});
Assert.AreEqual(ActivityState.Executed, activity.State);
}
}
[Test]
- public void Run_InvalidClosingStructuresCalculationAndRan_PerformClosingStructuresValidationAndCalculationAndLogStartAndEndAndError()
+ public void Run_InvalidCalculationAndRan_PerformValidationAndCalculationAndLogStartAndEndAndError()
{
// Setup
var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike);
@@ -174,17 +175,127 @@
StringAssert.StartsWith(string.Format("Validatie van '{0}' gestart om: ", calculation.Name), msgs[0]);
StringAssert.StartsWith(string.Format("Validatie van '{0}' beëindigd om: ", calculation.Name), msgs[1]);
StringAssert.StartsWith(string.Format("Berekening van '{0}' gestart om: ", calculation.Name), msgs[2]);
- StringAssert.StartsWith(string.Format("De berekening voor kunstwerk sluiten '{0}' is niet gelukt.", calculation.Name), msgs[3]);
+ StringAssert.StartsWith(string.Format("De berekening voor kunstwerk sluiten '{0}' is niet gelukt. Bekijk het foutrapport door op details te klikken.",
+ calculation.Name), msgs[3]);
StringAssert.StartsWith("Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie:", msgs[4]);
StringAssert.StartsWith(string.Format("Berekening van '{0}' beëindigd om: ", calculation.Name), msgs[5]);
});
Assert.AreEqual(ActivityState.Failed, activity.State);
}
[Test]
- public void Finish_ValidClosingStructuresCalculationAndRan_SetsOutputAndNotifyObserversOfClosingStructuresCalculation()
+ public void Run_UnexplainedErrorInCalculation_PerformValidationAndCalculationAndLogStartAndEndAndError()
{
// Setup
+ var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike);
+
+ string validFilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite");
+
+ using (var importer = new HydraulicBoundaryDatabaseImporter())
+ {
+ importer.Import(assessmentSection, validFilePath);
+ }
+
+ var failureMechanism = new ClosingStructuresFailureMechanism();
+ failureMechanism.AddSection(new FailureMechanismSection("test section", new[]
+ {
+ new Point2D(0, 0),
+ new Point2D(1, 1)
+ }));
+
+ var calculation = new TestClosingStructuresCalculation()
+ {
+ InputParameters =
+ {
+ HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001),
+ }
+ };
+
+ var activity = new ClosingStructuresCalculationActivity(calculation, testDataPath, failureMechanism, assessmentSection);
+ using (new HydraRingCalculatorFactoryConfig())
+ {
+ var calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).StructuresClosureCalculator;
+ calculator.EndInFailure = true;
+
+ // Call
+ Action call = () => activity.Run();
+
+ // Assert
+ TestHelper.AssertLogMessages(call, messages =>
+ {
+ var msgs = messages.ToArray();
+ Assert.AreEqual(6, msgs.Length);
+ StringAssert.StartsWith(string.Format("Validatie van '{0}' gestart om: ", calculation.Name), msgs[0]);
+ StringAssert.StartsWith(string.Format("Validatie van '{0}' beëindigd om: ", calculation.Name), msgs[1]);
+ StringAssert.StartsWith(string.Format("Berekening van '{0}' gestart om: ", calculation.Name), msgs[2]);
+ StringAssert.StartsWith(string.Format("De berekening voor kunstwerk sluiten '{0}' is niet gelukt. Er is geen foutrapport beschikbaar.",
+ calculation.Name), msgs[3]);
+ StringAssert.StartsWith("Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie:", msgs[4]);
+ StringAssert.StartsWith(string.Format("Berekening van '{0}' beëindigd om: ", calculation.Name), msgs[5]);
+ });
+ Assert.AreEqual(ActivityState.Failed, activity.State);
+ }
+ }
+
+ [Test]
+ public void Run_ErrorInCalculation_PerformValidationAndCalculationAndLogStartAndEndAndError()
+ {
+ // Setup
+ var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike);
+
+ string validFilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite");
+
+ using (var importer = new HydraulicBoundaryDatabaseImporter())
+ {
+ importer.Import(assessmentSection, validFilePath);
+ }
+
+ var failureMechanism = new ClosingStructuresFailureMechanism();
+ failureMechanism.AddSection(new FailureMechanismSection("test section", new[]
+ {
+ new Point2D(0, 0),
+ new Point2D(1, 1)
+ }));
+
+ var calculation = new TestClosingStructuresCalculation()
+ {
+ InputParameters =
+ {
+ HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001),
+ }
+ };
+
+ var activity = new ClosingStructuresCalculationActivity(calculation, testDataPath, failureMechanism, assessmentSection);
+ using (new HydraRingCalculatorFactoryConfig())
+ {
+ var calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).StructuresClosureCalculator;
+ calculator.EndInFailure = false;
+ calculator.LastErrorContent = "An error occured";
+
+ // Call
+ Action call = () => activity.Run();
+
+ // Assert
+ TestHelper.AssertLogMessages(call, messages =>
+ {
+ var msgs = messages.ToArray();
+ Assert.AreEqual(6, msgs.Length);
+ StringAssert.StartsWith(string.Format("Validatie van '{0}' gestart om: ", calculation.Name), msgs[0]);
+ StringAssert.StartsWith(string.Format("Validatie van '{0}' beëindigd om: ", calculation.Name), msgs[1]);
+ StringAssert.StartsWith(string.Format("Berekening van '{0}' gestart om: ", calculation.Name), msgs[2]);
+ StringAssert.StartsWith(string.Format("De berekening voor kunstwerk sluiten '{0}' is niet gelukt. Bekijk het foutrapport door op details te klikken.",
+ calculation.Name), msgs[3]);
+ StringAssert.StartsWith("Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie:", msgs[4]);
+ StringAssert.StartsWith(string.Format("Berekening van '{0}' beëindigd om: ", calculation.Name), msgs[5]);
+ });
+ Assert.AreEqual(ActivityState.Failed, activity.State);
+ }
+ }
+
+ [Test]
+ public void Finish_ValidCalculationAndRan_SetsOutputAndNotifyObserversOfCalculation()
+ {
+ // Setup
var mocks = new MockRepository();
var observerMock = mocks.StrictMock();
observerMock.Expect(o => o.UpdateObserver());
@@ -231,7 +342,7 @@
}
[Test]
- public void Finish_InvalidClosingStructuresCalculationAndRan_DoesNotSetOutputAndNotifyObserversOfClosingStructuresCalculation()
+ public void Finish_InvalidCalculationAndRan_DoesNotSetOutputAndNotifyObserversOfCalculation()
{
// Setup
var mocks = new MockRepository();
Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Service.Test/ClosingStructuresCalculationServiceTest.cs
===================================================================
diff -u -rbd73023d5f8926a411da214fb5ce522056a0e30a -rce5d60b8a5c520faec45cce64de6957dce747449
--- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Service.Test/ClosingStructuresCalculationServiceTest.cs (.../ClosingStructuresCalculationServiceTest.cs) (revision bd73023d5f8926a411da214fb5ce522056a0e30a)
+++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Service.Test/ClosingStructuresCalculationServiceTest.cs (.../ClosingStructuresCalculationServiceTest.cs) (revision ce5d60b8a5c520faec45cce64de6957dce747449)
@@ -940,6 +940,195 @@
}
}
+ [Test]
+ public void Calculate_CalculationFailedWithExceptionAndLastErrorPresent_LogErrorAndThrowException()
+ {
+ // Setup
+ var closingStructuresFailureMechanism = new ClosingStructuresFailureMechanism();
+
+ var mockRepository = new MockRepository();
+ IAssessmentSection assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(closingStructuresFailureMechanism,
+ mockRepository);
+ mockRepository.ReplayAll();
+
+ closingStructuresFailureMechanism.AddSection(new FailureMechanismSection("test section", new[]
+ {
+ new Point2D(0, 0),
+ new Point2D(1, 1)
+ }));
+
+ var calculation = new TestClosingStructuresCalculation
+ {
+ InputParameters =
+ {
+ HydraulicBoundaryLocation = assessmentSectionStub.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001)
+ }
+ };
+
+ using (new HydraRingCalculatorFactoryConfig())
+ {
+ var calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).StructuresClosureCalculator;
+ calculator.LastErrorContent = "An error occured";
+ calculator.EndInFailure = true;
+
+ var exceptionThrown = false;
+
+ // Call
+ Action call = () =>
+ {
+ try
+ {
+ new ClosingStructuresCalculationService().Calculate(calculation,
+ assessmentSectionStub,
+ closingStructuresFailureMechanism,
+ testDataPath);
+ }
+ catch (HydraRingFileParserException)
+ {
+ exceptionThrown = true;
+ }
+ };
+ // Assert
+ TestHelper.AssertLogMessages(call, messages =>
+ {
+ var msgs = messages.ToArray();
+ Assert.AreEqual(4, msgs.Length);
+ StringAssert.StartsWith(string.Format("Berekening van '{0}' gestart om: ", calculation.Name), msgs[0]);
+ StringAssert.StartsWith(string.Format("De berekening voor kunstwerk sluiten '{0}' is niet gelukt. Bekijk het foutrapport door op details te klikken.", calculation.Name), msgs[1]);
+ StringAssert.StartsWith("Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie:", msgs[2]);
+ StringAssert.StartsWith(string.Format("Berekening van '{0}' beëindigd om: ", calculation.Name), msgs[3]);
+ });
+ Assert.IsTrue(exceptionThrown);
+ }
+ }
+
+ [Test]
+ public void Calculate_CalculationFailedWithExceptionAndNoLastErrorPresent_LogErrorAndThrowException()
+ {
+ // Setup
+ var closingStructuresFailureMechanism = new ClosingStructuresFailureMechanism();
+
+ var mockRepository = new MockRepository();
+ IAssessmentSection assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(closingStructuresFailureMechanism,
+ mockRepository);
+ mockRepository.ReplayAll();
+
+ closingStructuresFailureMechanism.AddSection(new FailureMechanismSection("test section", new[]
+ {
+ new Point2D(0, 0),
+ new Point2D(1, 1)
+ }));
+
+ var calculation = new TestClosingStructuresCalculation
+ {
+ InputParameters =
+ {
+ HydraulicBoundaryLocation = assessmentSectionStub.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001)
+ }
+ };
+
+ using (new HydraRingCalculatorFactoryConfig())
+ {
+ var calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).StructuresClosureCalculator;
+ calculator.EndInFailure = true;
+
+ var exceptionThrown = false;
+
+ // Call
+ Action call = () =>
+ {
+ try
+ {
+ new ClosingStructuresCalculationService().Calculate(calculation,
+ assessmentSectionStub,
+ closingStructuresFailureMechanism,
+ testDataPath);
+ }
+ catch (HydraRingFileParserException)
+ {
+ exceptionThrown = true;
+ }
+ };
+ // Assert
+ TestHelper.AssertLogMessages(call, messages =>
+ {
+ var msgs = messages.ToArray();
+ Assert.AreEqual(4, msgs.Length);
+ StringAssert.StartsWith(string.Format("Berekening van '{0}' gestart om: ", calculation.Name), msgs[0]);
+ StringAssert.StartsWith(string.Format("De berekening voor kunstwerk sluiten '{0}' is niet gelukt. Er is geen foutrapport beschikbaar.", calculation.Name), msgs[1]);
+ StringAssert.StartsWith("Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie:", msgs[2]);
+ StringAssert.StartsWith(string.Format("Berekening van '{0}' beëindigd om: ", calculation.Name), msgs[3]);
+ });
+ Assert.IsTrue(exceptionThrown);
+ }
+ }
+
+ [Test]
+ public void Calculate_CalculationFailedWithoutExceptionAndWithLastErrorPresent_LogErrorAndThrowException()
+ {
+ // Setup
+ var closingStructuresFailureMechanism = new ClosingStructuresFailureMechanism();
+
+ var mockRepository = new MockRepository();
+ IAssessmentSection assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(closingStructuresFailureMechanism,
+ mockRepository);
+ mockRepository.ReplayAll();
+
+ closingStructuresFailureMechanism.AddSection(new FailureMechanismSection("test section", new[]
+ {
+ new Point2D(0, 0),
+ new Point2D(1, 1)
+ }));
+
+ var calculation = new TestClosingStructuresCalculation
+ {
+ InputParameters =
+ {
+ HydraulicBoundaryLocation = assessmentSectionStub.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001)
+ }
+ };
+
+ using (new HydraRingCalculatorFactoryConfig())
+ {
+ var calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).StructuresClosureCalculator;
+ calculator.EndInFailure = false;
+ calculator.LastErrorContent = "An error occured";
+
+ var exceptionThrown = false;
+ var exceptionMessage = string.Empty;
+
+ // Call
+ Action call = () =>
+ {
+ try
+ {
+ new ClosingStructuresCalculationService().Calculate(calculation,
+ assessmentSectionStub,
+ closingStructuresFailureMechanism,
+ testDataPath);
+ }
+ catch (HydraRingFileParserException e)
+ {
+ exceptionThrown = true;
+ exceptionMessage = e.Message;
+ }
+ };
+ // Assert
+ TestHelper.AssertLogMessages(call, messages =>
+ {
+ var msgs = messages.ToArray();
+ Assert.AreEqual(4, msgs.Length);
+ StringAssert.StartsWith(string.Format("Berekening van '{0}' gestart om: ", calculation.Name), msgs[0]);
+ StringAssert.StartsWith(string.Format("De berekening voor kunstwerk sluiten '{0}' is niet gelukt. Bekijk het foutrapport door op details te klikken.",
+ calculation.Name), msgs[1]);
+ StringAssert.StartsWith("Betrouwbaarheid sluiting kunstwerk berekening is uitgevoerd op de tijdelijke locatie:", msgs[2]);
+ StringAssert.StartsWith(string.Format("Berekening van '{0}' beëindigd om: ", calculation.Name), msgs[3]);
+ });
+ Assert.IsTrue(exceptionThrown);
+ Assert.AreEqual(calculator.LastErrorContent, exceptionMessage);
+ }
+ }
+
///
/// Sets all input parameters of to invalid values.
///
Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/HydraRingCalculatorBase.cs
===================================================================
diff -u -re9ed7ace8ecabdee49a6635bf43b1fbb3613a090 -rce5d60b8a5c520faec45cce64de6957dce747449
--- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/HydraRingCalculatorBase.cs (.../HydraRingCalculatorBase.cs) (revision e9ed7ace8ecabdee49a6635bf43b1fbb3613a090)
+++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/HydraRingCalculatorBase.cs (.../HydraRingCalculatorBase.cs) (revision ce5d60b8a5c520faec45cce64de6957dce747449)
@@ -66,7 +66,7 @@
public string OutputDirectory { get; private set; }
///
- /// Gets the content of the last error file when it is generated during the calculation.
+ /// Gets the content of the last error file generated during the Hydra-Ring calculation.
///
public string LastErrorContent { get; private set; }
Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/IStructuresClosureCalculator.cs
===================================================================
diff -u -rbd73023d5f8926a411da214fb5ce522056a0e30a -rce5d60b8a5c520faec45cce64de6957dce747449
--- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/IStructuresClosureCalculator.cs (.../IStructuresClosureCalculator.cs) (revision bd73023d5f8926a411da214fb5ce522056a0e30a)
+++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/IStructuresClosureCalculator.cs (.../IStructuresClosureCalculator.cs) (revision ce5d60b8a5c520faec45cce64de6957dce747449)
@@ -40,6 +40,11 @@
string OutputDirectory { get; }
///
+ /// Gets the content of the last error file generated during the Hydra-Ring calculation.
+ ///
+ string LastErrorContent { get; }
+
+ ///
/// Performs the actual calculation by running the Hydra-Ring executable.
///
/// The which contains all the necessary input
Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/Calculator/TestHydraRingCalculatorFactory.cs
===================================================================
diff -u -rbd73023d5f8926a411da214fb5ce522056a0e30a -rce5d60b8a5c520faec45cce64de6957dce747449
--- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/Calculator/TestHydraRingCalculatorFactory.cs (.../TestHydraRingCalculatorFactory.cs) (revision bd73023d5f8926a411da214fb5ce522056a0e30a)
+++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/Calculator/TestHydraRingCalculatorFactory.cs (.../TestHydraRingCalculatorFactory.cs) (revision ce5d60b8a5c520faec45cce64de6957dce747449)
@@ -145,6 +145,7 @@
{
public double ExceedanceProbabilityBeta { get; set; }
public string OutputDirectory { get; set; }
+ public string LastErrorContent { get; set; }
}
public class TestStructuresStabilityPointCalculator : TestHydraRingCalculator, IStructuresStabilityPointCalculator