Ejemplo n.º 1
0
        public void ShouldSendUnderTheLimit()
        {
            Dictionary <LogType, int> maximumTypePerTimePeriod =
                new Dictionary <LogType, int> {
                { LogType.Error, 5 }
            };

            var configuration = new TestConfiguration("foo")
            {
                MaximumTypePerTimePeriod = maximumTypePerTimePeriod
            };

            var counter = new MaximumLogTypeCounter(configuration);

            var message1 = new UnityLogMessage("", "", LogType.Error);
            var message2 = new UnityLogMessage("", "", LogType.Error);
            var message3 = new UnityLogMessage("", "", LogType.Error);
            var message4 = new UnityLogMessage("", "", LogType.Error);
            var message5 = new UnityLogMessage("", "", LogType.Error);

            Assert.True(counter.ShouldSend(message1));
            Assert.True(counter.ShouldSend(message2));
            Assert.True(counter.ShouldSend(message3));
            Assert.True(counter.ShouldSend(message4));
            Assert.True(counter.ShouldSend(message5));
        }
Ejemplo n.º 2
0
        public void FlushesCorrectly()
        {
            Dictionary <LogType, int> maximumTypePerTimePeriod =
                new Dictionary <LogType, int> {
                { LogType.Error, 1 }
            };

            var configuration = new TestConfiguration("foo")
            {
                MaximumTypePerTimePeriod = maximumTypePerTimePeriod,
                MaximumLogsTimePeriod    = TimeSpan.FromSeconds(2),
            };

            var counter = new MaximumLogTypeCounter(configuration);

            var message = new UnityLogMessage("", "", LogType.Error);

            counter.ShouldSend(message);

            Thread.Sleep(configuration.MaximumLogsTimePeriod);

            message = new UnityLogMessage("", "", LogType.Error);

            Assert.True(counter.ShouldSend(message));
        }
Ejemplo n.º 3
0
        public static Exception FromUnityLogMessage(UnityLogMessage logMessage, System.Diagnostics.StackFrame[] stackFrames, Severity severity, bool forceUnhandled)
        {
            var match = Regex.Match(logMessage.Condition, ErrorClassMessagePattern, RegexOptions.Singleline);

            var lines = new StackTrace(logMessage.StackTrace).ToArray();

            var handledState = forceUnhandled
        ? HandledState.ForUnhandledException()
        : HandledState.ForUnityLogMessage(severity);

            if (match.Success)
            {
                var errorClass = match.Groups["errorClass"].Value;
                var message    = match.Groups["message"].Value.Trim();
                if (errorClass == AndroidJavaErrorClass)
                {
                    match = Regex.Match(message, ErrorClassMessagePattern, RegexOptions.Singleline);

                    if (match.Success)
                    {
                        errorClass = match.Groups["errorClass"].Value;
                        message    = match.Groups["message"].Value.Trim();
                        lines      = new StackTrace(logMessage.StackTrace, StackTraceFormat.AndroidJava).ToArray();
                    }
                    handledState = HandledState.ForUnhandledException();
                }
                return(new Exception(errorClass, message, lines, handledState));
            }
            else
            {
                // include the type somehow in there
                return(new Exception($"UnityLog{logMessage.Type}", logMessage.Condition, lines, handledState));
            }
        }
Ejemplo n.º 4
0
        public void SendsSingleMessage()
        {
            var counter = new UniqueLogThrottle(new TestConfiguration("foo"));

            var message = new UnityLogMessage("", "", LogType.Error);

            Assert.True(counter.ShouldSend(message));
        }
Ejemplo n.º 5
0
        public void ShouldNotSendDuplicateMessages()
        {
            var counter = new UniqueLogThrottle(new TestConfiguration("foo"));

            var message1 = new UnityLogMessage("", "", LogType.Error);
            var message2 = new UnityLogMessage("", "", LogType.Error);

            counter.ShouldSend(message1);
            Assert.False(counter.ShouldSend(message2));
        }
