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