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