示例#1
0
 public static Data.TestResult ToTestResult(this Common.Models.TestResult testResult, TestMethod testMethod, int sessionId)
 {
     return(new Data.TestResult()
     {
         Method = testMethod,
         Duration = testResult.Duration,
         Outcome = testResult.Outcome.ToTestState(),
         ErrorMessage = GetShortErrorMessage(testResult.ErrorMessage),
         StackTrace = StackItem.FromStackTrace(testResult.ErrorStackTrace),
         Output = testResult.Messages?.Length > 0 ?
                  string.Join(Environment.NewLine, testResult.Messages.Select(p => p.Text)).Trim() : null,
         SessionId = sessionId
     });
 }
示例#2
0
        protected override async Task <bool> UploadExceptionAsync(SerializableException exception)
        {
            using (new InvariantCulture())
            {
                try
                {
                    using (var writer = new StringWriter())
                    {
                        writer.WriteLine("Package: " + PackageName);
                        writer.WriteLine("Version: " + Version);

                        writer.WriteLine("OS: Windows");
                        writer.WriteLine("Windows: " + Environment.OSVersion.Version.ToString());

                        if (!string.IsNullOrEmpty(Manufacturer))
                        {
                            writer.WriteLine("Manufacturer: " + Manufacturer);
                        }

                        if (!string.IsNullOrEmpty(Model))
                        {
                            writer.WriteLine("Model: " + Model);
                        }

                        writer.WriteLine("Date: " + DateTime.Now.ToUniversalTime().ToString("O"));
                        writer.WriteLine("CrashReporter Key: " + InstallationId);

                        var exceptionItem = exception;
                        while (exceptionItem != null)
                        {
                            writer.WriteLine();
                            writer.WriteLine(exception.GetType().FullName + ": " + exception.Message);

                            var stackTrace  = exception.StackTrace ?? new StackTrace().ToString();
                            var stackFrames = StackItem.FromStackTrace(stackTrace);

                            if (stackFrames.Length > 0)
                            {
                                foreach (var stackItem in stackFrames)
                                {
                                    writer.Write($"  at {stackItem.MethodName}");
                                    if (stackItem.SourceFile != null)
                                    {
                                        writer.WriteLine($"({Path.GetFileName(stackItem.SourceFile)}:{stackItem.Line})");
                                    }
                                    else
                                    {
                                        writer.WriteLine();
                                    }
                                }
                            }
                            else
                            {
                                //In case the regex fails somehow
                                writer.WriteLine(stackTrace);
                                writer.WriteLine("(could not parse stacktrace)");
                            }

                            exceptionItem = exceptionItem.InnerException;
                        }

                        writer.Flush();

                        var text = $"raw={HttpUtility.UrlEncode(writer.ToString()).Replace("+", "%20")}" +
                                   "&sdk=HockeySDKWinWPF" +
                                   "&sdk_version=hockeysdk.wpf:4.1.6.1005" +
                                   "&userID=" + InstallationId;

                        var form = new StringContent(text);
                        form.Headers.ContentType.MediaType = "application/x-www-form-urlencoded";
                        form.Headers.ContentType.CharSet   = null;

                        var response = await _httpClient.PostAsync("crashes", form);

                        return(response.StatusCode == HttpStatusCode.Created);
                    }
                }
                catch
                {
                    return(false);
                }
            }
        }