Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Select Git revision
  • bb437a59abce5d48f96087fa9edf164fa871b8b3
  • amdm2/main default
  • doc-fixes
  • amdm3/develop
  • vehmetrics
  • feature/generic_vehicles_tests
  • trailer-stable
  • trailer
  • pubcode
  • bugfix/CodeEU-547_MaxICEOffTimespan
  • ci
  • stable protected
  • bugfix/CodeEU-235_Tyre_XML-type_VIF
  • revert-f849ae0c
  • Project_VECTO_FD_II/FMI/AMTShiftStratgy
  • Project_VECTO_FD_II/FMI/HybridController
  • feature/CodeEU-51_Extend-ADC-lossmap-declaration-mode
  • tug-dev
  • develop
  • hm_feature/vecto-40-add-nuget
  • tug-stable
  • Release/v4.1.0.3392-RC
  • Release/v4.0.3.3330
  • Release/v4.0.2.3275
  • Release/v4.0.2.3273
  • Release/v0.11.1.3228-DEV
  • Project_VECTO_FD_II/FMI/HybridController
  • Project_VECTO_FD_II/FMI/AMTShiftStrategy
  • Release/v4.0.1.3217
  • Release/v4.0.0.3211
  • Release/v0.11.0.3193-DEV
  • Release/v4.0.0.3161-RC
  • Release/v4.0.0.3106-RC
  • Release/v3.3.15.3102
  • Release/v4.0.0.3078-RC
  • Release/v3.3.15.3073-RC
  • test-tag
  • Release/v3.3.14.3011
  • Build/v0.7.10.2996
  • v0.7.5b0+2524.multistep
  • Release/v3.3.14.2981-RC
41 results

GenericVehicleTest.cs

