public void BounceRequest_When_Converted_To_JsonObject_Should_Not_Be_Empty(string emailAddress, SmtpErrorCode code, string error, Instant createdAt) { var mailAddress = new MailAddress(emailAddress); var bounceRequest = new BounceRequest(mailAddress, code, error, createdAt); var json = bounceRequest.ToJson(); Assert.NotEmpty(json); }
public void BounceRequest_When_Converted_To_FormContent_Should_Not_Be_Empty(string emailAddress, SmtpErrorCode code, string error, Instant createdAt) { var mailAddress = new MailAddress(emailAddress); var bounceRequest = new BounceRequest(mailAddress, code, error, createdAt); var formContent = bounceRequest.ToFormContent(); Assert.NotEmpty(formContent); }
public void BounceRequest_Should_Set_Optional_Params(string emailAddress, SmtpErrorCode code, string error, Instant createdAt) { var mailAddress = new MailAddress(emailAddress); var bounceRequest = new BounceRequest(mailAddress, code, error, createdAt); Assert.Equal(emailAddress, bounceRequest.EmailAddress.Address); Assert.Equal(code, bounceRequest.Code); Assert.Equal(error, bounceRequest.Error); }
public void Initialized_BounceRequest_Check_Default_Values() { var mailAddress = new MailAddress(@"*****@*****.**"); var bounceRequest = new BounceRequest(mailAddress); Assert.Equal(@"*****@*****.**", bounceRequest.EmailAddress.Address); Assert.Equal(SmtpErrorCode.MAILBOX_UNAVAILABLE, bounceRequest.Code); Assert.Equal(string.Empty, bounceRequest.Error); }
public HttpResponseMessage Post([FromBody] BounceRequest bounceRequest) { // check if valid data is received if (!ModelState.IsValid) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState)); } var processResult = _mailBoxManager.ProcessBouncedStatusUpdate(bounceRequest); return(Request.CreateResponse( processResult.Status.IsSuccess() ? HttpStatusCode.OK : HttpStatusCode.InternalServerError)); }
public MessageProcessResult ProcessBouncedStatusUpdate(BounceRequest bounceRequest) { var result = new MessageProcessResult(); try { // update message with data received from postmark var bouncedDto = Mapper.Map <BounceRequest, BounceUpdateDto>(bounceRequest); _mailBoxRepository.UpdateStatusBounced(bouncedDto); // update process result status correspondingly result.Status = ProcessingStatus.Success; } catch { // there has been an error while processing update result.Status = ProcessingStatus.Error; } return(result); }
BounceIt(BounceRequest request, ServerCallContext context) { var T = request.TabLevel; Console.WriteLine(T + "BounceIt() got a request."); PrintRequestHeaders(context, T); var builder = _tracer.BuildSpan("grpc://BounceIt"); ISpanContext parentSpanCtx = ExtractSpanContextOrDefault(_tracer, context); if (parentSpanCtx != null) { builder.AsChildOf(parentSpanCtx); } using (var scope = builder.StartActive(true)) { var span = scope.Span; var chanceToDoIt = request.ChanceOfBounce; var randomizedChance = new Random().NextDouble(); var exceptionRisk = new Random().NextDouble() - 0.2; var returnMessage = "Hello!"; var sleepyTimeMs = (int)(randomizedChance * 1000); if (chanceToDoIt >= randomizedChance) { span.Log(DateTime.Now, $"Doing another bounce: {chanceToDoIt} >= {randomizedChance}"); var targetA = request.TargetA; var targetB = request.TargetB; var doTargetA = request.DoTargetA; var nextTargetA = !doTargetA; var target = doTargetA ? targetA : targetB; var channel = new Channel(target, ChannelCredentials.Insecure); var client = new Bouncer.BouncerClient(channel); var policy = Policy .Handle <RpcException>() .WaitAndRetry(new[] { TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10), }, (exception, timespan, attempt, context) => { Console.WriteLine(T + $">> Failed attempt: {attempt}"); span.SetTag("FailedAttempts", $"{attempt}"); span.Log($"Attempt #{attempt} failed. Waiting for {timespan} until trying again."); }); policy.Execute(() => { var bounceRequest = new BounceRequest { TargetA = targetA, TargetB = targetB, DoTargetA = nextTargetA, ChanceOfBounce = chanceToDoIt, TabLevel = request.TabLevel + " " }; var metadata = CreateInjectMetadataFromSpan(_tracer, span); Console.WriteLine(T + "Doing another bounce!"); var reply = client.BounceIt(bounceRequest, metadata); returnMessage += " " + reply.Msg; }); } else if (chanceToDoIt >= exceptionRisk) { Thread.Sleep(sleepyTimeMs); Console.WriteLine($"Exception thrown: {chanceToDoIt} >= {exceptionRisk}"); span.Log($"Exception thrown: {chanceToDoIt} >= {exceptionRisk}"); span.SetTag("Error", "True"); throw new Exception("Woopsie daisy! Got an exception!"); } Console.Write(T + $"Sleeping for {sleepyTimeMs}ms..."); Thread.Sleep(sleepyTimeMs); Console.WriteLine($"Woke up"); return(Task.FromResult(new BounceReply { Msg = returnMessage })); } }