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); } } }
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")); } }
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); } }