Ejemplo n.º 6
0
        public void ParseDuplicateAndroidExceptionFromLogMessage()
        {
            string condition  = "AndroidJavaException: java.lang.Error";
            string stacktrace = @"java.lang.Error: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0102192a9accb1876a
libunity.0033c25b(Unknown:-2)
libunity.003606e3(Unknown:-2)
libbugsnag-ndk.bsg_handle_signal(bsg_handle_signal:472)
app_process64.000d1b11(Unknown:-2)";
            var    logType    = UnityEngine.LogType.Error;
            var    log        = new UnityLogMessage(condition, stacktrace, logType);

            Assert.False(Exception.ShouldSend(log));
        }
Ejemplo n.º 7
0
        public void FlushesCorrectly()
        {
            var configuration = new TestConfiguration("foo");
            var counter       = new UniqueLogThrottle(configuration);

            var message = new UnityLogMessage("", "", LogType.Error);

            counter.ShouldSend(message);

            Thread.Sleep(configuration.UniqueLogsTimePeriod);

            message = new UnityLogMessage("", "", LogType.Error);

            Assert.True(counter.ShouldSend(message));
        }
Ejemplo n.º 8
0
        public void DontTrackCertainLogType()
        {
            Dictionary <LogType, int> maximumTypePerTimePeriod =
                new Dictionary <LogType, int>();

            var configuration = new TestConfiguration("foo")
            {
                MaximumTypePerTimePeriod = maximumTypePerTimePeriod
            };

            var counter = new MaximumLogTypeCounter(configuration);


            var message = new UnityLogMessage("", "", LogType.Error);

            Assert.True(counter.ShouldSend(message));
        }
Ejemplo n.º 9
0
        public void ParseExceptionFromLogMessage()
        {
            string condition  = "IndexOutOfRangeException: Array index is out of range.";
            string stacktrace = @"ReporterBehavior.AssertionFailure () [0x00000] in <filename unknown>:0
   UnityEngine.Events.InvokableCall.Invoke () [0x00000] in <filename unknown>:0
   UnityEngine.Events.UnityEvent.Invoke () [0x00000] in <filename unknown>:0
   UnityEngine.UI.Button.Press () [0x00000] in <filename unknown>:0
   UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) [0x00000] in <filename unknown>:0
   UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in <filename unknown>:0
   UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) [0x00000] in <filename unknown>:0";
            var    logType    = UnityEngine.LogType.Error;
            var    log        = new UnityLogMessage(condition, stacktrace, logType);

            Assert.True(Exception.ShouldSend(log));

            var exception = Exception.FromUnityLogMessage(log, new System.Diagnostics.StackFrame[] {}, Severity.Info);
            var stack     = exception.StackTrace.ToList();

            Assert.AreEqual(7, stack.Count);
            Assert.AreEqual("IndexOutOfRangeException", exception.ErrorClass);
            Assert.AreEqual("Array index is out of range.", exception.ErrorMessage);
            Assert.AreEqual("ReporterBehavior.AssertionFailure()", stack[0].Method);
            Assert.AreEqual("<filename unknown>", stack[0].File);
            Assert.AreEqual(0, stack[0].LineNumber);
            Assert.AreEqual("UnityEngine.Events.InvokableCall.Invoke()", stack[1].Method);
            Assert.AreEqual("<filename unknown>", stack[1].File);
            Assert.AreEqual(0, stack[1].LineNumber);
            Assert.AreEqual("UnityEngine.Events.UnityEvent.Invoke()", stack[2].Method);
            Assert.AreEqual("<filename unknown>", stack[2].File);
            Assert.AreEqual(0, stack[2].LineNumber);
            Assert.AreEqual("UnityEngine.UI.Button.Press()", stack[3].Method);
            Assert.AreEqual("<filename unknown>", stack[3].File);
            Assert.AreEqual(0, stack[3].LineNumber);
            Assert.AreEqual("UnityEngine.UI.Button.OnPointerClick(UnityEngine.EventSystems.PointerEventData eventData)", stack[4].Method);
            Assert.AreEqual("<filename unknown>", stack[4].File);
            Assert.AreEqual(0, stack[4].LineNumber);
            Assert.AreEqual("UnityEngine.EventSystems.ExecuteEvents.Execute(IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData)", stack[5].Method);
            Assert.AreEqual("<filename unknown>", stack[5].File);
            Assert.AreEqual(0, stack[5].LineNumber);
            Assert.AreEqual("UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler](UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor)", stack[6].Method);
            Assert.AreEqual("<filename unknown>", stack[6].File);
            Assert.AreEqual(0, stack[6].LineNumber);
        }
