Opc.Ua.ServerTest.CallTest.AddMethodCall C# (CSharp) Method

AddMethodCall() private method

Adds random parameters
private AddMethodCall ( TestMethod method, CallMethodRequestCollection methodsToCall, bool testErrors ) : void
method TestMethod
methodsToCall CallMethodRequestCollection
testErrors bool
return void
        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);
        }
    }