Пример #1
0
        public async Task <ActionResult> About()
        {
            try
            {
                var random = new Random();
                if (random.Next(0, 10) < 5)
                {
                    System.IO.File.ReadAllBytes("path to not existing file");
                }
            }
            catch (FileNotFoundException exception)
            {
                string hostUrl = ConfigurationManager.AppSettings["hostUrl"];
                string token   = ConfigurationManager.AppSettings["token"];

                var backtraceCredentials = new BacktraceCredentials(
                    backtraceHostUrl: hostUrl,
                    accessToken: token);

                BacktraceClient backtraceClient = new BacktraceClient(backtraceCredentials);
                var             backtraceResult = await backtraceClient.SendAsync(exception);

                Debug.WriteLine($"Backtrace Server result: {backtraceResult.Status}");
            }

            ViewBag.Message = "Your application description page.";
            return(View());
        }
Пример #2
0
        public async Task TestClientRateLimiting(int numberOfCycles, int rateLimit)
        {
            //we send reports by using Send method and SendAsync method - 8 per c
            int  totalSendReport         = numberOfCycles * 8;
            int  expectedNumberOfReports = rateLimit > totalSendReport ? totalSendReport : rateLimit;
            int  totalNumberOfReports    = 0;
            bool eventTrigger            = false;

            _backtraceClient.OnClientReportLimitReached = (BacktraceReport report) =>
            {
                eventTrigger = true;
            };

            _backtraceClient.AfterSend = (BacktraceResult res) =>
            {
                if (res.Status == BacktraceResultStatus.Ok)
                {
                    totalNumberOfReports++;
                }
            };

            _backtraceClient.SetClientReportLimit((uint)rateLimit);
            for (int i = 0; i < numberOfCycles; i++)
            {
                //test sync submission
                _backtraceClient.Send("client message");
                _backtraceClient.Send(new Exception("test exception"));
                _backtraceClient.Send(new BacktraceReport("report message"));
                _backtraceClient.Send(new BacktraceReport(new Exception("test exception")));
                //test async submission
                await _backtraceClient.SendAsync("client message");

                await _backtraceClient.SendAsync(new Exception("test exception"));

                await _backtraceClient.SendAsync(new BacktraceReport("report message"));

                await _backtraceClient.SendAsync(new BacktraceReport(new Exception("test exception")));
            }

            Assert.IsTrue(eventTrigger);
            Assert.AreEqual(expectedNumberOfReports, totalNumberOfReports);
        }
        public async Task TestApplicationFlowWithoutClientRateLimitingAndWithoutWriteFails(int totalReports)
        {
            //set client rate limit to unlimited
            _backtraceClient.BacktraceApi.SetClientRateLimit(0);
            //ignore generating minidump files
            _backtraceClient.MiniDumpType = MiniDumpType.None;

            for (int i = 0; i < totalReports; i++)
            {
                try
                {
                    DivideByZeroMethod();
                }
                catch (DivideByZeroException e)
                {
                    var report = e.ToBacktraceReport();
                    var result = await _backtraceClient.SendAsync(report);

                    Assert.AreEqual(result.Status, BacktraceResultStatus.Ok);
                }

                try
                {
                    OutOfRangeMethod();
                }
                catch (IndexOutOfRangeException e)
                {
                    var report = e.ToBacktraceReport();
                    var result = await _backtraceClient.SendAsync(report);

                    Assert.AreEqual(result.Status, BacktraceResultStatus.Ok);
                }
            }
        }
Пример #4
0
        private async Task ThreadTest(int threadIndex)
        {
            await _backtraceClient.SendAsync($"Custom client message");

            try
            {
                DivideByZeroMethod();
            }
            catch (DivideByZeroException divideException)
            {
                await _backtraceClient.SendAsync(divideException);
            }
            try
            {
                OutOfRangeMethod();
            }
            catch (IndexOutOfRangeException outOfRangeException)
            {
                await _backtraceClient.SendAsync(outOfRangeException);
            }
            await _backtraceClient.SendAsync($"End test case for thread {threadIndex}");
        }
