From 374628de43ad928a6ecae8d7aec7ff8891baf4fe Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Thu, 7 May 2020 11:23:07 +0200 Subject: [PATCH] test reading pif with errors in single simulation runs, change not used entries in completed bus simulation to error for testing --- .../VectoCore/InputData/Impl/InputData.cs | 2 ++ ...tionModeCompletedBusVectoRunDataFactory.cs | 2 +- .../OutputData/XML/XMLPrimaryVehicleReport.cs | 3 +- ...mary_heavyBus group42_SmartPS.RSLT_PIF.xml | 28 +++++++++++++++---- VectoCore/VectoCoreTest/VectoCoreTest.csproj | 3 ++ .../XMLPrimaryVehicleReportBusReaderTest.cs | 17 +++++++++++ 6 files changed, 47 insertions(+), 8 deletions(-) diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs index 9a7aac3b37..77dfdf95c1 100644 --- a/VectoCore/VectoCore/InputData/Impl/InputData.cs +++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs @@ -31,6 +31,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; @@ -213,6 +214,7 @@ namespace TUGraz.VectoCore.InputData.Impl public IList<IResult> Results { get; internal set; } } + [DebuggerDisplay("{ResultStatus} | {VehicleGroup} {Mission}")] public class Result : IResult { public string ResultStatus { get; internal set; } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs index 1d08a72e0f..4c2775795b 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs @@ -180,7 +180,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl var primaryResult = InputDataProvider.PrimaryVehicleData.GetResult( simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode, simulationRunData.VehicleData.Loading); - if (primaryResult == null) { + if (primaryResult == null || !primaryResult.ResultStatus.Equals("success")) { throw new VectoException( "Failed to find results in PrimaryVehicleReport for vehicle group: {0}, mission: {1}, fuel mode: '{2}', payload: {3}. Make sure PIF and completed vehicle data match!", simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode, diff --git a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs index 53f143197d..dbf44fdc8c 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs @@ -409,7 +409,8 @@ namespace TUGraz.VectoCore.OutputData.XML case VectoRun.Status.Canceled: case VectoRun.Status.Aborted: return new object[] { - new XElement(tns + "Error", resultEntry.Error) + new XElement(tns + "Error", resultEntry.Error), + new XElement(tns + "ErrorDetails", resultEntry.StackTrace), }; default: throw new ArgumentOutOfRangeException(); } diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml index 73b2b1eacf..ce14f27e9f 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml +++ b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <pif:VectoOutputPrimaryVehicle xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" xmlns:pif="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD//DEV/VectoOutputPrimaryVehicleInformation.xsd"> <pif:Data xsi:type="PrimaryVehicleHeavyBusDataType" id="PIF-4547e7655ef846a59ce4"> <Vehicle xsi:type="VehiclePIFType"> @@ -486,7 +486,7 @@ </Fuel> <CO2 unit="g/km">695.0</CO2> </Result> - <Result status="success"> + <Result status="error"> <VehicleGroup>P34SD</VehicleGroup> <Mission>Coach</Mission> <SimulationParameters> @@ -495,12 +495,16 @@ <PassengerCount>44.98</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> - <Fuel type="Diesel CI"> + <!-- Test using PIF where not all results are present + <Fuel type="Diesel CI"> <EnergyConsumption unit="MJ/km">9.96560</EnergyConsumption> </Fuel> <CO2 unit="g/km">730.5</CO2> + --> + <Error>20 (Coach _P40DD_ReferenceLoad) - absTime: 7535.2269 [s], distance: 130338.3598 [m], dt: 0.6304 [s], v: 0.0141 [m/s], Gear: 1 | DrivingActionAccelerate: Failed to find operating point</Error> + <ErrorDetails>String</ErrorDetails> </Result> - <Result status="success"> + <Result status="error"> <VehicleGroup>P34DD</VehicleGroup> <Mission>Interurban</Mission> <SimulationParameters> @@ -509,12 +513,16 @@ <PassengerCount>24.48</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> + <!-- Test using PIF where not all results are present <Fuel type="Diesel CI"> <EnergyConsumption unit="MJ/km">14.24030</EnergyConsumption> </Fuel> <CO2 unit="g/km">1043.8</CO2> + --> + <Error>20 (Coach _P40DD_ReferenceLoad) - absTime: 7535.2269 [s], distance: 130338.3598 [m], dt: 0.6304 [s], v: 0.0141 [m/s], Gear: 1 | DrivingActionAccelerate: Failed to find operating point</Error> + <ErrorDetails>String</ErrorDetails> </Result> - <Result status="success"> + <Result status="error"> <VehicleGroup>P34DD</VehicleGroup> <Mission>Interurban</Mission> <SimulationParameters> @@ -523,12 +531,16 @@ <PassengerCount>97.92</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> + <!-- Test using PIF where not all results are present <Fuel type="Diesel CI"> <EnergyConsumption unit="MJ/km">16.77091</EnergyConsumption> </Fuel> <CO2 unit="g/km">1229.3</CO2> + --> + <Error>20 (Coach _P40DD_ReferenceLoad) - absTime: 7535.2269 [s], distance: 130338.3598 [m], dt: 0.6304 [s], v: 0.0141 [m/s], Gear: 1 | DrivingActionAccelerate: Failed to find operating point</Error> + <ErrorDetails>String</ErrorDetails> </Result> - <Result status="success"> + <Result status="error"> <VehicleGroup>P34DD</VehicleGroup> <Mission>Coach</Mission> <SimulationParameters> @@ -551,10 +563,14 @@ <PassengerCount>65.28</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> + <!-- Test using PIF where not all results are present <Fuel type="Diesel CI"> <EnergyConsumption unit="MJ/km">11.34890</EnergyConsumption> </Fuel> <CO2 unit="g/km">831.9</CO2> + --> + <Error>20 (Coach _P40DD_ReferenceLoad) - absTime: 7535.2269 [s], distance: 130338.3598 [m], dt: 0.6304 [s], v: 0.0141 [m/s], Gear: 1 | DrivingActionAccelerate: Failed to find operating point</Error> + <ErrorDetails>String</ErrorDetails> </Result> </Results> <ApplicationInformation> diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 1ede0f985f..3d4c009d6d 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -3787,6 +3787,9 @@ <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\PIF-heavyBus-sample.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\primary_heavyBus group P39_40_nonSmart_ESS.RSLT_PIF.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\vecto_vehicle-medium_lorryFWD-sample.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/VectoCore/VectoCoreTest/XML/XMLPrimaryVehicleReportBusReaderTest.cs b/VectoCore/VectoCoreTest/XML/XMLPrimaryVehicleReportBusReaderTest.cs index 7c4ff2cbdb..c4e2e44865 100644 --- a/VectoCore/VectoCoreTest/XML/XMLPrimaryVehicleReportBusReaderTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLPrimaryVehicleReportBusReaderTest.cs @@ -28,6 +28,10 @@ namespace TUGraz.VectoCore.Tests.XML private const string vehilcePIFExample = "TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/PIF-heavyBus-sample.xml"; + private const string vehiclePIFExampleWithErrors = + @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\primary_heavyBus group P39_40_nonSmart_ESS.RSLT_PIF.xml" + ; + protected IXMLInputDataReader xmlInputReader; private IKernel _kernel; @@ -42,6 +46,19 @@ namespace TUGraz.VectoCore.Tests.XML } + [TestCase] + public void TestReadPIFReportWithErrors() + { + var reader = XmlReader.Create(vehiclePIFExampleWithErrors); + var inputDataProvider = xmlInputReader.Create(reader) as IPrimaryVehicleInformationInputDataProvider; + + Assert.AreEqual("error", inputDataProvider.ResultsInputData.Status); + Assert.AreEqual(20, inputDataProvider.ResultsInputData.Results.Count); + + Assert.AreEqual("error", inputDataProvider.ResultsInputData.Results[19].ResultStatus); + } + + [TestCase] public void TestPrimaryVehicleBusData() { -- GitLab