From b639c9f5730e2b4586f814c149de932ab4f597c3 Mon Sep 17 00:00:00 2001 From: Stefanos Doumpoulakis <dubulak@gmail.com> Date: Tue, 4 Oct 2022 16:32:21 +0300 Subject: [PATCH] implemented: validate MRF simulation tool version --- .../InputData/FileIO/JSON/JSONInputData.cs | 8 +-- VectoCore/VectoCore/Utils/VectoVersionCore.cs | 32 ++++++++++++ .../VectoCoreTest/Utils/VectoVersionTest.cs | 49 +++++++++++++++++++ VectoCore/VectoCoreTest/VectoCoreTest.csproj | 1 + 4 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 VectoCore/VectoCoreTest/Utils/VectoVersionTest.cs diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs index e66bc41c28..bb757828fa 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs @@ -970,15 +970,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON string simToolVersionStr = XMLManufacturerReportReader.ReadElementValue(xmlDoc, "SimulationToolVersion"); string vectoVersionStr = VectoSimulationCore.VersionNumber; - bool xmlVersionOlder = true; + bool xmlVersionNewer = VectoSimulationCore.CompareVersions(simToolVersionStr, vectoVersionStr) > 0; - if (!xmlVersionOlder) { - throw new VectoException($"Not allowed to run simulation with MRF having newer simulation tool version"); + if (xmlVersionNewer) { + throw new VectoException($"Not allowed to run simulation with MRF having newer simulation tool version ({simToolVersionStr})"); } } #endregion - + private void ReadManufacturerReport() { var xmlDoc = new XmlDocument(); diff --git a/VectoCore/VectoCore/Utils/VectoVersionCore.cs b/VectoCore/VectoCore/Utils/VectoVersionCore.cs index 27aa603475..02a0ea995a 100644 --- a/VectoCore/VectoCore/Utils/VectoVersionCore.cs +++ b/VectoCore/VectoCore/Utils/VectoVersionCore.cs @@ -29,6 +29,9 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ +using System; +using TUGraz.VectoCommon.Utils; + namespace TUGraz.VectoCore.Utils { public static class VectoSimulationCore @@ -57,5 +60,34 @@ namespace TUGraz.VectoCore.Utils return string.Format("VectoCore {0}", VersionNumber); } } + + public enum VersionPart { + Major = 0, + Minor = 1, + Patch = 2, + Build = 3 + }; + + public static int CompareVersions(string a, string b, VersionPart bound = VersionPart.Build) + { + var va = a.Split('-')[0].Split('.'); + var vb = b.Split('-')[0].Split('.'); + + for (int i = 0; (i < va.Length) && (i <= (int)bound); i++) { + string vbPartStr = (i < vb.Length) ? vb[i] : "0"; + int vbPart = 0; + int.TryParse(vbPartStr, out vbPart); + + int vaPart = 0; + int.TryParse(va[i], out vaPart); + + if (vaPart != vbPart) { + return (vaPart > vbPart) ? 1 : -1; + } + } + + return 0; + } + } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Utils/VectoVersionTest.cs b/VectoCore/VectoCoreTest/Utils/VectoVersionTest.cs new file mode 100644 index 0000000000..73039967e1 --- /dev/null +++ b/VectoCore/VectoCoreTest/Utils/VectoVersionTest.cs @@ -0,0 +1,49 @@ +using System; +using TUGraz.VectoCommon.Utils; +using NUnit.Framework; +using static TUGraz.VectoCore.Utils.VectoSimulationCore; + +namespace TUGraz.VectoCore.Tests.Utils +{ + [TestFixture] + [Parallelizable(ParallelScope.All)] + public class VectoVersionTest + { + [ + TestCase("1.1.3.400-DEV", "1.2.2.100-RC", VersionPart.Major, 0), + TestCase("1.2.1.400-DEV", "1.1.2.100-RC", VersionPart.Major, 0), + TestCase("1.1.3.400-DEV", "1.1.1.100-RC", VersionPart.Major, 0), + + TestCase("1.1.3.400-DEV", "2.1.3.400-DEV", VersionPart.Major, -1), + TestCase("2.2.1.400-DEV", "1.2.1.400-DEV", VersionPart.Major, 1), + TestCase("1.2.3.400-DEV", "1.1.1.400-DEV", VersionPart.Major, 0), + + TestCase("1.1.3.400-DEV", "1.2.2.100-RC", VersionPart.Minor, -1), + TestCase("1.2.1.400-DEV", "1.1.2.100-RC", VersionPart.Minor, 1), + TestCase("1.1.3.400-DEV", "1.1.1.100-RC", VersionPart.Minor, 0), + + TestCase("1.1.3.400-DEV", "1.1.2.100-RC", VersionPart.Minor, 0), + TestCase("1.2.1.400-DEV", "1.2.2.100-RC", VersionPart.Minor, 0), + TestCase("1.3.3.400-DEV", "1.3.1.100-RC", VersionPart.Minor, 0), + + TestCase("1.1.3.400-DEV", "1.1.4.100-RC", VersionPart.Patch, -1), + TestCase("1.2.1.400-DEV", "1.2.0.100-RC", VersionPart.Patch, 1), + TestCase("1.1.3.400-DEV", "1.1.3.100-RC", VersionPart.Patch, 0), + + TestCase("1.1.4.400-DEV", "1.1.4.100-RC", VersionPart.Patch, 0), + TestCase("1.2.0.400-DEV", "1.2.0.100-RC", VersionPart.Patch, 0), + + TestCase("1.1.3.400-DEV", "1.1.3.500-RC", VersionPart.Build, -1), + TestCase("1.2.1.400-DEV", "1.2.1.100-RC", VersionPart.Build, 1), + TestCase("1.1.3.400-DEV", "1.1.3.400-RC", VersionPart.Build, 0), + + TestCase("1.1.3.400-DEV", "1.1.4.400-DEV", VersionPart.Build, -1), + TestCase("1.2.2.400-DEV", "1.2.1.400-DEV", VersionPart.Build, 1), + TestCase("1.1.3.400-DEV", "1.1.3.400-DEV", VersionPart.Build, 0), + ] + public void TestCompareVersionsWithBound(string a, string b, VersionPart bound, int result) + { + Assert.IsTrue(CompareVersions(a, b, bound) == result); + } + } +} diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 5a4d54137d..b1ddded146 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -206,6 +206,7 @@ <Compile Include="Algorithms\DelaunayMapTest.cs" /> <Compile Include="Utils\MockModalDataContainer.cs" /> <Compile Include="Utils\DoubleExtensionMethodTest.cs" /> + <Compile Include="Utils\VectoVersionTest.cs" /> <Compile Include="Utils\VectoMathTest.cs" /> <Compile Include="XML\XMLDeclarationInputTest.cs" /> <Compile Include="XML\XMLDeclarationReaderVersionsTest.cs" /> -- GitLab