示例#1
0
        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);
        }
示例#2
0
        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);
        }