Blame
  • Forked from VECTO / VECTO Sim
    1117 commits behind the upstream repository.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    GenericVehicleTest.cs 7.85 KiB
    using System;
    using System.Collections.Concurrent;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    using Ninject;
    using NUnit.Framework;
    using TUGraz.VectoCommon.InputData;
    using TUGraz.VectoCommon.Models;
    using TUGraz.VectoCore.InputData.FileIO.JSON;
    using TUGraz.VectoCore.InputData.FileIO.XML;
    using TUGraz.VectoCore.InputData.FileIO.XML.Common;
    using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
    using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
    using TUGraz.VectoCore.Models.Simulation;
    using TUGraz.VectoCore.Models.Simulation.Impl;
    using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
    using TUGraz.VectoCore.OutputData;
    using TUGraz.VectoCore.OutputData.FileIO;
    using TUGraz.VectoCore.Utils;
    using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType;
    
    namespace TUGraz.VectoCore.Tests.Integration
    {
        /// <summary>
        /// Make sure all shipped generic vehicles actually can be simulated
        /// </summary>
    	[TestFixture]
    	//[Parallelizable]
    	internal class GenericVehicleTest
        {
    
    
    		
    		private static string BASE_DIR = "TestData/Shipped_Generic";
    		private StandardKernel _kernel;
    		private IXMLInputDataReader _xmlReader;
    
    		private bool _simulate = false;
    		private static HashSet<string> _ignoredFiles = new HashSet<string>()
    		{
    			@"Engineering Mode\GenericVehicleE2\BEV_ENG_PTO_invalid.vecto", //INVALID Input file 
    			//@"Declaration Mode\CompletedBus 31b2\airdrag.xml" //no job
            };
    
    		[OneTimeSetUp]
    		public void OneTimeSetup()
    		{
    			_kernel = new StandardKernel(new VectoNinjectModule());
    			_xmlReader = _kernel.Get<IXMLInputDataReader>();
    			
    		}
    
    
    		[Test, TestCaseSource(nameof(GetJSONEngineering))]
    		public void GenericVehiclesEngineering(string path)
    		{
    			PrepareJSONSimulation(path, ExecutionMode.Engineering, out _, out _);
    		}
    
    
    		private void PrepareJSONSimulation(string path, ExecutionMode executionMode, out JobContainer jobContainer,
    			out ISimulatorFactory runsFactory)
    		{
    			TestContext.Progress.WriteLine($"Preparing {path} ...");
    			if (IgnoreFiles(path, out var reason)) {
    				Assert.Ignore(reason);
    			}
    			var writeReports = true;
    			var inputData = JSONInputDataFactory.ReadJsonJob(path, false);
    
    			var fileWriter = new FileOutputWriter(path);
    			runsFactory = SimulatorFactory.CreateSimulatorFactory(executionMode, inputData, fileWriter,
    				writeReports ? null : new NullDeclarationReport()); //, writeReports ? null : new NullDeclarationReport());
    			//DisableIterativeRuns(runsFactory);
    			runsFactory.WriteModalResults = false;
    			var sumWriter = new SummaryDataContainer(fileWriter); //new MockSumWriter();
    
    			jobContainer = new JobContainer(sumWriter);
    			runsFactory.SumData = sumWriter;
    			//var sumDataContainer = sumWriter;
    
    			jobContainer.AddRuns(runsFactory);
    
    
            }
    
    
    		[Test, TestCaseSource(nameof(GetJSONEngineering))]
            public void SimulateEngineering(string path)
    		{
    			PrepareJSONSimulation(path, ExecutionMode.Engineering, out var jobContainer, out var runsFactory);
    
    
    			jobContainer.Execute(true);
    			jobContainer.WaitFinished();
    			Assert.IsTrue(jobContainer.Runs.All(r => r.Success));
    		}
    
    		[Test, TestCaseSource(nameof(GetJSONDeclaration)), TestCaseSource(nameof(GetXMLDeclaration))]
    		public void GenericVehiclesDeclaration(string path)
    		{
    			if (IgnoreFiles(path, out var reason)) {
    				Assert.Ignore(reason);
    			}
    			if (path.EndsWith(".vecto")) {
    				PrepareJSONSimulation(path, ExecutionMode.Declaration, out _, out _);
    			} else {
    				TestContext.Progress.WriteLine($"Running {path} ...");
                    var writeReports = true;
    
    
    				
    				var inputData = _xmlReader.CreateDeclaration(path);
    				var fileWriter = new FileOutputWriter(path);
    
    				if (IgnoreInputData(inputData, out reason)) {
    					Assert.Ignore(reason);
    				};
    				ISimulatorFactory runsFactory;
    				
    				if (inputData.DataSource.Type == "VectoOutputMultistepType") {
    					var busInputData = inputData as IMultistepBusInputDataProvider;
    					var multistepInputData = new XMLDeclarationVIFInputData(busInputData, null);
    						fileWriter = new FileOutputVIFWriter(path, busInputData.JobInputData.ManufacturingStages?.Count ?? 0);
    						runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration,
    							multistepInputData, fileWriter, null, null, true);
    				} else{
    			
    					runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter,
    						writeReports ? null : new NullDeclarationReport()); //, writeReports ? null : new NullDeclarationReport());
    
    				}
    
    				var sumWriter = new SummaryDataContainer(fileWriter); //new MockSumWriter();
    				runsFactory.WriteModalResults = false;
    				var jobContainer = new JobContainer(sumWriter);
    				runsFactory.SumData = sumWriter;
    				//var sumDataContainer = sumWriter;
    
    				jobContainer.AddRuns(runsFactory);
    				if (_simulate) {
    					jobContainer.Execute(true);
    					jobContainer.WaitFinished();
    					Assert.IsTrue(jobContainer.Runs.All(r => r.Success));
    				}
    			}
    
            }
    
    
    
    
    		public static List<string> GetJSONEngineering()
    		{
    			return GetFiles("Engineering Mode", "*.vecto");
    		}
    
    		public static List<string> GetJSONDeclaration()
    		{
    			return GetFiles("Declaration Mode", "*.vecto");
            }
    
    		public static List<string> GetXMLDeclaration()
    		{
    			return GetFiles("Declaration Mode", "*.xml");
    		}
    		private static List<string> GetFiles(string path, string searchPattern)
    		{
    			var dirPath = Path.Combine(BASE_DIR, path);
    			List<string> vectoJobs = new List<string>();
    			foreach (var fileName in Directory.EnumerateFiles(dirPath, searchPattern, SearchOption.AllDirectories))
    			{
    				if (IgnoreFiles(path, out _)) {
    					continue;
    				}
    			
    				vectoJobs.Add(fileName);
    			}
    
    
    			return vectoJobs;
    		}
    
    		/// <summary>
    		/// Check if a file should be ignored based on path of the file
    		/// </summary>
    		/// <param name="path"></param>
    		/// <returns></returns>
    		static bool IgnoreFiles(string path, out string reason)
    		{
    			reason = null;
    			if (_ignoredFiles.Contains(Path.GetRelativePath(BASE_DIR, path))) {
    				reason = "File ignored";
    				return true;
    
    			}
    
    			if (path.EndsWith(".xml")) {
    				var xmlDoc = new XmlDocument();
    				xmlDoc.Load(path);
    
    				var documentType = XMLHelper.GetDocumentTypeFromRootElement(xmlDoc.DocumentElement.LocalName);
    				if (documentType == null) {
    					reason = "File ignored - No document type set";
    					return true;
    				}
    
    				if (xmlDoc.DocumentElement.NamespaceURI == "urn:tugraz:ivt:VectoAPI:DeclarationComponent:v2.0") {
    					reason = $"Ignoring {xmlDoc.DocumentElement.NamespaceURI}";
    					return true;
    				}
    
    				switch (documentType.Value) {
    					case XmlDocumentType.DeclarationJobData:
    					case XmlDocumentType.MultistepOutputData:
    						break;
    
    					case XmlDocumentType.EngineeringJobData:
    						throw new Exception("Engineering xml still a thing?");
    						break;
    					case XmlDocumentType.EngineeringComponentData:
    					case XmlDocumentType.DeclarationComponentData:
                        case XmlDocumentType.ManufacturerReport:
    					case XmlDocumentType.CustomerReport:
    					case XmlDocumentType.MonitoringReport:
    					case XmlDocumentType.VTPReport:
    						reason = $"{documentType} ignored";
    						return true;
    					default:
    						throw new ArgumentOutOfRangeException();
    				}
    
    			}
    
                //if (path.Contains("RSLT_MANUFACTURER") || path.Contains("RSLT_CUSTOMER")) {
                //	return true;
                //}
    
    
                return false;
    		}
    
    		static bool IgnoreInputData(IDeclarationInputDataProvider inputData, out string reason)
    		{
    			reason = null;
    
    
    
    			if (inputData.DataSource.Type != "VectoOutputMultistepType" && inputData.JobInputData?.Vehicle is IXMLResource xmlResource) {
    				if (xmlResource.DataSource.Type.Contains("CompletedBus", StringComparison.InvariantCultureIgnoreCase)) {
    					reason = $"Ignore xml type {xmlResource.DataSource.Type}";
    					return true;
                    };
    			}
    
    
    
    			return false;
    		}
        }
    }