Ejemplo n.º 10
0
        public void ShouldNotSendOverLimitMessages()
        {
            Dictionary <LogType, int> maximumTypePerTimePeriod =
                new Dictionary <LogType, int> {
                { LogType.Error, 1 }
            };

            var configuration = new TestConfiguration("foo")
            {
                MaximumTypePerTimePeriod = maximumTypePerTimePeriod
            };

            var counter = new MaximumLogTypeCounter(configuration);

            var message1 = new UnityLogMessage("", "", LogType.Error);
            var message2 = new UnityLogMessage("", "", LogType.Error);

            counter.ShouldSend(message1);
            Assert.False(counter.ShouldSend(message2));
        }
Ejemplo n.º 11
0
        public void ParseAndroidExceptionFromLogMessage()
        {
            string condition  = "AndroidJavaException: java.lang.IllegalArgumentException";
            string stacktrace = @"java.lang.IllegalArgumentException
com.example.bugsnagcrashplugin.CrashHelper.UnhandledCrash(CrashHelper.java:11)
com.unity3d.player.UnityPlayer.nativeRender(Native Method)";
            var    logType    = UnityEngine.LogType.Error;
            var    log        = new UnityLogMessage(condition, stacktrace, logType);

            Assert.True(Exception.ShouldSend(log));
            var exception = Exception.FromUnityLogMessage(log, new System.Diagnostics.StackFrame[] {}, Severity.Warning);
            var stack     = exception.StackTrace.ToList();

            Assert.AreEqual("java.lang.IllegalArgumentException", exception.ErrorClass);
            Assert.True(System.String.IsNullOrEmpty(exception.ErrorMessage));
            Assert.AreEqual(2, stack.Count);
            Assert.AreEqual("com.example.bugsnagcrashplugin.CrashHelper.UnhandledCrash()", stack[0].Method);
            Assert.AreEqual("CrashHelper.java", stack[0].File);
            Assert.AreEqual(11, stack[0].LineNumber);
            Assert.AreEqual("com.unity3d.player.UnityPlayer.nativeRender()", stack[1].Method);
            Assert.AreEqual("Native Method", stack[1].File);
            Assert.AreEqual(null, stack[1].LineNumber);
        }
Ejemplo n.º 12
0
 public static Exception FromUnityLogMessage(UnityLogMessage logMessage, System.Diagnostics.StackFrame[] stackFrames, Severity severity)
 {
     return(FromUnityLogMessage(logMessage, stackFrames, severity, false));
 }
