public static TestStatistics TestBSP(TestJob job, LoadedBSP bsp, string temporaryDirectory) { TestStatistics stats = new TestStatistics(); Directory.CreateDirectory(temporaryDirectory); using (var r = new TestResultLogger(Path.Combine(temporaryDirectory, "bsptest.log"))) { LoadedBSP.LoadedMCU[] MCUs; if (job.DeviceRegex == null) { MCUs = bsp.MCUs.ToArray(); } else { var rgFilter = new Regex(job.DeviceRegex); MCUs = bsp.MCUs.Where(mcu => rgFilter.IsMatch(mcu.ExpandedMCU.ID)).ToArray(); } if (job.SkippedDeviceRegex != null) { var rg = new Regex(job.SkippedDeviceRegex); MCUs = MCUs.Where(mcu => !rg.IsMatch(mcu.ExpandedMCU.ID)).ToArray(); } var loadedRules = job.RegisterRenamingRules?.Select(rule => new LoadedRenamingRule(rule))?.ToArray(); var noValidateReg = job.NonValidatedRegisters; foreach (var sample in job.Samples) { r.BeginSample(sample.Name); int cnt = 0, failed = 0, succeeded = 0; var effectiveMCUs = MCUs; if (!string.IsNullOrEmpty(sample.DeviceRegex)) { Regex rgDevice = new Regex(sample.DeviceRegex); effectiveMCUs = MCUs.Where(mcu => rgDevice.IsMatch(mcu.ExpandedMCU.ID)).ToArray(); } if (sample.Name == "ValidateGenerateFramwoks") { var sampleFramwork = XmlTools.LoadObject <EmbeddedProjectSample>(Path.Combine(job.BSPPath, "FramworkSamples", "sample.xml")); LoadedBSP.LoadedSample sampleObj1 = new LoadedBSP.LoadedSample() { Sample = sampleFramwork }; effectiveMCUs[0].BSP.Samples.Add(sampleObj1); effectiveMCUs[0].BSP.Samples[effectiveMCUs[0].BSP.Samples.Count - 1].Directory = effectiveMCUs[0].BSP.Samples[effectiveMCUs[0].BSP.Samples.Count - 2].Directory.Remove(effectiveMCUs[0].BSP.Samples[effectiveMCUs[0].BSP.Samples.Count - 2].Directory.LastIndexOf("samples")) + "FramworkSamples"; } foreach (var mcu in effectiveMCUs) { if (string.IsNullOrEmpty(mcu.ExpandedMCU.ID)) { throw new Exception("Invalid MCU ID!"); } var extraParams = job.DeviceParameterSets?.FirstOrDefault(s => s.DeviceRegexObject?.IsMatch(mcu.ExpandedMCU.ID) == true); string mcuDir = Path.Combine(temporaryDirectory, mcu.ExpandedMCU.ID); DateTime start = DateTime.Now; var result = TestMCU(mcu, mcuDir + sample.TestDirSuffix, sample, extraParams, loadedRules, noValidateReg, job.UndefinedMacros); Console.WriteLine($"[{(DateTime.Now - start).TotalMilliseconds:f0} msec]"); if (result.Result == TestBuildResult.Failed) { failed++; } else if (result.Result == TestBuildResult.Succeeded) { succeeded++; } r.LogTestResult(mcu.ExpandedMCU.ID, result); cnt++; Console.WriteLine("{0}: {1}% done ({2}/{3} devices, {4} failed)", sample.Name, (cnt * 100) / effectiveMCUs.Length, cnt, effectiveMCUs.Length, failed); } if ((succeeded + failed) == 0) { throw new Exception("Not a single MCU supports " + sample.Name); } r.EndSample(); stats.Passed += succeeded; stats.Failed += failed; } } return(stats); }
public static TestStatistics TestBSP(TestJob job, LoadedBSP bsp, string temporaryDirectory, Regex additionalMCUFilter = null) { TestStatistics stats = new TestStatistics(); Directory.CreateDirectory(temporaryDirectory); using (var r = new TestResultLogger(Path.Combine(temporaryDirectory, "bsptest.log"))) { LoadedBSP.LoadedMCU[] MCUs; if (job.DeviceRegex == null) { MCUs = bsp.MCUs.ToArray(); } else { var rgFilter = new Regex(job.DeviceRegex); MCUs = bsp.MCUs.Where(mcu => rgFilter.IsMatch(mcu.ExpandedMCU.ID)).ToArray(); } if (job.SkippedDeviceRegex != null) { var rg = new Regex(job.SkippedDeviceRegex); MCUs = MCUs.Where(mcu => !rg.IsMatch(mcu.ExpandedMCU.ID)).ToArray(); } var registerValidationParameters = new RegisterValidationParameters { RenameRules = job.RegisterRenamingRules?.Select(rule => new LoadedRenamingRule(rule))?.ToArray(), NonValidatedRegisters = job.NonValidatedRegisters, UndefinedMacros = job.UndefinedMacros }; foreach (var sample in job.Samples) { r.BeginSample(sample.Name); int cnt = 0, failed = 0, succeeded = 0; var effectiveMCUs = MCUs; if (!string.IsNullOrEmpty(sample.DeviceRegex)) { Regex rgDevice = new Regex(sample.DeviceRegex); effectiveMCUs = MCUs.Where(mcu => rgDevice.IsMatch(mcu.ExpandedMCU.ID)).ToArray(); } if (additionalMCUFilter != null) { effectiveMCUs = effectiveMCUs.Where(mcu => additionalMCUFilter.IsMatch(mcu.ExpandedMCU.ID)).ToArray(); } foreach (var mcu in effectiveMCUs) { if (string.IsNullOrEmpty(mcu.ExpandedMCU.ID)) { throw new Exception("Invalid MCU ID!"); } var extraParams = job.DeviceParameterSets?.FirstOrDefault(s => s.DeviceRegexObject?.IsMatch(mcu.ExpandedMCU.ID) == true); string mcuDir = Path.Combine(temporaryDirectory, mcu.ExpandedMCU.ID); DateTime start = DateTime.Now; var result = TestMCU(mcu, mcuDir + sample.TestDirSuffix, sample, extraParams, registerValidationParameters); Console.WriteLine($"[{(DateTime.Now - start).TotalMilliseconds:f0} msec]"); if (result.Result == TestBuildResult.Failed) { failed++; } else if (result.Result == TestBuildResult.Succeeded) { succeeded++; } r.LogTestResult(mcu.ExpandedMCU.ID, result); cnt++; Console.WriteLine("{0}: {1}% done ({2}/{3} devices, {4} failed)", sample.Name, (cnt * 100) / effectiveMCUs.Length, cnt, effectiveMCUs.Length, failed); } if ((succeeded + failed) == 0) { throw new Exception("Not a single MCU supports " + sample.Name); } r.EndSample(); stats.Passed += succeeded; stats.Failed += failed; } } return(stats); }