public void TestReportLimit_ShouldntHitRateLimit_AllReportsShouldBeInBacktrace(int reportPerMin) { uint rateLimit = Convert.ToUInt32(reportPerMin); BacktraceClient.SetClientReportLimit(rateLimit); int maximumNumberOfRetries = 0; BacktraceClient.RequestHandler = (string url, BacktraceData data) => { maximumNumberOfRetries++; return(new BacktraceResult()); }; int skippedReports = 0; BacktraceClient.OnClientReportLimitReached = (BacktraceReport report) => { skippedReports++; }; for (int i = 0; i < rateLimit; i++) { BacktraceClient.Send("test"); } Assert.AreEqual(maximumNumberOfRetries, rateLimit); Assert.AreEqual(0, skippedReports); }
public IEnumerator TestReportLimit_TestSendingError_SkippProcessingReports() { BacktraceClient.SetClientReportLimit(CLIENT_RATE_LIMIT); int totalNumberOfReports = 5; int maximumNumberOfRetries = 0; BacktraceClient.RequestHandler = (string url, BacktraceData data) => { maximumNumberOfRetries++; return(new BacktraceResult()); }; int skippedReports = 0; BacktraceClient.OnClientReportLimitReached = (BacktraceReport report) => { skippedReports++; }; for (int i = 0; i < totalNumberOfReports; i++) { BacktraceClient.Send(new Exception("Exception")); } Assert.AreEqual(totalNumberOfReports, maximumNumberOfRetries + skippedReports); Assert.AreEqual(maximumNumberOfRetries, CLIENT_RATE_LIMIT); Assert.AreEqual(totalNumberOfReports - CLIENT_RATE_LIMIT, skippedReports); yield return(null); }
public void Setup() { BeforeSetup(); BacktraceClient.Configuration = GetBasicConfiguration(); BacktraceClient.SetClientReportLimit(CLIENT_RATE_LIMIT); AfterSetup(); }
public IEnumerator TestReportLimit_InvalidReportNumber_IgnoreAdditionalReports() { BacktraceClient.SetClientReportLimit(CLIENT_RATE_LIMIT); int totalNumberOfReports = 5; int maximumNumberOfRetries = 0; BacktraceClient.RequestHandler = (string url, BacktraceData data) => { maximumNumberOfRetries++; return(new BacktraceResult()); }; int skippedReports = 0; BacktraceClient.OnClientReportLimitReached = (BacktraceReport report) => { skippedReports++; }; for (int i = 0; i < totalNumberOfReports; i++) { BacktraceClient.Send("test"); } Assert.AreEqual(totalNumberOfReports, maximumNumberOfRetries + skippedReports); Assert.AreEqual(maximumNumberOfRetries, CLIENT_RATE_LIMIT); Assert.AreEqual(totalNumberOfReports - CLIENT_RATE_LIMIT, skippedReports); yield return(null); }
public void SingleThreadWithoutReportRateLimit(int numberOfTasks) { // one thread = 4 request to API int expectedNumberOfReports = numberOfTasks * 4; int totalSend = 0; //set rate limiting to unlimite _backtraceClient.SetClientReportLimit(0); clientReportLimitReached = false; _backtraceClient.AfterSend = (BacktraceResult res) => { totalSend++; }; //prepare thread and catch 2 exception per thread and send two custom messages var taskList = new Task[numberOfTasks]; for (int threadIndex = 0; threadIndex < numberOfTasks; threadIndex++) { taskList[threadIndex] = ThreadTest(threadIndex); } Task.WaitAll(taskList); Assert.AreEqual(expectedNumberOfReports, totalSend); Assert.IsFalse(clientReportLimitReached); }
public IEnumerator TestReportLimit_ValidReportNumber_AddAllReports() { BacktraceClient.SetClientReportLimit(CLIENT_RATE_LIMIT); int maximumNumberOfRetries = 0; BacktraceClient.RequestHandler = (string url, BacktraceData data) => { maximumNumberOfRetries++; return(new BacktraceResult()); }; for (int i = 0; i < 2; i++) { BacktraceClient.Send("test"); } Assert.AreEqual(2, maximumNumberOfRetries); yield return(null); }
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); }