Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Release & Env sync with native options #298

Merged
merged 3 commits into from
Aug 27, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## Unreleased

### Features

- Release & Environment now sync with native options ([#298](https://github.com/getsentry/sentry-unity/pull/298))

## 0.5.1

### Fixes
Expand Down
2 changes: 1 addition & 1 deletion src/Sentry.Unity.Editor.iOS/BuildPostProcess.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public static void OnPostProcessBuild(BuildTarget target, string pathToProject)
return;
}

var options = ScriptableSentryUnityOptions.LoadSentryUnityOptions();
var options = ScriptableSentryUnityOptions.LoadSentryUnityOptions(BuildPipeline.isBuildingPlayer);
if (!options.Validate())
{
new UnityLogger(new SentryOptions()).LogWarning(
Expand Down
5 changes: 4 additions & 1 deletion src/Sentry.Unity.Editor.iOS/NativeOptions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.IO;
using UnityEngine;

namespace Sentry.Unity.Editor.iOS
{
Expand Down Expand Up @@ -29,7 +30,9 @@ internal string Generate(SentryOptions options)
@""maxBreadcrumbs"": @{options.MaxBreadcrumbs},
@""maxCacheItems"": @{options.MaxCacheItems},
@""enableAutoSessionTracking"": @NO,
@""sendDefaultPii"" : @{ToObjCString(options.SendDefaultPii)}
@""sendDefaultPii"" : @{ToObjCString(options.SendDefaultPii)},
@""release"" : @""{options.Release}"",
bruno-garcia marked this conversation as resolved.
Show resolved Hide resolved
@""environment"" : @""{options.Environment}""
}};

return options;
Expand Down
8 changes: 4 additions & 4 deletions src/Sentry.Unity/ScriptableSentryUnityOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ internal static string GetConfigPath(string? notDefaultConfigName = null)
[field: SerializeField] internal bool DebugOnlyInEditor { get; set; }
[field: SerializeField] internal SentryLevel DiagnosticLevel { get; set; }

public static SentryUnityOptions? LoadSentryUnityOptions()
public static SentryUnityOptions? LoadSentryUnityOptions(bool isBuilding = false)
{
// TODO: Deprecated and to be removed once we update far enough.
var sentryOptionsTextAsset = Resources.Load<TextAsset>($"{ConfigRootFolder}/{ConfigName}");
Expand All @@ -64,16 +64,16 @@ internal static string GetConfigPath(string? notDefaultConfigName = null)
var scriptableOptions = Resources.Load<ScriptableSentryUnityOptions>($"{ConfigRootFolder}/{ConfigName}");
if (scriptableOptions is not null)
{
return ToSentryUnityOptions(scriptableOptions);
return ToSentryUnityOptions(scriptableOptions, isBuilding);
}

return null;
}

internal static SentryUnityOptions ToSentryUnityOptions(ScriptableSentryUnityOptions scriptableOptions)
internal static SentryUnityOptions ToSentryUnityOptions(ScriptableSentryUnityOptions scriptableOptions, bool isBuilding)
{
var options = new SentryUnityOptions();
SentryOptionsUtility.SetDefaults(options);
SentryOptionsUtility.SetDefaults(options, isBuilding: isBuilding);

options.Enabled = scriptableOptions.Enabled;

Expand Down
13 changes: 7 additions & 6 deletions src/Sentry.Unity/SentryOptionsUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ namespace Sentry.Unity
{
internal static class SentryOptionsUtility
{
public static void SetDefaults(SentryUnityOptions options, IApplication? application = null)
public static void SetDefaults(SentryUnityOptions options, IApplication? application = null,
bool isBuilding = false)
{
application ??= ApplicationAdapter.Instance;

Expand All @@ -20,7 +21,7 @@ public static void SetDefaults(SentryUnityOptions options, IApplication? applica
options.IsEnvironmentUser = false;

options.Release = Release(application);
options.Environment = Environment(application);
options.Environment = Environment(application, isBuilding);

options.CacheDirectoryPath = application.PersistentDataPath;
}
Expand All @@ -35,7 +36,7 @@ public static void SetDefaults(ScriptableSentryUnityOptions scriptableOptions)
scriptableOptions.Dsn = options.Dsn;
scriptableOptions.CaptureInEditor = options.CaptureInEditor;
scriptableOptions.TracesSampleRate = options.TracesSampleRate;
scriptableOptions.AutoSessionTrackingInterval = (int) options.AutoSessionTrackingInterval.TotalMilliseconds;
scriptableOptions.AutoSessionTrackingInterval = (int)options.AutoSessionTrackingInterval.TotalMilliseconds;
scriptableOptions.AutoSessionTracking = options.AutoSessionTracking;

scriptableOptions.AttachStacktrace = options.AttachStacktrace;
Expand All @@ -45,9 +46,9 @@ public static void SetDefaults(ScriptableSentryUnityOptions scriptableOptions)
scriptableOptions.IsEnvironmentUser = options.IsEnvironmentUser;

scriptableOptions.MaxCacheItems = options.MaxCacheItems;
scriptableOptions.InitCacheFlushTimeout = (int) options.InitCacheFlushTimeout.TotalMilliseconds;
scriptableOptions.InitCacheFlushTimeout = (int)options.InitCacheFlushTimeout.TotalMilliseconds;
scriptableOptions.SampleRate = options.SampleRate;
scriptableOptions.ShutdownTimeout = (int) options.ShutdownTimeout.TotalMilliseconds;
scriptableOptions.ShutdownTimeout = (int)options.ShutdownTimeout.TotalMilliseconds;
scriptableOptions.MaxQueueItems = options.MaxQueueItems;

// Config window specifics
Expand All @@ -69,7 +70,7 @@ application.ProductName is string productName
? $"{productName}@{application.Version}"
: $"{application.Version}";

private static string Environment(IApplication application) => application.IsEditor ? "editor" : "production";
private static string Environment(IApplication application, bool isBuilding) => (application.IsEditor && !isBuilding) ? "editor" : "production";

public static void TryAttachLogger(SentryUnityOptions options, IApplication? application = null)
{
Expand Down
19 changes: 16 additions & 3 deletions test/Sentry.Unity.Tests/SentryOptionsUtilityTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,17 @@ public void SetDefaults_Environment_IsProductionOutsideEditor()
Assert.AreEqual("production", options.Environment);
}

[Test]
public void SetDefaults_Environment_IsProductionWhenBuilding()
{
var options = new SentryUnityOptions();
var application = new TestApplication(isEditor: true);

SentryOptionsUtility.SetDefaults(options, application, isBuilding: true);

Assert.AreEqual("production", options.Environment);
}

[Test]
public void SetDefaults_CacheDirectoryPath_IsPersistentDataPath()
{
Expand All @@ -74,10 +85,12 @@ public void SetDefaults_IsEnvironmentUser_IsFalse()
}

[Test]
public void SetDefaults_OptionsCreated_AreEqual()
[TestCase(true)]
[TestCase(false)]
public void SetDefaults_OptionsCreated_AreEqual(bool isBuilding)
{
var expectedOptions = new SentryUnityOptions();
SentryOptionsUtility.SetDefaults(expectedOptions);
SentryOptionsUtility.SetDefaults(expectedOptions, isBuilding: isBuilding);

var scriptableOptions = ScriptableObject.CreateInstance<ScriptableSentryUnityOptions>();
SentryOptionsUtility.SetDefaults(scriptableOptions);
Expand All @@ -87,7 +100,7 @@ public void SetDefaults_OptionsCreated_AreEqual()
scriptableOptions.DebugOnlyInEditor = false;
scriptableOptions.DiagnosticLevel = SentryLevel.Debug;

var actualOptions = ScriptableSentryUnityOptions.ToSentryUnityOptions(scriptableOptions);
var actualOptions = ScriptableSentryUnityOptions.ToSentryUnityOptions(scriptableOptions, isBuilding);

SentryUnityOptionsTests.AssertOptions(expectedOptions, actualOptions);
}
Expand Down
12 changes: 8 additions & 4 deletions test/Sentry.Unity.Tests/SentryUnityOptionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ public void Options_ReadFromJson_Success()
}

[Test]
public void ToSentryUnityOptions_ValueMapping_AreEqual()
[TestCase(true)]
[TestCase(false)]
public void ToSentryUnityOptions_ValueMapping_AreEqual(bool isBuilding)
{
var expectedOptions = new SentryUnityOptions
{
Expand Down Expand Up @@ -73,13 +75,15 @@ public void ToSentryUnityOptions_ValueMapping_AreEqual()
scriptableOptions.DebugOnlyInEditor = expectedOptions.DebugOnlyInEditor;
scriptableOptions.DiagnosticLevel = expectedOptions.DiagnosticLevel;

var optionsActual = ScriptableSentryUnityOptions.ToSentryUnityOptions(scriptableOptions);
var optionsActual = ScriptableSentryUnityOptions.ToSentryUnityOptions(scriptableOptions, isBuilding);

AssertOptions(expectedOptions, optionsActual);
}

[Test]
public void ToScriptableOptions_ConvertJsonOptions_AreEqual()
[TestCase(true)]
[TestCase(false)]
public void ToScriptableOptions_ConvertJsonOptions_AreEqual(bool isBuilding)
{
var jsonTextAsset = new TextAsset(File.ReadAllText(GetTestOptionsFilePath()));
var expectedOptions = JsonSentryUnityOptions.LoadFromJson(jsonTextAsset);
Expand All @@ -88,7 +92,7 @@ public void ToScriptableOptions_ConvertJsonOptions_AreEqual()
SentryOptionsUtility.SetDefaults(scriptableOptions);
JsonSentryUnityOptions.ToScriptableOptions(jsonTextAsset, scriptableOptions);

var actualOptions = ScriptableSentryUnityOptions.ToSentryUnityOptions(scriptableOptions);
var actualOptions = ScriptableSentryUnityOptions.ToSentryUnityOptions(scriptableOptions, isBuilding);

AssertOptions(expectedOptions, actualOptions);
}
Expand Down