Ejemplo n.º 1
0
        /// <summary>
        /// Start a test run request.
        /// </summary>
        public async Task StartTestRunAsync(RunRequest aRequest, string aRevitVersion, Action <ProcessResult> aCallback, CancellationToken aCancellationToken)
        {
            aRequest.Timestamp     = DateTime.Now;
            aRequest.Id            = GenerateId();
            aRequest.ClientName    = mClientName;
            aRequest.ClientVersion = mClientVersion;

            var  revit             = RevitHelper.StartRevit(aRevitVersion);
            bool isRunnerAvailable = await IsRunnerAvailable(aCancellationToken);

            if (isRunnerAvailable)
            {
                string requestFilePath = FileNames.RunRequestFilePath(aRequest.Id);
                JsonHelper.ToFile(requestFilePath, aRequest);

                var responseDirectoryPath = await GetResponseDirectory(aRequest.Id);

                if (Directory.Exists(responseDirectoryPath))
                {
                    bool run = true;

                    while (run && !aCancellationToken.IsCancellationRequested)
                    {
                        var runResult = JsonHelper.FromFile <RunResult>(Path.Combine(responseDirectoryPath, FileNames.RunResult));

                        if (runResult != null)
                        {
                            bool          isCompleted = runResult.State == TestState.Passed || runResult.State == TestState.Failed;
                            ProcessResult result      = new ProcessResult(runResult, isCompleted);

                            aCallback(result);

                            run = !isCompleted;

                            if (run)
                            {
                                await Task.Delay(500, aCancellationToken);
                            }
                        }
                    }
                }
                else
                {
                    FileHelper.DeleteWithLock(requestFilePath);
                    aCallback(new ProcessResult(null, true)
                    {
                        Message = "Tests not executed! Service may not be running."
                    });
                }

                if (revit.IsNew)
                {
                    RevitHelper.KillRevit(revit.ProcessId);
                }
            }
            else
            {
                aCallback(new ProcessResult(null, true)
                {
                    Message = "Runner not available!"
                });
            }
        }