Index: Core/Common/test/Core.Common.TestUtil.Test/FileDisposeHelperTest.cs
===================================================================
diff -u -r2ae1c9433c3c28b32105b9778b682b5e512a0f00 -ra1d0c950e24eeef7e35cf3b79e7fcd9fd7af041c
--- Core/Common/test/Core.Common.TestUtil.Test/FileDisposeHelperTest.cs (.../FileDisposeHelperTest.cs) (revision 2ae1c9433c3c28b32105b9778b682b5e512a0f00)
+++ Core/Common/test/Core.Common.TestUtil.Test/FileDisposeHelperTest.cs (.../FileDisposeHelperTest.cs) (revision a1d0c950e24eeef7e35cf3b79e7fcd9fd7af041c)
@@ -53,6 +53,30 @@
}
[Test]
+ public void CreateFile_FileDoesNotExist_Createsfile()
+ {
+ // Setup
+ string filePath = "doesExist.tmp";
+
+ try
+ {
+ Assert.IsFalse(File.Exists(filePath));
+
+ using (var fileDisposeHelper = new FileDisposeHelper(filePath))
+ {
+ // Call
+ fileDisposeHelper.CreateFile();
+ // Assert
+ Assert.IsTrue(File.Exists(filePath));
+ }
+ }
+ finally
+ {
+ File.Delete(filePath);
+ }
+ }
+
+ [Test]
public void Dispose_InvalidPath_DoesNotThrowException()
{
// Setup
@@ -87,5 +111,42 @@
File.Delete(filePath);
}
}
+
+ [Test]
+ public void Dispose_MultipleFiles_DeletesFiles()
+ {
+ // Setup
+ var filePaths = new[]
+ {
+ "doesExist.tmp",
+ "alsoDoesExist.tmp"
+ };
+
+ try
+ {
+ foreach (var filePath in filePaths)
+ {
+ using (File.Create(filePath)) { }
+ Assert.IsTrue(File.Exists(filePath));
+ }
+
+ // Call
+ using (new FileDisposeHelper(filePaths)) { }
+
+ // Assert
+ foreach (var filePath in filePaths)
+ {
+ Assert.IsFalse(File.Exists(filePath));
+ }
+ }
+ finally
+ {
+ foreach (var filePath in filePaths)
+ {
+ File.Delete(filePath);
+ }
+
+ }
+ }
}
}
\ No newline at end of file
Index: Core/Common/test/Core.Common.TestUtil/FileDisposeHelper.cs
===================================================================
diff -u -r2ae1c9433c3c28b32105b9778b682b5e512a0f00 -ra1d0c950e24eeef7e35cf3b79e7fcd9fd7af041c
--- Core/Common/test/Core.Common.TestUtil/FileDisposeHelper.cs (.../FileDisposeHelper.cs) (revision 2ae1c9433c3c28b32105b9778b682b5e512a0f00)
+++ Core/Common/test/Core.Common.TestUtil/FileDisposeHelper.cs (.../FileDisposeHelper.cs) (revision a1d0c950e24eeef7e35cf3b79e7fcd9fd7af041c)
@@ -1,39 +1,55 @@
using System;
+using System.Collections.Generic;
using System.IO;
namespace Core.Common.TestUtil
{
///
- /// This class can be used to set a temporary file while testing.
- /// Disposing an instance of this class will delete the file.
+ /// This class can be used to set a temporary files while testing.
+ /// Disposing an instance of this class will delete the files.
///
///
/// The following is an example for how to use this class:
///
- /// using(new FileDisposeHelper("pathToFile")) {
- /// // Perform tests with file
+ /// using(new FileDisposeHelper(new[]{"pathToFile"})) {
+ /// // Perform tests with files
/// }
///
///
public class FileDisposeHelper : IDisposable
{
- private readonly string filePath;
+ private readonly IEnumerable files;
///
/// Creates a new instance of .
///
- /// Path of the file that will be used.
+ /// Path of the files that will be used.
+ public FileDisposeHelper(IEnumerable filePaths)
+ {
+ files = filePaths;
+ }
+
+ ///
+ /// Creates a new instance of .
+ ///
+ /// Path of the single file that will be used.
public FileDisposeHelper(string filePath)
{
- this.filePath = filePath;
+ files = new[]
+ {
+ filePath
+ };
}
///
- /// Creates the temporary file.
+ /// Creates the temporary files.
///
public void CreateFile()
{
- using (File.Create(filePath)) {}
+ foreach (var file in files)
+ {
+ using (File.Create(file)) {}
+ }
}
///
@@ -43,10 +59,18 @@
{
GC.Collect();
GC.WaitForPendingFinalizers();
- if (!string.IsNullOrWhiteSpace(filePath))
+ foreach (var file in files)
{
- File.Delete(filePath);
+ Dispose(file);
}
}
+
+ private static void Dispose(string filename)
+ {
+ if (!string.IsNullOrWhiteSpace(filename))
+ {
+ File.Delete(filename);
+ }
+ }
}
}
\ No newline at end of file
Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Services/HydraRingCalculationService.cs
===================================================================
diff -u -r8b5a6f938fe2b04cd78623649df37580e145055f -ra1d0c950e24eeef7e35cf3b79e7fcd9fd7af041c
--- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Services/HydraRingCalculationService.cs (.../HydraRingCalculationService.cs) (revision 8b5a6f938fe2b04cd78623649df37580e145055f)
+++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Services/HydraRingCalculationService.cs (.../HydraRingCalculationService.cs) (revision a1d0c950e24eeef7e35cf3b79e7fcd9fd7af041c)
@@ -47,10 +47,33 @@
/// A or null when something went wrong.
public virtual TargetProbabilityCalculationOutput PerformCalculation(string hlcdDirectory, string ringId, HydraRingTimeIntegrationSchemeType timeIntegrationSchemeType, HydraRingUncertaintiesType uncertaintiesType, TargetProbabilityCalculationInput targetProbabilityCalculationInput)
{
- return PerformCalculation(hlcdDirectory, ringId, timeIntegrationSchemeType, uncertaintiesType, targetProbabilityCalculationInput, (outputFilePath, outputDatabasePath) => TargetProbabilityCalculationParser.Parse(outputFilePath, targetProbabilityCalculationInput.Section.SectionId));
+ return PerformCalculation(hlcdDirectory, ringId, timeIntegrationSchemeType, uncertaintiesType,
+ targetProbabilityCalculationInput, (outputFilePath, outputDatabasePath) =>
+ TargetProbabilityCalculationParser.Parse(
+ outputFilePath, targetProbabilityCalculationInput.Section.SectionId));
}
///
+ /// This method performs a type I calculation via Hydra-Ring:
+ /// Given a set of random variables, compute the probability of failure.
+ ///
+ /// The directory of the HLCD file that should be used for performing the calculation.
+ /// The id of the ring to perform the calculation for.
+ /// The to use while executing the calculation.
+ /// The to use while executing the calculation.
+ /// The input of the calculation to perform.
+ /// A on a succesfull calculation, null otherwise.
+ public virtual ExceedanceProbabilityCalculationOutput PerformCalculation(string hlcdDirectory, string ringId, HydraRingTimeIntegrationSchemeType timeIntegrationSchemeType,
+ HydraRingUncertaintiesType uncertaintiesType,
+ ExceedanceProbabilityCalculationInput exceedanceProbabilityCalculationInput)
+ {
+ return PerformCalculation(hlcdDirectory, ringId, timeIntegrationSchemeType, uncertaintiesType,
+ exceedanceProbabilityCalculationInput, (outputFilePath, outputDatabasePath) =>
+ ExceedanceProbabilityCalculationParser.Parse(
+ outputDatabasePath, exceedanceProbabilityCalculationInput.Section.SectionId));
+ }
+
+ ///
/// Cancels any currently running Hydra-Ring calculation.
///
public virtual void CancelRunningCalculation()
Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/ExceedanceProbabilityCalculationParserTest.cs
===================================================================
diff -u -r9d378b8fa49ea011d8f4d229b5970f11c76f8305 -ra1d0c950e24eeef7e35cf3b79e7fcd9fd7af041c
--- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/ExceedanceProbabilityCalculationParserTest.cs (.../ExceedanceProbabilityCalculationParserTest.cs) (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305)
+++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/ExceedanceProbabilityCalculationParserTest.cs (.../ExceedanceProbabilityCalculationParserTest.cs) (revision a1d0c950e24eeef7e35cf3b79e7fcd9fd7af041c)
@@ -66,7 +66,7 @@
}
[Test]
- public void Parse_ExampleCompleteOutputFile_ReturnsExpecteExceedanceProbabilityCalculationOutput()
+ public void Parse_ExampleCompleteOutputFile_ReturnsExpectedExceedanceProbabilityCalculationOutput()
{
// Setup
var filePath = Path.Combine(testDataPath, "complete.sqlite");
Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Services/HydraRingCalculationServiceTest.cs
===================================================================
diff -u -r463dcadb39cfbf80854af4350af89cf6c14808be -ra1d0c950e24eeef7e35cf3b79e7fcd9fd7af041c
--- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Services/HydraRingCalculationServiceTest.cs (.../HydraRingCalculationServiceTest.cs) (revision 463dcadb39cfbf80854af4350af89cf6c14808be)
+++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Services/HydraRingCalculationServiceTest.cs (.../HydraRingCalculationServiceTest.cs) (revision a1d0c950e24eeef7e35cf3b79e7fcd9fd7af041c)
@@ -19,10 +19,13 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System.Collections.Generic;
using System.IO;
+using Core.Common.TestUtil;
using NUnit.Framework;
using Ringtoets.HydraRing.Calculation.Data;
using Ringtoets.HydraRing.Calculation.Data.Input.Hydraulics;
+using Ringtoets.HydraRing.Calculation.Data.Input.Overtopping;
using Ringtoets.HydraRing.Calculation.Services;
namespace Ringtoets.HydraRing.Calculation.Test.Services
@@ -36,20 +39,70 @@
// Setup
var hlcdDirectory = "hlcdDirectory"; // Invalid HLCD directory
var hydraRingCalculationService = new HydraRingCalculationService();
- var targetProbabilityCalculationInput = new AssessmentLevelCalculationInput(999, 10000); // Unknown station id
+ var incorrectStationId = 999;
+ var targetProbabilityCalculationInput = new AssessmentLevelCalculationInput(incorrectStationId, 10000); // Unknown station id
+ var outputFolder = Path.Combine(Path.GetTempPath(), "" + incorrectStationId);
+ var outputFiles = new[]
+ {
+ Path.Combine(outputFolder, incorrectStationId + ".ini"),
+ Path.Combine(outputFolder, incorrectStationId + ".sql"),
+ Path.Combine(outputFolder, "temp.sqlite"),
+ Path.Combine(outputFolder, incorrectStationId + ".log")
+ };
- // Call
- var targetProbabilityCalculationOutput = hydraRingCalculationService.PerformCalculation(hlcdDirectory, "dummyRingId", HydraRingTimeIntegrationSchemeType.FBC, HydraRingUncertaintiesType.All, targetProbabilityCalculationInput);
+ using (new FileDisposeHelper(outputFiles))
+ {
+ // Call
+ var targetProbabilityCalculationOutput = hydraRingCalculationService.PerformCalculation(
+ hlcdDirectory, "dummyRingId", HydraRingTimeIntegrationSchemeType.FBC,
+ HydraRingUncertaintiesType.All, targetProbabilityCalculationInput);
- // Assert
- Assert.IsNull(targetProbabilityCalculationOutput);
+ // Assert
+ Assert.IsNull(targetProbabilityCalculationOutput);
- var outputFolder = Path.Combine(Path.GetTempPath(), "999");
- Assert.IsTrue(Directory.Exists(outputFolder));
- Assert.IsTrue(File.Exists(Path.Combine(outputFolder, "999.ini")));
- Assert.IsTrue(File.Exists(Path.Combine(outputFolder, "999.sql")));
- Assert.IsTrue(File.Exists(Path.Combine(outputFolder, "temp.sqlite")));
- Assert.IsTrue(File.Exists(Path.Combine(outputFolder, "999.log")));
+ Assert.IsTrue(Directory.Exists(outputFolder));
+ foreach (var outputFile in outputFiles)
+ {
+ Assert.IsTrue(File.Exists(outputFile), outputFile + " does not exist.");
+ }
+ }
}
+
+ [Test]
+ public void PerformCalculation_InvalidCalculationInput_ExpectedFilesAreWrittenToFileSystemAndCalculationFailsWithExpectedExceedanceProbabilityCalculationOutput()
+ {
+ // Setup
+ var hlcdDirectory = "Invalid HLCD directory";
+ var hydraRingCalculationService = new HydraRingCalculationService();
+ var incorrectStationId = 999;
+ var hydraRingSection = new HydraRingSection(incorrectStationId, "999", 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+ var targetProbabilityCalculationInput = new OvertoppingCalculationInput(incorrectStationId, hydraRingSection,
+ new List(),
+ new List());
+ var outputFolder = Path.Combine(Path.GetTempPath(), "" + incorrectStationId);
+ var outputFiles = new[]
+ {
+ Path.Combine(outputFolder, incorrectStationId + ".ini"),
+ Path.Combine(outputFolder, incorrectStationId + ".sql"),
+ Path.Combine(outputFolder, "temp.sqlite"),
+ Path.Combine(outputFolder, incorrectStationId + ".log")
+ };
+
+ using (new FileDisposeHelper(outputFiles))
+ {
+ // Call
+ var targetProbabilityCalculationOutput = hydraRingCalculationService.PerformCalculation(
+ hlcdDirectory, "dummyRingId", HydraRingTimeIntegrationSchemeType.FBC,
+ HydraRingUncertaintiesType.All, targetProbabilityCalculationInput);
+
+ // Assert
+ Assert.IsNull(targetProbabilityCalculationOutput);
+ Assert.IsTrue(Directory.Exists(outputFolder));
+ foreach (var outputFile in outputFiles)
+ {
+ Assert.IsTrue(File.Exists(outputFile), outputFile + " does not exist.");
+ }
+ }
+ }
}
-}
+}
\ No newline at end of file