Пример #1
0
        private void SendCommandRequest()
        {
            bool successful = false;

            while (successful == false)
            {
                try
                {
                    mClient = new TcpClient(mTestServer, Definitions.mPortNumber);
                    Log("Sending CommandRequest; connected to " + mTestServer + ".");

                    ATCommandRequest request = new ATCommandRequest()
                    {
                        ServiceState = mServiceState
                    };

                    // Send the CommandRequest message with data
                    byte[] data = JsonHelper.ToByteStream <ATCommandRequest>(request);
                    Send(AutomationTestMessageID.GetCommandRequest, data);

                    // Bail out
                    successful = true;
                }
                catch
                {
                    Log("No response for CommandRequest.");
                    CloseConnection();
                    Thread.Sleep(mDelayBetweenRequestsMs);
                }
            }
        }
Пример #2
0
        internal Tuple <TestJobCommandData, string> HandleGetCommand(ATCommandRequest request)
        {
            Log("HandleGetCommand, Busy: " + mBusy + ", VM Busy: " + mVMInstanceBusy + ", ServiceState=" + request.ServiceState);

            var command = TestJobCommandData.GetNextCommand(mData.VMInstanceID);

            if (command == null)
            {
                Log("Requesting next command for VMInstanceID " + mData.VMInstanceID + ": no command was returned.");
                return(null);
            }

            Log("Next command for VMInstanceID " + mData.VMInstanceID + ": '" + command.TestCommandString + "' with ID " + command.TestCommandID +
                ", ExecutionOrder " + command.ExecutionOrder + ", MaxExecutionOrder " + command.MaxExecutionOrder);

            var result = HandleTestJobCommand(command); // Tuple.Item1: handled locally; Item2: result of local action

            if (result.Item1 == true)
            {
                // upload results
                TestResults testResults = new TestResults()
                {
                    Passed   = (result.Item2 == true ? 1 : 0),
                    Warnings = 0,
                    Failed   = (result.Item2 == false ? 1 : 0),
                    Skipped  = 0
                };
                var testJobState = command.MarkAsDone(mData.VMInstanceID, testResults, false, "Handled by TestServer.", string.Empty, string.Empty);

                if (command.MaxExecutionOrder == command.ExecutionOrder || testJobState > 4)
                {
                    Log("End of TestJob reached; resetting the VM. TestJobState " + testJobState);
                    SendEmail(command.TestJobID, command.UserName);
                    CleanupVM();
                }

                // get ready for the next command request
                command = null;
                return(null);
            }
            else
            {
                // Command needs to be handled by the VM
                StartInactivityTimer(command);
                mVMInstanceBusy = true;
                return(Tuple.Create(command, "N/A"));
            }
        }
Пример #3
0
        private void HandleGetCommand(int dataLength)
        {
            byte[]           data    = ReadBuffer(dataLength);
            ATCommandRequest request = JsonHelper.ToObject <ATCommandRequest>(data);

            try
            {
                var command = mVMInstance.HandleGetCommand(request);
                if (command == null)
                {
                    // no need to respond
                }
                else
                {
                    var item = command.Item1;
                    ATCommandResponse response = new ATCommandResponse()
                    {
                        TestSuiteID          = item.TestSuiteID,
                        TestJobID            = item.TestJobID,
                        TestCommandID        = item.TestCommandID,
                        TestCommand          = item.TestCommandString,
                        TimeoutMinutes       = item.TimeoutMinutes,
                        TestPackageDirectory = item.TestPackageDirectory,
                        TestSuiteDirectory   = item.TestSuiteDirectory,
                        Version           = item.Version,
                        LicenseKey        = item.LicenseKey,
                        DownloadLink      = item.DownloadLink,
                        Snapshot          = command.Item2,
                        MaxExecutionOrder = command.Item1.MaxExecutionOrder,
                        ExecutionOrder    = command.Item1.ExecutionOrder,
                        UserName          = command.Item1.UserName,
                        RunCount          = command.Item1.RunCount
                    };
                    data = JsonHelper.ToByteStream <ATCommandResponse>(response);
                    SendData(AutomationTestMessageID.GetCommandResponse, data);
                }
            }
            catch (Exception ex)
            {
                Log("Exception: " + ex);
            }
        }