Opc.Ua.ServerTest.WriteTest.DoWriteTest C# (CSharp) Method

DoWriteTest() private method

Reads an verifies all of the nodes.
private DoWriteTest ( ) : bool
return bool
        private bool DoWriteTest()
        {
            // follow tree from each starting node.
            bool success = true;

            // collection writeable variables that don't change during the test.
            List<TestVariable> variables = new List<TestVariable>();

            for (int ii = 0; ii < WriteableVariables.Count; ii++)
            {
                TestVariable test = new TestVariable();

                test.Variable = WriteableVariables[ii];
                test.DataType = TypeInfo.GetBuiltInType(WriteableVariables[ii].DataType, Session.TypeTree);
                test.Values = new List<DataValue>();

                variables.Add(test);
            }

            Log("Starting WriteTest for {0} Nodes", variables.Count);
            
            double increment = MaxProgress/(10*variables.Count);
            double position  = 0;

            WriteValueCollection nodesToWrite = new WriteValueCollection();
            
            for (int ii = 0; success && ii < 10; ii++)
            {
                int nodes = 0;
                int operations = 0;

                foreach (TestVariable variable in variables)
                {          
                    variable.Values.Clear();

                    nodes++;

                    AddWriteValues(variable, nodesToWrite);

                    // process batch.
                    if (nodesToWrite.Count > BlockSize/2)
                    {
                        operations += nodesToWrite.Count;

                        if (!Write(nodesToWrite))
                        {
                            success = false;
                            break;
                        }

                        if (nodes > (10*variables.Count)/5)
                        {
                            Log("Wrote {0} attribute values for {1} nodes.", operations, nodes);
                            nodes = 0;
                            operations = 0;
                        }

                        nodesToWrite.Clear();
                    }

                    position += increment;
                    ReportProgress(position);
                }   
             
                // process final batch.
                if (success)
                {
                    if (nodesToWrite.Count > 0)
                    {
                        operations += nodesToWrite.Count;

                        if (!Write(nodesToWrite))
                        {
                            success = false;
                        }
                        else
                        {
                            Log("Wrote {0} attribute values for {1} nodes.", operations, nodes);
                        }
                        
                        nodesToWrite.Clear();
                    }
                }
            }

            return success;
        }