Пример #5
0
        public async Task TestValidSubmissionEvents()
        {
            bool responseEventTrigger = false;
            int  totalResponses       = 0;

            _backtraceClient.OnServerResponse = (BacktraceResult res) =>
            {
                totalResponses++;
                responseEventTrigger = true;
                Assert.AreEqual(res.Object, "aaa");
            };
            await _backtraceClient.SendAsync("custom message");

            await _backtraceClient.SendAsync(new Exception("Backtrace API tests"));

            await _backtraceClient.SendAsync(new BacktraceReport("backtrace report message"));

            await _backtraceClient.SendAsync(new BacktraceReport(new Exception("Backtrace report exception")));

            Assert.IsTrue(responseEventTrigger);
            Assert.AreEqual(totalResponses, 4);
        }
Пример #6
0
        public async Task TestInvalidSubmissionEvents()
        {
            bool responseEventTrigger = false;
            int  totalResponses       = 0;

            _clientWithInvalidParameters.OnServerError = (Exception e) =>
            {
                totalResponses++;
                responseEventTrigger = true;
            };

            await _clientWithInvalidParameters.SendAsync("custom message");

            await _clientWithInvalidParameters.SendAsync(new Exception("Backtrace API tests"));

            await _clientWithInvalidParameters.SendAsync(new BacktraceReport("backtrace report message"));

            await _clientWithInvalidParameters.SendAsync(new BacktraceReport(new Exception("Backtrace report exception")));

            Assert.IsTrue(responseEventTrigger);
            Assert.AreEqual(totalResponses, 4);
        }
Пример #7
0
        /// <summary>
        /// Sample method that generate exception
        /// </summary>
        /// <param name="index">index parameter</param>
        private static async Task CalculateDifference(int index = 0)
        {
            if (index % 2 == 0)
            {
                throw new ArgumentException($"{nameof(index)} has invalid value");
            }
            try
            {
                await CalculateDifference(++index);
            }
            catch (Exception e)
            {
                //use Backtrace Extensions to get BacktraceReport from exception
                var report = e.ToBacktraceReport();
                await backtraceClient.SendAsync(report);

                // use Backtrace client to send exception
                await backtraceClient.SendAsync(e);

                //send your custom message to API!
                await backtraceClient.SendAsync("Received");
            }
        }
        public async Task TestRetrievingReporsLockedInSendMethod()
        {
            // BacktraceClient triggers BeforeSend event after retrieving entry from database
            // in this case entry should be locked
            // BacktraceDatabase shouldn't try to send report from timer event because, all entries all in use (1)
            _backtraceClient.BeforeSend = (BacktraceData data) =>
            {
                var dbEntries = _backtraceDatabase.BacktraceDatabaseContext.FirstOrDefault();
                Assert.IsNull(dbEntries);
                return(data);
            };

            await _backtraceClient.SendAsync(new BacktraceReport("test message"));
        }
Пример #9
0
        private async Task GenerateRandomStrings()
        {
            Random random       = new Random();
            int    totalStrings = random.Next(20, 25);

            //+3 because we want to add two duplicats
            string[] randomStrings = new string[totalStrings + 3];
            for (int i = 0; i < totalStrings; i++)
            {
                int stringLength = random.Next(0, 8);
                randomStrings[i] = GetRandomString(stringLength);
            }

            for (int i = 0; i < 3; i++)
            {
                int copyIndex = random.Next(0, totalStrings);
                randomStrings[totalStrings + i] = randomStrings[copyIndex];
            }
            tree = new Tree();
            for (int i = 0; i < totalStrings + 3; i++)
            {
                try
                {
                    tree.Add(randomStrings[i]);
                }
                catch (Exception exception)
                {
                    await backtraceClient.SendAsync(exception);

                    //we catch exception inside three add method
                    continue;
                }
            }
            var response = await backtraceClient.SendAsync($"{DateTime.Now}: Tree generated");

            Console.WriteLine($"Tree generated! Backtrace object id for last message: {response.Object}");
        }
Пример #10
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            //setup database
            // we get external storage directory and special directory created for databse - Backtrace directory
            string directoryPath = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, "Backtrace");
            var    database      = new BacktraceDatabase(new BacktraceDatabaseSettings(directoryPath));

            //setup client configuration
            var credentials         = new BacktraceCredentials(ApplicationSettings.Host, ApplicationSettings.Token);
            var clientConfiguration = new BacktraceClientConfiguration(credentials);

            // Initialize new BacktraceClient
            BacktraceClient client = new BacktraceClient(clientConfiguration, database);

            // Send async report to a server with custom client message
            var result = client.SendAsync("Hello from Xamarin").Result;

            base.OnCreate(savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
        }