Data
Data elements are used to create and load default sets of data into data models. There are currently three ways to load data, first is from a file, the second is via a python expression, and the third is by setting values field by field.
The Data element is a valid top level element (child of <Peach>) when defining sets of data to be referenced later on. It is also valid as a child of <Action> when used to both define data or reference an existing top level definition.
<DataModel name="MyDataModel">
<Block name="FooBlock">
<String name="Value" />
</Block>
</DataModel>
<Data name="HelloWorldDataSet">
<Field name="FooBlock.Value" value="Hello World!" />
</Data>
<Data name="LoadFromFile" fileName="sample.bin" />
<Data name="LoadFromExpression" expression="myFuncGetData()" />
Attributes:
name -- Name of the data model [required]
ref -- Reference to a data model to use as a template [optional]
fileName -- Name of file to load, or folder with files to cycle through [optional]
- expression -- Python expression that must return a binary string to load [optional]
- switchCount -- Number of iterations to perform per file (when multiple files are used) [optional]
Valid Child-Elements:
Example of Settings Arrays
Note: Peach 2.3 Only
This is an example of how to populate arrays using Field elements in data sets.
<DataModel name="TheDataModel1">
<String name="Strings" maxOccurs="10" />
</DataModel>
<DataModel name="TheDataModel2">
<Block name="Array" maxOccurs="10">
<String name="String" />
</Block>
</DataModel>
<DataModel name="TheDataModel3">
<Block name="Array" maxOccurs="10">
<String name="String1" />
<String name="String2" />
</Block>
</DataModel>
<DataModel name="TheDataModel4">
<Block name="Array" maxOccurs="10">
<String name="Strings" maxOccurs="10" />
</Block>
</DataModel>
<StateModel name="TheState" initialState="Initial">
<State name="Initial">
<Action type="output">
<DataModel ref="TheDataModel1"/>
<Data name="data">
<Field name="Strings[0]" value="1.0\n"/>
<Field name="Strings[1]" value="1.1\n"/>
<Field name="Strings[2]" value="1.2\n"/>
</Data>
</Action>
<Action type="output">
<DataModel ref="TheDataModel2"/>
<Data name="data">
<Field name="Array[0].String" value="2.0\n"/>
<Field name="Array[1].String" value="2.1\n"/>
<Field name="Array[2].String" value="2.2\n"/>
</Data>
</Action>
<Action type="output">
<DataModel ref="TheDataModel3"/>
<Data name="data">
<Field name="Array[0].String1" value="3.0.1\n"/>
<Field name="Array[0].String2" value="3.0.2\n"/>
<Field name="Array[1].String1" value="3.1.1\n"/>
<Field name="Array[1].String2" value="3.1.2\n"/>
<Field name="Array[2].String1" value="3.2.1\n"/>
<Field name="Array[2].String2" value="3.2.2\n"/>
</Data>
</Action>
<Action type="output">
<DataModel ref="TheDataModel4"/>
<Data name="data">
<Field name="Array[0].Strings[0]" value="4.0.1\n"/>
<Field name="Array[0].Strings[1]" value="4.0.2\n"/>
<Field name="Array[1].Strings[0]" value="4.1.1\n"/>
<Field name="Array[1].Strings[1]" value="4.1.2\n"/>
<Field name="Array[2].Strings[0]" value="4.2.1\n"/>
<Field name="Array[2].Strings[1]" value="4.2.2\n"/>
</Data>
</Action>
</State>
</StateModel>
TIP: Removing unused array
So what if you have an array with minOccurs="0" and you want to specify it has zero elements? Just set the array indexer to -1 as in the following example:
<Field name="Array[-1]" value="" />
Peach Fuzzing Platform