Skip to content

Commit 7568215

Browse files
committed
More BacktraceAttributes test and simplified backtraceApi API
1 parent f11dc73 commit 7568215

File tree

6 files changed

+133
-59
lines changed

6 files changed

+133
-59
lines changed

Runtime/BacktraceDatabase.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ private void FlushRecord(BacktraceDatabaseRecord record)
299299
return;
300300
}
301301
StartCoroutine(
302-
BacktraceApi.Send(backtraceData, (BacktraceResult result) =>
302+
BacktraceApi.Send(backtraceData, record.Attachments, record.Count, (BacktraceResult result) =>
303303
{
304304
record = BacktraceDatabaseContext.FirstOrDefault();
305305
FlushRecord(record);
@@ -318,7 +318,7 @@ private void SendData(BacktraceDatabaseRecord record)
318318
else
319319
{
320320
StartCoroutine(
321-
BacktraceApi.Send(backtraceData, (BacktraceResult sendResult) =>
321+
BacktraceApi.Send(backtraceData, record.Attachments, record.Count, (BacktraceResult sendResult) =>
322322
{
323323
if (sendResult.Status == BacktraceResultStatus.Ok)
324324
{
@@ -485,6 +485,5 @@ public void SetReportWatcher(ReportLimitWatcher reportLimitWatcher)
485485
{
486486
_reportLimitWatcher = reportLimitWatcher;
487487
}
488-
489488
}
490489
}

Runtime/Interfaces/IBacktraceAPI.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Backtrace.Unity.Model;
22
using System;
33
using System.Collections;
4+
using System.Collections.Generic;
45

56
namespace Backtrace.Unity.Interfaces
67
{
@@ -19,9 +20,11 @@ public interface IBacktraceApi
1920
/// Send diagnostic report to Backtrace API
2021
/// </summary>
2122
/// <param name="json">Library diagnostic data in JSON format</param>
23+
/// <param name="attachments">List of report attachments</param>
24+
/// /// <param name="deduplication">Deduplication count</param>
2225
/// <param name="callback">Coroutine callback</param>
2326
/// <returns></returns>
24-
IEnumerator Send(string json, Action<BacktraceResult> callback = null);
27+
IEnumerator Send(string json, List<string> attachments, int deduplication, Action<BacktraceResult> callback);
2528

2629
/// <summary>
2730
/// Set an event executed when received bad request, unauthorize request or other information from server

Runtime/Model/Database/BacktraceDatabaseRecord.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Backtrace.Unity.Interfaces.Database;
22
using System;
3+
using System.Collections.Generic;
34
using System.IO;
45
using System.Runtime.Serialization;
56
using System.Text;
@@ -57,6 +58,11 @@ public class BacktraceDatabaseRecord : IDisposable
5758
/// </summary>
5859
private string _path = string.Empty;
5960

61+
/// <summary>
62+
/// Attachments path
63+
/// </summary>
64+
public List<string> Attachments { get; private set; }
65+
6066
private int _count = 1;
6167

6268
public int Count
@@ -111,7 +117,8 @@ public string ToJson()
111117
dataPath = DiagnosticDataPath,
112118
minidumpPath = MiniDumpPath,
113119
size = Size,
114-
hash = Hash
120+
hash = Hash,
121+
attachments = Record.Report.AttachmentPaths
115122
};
116123
return JsonUtility.ToJson(rawRecord, true);
117124
}
@@ -132,6 +139,7 @@ private BacktraceDatabaseRecord(BacktraceDatabaseRawRecord rawRecord)
132139
MiniDumpPath = rawRecord.minidumpPath;
133140
Size = rawRecord.size;
134141
Hash = rawRecord.hash;
142+
Attachments = rawRecord.attachments;
135143
}
136144

137145
/// <summary>
@@ -313,6 +321,7 @@ private class BacktraceDatabaseRawRecord
313321
public string minidumpPath;
314322
public long size;
315323
public string hash;
324+
public List<string> attachments;
316325
}
317326
}
318327
}

Runtime/Model/JsonData/BacktraceAttributes.cs

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -49,42 +49,29 @@ public BacktraceAttributes(BacktraceReport report, Dictionary<string, string> cl
4949
if (report != null)
5050
{
5151
ConvertAttributes(report, clientAttributes);
52-
SetLibraryAttributes(report);
52+
if (!string.IsNullOrEmpty(report.Factor))
53+
{
54+
Attributes["_mod_factor"] = report.Factor;
55+
}
5356
SetExceptionAttributes(report);
5457
}
55-
//Environment attributes override user attributes
58+
//Environment attributes override user attributes
59+
SetLibraryAttributes();
5660
SetMachineAttributes();
5761
SetProcessAttributes();
5862
SetSceneInformation();
5963
}
6064
private BacktraceAttributes() { }
6165

62-
//public static BacktraceAttributes Deserialize(JToken jToken)
63-
//{
64-
// var attributes = new Dictionary<string, object>();
65-
// foreach (BacktraceJProperty keys in jToken)
66-
// {
67-
// attributes.Add(keys.Name, keys.Value.Value<string>());
68-
// }
69-
// return new BacktraceAttributes()
70-
// {
71-
// Attributes = attributes
72-
// };
73-
//}
74-
7566
public BacktraceJObject ToJson()
7667
{
7768
return new BacktraceJObject(Attributes);
7869
}
7970
/// <summary>
8071
/// Set library attributes
8172
/// </summary>
82-
private void SetLibraryAttributes(BacktraceReport report)
83-
{
84-
if (!string.IsNullOrEmpty(report.Factor))
85-
{
86-
Attributes["_mod_factor"] = report.Factor;
87-
}
73+
private void SetLibraryAttributes()
74+
{
8875
//A unique identifier of a machine
8976
Attributes["guid"] = MachineId;
9077
//Base name of application generating the report

Runtime/Services/BacktraceApi.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,18 +94,16 @@ public IEnumerator Send(BacktraceData data, Action<BacktraceResult> callback = n
9494
}
9595
}
9696

97+
9798
/// <summary>
9899
/// Sending diagnostic report to Backtrace
99100
/// </summary>
100101
/// <param name="json">diagnostic data JSON</param>
102+
/// <param name="attachments">List of report attachments</param>
103+
/// <param name="deduplication">Deduplication count</param>
101104
/// <param name="callback">coroutine callback</param>
102105
/// <returns>Server response</returns>
103-
public IEnumerator Send(string json, Action<BacktraceResult> callback = null)
104-
{
105-
yield return Send(json, null, 0, callback);
106-
}
107-
108-
private IEnumerator Send(string json, List<string> attachments, int deduplication, Action<BacktraceResult> callback)
106+
public IEnumerator Send(string json, List<string> attachments, int deduplication, Action<BacktraceResult> callback)
109107
{
110108
var requestUrl = _serverurl.ToString();
111109
if (deduplication > 0)
@@ -180,7 +178,6 @@ private IEnumerator SendAttachment(string rxId, Stack<string> attachments)
180178
{
181179
string fileName = System.IO.Path.GetFileName(attachment);
182180
string serverUrl = GetAttachmentUploadUrl(rxId, fileName);
183-
Debug.Log("Server url = " + serverUrl);
184181
using (var request = new UnityWebRequest(serverUrl, "POST"))
185182
{
186183

Tests/Runtime/BacktraceAttributeTests.cs

Lines changed: 105 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,136 @@
11
using Backtrace.Unity.Model;
22
using Backtrace.Unity.Model.JsonData;
33
using NUnit.Framework;
4+
using System;
45
using System.Collections;
56
using System.Collections.Generic;
67
using System.IO;
78
using System.Linq;
9+
using UnityEngine;
810
using UnityEngine.TestTools;
911
namespace Backtrace.Unity.Tests.Runtime
1012
{
1113
public class BacktraceAttributeTests
1214
{
15+
[TestCase(null, null)]
16+
[TestCase("errorMessage", null)]
17+
[TestCase(null, "keyValue")]
18+
[TestCase("errorMessage", "keyValue")]
19+
public void TestAttributesGeneration_NullableValues_ValidAttributeObject(string errorMessage, string keyValue)
20+
{
21+
var report = string.IsNullOrEmpty(errorMessage) ? null : new BacktraceReport(errorMessage);
22+
var attributes = string.IsNullOrEmpty(keyValue) ? null : new Dictionary<string, string>() { { keyValue, keyValue } };
23+
var backtraceAttributes = new BacktraceAttributes(report, attributes);
24+
Assert.IsNotNull(backtraceAttributes);
25+
}
1326
[UnityTest]
14-
public IEnumerator TestAttributesGeneration_CreateCorrectAttributes_WithDiffrentReportConfiguration()
27+
public IEnumerator TestAttributesGeneration_CreateCorrectMessageAttributes_WithDiffrentReportConfiguration()
1528
{
16-
var report = new BacktraceReport("message");
17-
Assert.DoesNotThrow(() => new BacktraceAttributes(report, null));
18-
var exception = new FileNotFoundException();
19-
var exceptionReport = new BacktraceReport(exception, new Dictionary<string, string>() { { "attr", "attr" } });
20-
var attributes = new BacktraceAttributes(exceptionReport, null);
21-
Assert.IsTrue(attributes.Attributes.Count > 0);
29+
var clientAttributes = new Dictionary<string, string>()
30+
{
31+
["foo"] = "foo",
32+
["bar"] = ""
33+
};
34+
35+
var reportAttributes = new Dictionary<string, string>()
36+
{
37+
["reportFoo"] = "foo",
38+
["reportBar"] = "bar"
39+
};
40+
41+
var report = new BacktraceReport("message", reportAttributes);
42+
var attributes = new BacktraceAttributes(report, clientAttributes);
43+
foreach (var keyValuePair in clientAttributes)
44+
{
45+
Assert.AreEqual(attributes.Attributes[keyValuePair.Key].ToString(), clientAttributes[keyValuePair.Key]);
46+
}
47+
48+
foreach (var keyValuePair in reportAttributes)
49+
{
50+
Assert.AreEqual(attributes.Attributes[keyValuePair.Key].ToString(), reportAttributes[keyValuePair.Key]);
51+
}
52+
53+
Assert.AreEqual(report.Message, attributes.Attributes["error.message"]);
2254
yield return null;
2355
}
2456

2557
[UnityTest]
26-
public IEnumerator TestCorrectDictionaryGeneration_CreateCorrectAttributesDictionary_WithDiffrentClientAttributes()
58+
public IEnumerator TestAttributesGeneration_CreateCorrectErrorAttributes_WithDiffrentReportConfiguration()
2759
{
28-
var exception = new FileNotFoundException();
29-
var reportAttributeKey = "report_attr";
30-
var reportAttributeValue = string.Format("{0}-value", reportAttributeKey);
31-
var reportAttributes = new Dictionary<string, string>() { { reportAttributeKey, reportAttributeValue } };
32-
var exceptionReport = new BacktraceReport(exception, reportAttributes);
33-
34-
string clientAttributeKey = "client_attr";
35-
string clientAttributeValue = string.Format("{0}-value", clientAttributeKey);
36-
var clientAttributes = new Dictionary<string, string>() { { clientAttributeKey, clientAttributeValue } };
37-
38-
var testObject = new BacktraceAttributes(exceptionReport, clientAttributes);
39-
Assert.IsTrue(testObject.Attributes.Keys.Any(n => n == clientAttributeKey));
40-
Assert.IsTrue(testObject.Attributes.Keys.Any(n => n == reportAttributeKey));
41-
Assert.IsTrue(testObject.Attributes[clientAttributeKey] as string == clientAttributeValue);
42-
Assert.IsTrue(testObject.Attributes[reportAttributeKey] as string == reportAttributeValue);
60+
var clientAttributes = new Dictionary<string, string>()
61+
{
62+
["foo"] = "foo",
63+
["bar"] = ""
64+
};
65+
66+
var reportAttributes = new Dictionary<string, string>()
67+
{
68+
["reportFoo"] = "foo",
69+
["reportBar"] = "bar"
70+
};
71+
72+
var report = new BacktraceReport(new FileNotFoundException(), reportAttributes);
73+
var attributes = new BacktraceAttributes(report, clientAttributes);
74+
foreach (var keyValuePair in clientAttributes)
75+
{
76+
Assert.AreEqual(attributes.Attributes[keyValuePair.Key].ToString(), clientAttributes[keyValuePair.Key]);
77+
}
78+
79+
foreach (var keyValuePair in reportAttributes)
80+
{
81+
Assert.AreEqual(attributes.Attributes[keyValuePair.Key].ToString(), reportAttributes[keyValuePair.Key]);
82+
}
83+
84+
Assert.AreEqual(report.Message, attributes.Attributes["error.message"]);
4385
yield return null;
4486
}
4587

88+
4689
[UnityTest]
4790
public IEnumerator TestCorrectDictionaryGeneration_ReplaceAttributes_TheSameDictionaryAttributes()
4891
{
4992
var reportAttributeKey = "report_attr";
5093
var reportAttributeValue = string.Format("{0}-value", reportAttributeKey);
51-
var clientAttributes = new Dictionary<string, string>() { { reportAttributeKey,
52-
string.Format("{0}-client", reportAttributeValue)
94+
var reportAttributes = new Dictionary<string, string>()
95+
{
96+
{ reportAttributeKey, reportAttributeValue}
97+
};
98+
99+
var clientAttributes = new Dictionary<string, string>() {
100+
{reportAttributeKey, string.Format("{0}-client", reportAttributeValue)
53101
} };
54-
Assert.IsFalse(clientAttributes[reportAttributeKey] as string == reportAttributeValue);
102+
103+
var report = new BacktraceReport("message", reportAttributes);
104+
var attributes = new BacktraceAttributes(report, clientAttributes);
105+
Assert.AreEqual(attributes.Attributes[reportAttributeKey], reportAttributes[reportAttributeKey]);
106+
107+
yield return null;
108+
}
109+
110+
[UnityTest]
111+
public IEnumerator TestLibraryAttributes_ValidApplicationAttributes_ShouldIncludeAllApplicationInformationInAttributes()
112+
{
113+
var attributes = new BacktraceAttributes(null, null);
114+
115+
Assert.AreEqual(attributes.Attributes["application"], Application.productName);
116+
Assert.AreEqual(attributes.Attributes["application.version"], Application.version);
117+
Assert.AreEqual(attributes.Attributes["application.url"], Application.absoluteURL);
118+
Assert.AreEqual(attributes.Attributes["application.company.name"], Application.companyName);
119+
Assert.AreEqual(attributes.Attributes["application.data_path"], Application.dataPath);
120+
Assert.AreEqual(attributes.Attributes["application.id"], Application.identifier);
121+
Assert.AreEqual(attributes.Attributes["application.installer.name"], Application.installerName);
122+
Assert.AreEqual(attributes.Attributes["application.internet_reachability"], Application.internetReachability.ToString());
123+
Assert.AreEqual(attributes.Attributes["application.editor"], Application.isEditor);
124+
Assert.AreEqual(attributes.Attributes["application.focused"], Application.isFocused);
125+
Assert.AreEqual(attributes.Attributes["application.mobile"], Application.isMobilePlatform);
126+
Assert.AreEqual(attributes.Attributes["application.playing"], Application.isPlaying);
127+
Assert.AreEqual(attributes.Attributes["application.background"], Application.runInBackground);
128+
Assert.AreEqual(attributes.Attributes["application.sandboxType"], Application.sandboxType.ToString());
129+
Assert.AreEqual(attributes.Attributes["application.system.language"], Application.systemLanguage.ToString());
130+
Assert.AreEqual(attributes.Attributes["application.unity.version"], Application.unityVersion);
131+
Assert.AreEqual(attributes.Attributes["application.temporary_cache"], Application.temporaryCachePath);
132+
Assert.AreEqual(attributes.Attributes["application.debug"], Debug.isDebugBuild);
133+
55134
yield return null;
56135
}
57136
}

0 commit comments

Comments
 (0)