Ejemplo n.º 13
0
        public void ParseAndroidExceptionFromLogMessage()
        {
            string condition  = "AndroidJavaException: java.lang.ArrayIndexOutOfBoundsException: length=2; index=2";
            string stacktrace = @"java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
com.example.bugsnagcrashplugin.CrashHelper.UnhandledCrash(CrashHelper.java:11)
com.unity3d.player.UnityPlayer.nativeRender(Native Method)
com.unity3d.player.UnityPlayer.c(Unknown Source:0)
com.unity3d.player.UnityPlayer$e$2.queueIdle(Unknown Source:72)
android.os.MessageQueue.next(MessageQueue.java:395)
android.os.Looper.loop(Looper.java:160)
com.unity3d.player.UnityPlayer$e.run(Unknown Source:32)
UnityEngine.AndroidJNISafe.CheckException()
UnityEngine.AndroidJNISafe.CallStaticVoidMethod(IntPtr clazz, IntPtr methodID, UnityEngine.jvalue[] args)
UnityEngine.AndroidJavaObject._CallStatic(System.String methodName, System.Object[] args)
UnityEngine.EventSystems.ExecuteEvents.Execute(IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData)
UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functorUnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler]()
UnityEngine.EventSystems.EventSystem:Update()";
            var    logType    = UnityEngine.LogType.Error;
            var    log        = new UnityLogMessage(condition, stacktrace, logType);

            var exception = Exception.FromUnityLogMessage(log, new System.Diagnostics.StackFrame[] {}, Severity.Warning);
            var stack     = exception.StackTrace.ToList();

            Assert.AreEqual(13, stack.Count);
            Assert.AreEqual("java.lang.ArrayIndexOutOfBoundsException", exception.ErrorClass);
            Assert.AreEqual("length=2; index=2", exception.ErrorMessage);
            Assert.AreEqual("com.example.bugsnagcrashplugin.CrashHelper.UnhandledCrash()", stack[0].Method);
            Assert.AreEqual("CrashHelper.java", stack[0].File);
            Assert.AreEqual(11, stack[0].LineNumber);
            Assert.AreEqual("com.unity3d.player.UnityPlayer.nativeRender()", stack[1].Method);
            Assert.AreEqual("Native Method", stack[1].File);
            Assert.AreEqual(null, stack[1].LineNumber);
            Assert.AreEqual("com.unity3d.player.UnityPlayer.c()", stack[2].Method);
            Assert.AreEqual("Unknown Source", stack[2].File);
            Assert.AreEqual(0, stack[2].LineNumber);
            Assert.AreEqual("com.unity3d.player.UnityPlayer$e$2.queueIdle()", stack[3].Method);
            Assert.AreEqual("Unknown Source", stack[3].File);
            Assert.AreEqual(72, stack[3].LineNumber);
            Assert.AreEqual("android.os.MessageQueue.next()", stack[4].Method);
            Assert.AreEqual("MessageQueue.java", stack[4].File);
            Assert.AreEqual(395, stack[4].LineNumber);
            Assert.AreEqual("android.os.Looper.loop()", stack[5].Method);
            Assert.AreEqual("Looper.java", stack[5].File);
            Assert.AreEqual(160, stack[5].LineNumber);
            Assert.AreEqual("com.unity3d.player.UnityPlayer$e.run()", stack[6].Method);
            Assert.AreEqual("Unknown Source", stack[6].File);
            Assert.AreEqual(32, stack[6].LineNumber);
            Assert.AreEqual("UnityEngine.AndroidJNISafe.CheckException()", stack[7].Method);
            Assert.AreEqual(null, stack[7].File);
            Assert.AreEqual(null, stack[7].LineNumber);
            Assert.AreEqual("UnityEngine.AndroidJNISafe.CallStaticVoidMethod(IntPtr clazz, IntPtr methodID, UnityEngine.jvalue[] args)", stack[8].Method);
            Assert.AreEqual(null, stack[8].File);
            Assert.AreEqual(null, stack[8].LineNumber);
            Assert.AreEqual("UnityEngine.AndroidJavaObject._CallStatic(System.String methodName, System.Object[] args)", stack[9].Method);
            Assert.AreEqual(null, stack[9].File);
            Assert.AreEqual(null, stack[9].LineNumber);
            Assert.AreEqual("UnityEngine.EventSystems.ExecuteEvents.Execute(IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData)", stack[10].Method);
            Assert.AreEqual(null, stack[10].File);
            Assert.AreEqual(null, stack[10].LineNumber);
            Assert.AreEqual("UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functorUnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler]()", stack[11].Method);
            Assert.AreEqual(null, stack[11].File);
            Assert.AreEqual(null, stack[11].LineNumber);
            Assert.AreEqual("UnityEngine.EventSystems.EventSystem:Update()", stack[12].Method);
            Assert.AreEqual(null, stack[12].File);
            Assert.AreEqual(null, stack[12].LineNumber);
        }