The -genTest option causes test functions to be generated. These functions can be used to populate variables of generated types with random test data. The main purpose is to provide a code template to users for writing code to populate variables. This is quite useful to users because generated data types can become very complex as the ASN.1 schemas become more complex. It is sometimes difficult to figure out how to navigate all of the lists and pointers. Using –genTest can provide code that simply has to be modified to accomplish the population of a data variable with any type of data.
The generated test functions are written to a .c or .cpp file with a name of the following format:
<asn1ModuleName>Test.c
where <asn1ModuleName> is the name of the ASN.1 module that contains the type definitions. The format of the name of each generated test function is as follows:
asn1Test_[<prefix>]<prodName>
where <prodName>
is the name of the ASN.1 production for which the
function is being generated and <prefix>
is an optional prefix that can be
set via a configuration file setting. The configuration setting used to set the prefix is
the <typePrefix> element. This element specifies a prefix that will be applied to all
generated typedef names and function names for the production.
The calling sequence for each generated test function is as follows:
<typeName>* pvalue = <testFunc> (OSCTXT* pctxt)
In this definition, <testFunc> denotes the formatted function name defined above.
The pctxt
argument is used to hold a context pointer to keep track of
dynamic memory allocation parameters. This is a basic "handle" variable that is used to
make the function reentrant so that it can be used in an asynchronous or threaded
application. The user is required to supply a pointer to a variable of this type declared
somewhere in his or her program. The variable must have been previously initialized using
the rtInitContext run-time function.
The pvalue
argument is a pointer to hold the populated data variable. This
variable is of the type generated for the ASN.1 production. The test function will
automatically allocate dynamic memory using the run-time memory management for the main
variable as well as variable length fields within the structure. This memory is tracked
within the context structure and is released when the context structure is freed.
In the case of C++, a method is added to the generated control class for test code generation. The name of this method is genTestInstance. The prototype is as follows:
<typeName>* pvalue = <object>.genTestInstance();
where <typeName> is the ASN1T_<name> type name of the generated type and <object> is an instance of the ASN1C_<name> generated control class.
Generated Sample Programs
In addition to test functions, it is possible to generate writer and reader sample programs. These programs contain sample code to populate and encode an instance of ASN.1 data and then read and decode this data respectively. These programs are generated using the -genwriter and -genreader command-line switches.