public void SerializeNestedSweepLoopRange() { var tp = new TestPlan(); var s1 = new SweepLoopRange(); var s2 = new SweepLoopRange(); var s3 = new DelayStep() { DelaySecs = 0 }; tp.ChildTestSteps.Add(s1); s1.ChildTestSteps.Add(s2); s2.ChildTestSteps.Add(s3); s1.SweepProperties = new List <IMemberData>() { TypeData.FromType(typeof(DelayStep)).GetMember(nameof(DelayStep.DelaySecs)) }; s2.SweepProperties = new List <IMemberData>() { TypeData.FromType(typeof(DelayStep)).GetMember(nameof(DelayStep.DelaySecs)) }; using (var st = new System.IO.MemoryStream()) { tp.Save(st); st.Seek(0, 0); tp = TestPlan.Load(st, tp.Path); } s1 = tp.ChildTestSteps[0] as SweepLoopRange; s2 = s1.ChildTestSteps[0] as SweepLoopRange; Assert.AreEqual(1, s1.SweepProperties.Count); Assert.AreEqual(1, s2.SweepProperties.Count); Assert.AreEqual(s1.SweepPropertyName, s2.SweepPropertyName); }
public void TestDecadeRange() { int count = 0; foreach (var value in SweepLoopRange.ExponentialRange(0.1M, 1000, 10)) { Assert.IsTrue(value <= 1000.0M && value >= 0.1M); count++; } Assert.AreEqual(10, count); }
public void SweepLoopRange2Test() { var plan = new TestPlan(); var sweep = new SweepParameterRangeStep(); var numberstep = new ScopeTestStep(); plan.ChildTestSteps.Add(sweep); sweep.ChildTestSteps.Add(numberstep); var member = TypeData.GetTypeData(numberstep).GetMember("A"); member.Parameterize(sweep, numberstep, "A"); sweep.SelectedParameters = Enumerable.Empty <ParameterMemberData>().ToList(); Assert.AreEqual(0, sweep.SelectedParameters.Count()); { var a = AnnotationCollection.Annotate(sweep); var m = a.GetMember(nameof(SweepParameterRangeStep.SelectedParameters)); var sweptMember = a.GetMember("A"); Assert.IsTrue(sweptMember.Get <IEnabledAnnotation>().IsEnabled); var ms = m.Get <IMultiSelectAnnotationProxy>(); var avail = m.Get <IAvailableValuesAnnotationProxy>(); ms.SelectedValues = avail.AvailableValues; a.Write(); sweptMember = a.GetMember("A"); Assert.IsFalse(sweptMember.Get <IEnabledAnnotation>().IsEnabled); } Assert.AreEqual(1, sweep.SelectedParameters.Count()); sweep.SweepStart = 1; sweep.SweepEnd = 10; sweep.SweepPoints = 10; Assert.IsTrue(string.IsNullOrEmpty(sweep.Error)); plan.Execute(); Assert.IsTrue(Enumerable.Range(1, 10).SequenceEqual(numberstep.Collection)); { var sweep2 = new SweepLoopRange(); plan.ChildTestSteps.Add(sweep2); // verify that sweep Behavior selected value can be displayed. var annotation = AnnotationCollection.Annotate(sweep); var mem = annotation.GetMember(nameof(SweepParameterRangeStep.SweepBehavior)); var proxy = mem.Get <IAvailableValuesAnnotationProxy>(); var selectedBehavior = proxy.SelectedValue.Get <IStringReadOnlyValueAnnotation>(); Assert.AreEqual("Linear", selectedBehavior.Value); } }
public void SweepRaceBug() { // test that validation rules can be checked while the test plan is running // without causing an error. The validation rules does not need to do actual validation // but since SweepLoop and SweepLoopRange modifies its child steps this could cause an error // as shown by SweepRaceBugCheckStep and SweepRaceBugStep. var plan = new TestPlan(); var repeat = new RepeatStep { Count = 10, Action = RepeatStep.RepeatStepAction.Fixed_Count }; var loop = new SweepLoop(); repeat.ChildTestSteps.Add(loop); loop.ChildTestSteps.Add(new SweepRaceBugStep() { }); loop.ChildTestSteps.Add(new SweepRaceBugCheckStep() { }); var steptype = TypeData.FromType(typeof(SweepRaceBugStep)); var member = steptype.GetMember(nameof(SweepRaceBugStep.Frequency)); var member2 = TypeData.FromType(typeof(SweepRaceBugCheckStep)).GetMember(nameof(SweepRaceBugCheckStep.Frequency2)); var lst = new List <SweepParam>(); double[] values = new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; lst.Add(new SweepParam(new[] { member }, values.Cast <object>().ToArray())); lst.Add(new SweepParam(new[] { member2 }, values.Cast <object>().ToArray())); loop.SweepParameters = lst; var loopRange = new SweepLoopRange(); loopRange.SweepStart = 1; loopRange.SweepEnd = 10; loopRange.SweepPoints = 10; loopRange.ChildTestSteps.Add(new SweepRaceBugStep() { }); loopRange.ChildTestSteps.Add(new SweepRaceBugCheckStep() { }); loopRange.SweepProperties = new List <IMemberData> { member, member2 }; var repeat2 = new RepeatStep { Count = 10, Action = RepeatStep.RepeatStepAction.Fixed_Count }; repeat2.ChildTestSteps.Add(loopRange); var parallel = new ParallelStep(); plan.ChildTestSteps.Add(parallel); parallel.ChildTestSteps.Add(repeat); parallel.ChildTestSteps.Add(repeat2); TestPlanRun run = null; TapThread.Start(() => run = plan.Execute()); TapThread.Start(() => { while (run == null) { loopRange.Error.ToList(); } }); while (run == null) { loop.Error.ToList(); } Assert.AreEqual(Verdict.NotSet, run.Verdict); }
public void RunSweepWithInterruptions(bool loopRange) { IEnumerable <int> check; var tp = new TestPlan(); TestStep sweep; if (loopRange) { var sweepRange = new SweepLoopRange(); sweepRange.SweepStart = 10; sweepRange.SweepEnd = 30; sweepRange.SweepStep = 1; sweepRange.SweepProperties = new List <IMemberData>() { TypeData.FromType(typeof(SweepTestStep)).GetMember("SweepProp") }; sweep = sweepRange; check = Enumerable.Range(10, (int)(sweepRange.SweepEnd - sweepRange.SweepStart + 1)); } else { check = Enumerable.Range(10, 20); var sweepRange = new SweepLoop(); var lst = new List <SweepParam>(); lst.Add(new SweepParam(new[] { TypeData.FromType(typeof(SweepTestStep)).GetMember("SweepProp") }, check.Cast <object>().ToArray())); sweepRange.SweepParameters = lst; sweep = sweepRange; } var step = new SweepTestStep(); tp.ChildTestSteps.Add(sweep); sweep.ChildTestSteps.Add(step); var rlistener = new PlanRunCollectorListener() { CollectResults = true }; bool done = false; void interruptOperations() { // this is to reproduce an error previously happening when the // SweepLoopRange.Error value was getted. // this would have changed the value of SweepProp intermiddently. while (!done) { // so bother as much as possible... var error2 = sweep.Error; } } var trd = new Thread(interruptOperations); trd.Start(); var result = tp.Execute(new[] { rlistener }); done = true; trd.Join(); var results = rlistener.Results.Select(x => (int)x.Result.Columns[0].Data.GetValue(0)).ToArray(); Assert.IsTrue(results.SequenceEqual(check)); }