private void AddMethodCall(
TestMethod method,
CallMethodRequestCollection methodsToCall,
bool testErrors)
{
VariantCollection inputArguments = new VariantCollection();
for (int ii = 0; ii < method.InputArguments.Count; ii++)
{
Argument argument = method.InputArguments[ii];
object value = m_generator.GetRandom(
argument.DataType,
argument.ValueRank,
argument.ArrayDimensions,
Session.TypeTree);
inputArguments.Add(new Variant(value));
}
CallMethodRequest request = null;
// add valid method.
if (!testErrors)
{
request = new CallMethodRequest();
request.ObjectId = method.Parent.NodeId;
request.MethodId = method.Method.NodeId;
request.Handle = method;
request.InputArguments = new VariantCollection(inputArguments);
methodsToCall.Add(request);
return;
}
// add invalid object.
request = new CallMethodRequest();
request.ObjectId = Objects.RootFolder;
request.MethodId = method.Method.NodeId;
request.Handle = method;
request.InputArguments = new VariantCollection(inputArguments);
methodsToCall.Add(request);
if (inputArguments.Count > 0)
{
// add too few parameters.
request = new CallMethodRequest();
request.ObjectId = method.Parent.NodeId;
request.MethodId = method.Method.NodeId;
request.Handle = method;
request.InputArguments = new VariantCollection(inputArguments);
request.InputArguments.RemoveAt(request.InputArguments.Count-1);
methodsToCall.Add(request);
// add invalid parameter.
request = new CallMethodRequest();
request.ObjectId = method.Parent.NodeId;
request.MethodId = method.Method.NodeId;
request.Handle = method;
request.InputArguments = new VariantCollection(inputArguments);
Argument argument = method.InputArguments[inputArguments.Count/2];
if (TypeInfo.GetBuiltInType(argument.DataType, Session.TypeTree) != BuiltInType.Variant)
{
TypeInfo typeInfo = null;
do
{
Variant arg = (Variant)m_generator.GetRandom(BuiltInType.Variant);
typeInfo = TypeInfo.IsInstanceOfDataType(
arg.Value,
argument.DataType,
argument.ValueRank,
Session.NamespaceUris,
Session.TypeTree);
if (typeInfo == null)
{
request.InputArguments[inputArguments.Count/2] = arg;
methodsToCall.Add(request);
break;
}
}
while (typeInfo != null);
}
}
// add extra parameters.
request = new CallMethodRequest();
request.ObjectId = method.Parent.NodeId;
request.MethodId = method.Method.NodeId;
request.Handle = method;
request.InputArguments = new VariantCollection(inputArguments);
request.InputArguments.Add(new Variant(m_generator.GetRandom(BuiltInType.Variant)));
methodsToCall.Add(request);
}
}