예제 #1
0
        public void MultipleOfRelations()
        {
            string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" +
                         "	<DataModel name=\"TheDataModel\">"+
                         "		<Number name=\"num1\" size=\"16\">"+
                         "			<Relation type=\"size\" of=\"Data\" />"+
                         "		</Number>"+
                         "		<Blob name=\"Data\" value=\"00 01 02 03 04 05 06 07\" valueType=\"hex\" >"+
                         "			<Hint name=\"BlobMutator-How\" value=\"ExpandAllRandom\" />"+
                         "		</Blob>"+
                         "		<Number name=\"num2\" size=\"16\">"+
                         "			<Relation type=\"size\" of=\"Data\" />"+
                         "		</Number>"+
                         "	</DataModel>"+

                         "	<StateModel name=\"TheState\" initialState=\"Initial\">"+
                         "		<State name=\"Initial\">"+
                         "			<Action type=\"output\">"+
                         "				<DataModel ref=\"TheDataModel\"/>"+
                         "			</Action>"+
                         "		</State>"+
                         "	</StateModel>"+

                         "	<Test name=\"Default\">"+
                         "		<StateModel ref=\"TheState\"/>"+
                         "			<Publisher class=\"Null\"/>"+
                         "			<Strategy class=\"Random\"/>"+
                         "	</Test>"+
                         "</Peach>";

            PitParser parser = new PitParser();

            Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml)));
            dom.tests[0].includedMutators = new List <string>();
            dom.tests[0].includedMutators.Add("BlobMutator");

            RunConfiguration config = new RunConfiguration();

            config.range      = true;
            config.rangeStart = 0;
            config.rangeStop  = 9;

            Engine e = new Engine(null);

            e.startFuzzing(dom, config);

            Assert.AreEqual(10, dataModels.Count);

            for (int i = 0; i < 10; ++i)
            {
                var model = dataModels[i];

                Assert.AreEqual(3, model.Count);

                Number  num1 = model[0] as Number;
                Variant val1 = num1.InternalValue;
                Assert.GreaterOrEqual((long)val1, 8);

                Blob    blob = model[1] as Blob;
                Variant val2 = blob.InternalValue;
                int     len  = val2.BitsToArray().Length;
                Assert.GreaterOrEqual(len, 8);

                Number  num2 = model[2] as Number;
                Variant val3 = num2.InternalValue;
                Assert.GreaterOrEqual((long)val3, 8);

                Assert.AreEqual(len, (long)val1);
                Assert.AreEqual(len, (long)val3);
            }
        }