Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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));
        }